АЦП ATMEGA8 не работает

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

АЦП ATMEGA8 не работает

Сообщение Vasilio » 23 июл 2009, 12:53

Всем добрый день! Помогите плиз с АЦП. У меня такая задача (думаю, что простая) : мне нужно зажигать 2 светодиода на порту D по изменению напряжения на аналоговом входе. Схема собрана так: к входу ADC0 подключен подвижный контакт переменника, включенного между питанием +5Вольт и землей, AREF и AVCC соединены и подключены к +5 вольт. На 4 и 5 линиях порта D светодиоды (с ними все ОК, я их программно зажигал, чтоб проверить). В общем нашел в книжке программу, но она не работает. Т.е. кручу резистор туда-сюда, светодиоды не загораются :(
Помогите чайнику, плиз :)

Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h> // доступ к функции sei
#include <avr/signal.h>  // доступ к макросу interrupt

INTERRUPT(SIG_ADC) // обработчик прерыв-я от АЦП
{
unsigned int ADCdata; // буф переменная хранения
ADCdata = ADCW;     // результата преобразования
if (ADCdata > (2046 / 5)) PORTD = 0b00001000; // если U>2 вольт, то вкл светодиод на 4 ножке порта D
else PORTD = 0b00010000;  // иначе, если U<2 вольт на 5 ножке  порта D
ADCSR = ADCSR l 0x40; // устанавливаем разряд adsc в регистре ADCSR чтоб начать новое преобразование
}

int main (void)
{
DDRD = 0xff ; // все ножки порта D выходы
ADMUX = 0b00000000; //назначаем в качестве аналог. входа
ADCSR = 0b11001110; // активизируем АЦП с коэф деления 64, разрешаем прерывание от АЦП и начинаем преобразование
sei(); // общее разрешение прерываний
while(1); //бесконечный цикл в ожидании прерываний от АЦП
}


Модератор "Digit":Листинги программ вставляются тегом [ CODE ]
Vasilio
 
Сообщения: 14
Зарегистрирован: 20 окт 2008, 13:52
Откуда: Санкт-Петербург

Re: АЦП ATMEGA8 не работает

Сообщение avr123.nm.ru » 23 июл 2009, 13:10

1) Советую прикладывать к вопросу архив с проектом и исходниками и использовать симулятор VMLAB или PROTEUS или В КРАЙНЕМ СЛУЧАЕ AVR Studio - вам будет видно что происходит в модели МК и как исполняется программа.

Посмотрите и скачайте пример интеграции WinAVR с PROTEUS - http://avr123.nm.ru/04.htm

2) выражение (2046 / 5) наверно лучше заменить числом.

3) Это старое обозначение прерываний в WinAVR
Код: Выделить всё
INTERRUPT(SIG_ADC) // обработчик прерыв-я от АЦП

Посмотрите и используйте новое - у меня есть http://avr123.nm.ru/03.htm
и в примерах WinAVR - в папке типа: C:\WinAVR\doc\avr-libc\examples
А в соседней папке РУКОВОДСТВО !!! по WinAVR
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: АЦП ATMEGA8 не работает

Сообщение Виталий » 23 июл 2009, 15:32

Поменяй INTERRUP на ISR! :D
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Re: АЦП ATMEGA8 не работает

Сообщение Vasilio » 23 июл 2009, 15:34

Урааааа!!!! :Yahoo!: :Yahoo!: :Yahoo!: :Yahoo!:
Заработало! Кручу, и светодиоды переключаются!!!!
Спасибо!
Vasilio
 
Сообщения: 14
Зарегистрирован: 20 окт 2008, 13:52
Откуда: Санкт-Петербург


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10