ATmega8 и ATtiny2313

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Сообщения: 580
Зарегистрирован: Пт ноя 08, 2013 01:01:18

Сообщение melandr »

Добрый день. Может кто-то поможет, а то уже мозг взрывается. Есть простенькая программа вывода на 7-сегментный ЖКИ. Сначала была написана под ATmega8 и проверена в Протеус. Все работает как нужно. Но целевым контроллером будет ATtiny2313. Поэтому программа была исправлена для ATtiny. При проверке в Протеус программа не работает как нужно. Может кто-то свежим взглядом посмотрит и подскажет в чем может быть проблема. Прикладываю два архива. В них проект в AVR Studio и файл Протеус для каждого контроллера. Заранее спасибо за помощь.
Вложения
LCD_7SEG_1.ZIP
(61.75 КБ) 145 скачиваний
LCD_7SEG.ZIP
(33.09 КБ) 135 скачиваний
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

че не сказали, что на Си?!

На ассемблере поразбирался бы. А Си не знаю. :)
Станислав
Реклама
Вымогатель припоя
Сообщения: 580
Зарегистрирован: Пт ноя 08, 2013 01:01:18

Сообщение melandr »

Пересмотрел весь код процедуры обновления ЖКИ. Создается такое впечатление, как будто модель ATtiny2313 работает не правильно. При эмуляции в протеус ATmega8 четко видно перевод пина потушенного разряда в состояние Hi-Z. А при эмуляции ATtiny2313 такого перевода не видно. Вывод остается в состоянии 1.
ЗЫ: Разобрался если кому интересно рассказываю. Нужно было поменять всего две строчки местами:
было:
DDRD &= ~((1 << COM1) | (1 << COM2)); //порт D пины 0 и 1 работают как ВХОД
PORTD &= ~((1 << COM1) | (1 << COM2)); //вывод в режиме Hi-Z
стало:
PORTD &= ~((1 << COM1) | (1 << COM2)); //вывод в режиме Hi-Z
DDRD &= ~((1 << COM1) | (1 << COM2)); //порт D пины 0 и 1 работают как ВХОД
то есть в модели ATtiny2313 нужно было сначала разряды обнулить, и потом порт переводить на ВВОД. А в модели ATmega8 все работает и по первому варианту
Ответить

Вернуться в «AVR»