Микроконтроллеры | Помогите настроить АЦП в Atmega |
|
---|---|---|
TCCR0=0x02; а TCCR0 = _BV(CS01) | _BV(CS00); Кстати, у меги 8 и меги 16 эти биты совпадают... |
|
|
Можно у тебя еще спросить вопросик один |
|
|
Мега8? У неё порт C неполный, у него нет PC7. Наверное поэтому. Когда ты пишешь PORTC=PORTC+10, то реально сначала считываются ножки порта, к считанному значению прибавляется 10, и полученное число выводится в порт. Почитай про операции "чтение-модификация-запись". Бывают ситуации, когда нога настроена на вывод, в неё выводится 1, а считывается всё равно 0. (Не уверен, что это в АВР-ках, но где-то точно было). Поэтому лучше иметь какую-нибудь вспомогательную переменную, производить вычисления с ней, и уже потом выводить её значение в порт. Это позволит избежать многих неочевидных и трудноуловимых ошибок. Типа: static unsigned char port_c_data = 0; |
|
|
Не атмега16 |
|
|
Как только код>64 сразу на ноль сбивается. |
|
|
Я для кого писал-то всё это выше? Может быть связано и с TOSC, и с чем угодно. Сделай вспомогательную переменную. |
|
|
shemmer, схемку, может, выложите ? А также fuse-биты напишете? А то интересные вещи между делом выясняются. JTag-бит меняли? Если нет - у Вас на порту C вообще половину линий трогать нельзя! Тут же не телепаты сидят |
|
|
chav1961: но и не полениться усреднить показания - АЦП практически никогда два одинаковых показания Вам не даст. Обычно 16..32 выборок достаточно, чтобы цифры не скакали. #define N 16 result=(result*(N-1)+adc_data)/N; |
|
|
Добавил архив с исходником и скриншотом в Proteuse.-посмотрите пожалуйста |
|
|
Ну во-первых, при отжатых кнопках входы висят в воздухе. Что с них читается? Да что угодно. Либо подтянуть их резисторами к земле, либо (лучше) - включить кнопки на землю, и подтянуть к +5в (можно при помощи встроенного pull-up). Во-вторых, кнопки "дребезжат". То есть, при нажатии их состояние многократно изменяется перед тем как устаканиться. Не знаю, эмулирует ли это протеус, но может быть дело в этом. Поищи в конфе по слову "дребезг". Дальше. При отпускании кнопки "+" возникает прерывание INT0, при отпускании "-" - INT1, так? В INT0 мы работаем с port_cA_data, в INT1 - с port_cB_data. Нажали 10 раз "+", port_cA_data стало 10, вывелось в порт. Нажали 1 раз "-" - port_cB_data стало 255 (было 0), вывелось в порт. Наверное, это не то, что надо? Что касается собственно порта С, то просто попробуй вывести в него при старте программы 0xFF, и посмотри, что выйдет. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |