Tiny13 - калибровочные байты.

May 13, 2011 9 Replies

Здравствуйте Вот начало программы для тини13: rjmp RESET ; Reset Handler rjmp EXT_INT0 ; IRQ0 Handler rjmp uINT0 ; PCINT0 Handler rjmp TIM0_OVF ; Timer0 Overflow Handler rjmp EE_RDY ; EEPROM Ready Handler rjmp ANA_COMP ; Analog Comparator Handler rjmp TIM0_COMPA ; Timer0 CompareA Handler rjmp TIM0_COMPB ; Timer0 CompareB Handler rjmp WATCHDOG ; Watchdog Interrupt Handler rjmp ADC_ustr ; ADC Conversion Handler



RESET:



;nastroyka frequency ldi r16,$ff ;zaglushka - syuda pri programmirovanii pishetsya konctanta dlya rabotw na 1,2 MGc out OSCCAL,r16



Вот строка, которой программирую: avreal.exe +tiny13 -e -w -v -c p292.hex -c?osccal=14 -fckdiv=0,cksel=2



-p1 -5 При работе часть микросхем работает не на той частоте. Думал что не тот калибровочный байт берёт, проверил с другим байтом, прописав его значение руками в программе - не помогло. А вот когда прописал в программе значение на 2 единицы меньше, чем в калибровочном байте - то всё заработало. Hикто с таким не сталкивался?


Shapovalov,

You wrote to All:

SI> From: Shapovalov Alexey Ivanovich snipped-for-privacy@mikroterm.lg.ua>

SI>

SI> Здравствуйте SI> Вот начало программы для тини13: SI> rjmp RESET ; Reset Handler SI> rjmp EXT_INT0 ; IRQ0 Handler SI> rjmp uINT0 ; PCINT0 Handler SI> rjmp TIM0_OVF ; Timer0 Overflow Handler SI> rjmp EE_RDY ; EEPROM Ready Handler SI> rjmp ANA_COMP ; Analog Comparator Handler SI> rjmp TIM0_COMPA ; Timer0 CompareA Handler SI> rjmp TIM0_COMPB ; Timer0 CompareB Handler SI> rjmp WATCHDOG ; Watchdog Interrupt Handler SI> rjmp ADC_ustr ; ADC Conversion Handler SI>

SI> RESET: SI>

SI> ;nastroyka frequency SI> ldi r16,$ff ;zaglushka - syuda pri programmirovanii pishetsya SI> konctanta dlya rabotw na 1,2 MGc SI> out OSCCAL,r16 SI>

SI> Вот строка, которой программирую: SI> avreal.exe +tiny13 -e -w -v -c p292.hex -c?osccal=14 -fckdiv=0,cksel=2 SI> -p1 -5

@echo . @echo Writing Fuses... @avreal32 +TINY15 -p1 -as -o80 -%% -fBLEV=0,BODEN=0,CKSEL=00, -w > output.txt @if errorlevel 1 goto ERROR

и

@echo . @echo Programming... @avreal32 +TINY15 -p1 -as -o80 -%% -w -c %HEXFILE% -c?osccal=0x014 >

output.txt

SI> При работе часть микросхем работает не на той частоте. Думал что не SI> тот калибровочный байт берёт, проверил с другим байтом, прописав SI> его значение руками в программе - не помогло. А вот когда прописал SI> в программе значение на 2 единицы меньше, чем в калибровочном байте - SI> то всё заработало. Hикто с таким не сталкивался?

До кучи... ;**************************************************** .cseg

;Initialize interrupt vectors ;Reset .org 0x00 rjmp main .org INT0addr ; External Interrupt 0 rjmp main .org PCI0addr ; Pin Change Interrupt Request 0 rjmp main .org OC1addr ; Timer/Counter1 Compare Match rjmp OC1_rout .org OVF1addr ; Timer/Counter1 Overflow rjmp main .org OVF0addr ; Timer/Counter0 Overflow - Zaehler rjmp OVF0_rout .org ERDYaddr ; EEPROM Ready rjmp main .org ACIaddr ; Analog Comparator rjmp main .org ADCCaddr ; ADC Conversion Ready rjmp ADCC_rout

;.equ INT_VECTORS_SIZE = 9 ; size in words

;**************************************************** ;* Main Program ;******************************************************** main: CLI ;Disable interrupt ;------------------------------------------------------ STARTOSC: LDI temp, 0x12 OUT OSCCAL,temp ;System Clock ;------------------------------------------------------ CLR temp ; OUT SREG, temp ; OUT GIMSK,temp ; OUT GIFR, temp OUT TCNT1,temp OUT SFIOR,temp OUT TIMSK,temp ; и тд...

Hу а сейчас самому вникать, что там у тебя мне лениво...

Andrey

Здравствуйте Andrey Arnold пишет: AA> Shapovalov, AA>

AA> You wrote to All: AA>

SI>> From: Shapovalov Alexey Ivanovich SI>> snipped-for-privacy@mikroterm.lg.ua>

SI>> Здравствуйте SI>> Вот начало программы для тини13: SI>> rjmp RESET ; Reset Handler SI>> rjmp EXT_INT0 ; IRQ0 Handler SI>> rjmp uINT0 ; PCINT0 Handler SI>> rjmp TIM0_OVF ; Timer0 Overflow Handler SI>> rjmp EE_RDY ; EEPROM Ready Handler SI>> rjmp ANA_COMP ; Analog Comparator Handler SI>> rjmp TIM0_COMPA ; Timer0 CompareA Handler SI>> rjmp TIM0_COMPB ; Timer0 CompareB Handler SI>> rjmp WATCHDOG ; Watchdog Interrupt Handler SI>> rjmp ADC_ustr ; ADC Conversion Handler SI>>

SI>> RESET: SI>>

SI>> ;nastroyka frequency SI>> ldi r16,$ff ;zaglushka - syuda pri programmirovanii SI>> pishetsya konctanta dlya rabotw na 1,2 MGc SI>> out OSCCAL,r16 SI>>

SI>> Вот строка, которой программирую: SI>> avreal.exe +tiny13 -e -w -v -c p292.hex -c?osccal=14 SI>> -fckdiv=0,cksel=2 -p1 -5 AA>

AA> @echo . AA> @echo Writing Fuses... AA> @avreal32 +TINY15 -p1 -as -o80 -%% -fBLEV=0,BODEN=0,CKSEL=00, AA> -w > output.txt @if errorlevel 1 goto ERROR AA>

AA> и AA>

AA> @echo . AA> @echo Programming... AA> @avreal32 +TINY15 -p1 -as -o80 -%% -w -c %HEXFILE% AA> -c?osccal=0x014 > output.txt AA>

SI>> При работе часть микросхем работает не на той частоте. SI>> Думал что не тот калибровочный байт берёт, проверил с SI>> другим байтом, прописав его значение руками в программе - SI>> не помогло. А вот когда прописал в программе значение на 2 SI>> единицы меньше, чем в калибровочном байте - то всё SI>> заработало. Hикто с таким не сталкивался? AA>

AA> До кучи... AA> ??;**************************************************** AA> ..cseg AA>

AA> ??;Initialize interrupt vectors AA> ??;Reset AA> ..org 0x00 AA> rjmp main AA> ..org INT0addr ; External Interrupt 0 AA> rjmp main AA> ..org PCI0addr ; Pin Change Interrupt Request 0 AA> rjmp main AA> ..org OC1addr ; Timer/Counter1 Compare Match AA> rjmp OC1_rout AA> ..org OVF1addr ; Timer/Counter1 Overflow AA> rjmp main AA> ..org OVF0addr ; Timer/Counter0 Overflow - Zaehler AA> rjmp OVF0_rout AA> ..org ERDYaddr ; EEPROM Ready AA> rjmp main AA> ..org ACIaddr ; Analog Comparator AA> rjmp main AA> ..org ADCCaddr ; ADC Conversion Ready AA> rjmp ADCC_rout AA>

AA> ??;.equ INT_VECTORS_SIZE = 9 ; size in words AA>

AA> ??;**************************************************** AA> ??;* Main Program AA> ??;******************************************************** AA> main: AA> CLI ;Disable interrupt AA> ??;------------------------------------------------------ AA> STARTOSC: AA> LDI temp, 0x12 AA> OUT OSCCAL,temp ;System Clock AA> ??;------------------------------------------------------ AA> CLR temp ; AA> OUT SREG, temp ; AA> OUT GIMSK,temp ; AA> OUT GIFR, temp AA> OUT TCNT1,temp AA> OUT SFIOR,temp AA> OUT TIMSK,temp ; AA> и тд... AA>

AA> Hу а сейчас самому вникать, что там у тебя мне лениво...

Да в общем - то всё одинкаково, единственное отличие - ты фьюзы и собственно программирование и запись калибровочного байта делаешь двумя разными командами, а я в одной. С другой стороны - в тини15 у меня не использовались фьюзы. Hо и проблем с калибровочным байтом не возникало. Hадо попробовать 2-мя командами.

Shapovalov,

You wrote to Andrey Arnold:

SI>>> Вот начало программы для тини13: SI>>> rjmp RESET ; Reset Handler SI>>> rjmp EXT_INT0 ; IRQ0 Handler SI>>> rjmp uINT0 ; PCINT0 Handler SI>>> rjmp TIM0_OVF ; Timer0 Overflow Handler SI>>> rjmp EE_RDY ; EEPROM Ready Handler SI>>> rjmp ANA_COMP ; Analog Comparator Handler SI>>> rjmp TIM0_COMPA ; Timer0 CompareA Handler SI>>> rjmp TIM0_COMPB ; Timer0 CompareB Handler SI>>> rjmp WATCHDOG ; Watchdog Interrupt Handler SI>>> rjmp ADC_ustr ; ADC Conversion Handler SI>>>

SI>>> RESET: SI>>>

SI>>> ;nastroyka frequency SI>>> ldi r16,$ff ;zaglushka - syuda pri programmirovanii SI>>> pishetsya konctanta dlya rabotw na 1,2 MGc SI>>> out OSCCAL,r16 SI>>>

SI>>> Вот строка, которой программирую: SI>>> avreal.exe +tiny13 -e -w -v -c p292.hex -c?osccal=14 SI>>> -fckdiv=0,cksel=2 -p1 -5 AA>>

AA>> @echo . AA>> @echo Writing Fuses... AA>> @avreal32 +TINY15 -p1 -as -o80 -%% -fBLEV=0,BODEN=0,CKSEL=00, AA>> -w > output.txt @if errorlevel 1 goto ERROR AA>>

AA>> и AA>>

AA>> @echo . AA>> @echo Programming... AA>> @avreal32 +TINY15 -p1 -as -o80 -%% -w -c %HEXFILE% AA>> -c?osccal=0x014 > output.txt AA>>

SI>>> При работе часть микросхем работает не на той частоте. SI>>> Думал что не тот калибровочный байт берёт, проверил с SI>>> другим байтом, прописав его значение руками в программе - SI>>> не помогло. А вот когда прописал в программе значение на 2 SI>>> единицы меньше, чем в калибровочном байте - то всё SI>>> заработало. Hикто с таким не сталкивался? AA>>

AA>> До кучи... AA>> ??;**************************************************** AA>> ..cseg AA>>

AA>> ??;Initialize interrupt vectors AA>> ??;Reset AA>> ..org 0x00 AA>> rjmp main AA>> ..org INT0addr ; External Interrupt 0 AA>> rjmp main AA>> ..org PCI0addr ; Pin Change Interrupt Request 0 AA>> rjmp main AA>> ..org OC1addr ; Timer/Counter1 Compare Match AA>> rjmp OC1_rout AA>> ..org OVF1addr ; Timer/Counter1 Overflow AA>> rjmp main AA>> ..org OVF0addr ; Timer/Counter0 Overflow - Zaehler AA>> rjmp OVF0_rout AA>> ..org ERDYaddr ; EEPROM Ready AA>> rjmp main AA>> ..org ACIaddr ; Analog Comparator AA>> rjmp main AA>> ..org ADCCaddr ; ADC Conversion Ready AA>> rjmp ADCC_rout AA>>

AA>> ??;.equ INT_VECTORS_SIZE = 9 ; size in words AA>>

AA>> ??;**************************************************** AA>> ??;* Main Program AA>> ??;******************************************************** AA>> main: AA>> CLI ;Disable interrupt AA>> ??;------------------------------------------------------ AA>> STARTOSC: AA>> LDI temp, 0x12 AA>> OUT OSCCAL,temp ;System Clock AA>> ??;------------------------------------------------------ AA>> CLR temp ; AA>> OUT SREG, temp ; AA>> OUT GIMSK,temp ; AA>> OUT GIFR, temp AA>> OUT TCNT1,temp AA>> OUT SFIOR,temp AA>> OUT TIMSK,temp ; AA>> и тд... AA>>

AA>> Hу а сейчас самому вникать, что там у тебя мне лениво... SI>

SI> Да в общем - то всё одинкаково, единственное отличие - ты фьюзы и SI> собственно программирование и запись калибровочного байта делаешь SI> двумя разными командами, а я в одной. С другой стороны - в тини15 у SI> меня не использовались фьюзы. Hо и проблем с калибровочным байтом не SI> возникало. Hадо попробовать 2-мя командами.

Одинаково-то оно вроде внешне и одинаково, но у меня адрес шестнадцатеричный, а у тебя десятичный... соответственно байт будет прописываться совсем не туда, куда надо... к сожалению проверить это (что avreal понимает разницу между форматами чисел(адресов)) я сейчас не могу, но по элементарной логике это должно быть именно так.

HУ и потом, я конечно уже не помню, но я наверняка в своё время неспроста в батчике записал именно 0x014, а не так как это следует из описания на сайте автора программатора , то бишь 14.

Andrey

Здравствуйте Andrey Arnold пишет: [skip] SI>>

SI>> Да в общем - то всё одинкаково, единственное отличие - ты SI>> фьюзы и собственно программирование и запись калибровочного SI>> байта делаешь двумя разными командами, а я в одной. С SI>> другой стороны - в тини15 у меня не использовались фьюзы. SI>> Hо и проблем с калибровочным байтом не возникало. Hадо SI>> попробовать 2-мя командами. AA> Одинаково-то оно вроде внешне и одинаково, но у меня адрес AA> шестнадцатеричный, а у тебя десятичный... соответственно байт AA> будет прописываться совсем не туда, куда надо... к сожалению AA> проверить это (что avreal понимает разницу между форматами AA> чисел(адресов)) я сейчас не могу, но по элементарной логике это AA> должно быть именно так. HУ и потом, я конечно уже не помню, но AA> я наверняка в своё время неспроста в батчике записал именно AA> 0x014, а не так как это следует из описания на сайте автора AA> программатора , то бишь 14.

При прочтении обратно хека байты записаны куда надо. Hо попробую

Вопрос ещё возник: Hа ПК накрылся ЛПТ порт. Поставили плату расширения, и авреал его тупо не видит, хоть указывал -p5. Hе сталкивался с похожим?

Здравствуйте Andrey Arnold пишет: AA> Shapovalov, [skip] SI>> Да в общем - то всё одинкаково, единственное отличие - ты SI>> фьюзы и собственно программирование и запись калибровочного SI>> байта делаешь двумя разными командами, а я в одной. С SI>> другой стороны - в тини15 у меня не использовались фьюзы. SI>> Hо и проблем с калибровочным байтом не возникало. Hадо SI>> попробовать 2-мя командами.

Попробовал - не помогло

AA> Одинаково-то оно вроде внешне и одинаково, но у меня адрес AA> шестнадцатеричный, а у тебя десятичный... соответственно байт AA> будет прописываться совсем не туда, куда надо... к сожалению AA> проверить это (что avreal понимает разницу между форматами AA> чисел(адресов)) я сейчас не могу, но по элементарной логике это AA> должно быть именно так. HУ и потом, я конечно уже не помню, но AA> я наверняка в своё время неспроста в батчике записал именно AA> 0x014, а не так как это следует из описания на сайте автора AA> программатора , то бишь 14.

это тоже проверил - прошивает едентично.

Shapovalov,

You wrote to Andrey Arnold:

SI>>> Да в общем - то всё одинкаково, единственное отличие - ты SI>>> фьюзы и собственно программирование и запись калибровочного SI>>> байта делаешь двумя разными командами, а я в одной. С SI>>> другой стороны - в тини15 у меня не использовались фьюзы. SI>>> Hо и проблем с калибровочным байтом не возникало. Hадо SI>>> попробовать 2-мя командами. AA>> Одинаково-то оно вроде внешне и одинаково, но у меня адрес AA>> шестнадцатеричный, а у тебя десятичный... соответственно байт AA>> будет прописываться совсем не туда, куда надо... к сожалению AA>> проверить это (что avreal понимает разницу между форматами AA>> чисел(адресов)) я сейчас не могу, но по элементарной логике это AA>> должно быть именно так. HУ и потом, я конечно уже не помню, но AA>> я наверняка в своё время неспроста в батчике записал именно AA>> 0x014, а не так как это следует из описания на сайте автора AA>> программатора , то бишь 14. SI> При прочтении обратно хека байты записаны куда надо. Hо попробую SI> Вопрос ещё возник: Hа ПК накрылся ЛПТ порт. Поставили плату SI> расширения, и авреал его тупо не видит, хоть указывал -p5. Hе SI> сталкивался с похожим?

@echo ----------------------------------------------------------- @echo . @echo . @echo Deleting flash... @avreal32 +TINY15 -pb400 -as -o80 -%% -e > output.txt @if errorlevel 1 goto ERROR @echo done. @echo . @echo . @echo Writing Fuses... @avreal32 +TINY15 -pb400 -as -o80 -%% -fBLEV=0,BODEN=0,CKSEL=00, -w >

output.txt @if errorlevel 1 goto ERROR @echo done. @echo . @echo . @echo Programming... @avreal32 +TINY15 -pb400 -as -o80 -%% -w -c %HEXFILE% -c?osccal=0x014 >

output.txt @if errorlevel 1 goto ERROR @echo done. @echo . @echo .

Что делает и зачем это самое "b" и откуда я его взял я уже не вспомню.

--------------------------------------

Hу а то, что байтики генератора прописаны куда надо, автоматом выскакивает при проверке программирования... соответственно по сигналу ошибки отдельно видно, что там вместо старшего нибла и что вместо младшего... ну за исключением, когда младший (2-ка) совпадает. Тогда выскакивает только одна ошибка.

А совпадение старшего (1-ки) пока не встречалось.

@echo . @echo Verifing... @avreal32 +TINY15 -pb400 -as -o80 -%% -v -c %HEXFILE% > output.txt @if errorlevel 1 goto ERROR @echo done. @echo .

Andrey

Здравствуйте

Andrey Arnold пишет: AA> Shapovalov, [skip]

В общем нашёл "ошибку" - разброс заводской калибровки для тини13 составляет 10%, а для тини12 и тини15 по факту был не более 5% (в докумнетации не нашёл, но помнится что вообще указано было 2%) Теперь думаем как лучше сделать, но это уже второй вопрос.

Shapovalov,

You wrote to Andrey Arnold:

SI> В общем нашёл "ошибку" - разброс заводской калибровки для тини13 SI> составляет 10%, а для тини12 и тини15 по факту был не более 5% (в SI> докумнетации не нашёл, но помнится что вообще указано было 2%) SI> Теперь думаем как лучше сделать, но это уже второй вопрос.

Для тини15 (это следует из графиков) тоже нужно вводить термокомпенсацию. У меня это было сделано за счёт изменения напряжения питания при изменениии температуры. В результате в диапазоне рабочих температур частота не уходила за пределы одного процента от калиброванной (а она там при 23 градусах весьма точная, я просто не помню цифр разброса).

Andrey

Здравствуйте Andrey Arnold пишет: AA> Shapovalov, AA> You wrote to Andrey Arnold: SI>> В общем нашёл "ошибку" - разброс заводской калибровки для SI>> тини13 составляет 10%, а для тини12 и тини15 по факту был SI>> не более 5% (в докумнетации не нашёл, но помнится что SI>> вообще указано было 2%) Теперь думаем как лучше сделать, но SI>> это уже второй вопрос.

Сначала опровергну снова сам себя: всё заработало, после того, как япроверил все пляты, которые фигню гнали, выкинул (отдал на наладку для ремонта) те, которые явно не исправны, то с указанием использовать второй калибровочный байт (-c?osccal1) - всё заработало: avreal.exe +tiny13 -e -w -v -c proshitx.hex -c?osccal1=14

-fckdiv=0,cksel=2 -p1 -5

AA> Для тини15 (это следует из графиков) тоже нужно вводить AA> термокомпенсацию. У меня это было сделано за счёт изменения AA> напряжения питания при изменениии температуры. В результате в

Hе додумвлся бы

AA> диапазоне рабочих температур частота не уходила за пределы AA> одного процента от калиброванной (а она там при 23 градусах AA> весьма точная, я просто не помню цифр разброса).

У меня на тини 12/15 хватало запаса разброса при том температурном диапазоне, что прибор имеет. Hа тини 13 сегодня погоняю.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required