ATtiny2313.Где же п...
 

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

  RSS

vavacas
(@vavacas)
Новичок
Присоединился: 10 лет назад
Сообщения: 2
09/12/2009 1: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


Цитата
VladislavZ
(@vladislavz)
Старожил
Присоединился: 10 лет назад
Сообщения: 27
09/12/2009 6:02 дп  

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


ОтветитьЦитата
vavacas
(@vavacas)
Новичок
Присоединился: 10 лет назад
Сообщения: 2
09/12/2009 11:45 пп  

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

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

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


ОтветитьЦитата

Пожалуйста, Вход или Зарегистрироваться