|
|
  |
Изменение текста программы при смене компилятора и чипа |
|
|
|
Jan 9 2011, 16:11
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Вот последний результат моего мучения.  Прогонял всяко разно вроде нигде ошибок не нашел но... Залил в железо. Реле работы включилось сразу(на PIND6 почемуто 0), а при нажатии на поворот влево реле реверса начинает трещать.
Povorot2.rar ( 15.95 килобайт )
Кол-во скачиваний: 57
|
|
|
|
|
Jan 9 2011, 17:12
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Вот. Свершилось.  Поменял PIN6 на PIN5(S0 на S1) и после прошивки всё заработало как надо. Видимо во время моих эксперементов лёг пин6 и при его программной замене на пин5 всё нормально отработало. Всем огромное спасибо за оказаное содействие, и отдельный огромный респект sigmaN  за проявленное долготерпение. На этом, конечно, проект не закрываю, и буду рад подсказкам в его дальнейшем усовершенствовании. Код конечно требует дальнейшей шлифовки(кстати подскажите что в нём можно улучшить), но главная задача на будущее это управление этой схемой через компьютер.(если такое возможно с этим МК).
|
|
|
|
|
Jan 9 2011, 18:13
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
рад за вас )) и что, даже нормально отслеживает положение в железе??? что-то я посмотрел на это всё дело по внимательнее...не нравится мне ни функция Analog, ни схема включения конденсатора.... Код uint16_t Analog(void) { //используем аналоговый компаратор для замера времени заряда кондёра OffBit(DDRB, 0); //переводим 0 выход порта В в третье состояние TCNT0 = 0; //очистим счётчик-накопитель TH = 0; OnBit(TCCR0B, CS01); //включаем таймер0 с пределителем CLK/8 OnBit(DDRB,7); //включить транзистор //КАК ЖЕ ВКЛЮЧИТЬ ТО? ПРОСТО ВЫСТАВИВ НАПРАВЛЕНИЕ ПИНА В OUT?? while(!(ACSR &(1 << ACO)));//ждём изменения состояния бита АСО на выходе компаратора OffBit(TCCR0B, CS01); //выключаем таймер OffBit(DDRB, 7); //выключаем транзистор //ОПЯТЬ ЖЕ КАК ВЫКЛЮЧИТЬ? ВЫСТАВИВ ПИН В INPUT? OnBit(DDRB, 0); //разряжаем кондёр // НУ ТУТ ЕЩЁ СОГЛАСЕН _delay_ms(2); //время для разряда кондёра //ЭТО ВРЕМЯ КАЖЕТСЯ МНЕ ОГРОМНЫМ )) return(TH << 8 | TCNT0); //возвращаем результат замера времени } И результаты ваши весьма линейные, тоже как-то не дают мне покоя..... Цитата (кстати подскажите что в нём можно улучшить) в качестве Рождественского подарка готовлю вам рабочий пример с той целью, чтобы вы сами посмотрели и поняли разницу ))
--------------------
The truth is out there...
|
|
|
|
|
Jan 10 2011, 00:31
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Код ........... OnBit(DDRB,7); //включить транзистор //КАК ЖЕ ВКЛЮЧИТЬ ТО? ПРОСТО ВЫСТАВИВ НАПРАВЛЕНИЕ ПИНА В OUT?? ......... OffBit(DDRB, 7); //выключаем транзистор //ОПЯТЬ ЖЕ КАК ВЫКЛЮЧИТЬ? ВЫСТАВИВ ПИН В INPUT? ........ Да, ведь PORTD7 по умолчанию=0 т.е. получается выход с уровнем 0.База на массу и транзистор открывается, убираем массу с базы и транзисторный ключ закрывается. На счёт задержки я с вами согласен, можно обойтись и 1 ms(наше максимальное время заряда а соответственно и разряда 0.544ms) Цитата И результаты ваши весьма линейные, тоже как-то не дают мне покоя..... Мне тоже)), но факты. Я не поленился таки собрал битовый индикатор и на реальной схеме при всех рабочих параметрах посчитал тики.Блин,не может быть но результат линейный.По вращению переменника(его сектор поворота разбил на одинаковые сегменты) индикация тоже равномерно-линейная. Цитата в качестве Рождественского подарка готовлю вам рабочий пример с той целью, чтобы вы сами посмотрели и поняли разницу )) Буду премного благодарен)) Да,такой вот ещё вопрос.А как можно применить вместо датчика напряжения и компаратора-оптопару и диск с прорезями(ну типа валкодера мышки)?
Сообщение отредактировал RW6MKA - Jan 10 2011, 00:19
|
|
|
|
|
Jan 10 2011, 00:43
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
кстати да, я тут подумал - транзистор же до определенного момента держит ток константой, а на резисторе ток падает по мере заряда кондера. поэтому хороший кусок получается линейным. По результатам моделирования в протеусе(с данным типом транзистора) получается линейная характеристика аж до 4.5В А ещё у меня почему-то в симуляторе ваш кондер вообще не работает. Только после того, как я заменяю его каким-то другим аналогичной ёмкости. Ну или вот этим анимированным вариантом, что на скриншоте в предыдущем посте. Ладно, в общем разобрался я. Схемотехнику не трогаем. Отличный вариант с транзистором. Цитата Да,такой вот ещё вопрос.А как можно применить вместо датчика напряжения и компаратора-оптопару и диск с прорезями(ну типа валкодера мышки)? не можно, а нужно))) дохрена готовых продаётся(есть даже по виду как переменный резистор) даже уже с логическим выходом есть. о подключении их к контроллеру тоже много где почитать можно...
--------------------
The truth is out there...
|
|
|
|
|
Jan 10 2011, 00:48
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Цитата(sigmaN @ Jan 10 2011, 05:45)  может как-то так его подключим?? Ну если я не ошибаюсь,этот транзистор здесь при включении разряжает конденсатор, а при отключении не припятствует его зарядке через резистор.Принцип тот же самый, только полевик с изолированным затвором будет включаться при 10-15V на затворе вот тут вычитал
|
|
|
|
|
Jan 10 2011, 01:04
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата На счёт задержки я с вами согласен, можно обойтись и 1 ms(наше максимальное время заряда а соответственно и разряда 0.544ms) разряжаем то ведь не через транзистор, а через порт контроллера. разрядится в общем он, наверно, как минимум раз в 100 быстрее ))) Цитата Ну если я не ошибаюсь,этот транзистор здесь при включении разряжает конденсатор, а при отключении не припятствует его зарядке через резистор.Принцип тот же самый, только полевик с изолированным затвором будет включаться при 10-15V на затворевот тут вычитал Полевик этот - N-channel с изолированным затвором и ещё к тому-же Logic level ) И принципе не тот-же самый, что в Вашей схеме. В Вашей схеме зарядка идет ЧЕРЕЗ ТРАНЗИСТОР, а резистор в цепи базы ограничивает максимальный ток коллектора. При этом до тех пор, пока конденсатор, заряжаясь, пытается создать ток больший - транзистор его ограничивает верхним пределом(заданным резистором базы). Это есть его свойство. Биполярный транзистор - токовый прибор и имеет заданное соотношение ток базы/ток коллектора(мало зависящее от напряжения коллектор-эмиттер). Вот поэтому то он и даёт нам линейность, что ток там константный держится. А так как я предложил подключить - характеристика будет самая что ни на есть нелинейная, что только добавит забот. В топку её кароче))
--------------------
The truth is out there...
|
|
|
|
|
Jan 12 2011, 07:43
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Как-то что-то я не пойму, оно под отладчиком всегда так странным образом подглючивает индикацию и измеритель положения?? Но если чё будет глючить и в железе - отладим... может чего и я там упустил... более странными есть глюки индикации, с этим измерением времени там могут быть косяки при работе UART(из за прерываний) но по идее то прерывание компаратора должно иметь более высокий приоритет, хотя я не уверен есть ли приоритеты в AVR.... ну в общем потестируйте в железе, а там видно будет... снабжать кода подробными каментами было выше моих сил... может потом.. или сюда вопросы )
--------------------
The truth is out there...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|