roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 19:08

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: АЦП ATMEGA8 не работает
СообщениеДобавлено: 23 июл 2009, 12:53 
Не в сети

Зарегистрирован: 20 окт 2008, 13:52
Сообщения: 14
Откуда: Санкт-Петербург
Всем добрый день! Помогите плиз с АЦП. У меня такая задача (думаю, что простая) : мне нужно зажигать 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 не работает
СообщениеДобавлено: 23 июл 2009, 13:10 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
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 
Не в сети
Аватара пользователя

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

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: АЦП ATMEGA8 не работает
СообщениеДобавлено: 23 июл 2009, 15:34 
Не в сети

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO