Какая все-таки частота МК
Какая все-таки частота МК
Добрый день, уважаемые. Делаю задержку большую. Порядка 18-25 часов. МК tiny13a. Не понимаю чего я недочитал в даташите...
в avr studio написал программу на ассемблере, основанную на переполнении таймера и его прерывании. при симуляции программа выдает ровно 1 секунду (1000,05 мс). но в реале все не так. в реале там погрешность чуть ли не 50 %. фьюзы поставил на 9,6. CKDIV8 снял. что же там не так с частотой? неужели такая большая погрешность в частоте внутреннего генератора? возможно есть еще какие-то настройки частоты типа калибровки? Или чтото с самой калибровкой не так?
Прошу помощи у знатоков, замучался за неделю экспериментов
в avr studio написал программу на ассемблере, основанную на переполнении таймера и его прерывании. при симуляции программа выдает ровно 1 секунду (1000,05 мс). но в реале все не так. в реале там погрешность чуть ли не 50 %. фьюзы поставил на 9,6. CKDIV8 снял. что же там не так с частотой? неужели такая большая погрешность в частоте внутреннего генератора? возможно есть еще какие-то настройки частоты типа калибровки? Или чтото с самой калибровкой не так?
Прошу помощи у знатоков, замучался за неделю экспериментов
- Реклама
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Какая все-таки частота МК
Ошибка в 23 строке исходного кода. 
Re: Какая все-таки частота МК
Прошу прощения. вот код. только вот перепутал я. задерку делаю тупым циклом. который выполняется за 1 сек...
.include "tn13def.inc"
;Частота 9,6
ldi r16,0b11111111
out ddrb,r16
ldi r16,0
m:
sbi portb,4;Включить нагузку
rcall delay;задержка
cbi portb,4;выключить нагругку
rcall delay;задержка
rjmp m
;задержка 1 сек
delay:
ldi r18,48
main:
dec r16
brne main
dec r17
brne main
dec r18
brne main
ldi r16,255
ldi r17,179
t:
dec r16
brne t
dec r17
brne t
ret
.include "tn13def.inc"
;Частота 9,6
ldi r16,0b11111111
out ddrb,r16
ldi r16,0
m:
sbi portb,4;Включить нагузку
rcall delay;задержка
cbi portb,4;выключить нагругку
rcall delay;задержка
rjmp m
;задержка 1 сек
delay:
ldi r18,48
main:
dec r16
brne main
dec r17
brne main
dec r18
brne main
ldi r16,255
ldi r17,179
t:
dec r16
brne t
dec r17
brne t
ret
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Какая все-таки частота МК
Ну что я могу сказать...
В принципе задержка действительно получается ~1секунда, значит остается:
1) все-таки неправильно настроены фузы (на 4.8МГц) - проверить, убедиться что точно 9.6.
2) хреновая калибровка (вряд ли тут на 50% уход будет) - поиграться с регистром OSCCAL (стр. 23-24 даташита)
Правда я только первый раз проверил, больно долго симулируется.
Странная какая-то подпрограмма задержки, обычно сначала инициализируют переменные, а потом от них единицы отнимают...
И еще. Раз пользуетесь RCALL/RET - стек не забывайте инициализировать.
В принципе задержка действительно получается ~1секунда, значит остается:
1) все-таки неправильно настроены фузы (на 4.8МГц) - проверить, убедиться что точно 9.6.
2) хреновая калибровка (вряд ли тут на 50% уход будет) - поиграться с регистром OSCCAL (стр. 23-24 даташита)
Правда я только первый раз проверил, больно долго симулируется.
Странная какая-то подпрограмма задержки, обычно сначала инициализируют переменные, а потом от них единицы отнимают...
И еще. Раз пользуетесь RCALL/RET - стек не забывайте инициализировать.
Re: Какая все-таки частота МК
да, я мог перепутать фузы. но меняя их местами (в tiny13 их всего 2 - CKSEL0 и CKSEL1) я увидел что при одной настройке быстро работает и при другой медленно. очевидно их я не мог перепутать. да и с даташитом совпадает.
калибровка конечно тут к месту, но минус в том, что я так и не буду знать точной частоты. все указывает на то что частота при выставленной в 4,8 составляет 4,3 Мгц. при 9,6 - примерно 9.
мне конечно не нужны наноточные интервалы. но если за сутки набежит 10 мин погрешности то этого будет много.
про инициализацию читал но почему то не увидел что меняется. спасибо Engineer_Keen, изучу это
калибровка конечно тут к месту, но минус в том, что я так и не буду знать точной частоты. все указывает на то что частота при выставленной в 4,8 составляет 4,3 Мгц. при 9,6 - примерно 9.
мне конечно не нужны наноточные интервалы. но если за сутки набежит 10 мин погрешности то этого будет много.
про инициализацию читал но почему то не увидел что меняется. спасибо Engineer_Keen, изучу это
- Реклама
Re: Какая все-таки частота МК
Не знаю, как у Тинек, а если повесить внешний часовой кварц на 32.ххх кГц..aleezon писал(а):Порядка 18-25 часов.
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Какая все-таки частота МК
часовой кварц я вот выпаял из будильника китайского. но не нашел XTAL у тини13. Есть конечно у меня 12 Мгц кварц. есть и конденсаторы. и еще есть тини2313. но она одна у меня. жалко забирать на простой таймер тини2313. но как мне кажется, не может быть такой большой погрешности от внутреннего генератора.
А можно ли вообще подключить этот кварц часовой на тини13? и если можно, то как в таком случае программировать МК? прямо к устройству подключать программатор? (у меня программатор "5 проводков" да еще и не как у людей. на нем 2 разьема 8 пин и 20 пин для тини13 и тини 2313=))
А можно ли вообще подключить этот кварц часовой на тини13? и если можно, то как в таком случае программировать МК? прямо к устройству подключать программатор? (у меня программатор "5 проводков" да еще и не как у людей. на нем 2 разьема 8 пин и 20 пин для тини13 и тини 2313=))
Re: Какая все-таки частота МК
симулятор и макет штука разная...
для начала настроить симулятор надо, затем повнимательней присмотреться к режимам тактового генератора и предделителя (по умолчанию у 13/13А стоит внутренний RС на 9,6мгц с делением на 8
.
кстати, предделитель и для внешнего кварца действителен...
задержки цепочкой команд для систем с конвеерной выборкой команд нестабильны - используйте таймеры!
для начала настроить симулятор надо, затем повнимательней присмотреться к режимам тактового генератора и предделителя (по умолчанию у 13/13А стоит внутренний RС на 9,6мгц с делением на 8
кстати, предделитель и для внешнего кварца действителен...
задержки цепочкой команд для систем с конвеерной выборкой команд нестабильны - используйте таймеры!
Re: Какая все-таки частота МК
BOB51, я убрал деление на 8. должно стать 9,6 - но нету там их. вчера впаял кварцевый резонатор на 12 Мгц на тини2313. заработало. сегодня напишу новую программу на таймере. проверю. но и на таймере тоже выходит погрешность что говорит о том что там не 9,6 Мгц.
а скажите, в чем разница между резонатором и генератором? почему то у меня путаница в голове с этим
а скажите, в чем разница между резонатором и генератором? почему то у меня путаница в голове с этим
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Какая все-таки частота МК
Осциллограф или частотомер есть? Напишите:aleezon писал(а):должно стать 9,6 - но нету там их
Код: Выделить всё
LDI R16,0x01
OUT DDRB,R16
LOOP:
SBI PORTB,PB0
NOP
NOP
CBI PORTB,PB0
RJMP LOOP
Только что ради интереса в симуляторе проверил, с делителем - ровно 9.6/8, без делителя - 10МГц
Генератор - активный элемент и его можно к одной ноге МК подключить (нога CLKI). В случае тини13 - это единственный вариант внешнего тактирования, при этом естественно одна нога I/O теряется. Резонатор - пассивный элемент, подключается 2мя ногами к генератору, находящемуся внутри МК (ноги XTAL1-XTAL2).aleezon писал(а): в чем разница между резонатором и генератором ?
Re: Какая все-таки частота МК
частотометра нету и осцилографа нету. осцилограф дорогой такой. не по срендствам. я бы подключил да померял если бы был.
генератор/резонатор понял. спасибо. в голове прояснилось все.
посмотрел частотомеры... буду собирать на него года 3.
осцилографы тоже дорогие
вечером буду пробовать 12Мгц. отпишу, может кто столкнется с проблемой точности тактирования.
генератор/резонатор понял. спасибо. в голове прояснилось все.
посмотрел частотомеры... буду собирать на него года 3.
вечером буду пробовать 12Мгц. отпишу, может кто столкнется с проблемой точности тактирования.
Re: Какая все-таки частота МК
если tinка свежая (только от производителя) - то будет внутренний RC
иначе - все что угодно (кто раньше попользовался) надо по-новой конфигурацию вводить
еще хуже если пользователь лапку сброса отключил - ищите "высоковольтник" для перезаписи фузов конфигурации
иначе - все что угодно (кто раньше попользовался) надо по-новой конфигурацию вводить
еще хуже если пользователь лапку сброса отключил - ищите "высоковольтник" для перезаписи фузов конфигурации
Re: Какая все-таки частота МК
Возможно кто-то столкнется с этой проблемой...
Внутренний генератор работает (почему-то) нестабильно и неточно.
я таки подключил резонатор 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 часов. в этом случае тоже все четко
Внутренний генератор работает (почему-то) нестабильно и неточно.
я таки подключил резонатор 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 часов. в этом случае тоже все четко
Re: Какая все-таки частота МК
for aleezon
мняя...
доставалки... по што микруху обижаем?
своргань вот энту схемку и загрузи оттранслированный исходник - на pb0 будет меандр с частотой 1Гц, длительность горения/паузы на светике 0,5s
остальное, по необходимости, сам допишешшш...
пришлось макетик на ИК локатор для перепроверки потревожжить...
мняя...
доставалки... по што микруху обижаем?
своргань вот энту схемку и загрузи оттранслированный исходник - на pb0 будет меандр с частотой 1Гц, длительность горения/паузы на светике 0,5s
остальное, по необходимости, сам допишешшш...
пришлось макетик на ИК локатор для перепроверки потревожжить...
- Вложения
-
- gensek.asm
- (5.51 КБ) 707 скачиваний
-
- genik.pdf
- (181.45 КБ) 232 скачивания
Re: Какая все-таки частота МК
to BOB51
спасибо тебе огромное. пригдицо. вот я в файлике нашел такое в начале:

спасибо тебе огромное. пригдицо. вот я в файлике нашел такое в начале:
я нескоко раз прочитал и не догоняю что тут значит "сигнатура", а еще непонятно "старший байт" и "младший".ВНИМАНИЕ!!!
; В области сигнатуры ATtiny13A размещаются два байта
; калибровочных констант для внутреннего RC генератора.
; Старший байт по адресу 0х00 содержит калибровочную константу
; для работы генератора на частоте 9.6 MHz. Данная константа
; будет автоматически загружена в OSCCAL по окончании сигнала сброса.
; Автоматическая загрузка калибровочной константы
; для работы генератора на частоте 4.8 MHz НЕ ВЫПОЛНЯЕТСЯ!
; Чтение, хранение и загрузка калибровочной константы
; для работы внутреннего RC генератора на частоте 4.8 MHz
; должны выполняться прикладной программой.
; Калибровочная константа для работы генератора на частоте 4,8 MHz
; размещена в старшем байте поадресу 0х01 в области сигнатур.
Re: Какая все-таки частота МК
вообще-то это перевод 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
"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
Re: Какая все-таки частота МК
сталкивался в новой(!) tiny2313. внутренний RC работал с погрешностью примерно 20-30%(!), не помню в какую сторону! и байты калибровки были вроде FF. решил не заморачиваться и подогнал F_CPU в makefile.aleezon писал(а):Возможно кто-то столкнется с этой проблемой...
Внутренний генератор работает (почему-то) нестабильно и неточно.
а это что за ерунда про AVR? один и тот же код в цикле будет выполняться нестабильно разное время? или трудно посчитать на этапе программирования, сколько точно тактов там будет? по-моему, все четко.BOB51 писал(а):задержки цепочкой команд для систем с конвеерной выборкой команд нестабильны - используйте таймеры!
Re: Какая все-таки частота МК
for a_skr
если применить цепочку NOP-ов, то да, а ежли счетчики с условными переходами (особо когда их много на заданный интервал) , да еще при отсутствии хоть какого-либо измерительного оборудования - это уже садомазо
сбой нормального выполнения потока с разным временем исполнения в полном/неполном циклах даже при кварцевом резонатрое не сильно поможет.
AVR&PIC не mcs51 (да и то там о таймерах на командных кольцах можно говорить только в применении "прототипов" чего сейчас уже редкость)
и все же "учите матчасть господа!"
да, еще добавлю несколько оптимизированный исходник для "длинного таймера"- там больше места для прикладной программы, которая может использоваться совместно с "фоновым" реле времени (см.приложение)
погрешность та же - +/-10% от заданного секундах интервала
конечо шкварц точнее будет, но то лишние деталюхи, да и всегда ли та точность нужна? (в крайнем случае можно и каибровочный байт "подергать" - там точность до +/-2% достичь можно)
если применить цепочку NOP-ов, то да, а ежли счетчики с условными переходами (особо когда их много на заданный интервал) , да еще при отсутствии хоть какого-либо измерительного оборудования - это уже садомазо
сбой нормального выполнения потока с разным временем исполнения в полном/неполном циклах даже при кварцевом резонатрое не сильно поможет.
AVR&PIC не mcs51 (да и то там о таймерах на командных кольцах можно говорить только в применении "прототипов" чего сейчас уже редкость)
и все же "учите матчасть господа!"
да, еще добавлю несколько оптимизированный исходник для "длинного таймера"- там больше места для прикладной программы, которая может использоваться совместно с "фоновым" реле времени (см.приложение)
погрешность та же - +/-10% от заданного секундах интервала
конечо шкварц точнее будет, но то лишние деталюхи, да и всегда ли та точность нужна? (в крайнем случае можно и каибровочный байт "подергать" - там точность до +/-2% достичь можно)
- Вложения
-
- gensek.asm
- (6.96 КБ) 495 скачиваний


