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

по МК и не только
Ответить
vavacas
Сообщения: 2
Зарегистрирован: 08 дек 2009, 21:23

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

VladislavZ
Сообщения: 28
Зарегистрирован: 23 апр 2009, 17:47
Откуда: Riga Latvija

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

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

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

vavacas
Сообщения: 2
Зарегистрирован: 08 дек 2009, 21:23

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ов, чтоб они показывали реальную картину . Это решило бы проблему.
Заранее всем благодарен
Да, связался с автором с просьбой добавить в программу маленькие доработки, он отказался, придется самому

Ответить

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

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