roboforum.ru

Технический форум по робототехнике.

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

АЦП 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 ]

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

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

Виталий » 23 июл 2009, 15:32

Поменяй INTERRUP на ISR! :D

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

Vasilio » 23 июл 2009, 15:34

Урааааа!!!! :Yahoo!: :Yahoo!: :Yahoo!: :Yahoo!:
Заработало! Кручу, и светодиоды переключаются!!!!
Спасибо!


Rambler\'s Top100 Mail.ru counter