Hallo alle zusammen!!!
Da ich bisher nur einen ATmega16 hatte, jetzt aber einen ATTiny26 habe,
möchte ich mein Programm von dem ATmega16 auf den ATTiny26 portieren.
Das einzige Problem dabei ist der Timer. Im Atmega16 habe ich den
16-Bit Timer mit dem ClearTimerOnCompareMatch (CTC) Modus verwendet. Da
der Tiny26 jedoch keinen 16 Bit Timer hat, muss ich wohl oder übel den 8
Bit Timer nehmen.
Soweit zur Vorgeschichte..... Nun zum Problem.
Kurz gesagt: Ich bring den 8 Bit Timer nicht zum Laufen.
Ich sitze seit heute morgen um 8 Uhr vor dem Tiny26 Datenblatt und
werde einfach nicht schlau daraus. Es funktioniert einfach nicht.
Hier mal mein bisheriger Assemblercode:
1 | .include "tn26def.inc"
|
2 | .org 0x00 ;InterruptVektorTable
|
3 | rjmp reset ;Reset
|
4 | .org 0x03
|
5 | rjmp timer_int ;Timer1 CompareMatch 1A Interrupt
|
6 |
|
7 | reset:
|
8 | ldi r16,RAMEND ;Stackpointer initialisieren
|
9 | out SP,r16 ;"""""""""""""""""""""""""""
|
10 |
|
11 | ldi r16, 0b00000000 ;0x00 in r16
|
12 | out TCCR1A, r16 ;TCCR1A mit 0x00 initialisieren
|
13 | ldi r16, 0b10000111 ;Bit7 für CTC Mode,Bits 0-3 fürCLK/64
|
14 | out TCCR1B, r16 ;TCCR1B initialisieren
|
15 | ldi r16,0x03 ;0x03 in r16, ...für den Debugger
|
16 | out OCR1A,r16 ;Wert in das Timerregister schreiben
|
17 | sei ;Interrupts zulassen
|
18 | main:
|
19 | rjmp main
|
20 |
|
21 |
|
22 | timer_int: ;Timer Interrupt
|
23 |
|
24 | ser r16 ;SetAllBits in r16
|
25 | out DDRB,r16 ;DDRB als Ausgang...fürs Debuggen
|
26 | ldi r16,0x03 ;Timer reloaden
|
27 | out OCR1A,r16 ;""""""""""""""
|
28 | reti ;zurück zu main
|
Warum geht das so nicht? Ich komme einfach nicht darauf. Weiß jemand
von euch wie man den Timer für den CTC Modus initialisiert? Hat
vielleicht gerade jemand den Code zur Initialisierung zur Hand und kann
ihn posten? Bitte helft mir! Ich wäre über einen funktionierenden
Beispielcode wirklich dankbar!!!
Mit freundlichen Grüßen
Daniel!