Страница 1 из 1

Вольтметр на Atmega16

Добавлено: Сб авг 24, 2013 13:08:54
tux
Пытаюсь вот все освоить программирование AVR. Решил сделать вольтметр. Написал программу. Часть честно спер, часть написал сам. Запускаю в протеусе - ни фига на дисплей ни выводит. Может кто укажет на ошибку? Код на ассеблере.

Re: Вольтметр на Atmega16

Добавлено: Сб авг 24, 2013 15:41:51
Vov123
Протеус позволяет в ряде случаев сымитировать работу проектируемого девайса,а также разработать для него печатную плату.Если нужно только проверить работу микроконтроллера,лучше не использовать ключевые транзисторы и гасящие сопротивления,а подключать непосредственно к потребителю - не сгорит.
Сначала выведи на дисплейчик какое-нибудь статическое значение,например 1234,а потом уже можно будет его заменить на значение переменной ADC.
И последнее.Я заметил здесь очень мало любителей ковыряться в чужом асме.Будьте проще,пишите на С.

Re: Вольтметр на Atmega16

Добавлено: Вс авг 25, 2013 00:58:02
tux
Да код для вывода на дисплей 100% рабочий. Я уже пытался сделать часы просто на таймере, но заглох с кнопками. Тоже долго бился с ними и решил отложить это и попробовать с АЦП. И с ним заглох тоже. А насчет си - хотелось бы сначала все таки разобраться в ассемблере, чтоб понимать как все битики ходят.
Я уже на проблеме с часами понял, что тут нет любителей ковыряться в асемблере. Написал на всякий случай - вдруг таковой объявится :). Хочется все таки написать свой рабочий код..

Re: Вольтметр на Atmega16

Добавлено: Вс авг 25, 2013 01:41:21
Vov123
Ну тогда Ревич тебе в помощь
http://asm-book.narod.ru/LiteraturaKnig ... blera.html
на стр.227

Re: Вольтметр на Atmega16

Добавлено: Вс авг 25, 2013 04:49:12
tux
Хотел свой код написать просто, который я сам понимаю как работает. Но чую придется сначала по Ревичу разобраться. Может после него осознаю свою ошибку..

Re: Вольтметр на Atmega16

Добавлено: Вс авг 25, 2013 05:19:30
Vov123
Ну вот код на С(для CVAVR),хочешь переведи его в асм

Объявляем переменную для АЦП

Код: Выделить всё

unsigned int a;
Настраиваем АЦП

Код: Выделить всё

ADCSRA=0b10000111;  //настройкаа АЦП.Включен АЦП,прескалер максимальный
ADMUX=0b01000011;   //опорное напряжение от питания,выравнивание в право(10бит),ручное преобразование,вход на ADC3
В теле программы снимаем показания АЦП

Код: Выделить всё

ADCSRA.6=1;             //запускаем преобазование
while(ADCSRA.6==1){};   //ждём пока идёт преобразование(пустой цикл)
a=ADCW;    		//результат преобразования сохраняется в регистре ADCW
Всего делов.