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

Странное поведение ATtiny 2313

Добавлено: Ср фев 05, 2014 01:00:46
uwrtey
Занялся я тут одним маленьким проектом.

И получилось так, что устройство ни как не хочет работать.
Поиски ошибок не увенчались успехом.

Решил резать код на блоки и проверять работоспособность каждого из них.

Вот такой код ( блок ) у меня получился:
Хотя, минутку, сначала схема:
Изображение
А вот теперь код:

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





;******************************************************************************
; тип используемого МК
;******************************************************************************

.include 	"tn2313adef.inc"	; используем tiny2313a


;******************************************************************************
; переименуем РОН
;******************************************************************************

.def	Temp=R16
.def	Temp1=R17
.def	Temp2=R18
.def	Temp3=R19
.def	Temp4=R20			; 
.def	Temp5=R21
.def	FlagFazy=R22			; 
.def	FlagSinhr=R23			; 
.def	Temp8=R24
.def	Temp9=R25






;******************************************************************************
; инит прерываний
;******************************************************************************


.cseg			





.org 0

rjmp RESET				; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset ( включение МК )





.org INT_VECTORS_SIZE			; конец векторов прерываний




;******************************************************************************
; старт
;******************************************************************************

reset:					; включение микроконтроллера


;******************************************************************************
; глобальный запрет прерываний
;******************************************************************************

	cli				; глобальный запрет на прерывания


;******************************************************************************
; инит стека
;******************************************************************************

	ldi Temp,low(RamEnd)		; инициализации стека	
	out SPL,Temp			;


;******************************************************************************
; инит портов
;******************************************************************************
	
	ldi Temp,0b11111111		; настроили порт "В" (0-ввод, 1-вывод)
	out DDRB,Temp			; 
					
				
												 
	ldi Temp,0b01111011		; настраиваем порт "D" (0-ввод, 1-вывод)
	out DDRD,Temp 			; 00000х00 - ввод информации с приемника PD2
					; 


	ldi Temp,0b00000000		; выводим лог_0 в порт "B"
	out PortB,Temp			; 




	ldi Temp,0b00000000		; выводим лог_0 в порт "D" // Подтяжка на PD2 и PD7  отключена.  !!!!!!!!!!!!!!!!!!!!!!!!!!
	out PortD,Temp			;









;******************************************************************************
; глобальное разрешение прерываний
;******************************************************************************

;	sei				; глобальное разрешение прерываний !!!!!!!!!!!!!!!!!!!!!!!!!! запрещены любые прерывания!!! 
	





;*******************************************************************************
;*******************************************************************************
; главный цикл
;*******************************************************************************
;*******************************************************************************


	ldi Temp,0b00000011		; включаем светодиоды ( светодиоды подключены к PB0 и PB1 )
	out PortB,Temp			; 



Main_cicle:


	
	rjmp Main_cicle			; циклимся


;*******************************************************************************
;*******************************************************************************

И вот я в ступоре - по идее команда

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


	ldi Temp,0b00000011		; включаем светодиоды ( светодиоды подключены к PB0 и PB1 )
	out PortB,Temp			; 
должна включить эти светодиоды, но они не включаются....

Тогда я закоментировал строчку

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


	ldi Temp,0b00000000		; выводим лог_0 в порт "D" // Подтяжка на PD2 и PD7  отключена.  !!!!!!!!!!!!!!!!!!!!!!!!!!
	out PortD,Temp			;

и светодиоды зажглись....

Что к чему? Как так ?
Что в этой команде такого? Она всего лишь выводит лог_0 на те ножки, которые настроены на вывод и отключает подтягивающие резисторы у тех ножек которые настроены на ввод!
Я конечно мог заподозрить PD7, так как его в ATtiny2313 нет, НО я уже делал подобный проект и там инит портов был точно такой-же как в этом проекте! И все работало!

П.С.
Я пробовал на другом чипе ATtiny2313, но результат такой-же
Фузы я проверял...

Re: Странное поведение ATtiny 2313

Добавлено: Ср фев 05, 2014 23:56:30
uwrtey
Что то глухо тут.
На олимпиаду что ли все уехали?

Попробую фузы выставить по другому. Ели не поможет буду резать частоту....

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 10:08:54
pyzhman
Не глухо, а полная непонятка как такое может быть.

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 12:03:42
uwrtey
Такого быть не должно! Есть предположения ?

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 12:10:01
dr.doc
У PIC контроллеров встречал такой момент: после выполнения некоторых команд приходилось писать nop-ы, в противном случае, сразу за данной командой запись константы в регистр не производилась. Команду точно не помню. Попробуйте ввести пустышку и посморите в симуляторе - происходит ли запись числа 3 в Temp?

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 12:13:52
Dr. Alex
)))) Мистика какая-то))))) А если попробовать всё на один порт нагрузить?

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 12:21:20
Dmitry Dubrovenko
dr.doc писал(а):после выполнения некоторых команд приходилось писать nop-ы, в противном случае, сразу за данной командой запись константы в регистр не производилась
Такого быть не могло, ибо быть не может, и не надо начинающих с толку сбивать.
Единственное, что могло быть: то, что Вы не разобрались с режимом чтение-модификация-запись, но это уже другая тема.

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 12:26:43
ploop
uwrtey, сделай подпрогармму задержки и выведи мигалку. Там всего пять строк. А то может МК тупо виснет, или ещё что.

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 14:48:38
uwrtey
Задержка не помогает.

Чтение>модификация>запись - все это знаю, тут сокращено до минимума.

Такое ощущение, что порт занят периферией.
После перепрошивки ( если я не настраиваю перефирию ) порты устанавливаются дефолтно?
Эти мк использовались в других проектах..
Да ну - фигню спросил.....

Сегодня ночером попробую частоту убавить и фузы по другому пропишу...

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 14:55:30
ploop
uwrtey писал(а):Задержка не помогает.
Я имел ввиду сделать мигалку: в Main_cicle засунуть задержку и инверсию битов.

Re: Странное поведение ATtiny 2313

Добавлено: Чт фев 06, 2014 17:05:49
dr.doc
При процедуре "чтение-модификация-запись" можно прочесть то, что не ожидаешь, но не выставить! А у меня был именно случай, когда контроллер не выставлял уровень. Потом уже на microchip.su нашел, что подобное "действо" было свойственно конкретному контроллеру ранних модификаций.

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 00:37:48
uwrtey
Только-что попробовал сделать следующее:

1) отключил систему контроля питания ( через фуз_биты )
2) установил внутренний делитель частоты ( делитель на 8 ) через фуз биты ( у меня стоит кварц на 20 МГц )
3) написал подпрограмму задержки перед главным циклом и сделал мигалку

И все заработало! ( хотя Х.З. но об этом ниже )

Устройство, которое я проектирую - это передатчик и приемник на две команды.
На данный момент передача идет не по радиотракту, а по проводам.

Передатчик работает нормально! Без нареканий.
А вот с приемником я мучаюсь уже неделю...
Схему я уже приводил.

Ну раз мигалка заработала - я решил сразу проверить заработает ли приемник.
Поправил фуз_биты для передатчика - что-бы он работал на той-же частоте что и приемник.

Включил оба устройства и разочаровался от того что не заработало!
Но не тут то было! Оказывается на этот раз я воткнул ТИНЬКУ в передатчик вверх ногами! ( прошиваю в отдельной панельке )
Я быстро исправил ситуацию и обрадовался, что устройство работает! Приемник принимает команды с передатчика и включает соответствующие светодиоды!

Ну тут я решил повысить частоту обратно ( убрать предделитель на 8 через фуз-биты )
Проделал этот фокус с приемником и передатчиком и опять разочаровался от того, что не работает на такой частоте!

Решил вернуть предделитель на место где ему похоже и суждено быть, но устройство не заработало на деленной частоте!!!!!!
Как так? Только что все работало! Проблема точно не в логике программы.

Может прошивка слетела? - Прошиваю еще раз и приемник и передатчик - один фиг не робит!
Шью заново фуз-биты - не робит.
Я уже и не знаю на что подумать.. Похоже что МК глючный ?

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 00:57:21
uwrtey
Что я могу сейчас сделать?

1) попробовать снова запустить мигалку, если не заработает - то точно МК, а если будет работать, то снова попробовать запустить приемник декодер
2) поменять МК в приемнике и передатчике местами

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 01:08:04
ploop
Да что угодно может быть: монтаж, питание и т.д.
Я потому и советовал проверять на мигалке, так как если мигает - значит контроллер жив, тактовая идёт. А в статичном режиме он может затарахтеть, выставить биты на портах, и через несколько тактов заглохнуть. А экспериментатор будет в наивной уверенности, что контроллер работает (светики зажглись), а программа нет. Или наоборот.

Попробуйте увеличить частоту и на ней мигалку запустить. А в это время шевелить и трогать всячески МК руками. Будет сбиваться генерация - косяк в монтаже. По мигалке сразу видно.

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 01:09:03
uwrtey
Менять МК местами не пришлось.
Похоже, что глючный МК
Прошил МК приемника декодера программой "мигалкой" - и она работает
Прошил снова программой премником декодером - и все работает, хотя только что не работало !!!
А в статичном режиме он может затарахтеть, выставить биты на портах, и через несколько тактов заглохнуть.
А что такое бывает?
Сейчас попробую мигалку на высокой тактовой частоте запустить... :beer:
Спасибо, ploop

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 08:46:34
ploop
uwrtey писал(а):А что такое бывает?
Ещё как бывает. Генератор заводится во время старта и через долю секунды затухает. А за это время успевает инициализироваться программа, выставиться сигналы всякие и прочее.
Когда не было осцилла, так и проверял - мигалкой. Сейчас проще на ногу меандр вывести, или вообще на CKOUT тактовую вывести, если свободна.

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 23:28:08
uwrtey
Запустил мигалку на тактовой частоте 20 МГц - работает без сбоев.
А декодер (приемник) на такой частоте не работает.

Пытаюсь запустить декодер (приемник) на частоте деленной на восемь ( с помощью внутреннего делителя ) не работает!
А вот если сначала прошить МК "мигалкой" на частоте деленной на восемь.
Включить эту мигалку на пару секунд. А затем прошить МК "декодером" и при этом не трогать фуз биты - то декодер начинает работать как и положено.

Полтергейст! :)))

Это точно не глюк! Это точно не плохой монтаж и это точно не плохая схемотехника.
Так как "глючит" не в случайной последовательности, а очень даже закономерно!


Такое ощущение, что МК что то запоминает....

Как мне выяснить что это?
У меня что то на ум ни чего не идет. ( Сейчас для меня главное - это не сделать устройство, а найти причину "глюка" )

Во вложении лежат исходники кодера, декодера а так-же мигалки.

Прошиваю я с помощью ПониПрог в отдельной панельке
Из фуз-битов я устанавливаю или очищаю только бит SKDIV8
Фуз SPIEN - не активен и его я не трогаю
Остальные фузы то-же не трогал.
Кварц установлен на 20 МГц

Re: Странное поведение ATtiny 2313

Добавлено: Пт фев 07, 2014 23:59:39
dr.doc
А ОЗУ контроллера в программе часом не используете? (пример выложен полный?)
А прерывания включаете зачем? Может в прерывании остается что-то в Temp, а само оно происходит перед выводом в порт?

Re: Странное поведение ATtiny 2313

Добавлено: Сб фев 08, 2014 10:25:42
uwrtey
dr.doc писал(а):А ОЗУ контроллера в программе часом не используете? (пример выложен полный?)
Все примеры выложены в оригинале. Оперативку я не использую, хотя инициализацию ее делаю и даже одну двухбайтовую переменную задаю.
dr.doc писал(а):А прерывания включаете зачем? Может в прерывании остается что-то в Temp, а само оно происходит перед выводом в порт?
Какие прерывания я включаю? И Где? ( Про что идет речь? Про декодер или про мигалку? )
Если речь про мигалку, то обратите внимание, что строчка с глобальным разрешением прерываний закоментирована.

Re: Странное поведение ATtiny 2313

Добавлено: Сб фев 08, 2014 18:09:15
Масяня
Хочу присоединиться к глюкам мк ATTiny2313. Проблема вот в чем, купил мк на tixer, когда прошил его все работало, как часы. Прошивал раз 7 все гуд, без сбоев, но 8 прошивку он не выдержал. Во первых устройство не заработало, вообще не как, только на одном выводе напряжение немного есть, на каком именно не помню. Во вторых не прошивается и не определяется, не прошивается даже когда игнорирую, то что PonyProg говорит, что мк не подключен, хотя он с рождения не определялся, программатор исправен это факт. Из за этого флешку на 2 гига спалил, когда включил устройство она нагрелась, до сумасшедшей температуры, когда я ее вставил в телефон она работала, но потом оказалась что она не форматируется и с нее нельзя удалить данные, и записать только чтение. Ну как то так.