Полная версия этой страницы:
ATtiny12
Я совсем ещё начинающий в программировании МК. Написал простенькую программку - бегущие огни, в AVRStudio. В симуляторе работала, прошил ATtiny 12L, прошивал на STK500. Воткнул на плату - в результате при подаче питания программка не стартует. Вывод Reset подтянут к питанию+5В через 1К. Питание организовано на 7805, по вх-вых кондеры 33мкФ. Работаю на внутреннем генераторе. Чтобы заставить выполняться программу приходится либо коротковременно подкорачивать вывод reset на общий, либо кратковременно снять и снова подать питание.. Покапался в поиске - инфы по контроллерам гора, но нужной не нашёл.. Может кто сталкивался с таким?
Почитайте фирменную документацию на ваш контроллер.
Возможные причины:
1. Запрограммировано внешнее тактирование (резонатором, RC-цепью или импульсами), а таковое отсутствует. Перепрограммируйте через STK на внутреннее
2. Запрограммировано использование сторожевого таймера, а в программе оный не сбрасывается периодически
3. Другие причины типа незапрограммированных портов
1 - Тактирование внутреннее, темболее после принудительного сброса всё начинает работать- еслибы было запрограммировано внешнее- схема бы вообще не включалась.
2 - сторожевой таймер пробовал и включать и выключать и сбрасывал - никакой реакции
3 - все выводы порта работают как выходы, кроме вывода reset, на всех висят по резистору и леду, подключенных к положительной шине питания, те диод загорается если на выводе низкий уровень.
Снял осциллограммы питания при включении - никаких провалов. И ещё - на выходах МК , если программа не запустилась, высокий уровень
vovanse
Oct 30 2009, 06:27
Попробуйте резистор поставить на 4.7к, и конденсатор на землю на 10nF. По-моему, нет сброса при включении питания.
Цитата(vovanse @ Oct 30 2009, 12:27)

Попробуйте резистор поставить на 4.7к, и конденсатор на землю на 10nF. По-моему, нет сброса при включении питания.
На reset? Вешал 1К на "+" и 0.1мкФ(и 10мкф пробовал) на землю- не помогает, попробую увеличить резистор, хотя большого смысла вродебы и нет..
Увеличил до 56КОм. Кондёр 10мкФ.. Не помогло.. Прикладываю осциллограмку запуска МК.
1 Канал- Напряжение питания
2 канал- Состояние пина 3 МК (PB0). Подтянул его к земле через 1К, чтобы было видно Z состояние..
Нажмите для просмотра прикрепленного файлаНа осциллограмме сначала программа не запустилась,а после коротковременного отключения питания запустилась.
А что у Вас со фьюзами SUT, BODEN, BODLEVEL ?..
Качнул доку, в 12ом нету SUT

оно выбирается CKSELом
Качнул еррату, и там забавное нашлось (.ля что за нах с запретом копирования текста из ерраты у атмела...)
в общем имхо надо попробовать CKSEL=0010, BODEN=0, BODLEVEL=0
Нажмите для просмотра прикрепленного файла
BODEN включен
BODLEVEL 2.7В
Но пробовал и выключать, CKSEL если не ошибаюсь 0010 (вроде как по умолчанию)
Может ещё какие-нибудь идеи есть? а то 1МК уже пальнул по глупости,но остался ещё один с точно такойже проблемой
Цитата(frz @ Oct 30 2009, 11:50)

CKSEL если не ошибаюсь 0010 (вроде как по умолчанию)
а другие значения CKSEL (0011, 0100) не помогают ?
что на осцилограмме reset пина (с резистором и конденсатором) ?
Блокировочные конденсаторы на пинах питания МК стоят?
Цитата(GDI @ Oct 30 2009, 15:53)

Блокировочные конденсаторы на пинах питания МК стоят?
33мкФ эл-лит, в первом посте писал.
Цитата
а другие значения CKSEL (0011, 0100) не помогают ?
что на осцилограмме reset пина (с резистором и конденсатором) ?
1- не пробовал
2 - нарастание напряжения на конденсаторе, достигает 3 В через 0.5с, в этот момент вывода МК принимают верхний уровень(на предыдущих осциллограммах)
У меня такой вопрос - директиву
.ORG 0x0000 - обязательно указывать в программе? Видел примеры и с ней и без неё..
Цитата(frz @ Oct 30 2009, 13:11)

...
.ORG 0x0000 - обязательно указывать в программе? Видел примеры и с ней и без неё..
Это значение вроде как по умолчанию используется без явного указания. А почему по питанию керамики нету?
2.2мкФ X7R непосредственно на лапы МК- ноль реакции, как я собственно и думал
Может на код пора посмотреть

и все фьюзы как есть.
А то идей никаких как-то %)
Фьюзы выложить не смогу - программатор, собственно как и AVRSTUDIO сейчас далеко.
Код,не судите строго - это моя первая прогаммка для МК

:
Цитата
.include "tn12def.inc"
rjmp init;
reti; INT0
reti; PIN_CHANGE
rjmp tim_ovf; TIM0_OVF
reti; EEPROM_READY
reti//rjmp int_acomp; ANALOG_COMP
tim_ovf:
inc r17;
cpi r17,4 //1 раз за 4 прерывания таймера
brne ex_ovf;
ldi r17,0;
lsl r2;
bst r2,6
bld r2,0
out portb,r2
ex_ovf:
reti
main:
//repeat:
//inc r1;
//brne repeat;
rjmp main;
//int_acomp:
//ldi r16,0
//reti;
init:
cli;
sbr r16,0b11111110
//ldi r16,1;
mov r2,r16;
out portb,r2
ldi r17,0;
ldi r16,0b00000000;
out GIMSK,r16; запрет int0, и прерываний по изм сост. пинов
ldi r16,0b00111111;
out DDRB,r16;
ldi r16,0b11001010
out ACSR,r16
ldi r16,0b00000001
out TCCR0,r16
clr r16;
sbr r16,0b10
out TIMSK,r16
sei;
rjmp main;
Не обращайте внимания на куски неиспользуемых обработчиков прерываний- хотел с ними потом поиграться.
Заметил ещё одну закономерность, если после включения(когда программа не запустилась) снизить напряжение питания~до 1 вольта и снова поднять - программа начинает выполняться
Я обычно ставлю адреса векторов прерываний, без них как-то стремно смотрится.
У вас содержимое r2 неопределенное, т.к. в init первой инструкцией идет sbr (фактически логическое или содержимого r16 c константой). Но содержимое r16 не задается!!! Поставьте вместо sbr ldi r16,0xFE
а стек где ?
и sbr r16,0b11111110 как выше скзано
Блин, что сказать - я нуб..
Прога то оказывается всегда работала

Ладно, вечером перепрошью.. Огромное всем спасибо

Я восновном преобразовательной техникой балуюсь - там контроллеры совсем другие вот и привычка первым делом грешить на питание
А стек аппаратный.. Как я понял его трогать не надо
Цитата(Ronin @ Oct 30 2009, 14:44)

а стек где ?
...
Ну, без вызова подпрограмм стек не нужен.
зачем в ACSR пишется Reserved значение ? 0 туда
Цитата(МП41 @ Oct 30 2009, 14:54)

Ну, без вызова подпрограмм стек не нужен.
а прерываниям ?
Цитата(frz @ Oct 30 2009, 14:46)

Прога то оказывается всегда работала

...
А стек аппаратный..
так в чём там дело ?
вот блин, намутят же в этих новых чипах всяких извращений по мотивам пикоф

то ли дело обычный тини13
Умные советы вроде иссякли, поэтому дам совет дурацкий, а точнее иррациональный: запитать XTAL1 на +5V через резистор 5 ком. Типа для проверки. Ведь то, что генератор все-таки запускается при кратковременном снятии питания, наводит на мысль, что при включенном питании на какой-то пин натекает плюс, что способствует запуску. А при холодном старте такого натекания нет. Скорее всего, этот пин XTAL1, другому вроде бы некому.
Так все выяснили, разве не ясно?
Содержимое регистров при включении не определено (в данном случае - r16), если 0, программа работала, 1 - не работала. Просто внимательно надо относиться к инициализации, никакие конденсаторы-кварцы-ресеты ни при чем
domowoj
Oct 30 2009, 15:40
Цитата(V_G @ Oct 30 2009, 22:37)

Содержимое регистров при включении не определено (в данном случае - r16), если 0, программа работала, 1 - не работала.
Регистры же по ресету обнуляются!
Цитата(domowoj @ Oct 30 2009, 18:40)

Регистры же по ресету обнуляются!
Это - Вы где такое прочитали?
domowoj
Oct 30 2009, 16:18
Цитата(Палыч @ Oct 30 2009, 22:58)

Это - Вы где такое прочитали?
Не знаю где , но всегда так считал,
но всегда было не лом(как сейчас говорят) явно установить информ. в тот или иной регистр.
(век живи - век учись)
Заранее известное состояние по включению - только у регистров, ответственных за настройку проца и периферии. Просто регистры памяти в неопределенном состоянии. Симулятор же чаще всего их действительно обнуляет, тут-то и проявляется разница в работе симулятора и реальной программы. Сказанное справедливо для всех процев, с которыми я когда-либо работал (intel, philips, pic, avr, adsp...), за всех остальных не скажу. Более того, аналогичная проблема возникает, когда пишешь под винду на visual C: переходишь с debug версии софта на release, и поперли проблемы, связанные с непроинициализированностью переменных.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.