Здравствуйте уважаемые программисты. Недавно начал заниматься электроникой и в частности микропроцессорами. Стоит такая задача: нужно сделать робота-охотника за светом (типичная задача для новичков). Стоят два фототранзистора, и нужно что бы с них считывались показания, сравнивались друг с другом и запускался двигатель постоянного тока вправо или влево "охотясь за светом". Как считать уровень сигнала с фототранзисторов? С помощью АЦП? Так вот это то и не получается. В CodeVisionAVR для Tiny2313 при создания автокода вообще нет вкладки ADC, а если делать для другова MK - при прошивании не работает. Хотя в описании МК написанно что там есть встроенный ЦАП и АЦПю Немогли бы вы подсказать простую литературу, или же набросать тут код для CodeVisionAVR?. Нужно именно для него! Заранее спасибо!
Читайте даташит - там ПРАВИЛЬНО написано. Достаточно посмотреть обложку.
Измерить напряжение можно и без встоеного АЦП - эммитер фототранзистора соединяете резистором 150-470 Ом с ножкой-входом прерывания AVR и еще эммитер соединяете с землей резистором 10-20 кОм и параллельно конденсатором 10 нФ например. Теперь делаете на ножке "выход" и "0" - затем включаете таймер и делаете ножку "входом" без подтяжки, замеряете время заряда конденсатора до "1" т.е. до момента срабатывания прерывания "по фронту сигнала" ( прерывания в микроконтроллере AVR - http://avr123.nm.ru/03.htm ) - чем быстрей тем больше освещение фототранзистора.
но ИМХО удобней новичку использовать ATmega8 с АЦП например по 48 рублей.
Добавлено спустя 2 минуты 7 секунд:
Maycal писал(а): В CodeVisionAVR для Tiny2313 при создания автокода вообще нет вкладки ADC
ВЫВОД ??? не ясен ?
Доверяйте CVAVR и avr123 - они плохого не посоветуют !
И еще такой вопрос, где в начальном генераторе указать порт, который будет реагировать на прерывание?
Добавлено спустя 3 минуты 44 секунды: Мне нужно сделать прерывание на фронт. В генераторе для этой задачи на вкладке External IRQ->INT0 Enabled-> какое выбрать из 4: 1) Low Level 2) Any Change 4) Falling Edge 5) Rising Edge И как првязать это все к порту? Или оно будет на любой порт реагировать?
Спасибо большое! Но есть еще один вопрос, скажи пожалуйсто, какой таймер использовать 0 или 1 или Watchdog для тако что бы посчитать время заряда конденсатора?
Добавлено спустя 15 минут 19 секунд: Здесь еще одна проблема. Я так понимаю прерывания работают след образом: Сначало выполняется код в main. Если есть прерывания, включается обработчик прерываний, выполняется, когда прерывание прекращается, сново начинает выполняться main? Но все дело в том, что почему то работает только прерывание. А main не работает. В main прописано зажигание светодиота, он не зажигается, а в обработчики прерывания зажигается. В чем же дело?
Ну откройте же вы даташит наконец.... Там написано что таймер 0 восьмиразрядный !!,Таймер 1 шестнадцатиразрядный, а ВачДог таймер специальный защитный его не поюзаеш Я так думаю что таймер 1 для этой задачи будет слишком жирным поэтому юзай таймер 0..
А если хочется точности в измерениях то сходи на http://easyelectronics.ru там был где то пример как из аналогового компаратора и шим сделать неплохой ацп.. Ну и курс там есть неплохой по контроллерам на асемблере