Добрый день, уважаемые. Делаю задержку большую. Порядка 18-25 часов. МК tiny13a. Не понимаю чего я недочитал в даташите...
в avr studio написал программу на ассемблере, основанную на переполнении таймера и его прерывании. при симуляции программа выдает ровно 1 секунду (1000,05 мс). но в реале все не так. в реале там погрешность чуть ли не 50 %. фьюзы поставил на 9,6. CKDIV8 снял. что же там не так с частотой? неужели такая большая погрешность в частоте внутреннего генератора? возможно есть еще какие-то настройки частоты типа калибровки? Или чтото с самой калибровкой не так?
Прошу помощи у знатоков, замучался за неделю экспериментов
Ну что я могу сказать...
В принципе задержка действительно получается ~1секунда, значит остается:
1) все-таки неправильно настроены фузы (на 4.8МГц) - проверить, убедиться что точно 9.6.
2) хреновая калибровка (вряд ли тут на 50% уход будет) - поиграться с регистром OSCCAL (стр. 23-24 даташита)
Правда я только первый раз проверил, больно долго симулируется.
Странная какая-то подпрограмма задержки, обычно сначала инициализируют переменные, а потом от них единицы отнимают...
И еще. Раз пользуетесь RCALL/RET - стек не забывайте инициализировать.
да, я мог перепутать фузы. но меняя их местами (в tiny13 их всего 2 - CKSEL0 и CKSEL1) я увидел что при одной настройке быстро работает и при другой медленно. очевидно их я не мог перепутать. да и с даташитом совпадает.
калибровка конечно тут к месту, но минус в том, что я так и не буду знать точной частоты. все указывает на то что частота при выставленной в 4,8 составляет 4,3 Мгц. при 9,6 - примерно 9.
мне конечно не нужны наноточные интервалы. но если за сутки набежит 10 мин погрешности то этого будет много.
про инициализацию читал но почему то не увидел что меняется. спасибо Engineer_Keen, изучу это
Не знаю, как у Тинек, а если повесить внешний часовой кварц на 32.ххх кГц..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
часовой кварц я вот выпаял из будильника китайского. но не нашел XTAL у тини13. Есть конечно у меня 12 Мгц кварц. есть и конденсаторы. и еще есть тини2313. но она одна у меня. жалко забирать на простой таймер тини2313. но как мне кажется, не может быть такой большой погрешности от внутреннего генератора.
А можно ли вообще подключить этот кварц часовой на тини13? и если можно, то как в таком случае программировать МК? прямо к устройству подключать программатор? (у меня программатор "5 проводков" да еще и не как у людей. на нем 2 разьема 8 пин и 20 пин для тини13 и тини 2313=))
симулятор и макет штука разная...
для начала настроить симулятор надо, затем повнимательней присмотреться к режимам тактового генератора и предделителя (по умолчанию у 13/13А стоит внутренний RС на 9,6мгц с делением на 8 .
кстати, предделитель и для внешнего кварца действителен... задержки цепочкой команд для систем с конвеерной выборкой команд нестабильны - используйте таймеры!
BOB51, я убрал деление на 8. должно стать 9,6 - но нету там их. вчера впаял кварцевый резонатор на 12 Мгц на тини2313. заработало. сегодня напишу новую программу на таймере. проверю. но и на таймере тоже выходит погрешность что говорит о том что там не 9,6 Мгц.
а скажите, в чем разница между резонатором и генератором? почему то у меня путаница в голове с этим
На PB0 будет меандр F/8. Узнаете точно какая частота у МК.
Только что ради интереса в симуляторе проверил, с делителем - ровно 9.6/8, без делителя - 10МГц
aleezon писал(а):
в чем разница между резонатором и генератором ?
Генератор - активный элемент и его можно к одной ноге МК подключить (нога CLKI). В случае тини13 - это единственный вариант внешнего тактирования, при этом естественно одна нога I/O теряется. Резонатор - пассивный элемент, подключается 2мя ногами к генератору, находящемуся внутри МК (ноги XTAL1-XTAL2).
частотометра нету и осцилографа нету. осцилограф дорогой такой. не по срендствам. я бы подключил да померял если бы был.
генератор/резонатор понял. спасибо. в голове прояснилось все.
посмотрел частотомеры... буду собирать на него года 3. осцилографы тоже дорогие
вечером буду пробовать 12Мгц. отпишу, может кто столкнется с проблемой точности тактирования.
если tinка свежая (только от производителя) - то будет внутренний RC
иначе - все что угодно (кто раньше попользовался) надо по-новой конфигурацию вводить
еще хуже если пользователь лапку сброса отключил - ищите "высоковольтник" для перезаписи фузов конфигурации
Возможно кто-то столкнется с этой проблемой...
Внутренний генератор работает (почему-то) нестабильно и неточно.
я таки подключил резонатор 12 Мгц к тини2313. точность конечно отличная. за 2 часа погрешность составила... нифига она не стаставила. разве-что милисекунды. вобщем работает все четка. благодарю всех кто мне помог разобраться с этим вопросом и с другими попутными вопросами! возможно и я вскором кому-нибудь смогу помочь!!!!! !!!!!
прилагаю код программы, несложный, но на всякий случай:
.include "tn2313def.inc"
LDI R16,Low(RAMEND); Инициализация стека
OUT SPL,R16
;Определяем назначение портов ввода/вывода
ldi r16,0b11111111
out ddrb,r16
rjmp main
main:
ldi r19,60;ТУТ УКАЗЫВАЕМ СКОЛЬКО СЕКУНД В МИНУТЕ =)
ldi r20,120; ТУТ КОЛИЧЕСТВО МИНУТ В ЗАДЕРЖКЕ
mins:
ldi r19,60;ставим опять 60 секунд
;в этой подпрограмме отмеряем РОВНО 1 секунду ПРИ ТАКТОВОЙ ЧАСТОТЕ 12 Мгц.
secs:
rcall sec1
dec r19
brne secs
dec r20
brne mins
sbi portb,0
rjmp main
sec1:
ldi r18,60
ss:
dec r16
brne ss
dec r17
brne ss
dec r18
brne ss
ldi r16,0
ldi r17,224
s1:
dec r16
brne s1
dec r17
brne s1
ret
P.S. на ночь оставил и испытал задержку в 7 часов. в этом случае тоже все четко
for aleezon
мняя...
доставалки... по што микруху обижаем?
своргань вот энту схемку и загрузи оттранслированный исходник - на pb0 будет меандр с частотой 1Гц, длительность горения/паузы на светике 0,5s
остальное, по необходимости, сам допишешшш...
пришлось макетик на ИК локатор для перепроверки потревожжить...
to BOB51
спасибо тебе огромное. пригдицо. вот я в файлике нашел такое в начале:
ВНИМАНИЕ!!!
; В области сигнатуры ATtiny13A размещаются два байта
; калибровочных констант для внутреннего RC генератора.
; Старший байт по адресу 0х00 содержит калибровочную константу
; для работы генератора на частоте 9.6 MHz. Данная константа
; будет автоматически загружена в OSCCAL по окончании сигнала сброса.
; Автоматическая загрузка калибровочной константы
; для работы генератора на частоте 4.8 MHz НЕ ВЫПОЛНЯЕТСЯ!
; Чтение, хранение и загрузка калибровочной константы
; для работы внутреннего RC генератора на частоте 4.8 MHz
; должны выполняться прикладной программой.
; Калибровочная константа для работы генератора на частоте 4,8 MHz
; размещена в старшем байте поадресу 0х01 в области сигнатур.
я нескоко раз прочитал и не догоняю что тут значит "сигнатура", а еще непонятно "старший байт" и "младший".
вообще-то это перевод datasheet а doc8126...
"17.3 Calibration Bytes
The signature area of the ATtiny13A contains two bytes of calibration data for the internal oscillator.
The calibration data in the high byte of address 0x00 is for use with the oscillator set to 9.6
MHz operation. During reset, this byte is automatically written into the OSCCAL register to
ensure correct frequency of the oscillator.
There is a separate calibration byte for the internal oscillator in 4.8 MHz mode of operation but
this data is not loaded automatically. The hardware always loads the 9.6 MHz calibration data
during reset. To use separate calibration data for the oscillator in 4.8 MHz mode the OSCCAL
register must be updated by firmware. The calibration data for 4.8 MHz operation is located in
the high byte at address 0x01 of the signature area."
по-народному: калибровочный байт для 9,6 загрузится сам , а вот для 4,8 его сначала при помощи программатора(и то не всякого) считать надобно, а затем уже использовать
не мешает перечитать сии документы ( datasheetы) перед злоупотреблением микроконтроллера в качестве подопытного мыша
вообще-то там и погрешность генератора указана +/-10% ( конкретный экземпляр на тесте дал +5 минут для 2-часового интервала), и много чего еще интересного
кстати для "длинных" таймеров/одновибраторов также неплохо сгодится PIC12F629/683
aleezon писал(а):Возможно кто-то столкнется с этой проблемой...
Внутренний генератор работает (почему-то) нестабильно и неточно.
сталкивался в новой(!) tiny2313. внутренний RC работал с погрешностью примерно 20-30%(!), не помню в какую сторону! и байты калибровки были вроде FF. решил не заморачиваться и подогнал F_CPU в makefile.
BOB51 писал(а):задержки цепочкой команд для систем с конвеерной выборкой команд нестабильны - используйте таймеры!
а это что за ерунда про AVR? один и тот же код в цикле будет выполняться нестабильно разное время? или трудно посчитать на этапе программирования, сколько точно тактов там будет? по-моему, все четко.
for a_skr
если применить цепочку NOP-ов, то да, а ежли счетчики с условными переходами (особо когда их много на заданный интервал) , да еще при отсутствии хоть какого-либо измерительного оборудования - это уже садомазо
сбой нормального выполнения потока с разным временем исполнения в полном/неполном циклах даже при кварцевом резонатрое не сильно поможет.
AVR&PIC не mcs51 (да и то там о таймерах на командных кольцах можно говорить только в применении "прототипов" чего сейчас уже редкость)
и все же "учите матчасть господа!"
да, еще добавлю несколько оптимизированный исходник для "длинного таймера"- там больше места для прикладной программы, которая может использоваться совместно с "фоновым" реле времени (см.приложение)
погрешность та же - +/-10% от заданного секундах интервала
конечо шкварц точнее будет, но то лишние деталюхи, да и всегда ли та точность нужна? (в крайнем случае можно и каибровочный байт "подергать" - там точность до +/-2% достичь можно)