Hallo zusammen,
wieder habe ich ein Problem. Wo kommt der eine Takt her ?
Eins vorweg :
Theoretisch 4,8Mhz, praktisch ist der interne RC-Oszilator aber nur mit
3,2Mhz, bei meinem ATtiny13A, bei 5V und ca. 20°C unterwegs. Um dies
festzustellen, habe ich meinen üblichen Trick verwendet ( Endlosschleife
-> Pin toggeln und ausmessen )
Heißt: *Ein Takt sind ca. 312,500ns *
Bei dem LA-Ausschnitt ist zu sehen, dass die LED-Gelb ( PB2 ), 2,333µS
nach der steigenden Flanke von PB1 folgt.
Für mein daherhalten, erzeugt diese Codesequenz 4 oder 6 Takte, bis die
steigende Flanke von LED-Gelb kommt:
_main:
sbis PINB,1
rjmp _main
sbi LED_PORT,led.ge ;LED-Gelb einschalten ( TEST )################################################## #######################
6T wären 1,875µs. Bleiben also noch 458ns, was locker ein Takt ist.
Deshalb meine Frage : "Wo kommt der eine Takt her?"
;
.include "Header.inc" ;Label und Werte Zuweisungen
.include "Hardware.inc" ;Hardware Label Zuweisungen
;
;Programmstart nach RESET ( Interrupt Vektoren Tabelle )
;
.CSEG ;Was ab hier folgt kommt in den FLASH-Speicher
.ORG $0000 ;Programm beginnt an der FLASH-Adresse 0x0000..
rjmp _reset ;..mit der RESET-Vektortabelle
.include "IRQt13.inc" ;Restliche Interrupt Vektortabelle
.ORG INT_VECTORS_SIZE ;Programmadresse nach den ganzen IRQ-Vektoren
;
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIII
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIII
;I Erstinitialisierungen
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIII
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIII
;
_reset:
;
;Ports Erstkonfiguration
;
sbi DDRB,led.pla ;PORT-Bit als Ausgang f. PLA-LED
sbi DDRB,led.ora ;PORT-Bit als Ausgang f. SLEEP-LED
sbi DDRB,led.ge ;PORT-Bit als Ausgang f. TEST-LED
;
;Variablen initialisieren ( r0-r31 haben unbestimmten Inhalt )
;
;
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;H Hauptprogrammschleife
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;
;sbi PINB,led.pla ;Systemtakt -> Gemessene Frequenz..######################################## ##############################
;rjmp pc-1 ;..mal 8 nehmen ################################################## #######################
_test:
cbi PORTB,led.ora ;LED-Orange einschalten
sbi PORTB,led.ora ;LED Orange ausschalten
ldi xl,8
clr b
_main:
sbis PINB,1
rjmp _main
sbi LED_PORT,led.ge ;LED-Gelb einschalten ( TEST ) ################################################## #######################
cbi LED_PORT,led.ge ;LED-Gelb ausschalten ( TEST ) ################################################## ######################
_main_1:
sbic PINB,1
rjmp _main_1
sbi LED_PORT,led.pla ;LED-PLA einschalten ( TEST ) ################################################## #######################
cbi LED_PORT,led.pla ;LED-PLA ausschalten ( TEST ) ################################################## #######################
;
;Systemtakt ( 4,8MHz ) durch X teilen
;
in a,CLKPR ;Clock Prescaler Register laden..
sbr a,1<<CLKPCE ;..Sicherheitsprozedur..
cbr a,1<CLKPS3|1<<CLKPS2|1<<CLKPS1|1<<CLKPS0;..
out CLKPR,a ;..durchfuehren..
ldi a,$7F ;..CLKPCE loeschen..
and a,b
out CLKPR,a
inc b
cpse b,xl
rjmp _main
rjmp _test
; rjmp PC ;Endlosschleife
.EXIT ;Ende des Quelltextes
Bernd_Stein
Lesezeichen