ATtiny2313.Где же правда?

по МК и не только

ATtiny2313.Где же правда?

Сообщение vavacas » 08 дек 2009, 23:27

Осваивание ATtiny2313 решил начать с готовой схемы.
Просимулировать ее в «Протеусе 7.6», не получилось - много глюков:
Не работает USART
И кажется неправильно симулируются порты ввода вывода
Перешел на AVRStudio тоже не помогло
Начал сравнивать результаты
Оказалось в одних и тех же точках ветвления симуляторы выбирают разные дороги
Причина в портах ввода вывода, а конкретно в состоянии PIND и PINB

В «Протеусе 7.6» при включении порта D(B) на ввод(DDRD = 0x00), и подключении подтягиваюших резисторов(PORTD = 0xFF), на выводах PIND автоматически появляется высокий уровень(PIND=0xFF),

а в AVRStudio при тех же операциях с портами(DDRD в 0, PORTD в 1) выводы PIND
молчат как партизаны , оставаясь на низком уровне (PIND=0x00)

Где же правда? Кому верить? Протеусу7.6 или AVRStudio4.15
Решил попробовать разобраться на простом примере(Prog1) из самоучителя А.В.Белова, в котором как раз примеры на ATtiny2313.
Запутался еще больше похоже оба эти симулятора подвирают, каждый по своему

Подскажите пожалста какое правильное состояние PIND(B) при включении портов на ввод с подтягивающими резисторами
Вот пример:
Код: Выделить всё
;##############################################
;##               Пример 1                   ##
;##     Программа управления светодиодом     ##
;##############################################

;------------------------- Псевдокоманды управления
.include "tn2313def.inc"   ; Присоединение файла описаний
.list         ; Включение листинга
;------------------------- Начало программного кода
.cseg          ; Выбор сегмента программного кода
.org    0      ; Устанеовка текущего адреса на ноль
;.def   R16 = r16      ; Определение главного рабочего регистра
;-------------------------- Инициализация стека
ldi   R16, 0x7F      ; Выбор адреса вершины стека
out   SPL, R16      ; Запись его в регистр стека
;-------------------------- Инициализация Главного предделителя
ldi   R16, 0x80     ; Записываем число $80 в регистр R16
out   CLKPR, R16   ; Записываем в регистр CLKPR
ldi   R16, 0      ; Записываем 0 в регистр R16
out   CLKPR, R16   ; Записываем этот ноль в CLKPR
;-------------------------- Инициализация портов ВВ
out   DDRD, R16   ; Записываем ноль в DDRD (порт PD на ввод)
ldi   R16, 0xFF      ; Записываем число $FF в регистр R16
out   DDRB, R16   ; Записываем это число в DDRB (порт PB на вывод)
out   PORTB, R16   ; Записываем то же число в PORTB (потушить светодиод)
out   PORTD, R16   ; Записываем его же в PORTD (включаем внутр. резисторы)
;--------------------------- Инициализация компаратора
ldi    R16, 0x80   ; Выключение компаратора
out   ACSR, R16
;-------------------------- Основной цикл
main:
in   R16, PIND   ; Считываем состояние кнопок порта "D", копируем в R16
out   PORTB, R16   ; Считываем R16, копируем в порт "B"
rjmp   main
vavacas
 
Сообщения: 2
Зарегистрирован: 08 дек 2009, 21:23

Re: ATtiny2313.Где же правда?

Сообщение VladislavZ » 09 дек 2009, 04:02

Доброго времени!!!
Чет ниприклеилось, придется заново.
Я тоже недавно начал осваивать контроллеры, но на ваш вопрос видимо отвечу! :roll:
Дело в том, что СТУДИИ пофиг, что вы выставили на PINx.x, как в прочем и в аналоговой части!!! (если под-программа наткнулась на условие… останется там до скончания веков!). У нее к входу вообще своеобразное отношения, по дефолту 0, но если был сконфигурирован на ВЫХ, и была 1 то следующий такт на PINx.x, будит 1. Кстати можно и ручками по ТЫКАТЬ в провой части есть, 1/0 берешь нужный регистр и выставляешь по своему усмотрению, также можно, чтоб каждый раз ЛАПКАМИ не дергать в завершении цикла весть нужное число в рабочий регистр (r0-r31), эт в левой части. Либо собрать файл верификации и подцепить к порту, но как эт делалась, не помню где читал, найду, скину ссылку!
А что вы так стек ставите, можно-ж вместо адреса ввести RAMEND и не придется выискивать физический адрес!?
Про ПРОТЕУС не отвечу не пользуюсь! :oops:
VladislavZ
 
Сообщения: 28
Зарегистрирован: 23 апр 2009, 17:47
Откуда: Riga Latvija

Re: ATtiny2313.Где же правда?

Сообщение vavacas » 09 дек 2009, 21:45

Спасибо за ответ.

«если был сконфигурирован на ВЫХ, и была 1 то следующий такт на PINx.x, будит 1.» это я так понял должна делать СТУДИЯ, но она этого не делает

В итоге получается, что неправильную информацию о состоянии PIND дает все-таки Студия в то же время Протеус врет при передаче данных USART, напрашивается вопрос а как же тогда отследить реальную работу сложного устройства, где так много ветвлений, что замучаешься «пальчиками» постоянно исправлять состояние PINов.
Я это спрашиваю не из праздного любопытства. Хочу сделать автосигнализацию на ATtiny2313 http://eldigi.ru/site/guard/13.php перелопатил массу подобной информации эта понравилась больше всего но она как практически и все остальные не полностью меня удовлетворяет хотелось бы кое что добавить. Ведь если ее создали значит существуют средства реально симулирующие ее работу. Если это не Протеус и не СТУДИЯ то что.
В ней постоянно идет опрос состояния двух кнопок, которые одной ногой сидят на земле, а другими ногами как раз на этих «чтоб им было нехорошо» PINах, которые как раз и работают как входы с подтягивающими резисторами. Я уж грешным делом думаю перенести ее алгоритм на PIC16F628 он во всяком случае не глючит ни в Протеусе ни в MPLABе, но это геморрой еще тот. Опять же чтоб вкурить ее алгоритм, желательно иметь реально симулирующий симулятор. Самое главное я ее уже опробовал в реальной схеме и она мне очень понравилась. Пробовал разобраться при помощи VMLAB не смог найти описание, как им пользоваться там ведь нужно задействовать и кнопки и прием-передачу по USART и сигналы с датчиков. Может быть в СТУДИИ, в свойствах, как то можно изменить состояние PINов, чтоб они показывали реальную картину . Это решило бы проблему.
Заранее всем благодарен
Да, связался с автором с просьбой добавить в программу маленькие доработки, он отказался, придется самому
vavacas
 
Сообщения: 2
Зарегистрирован: 08 дек 2009, 21:23


Вернуться в Общие вопросы



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

Зарегистрированные пользователи: нет зарегистрированных пользователей