Hallo,
ich will ein existierendes Programm vom mega328p auf den mega1284p
konvertieren.
Auf dem mega32 lief alles problemlos.
Ich bin beide Datenblätter durch und dachte ich habe alle Bits und
Register angepasst.
Aber sobald ich
ausführe wird sofort der BADISR_vect statt dem TIMER2_COMPA_vect
getriggert.
Den Timer Initialisiere ich wie folgt:
1 | #define REALTIME_TC0 10UL /* time in ms */
|
2 | #define PRESCALE_TC0 1024UL /* seems to be a good value for 8 and 16 MHz, change CS22-CS20 too */
|
3 | #define OVERFLOW_TC0 ((uint8_t)((REALTIME_TC0 * (F_CPU/PRESCALE_TC0)) / (1000UL)))
|
4 |
|
5 | TCCR2A = (_BV(WGM21)|_BVC(WGM20)|_BVC(COM2A1)|_BVC(COM2A0)|_BVC(COM2B1)|_BVC(COM2B0));
|
6 | TCCR2B = (_BVC(FOC2A)|_BVC(FOC2B)|_BVC(WGM22)|_BV(CS22)|_BV(CS21)|_BV(CS20));
|
7 | OCR2A = OVERFLOW_TC0;
|
8 | TIMSK2 |= _BV(OCIE2A);
|
Der atmega läuft mit einem externen Quarz mit 16MHz, die Fuses sind mit
avrdude wie folgt gesetzt: -U hfuse:w:0xd3:m -U efuse:w:0xff:m
Der Timer soll im CTC Modus laufen, mit einem Vorteiler von 1024 laufen.
Er dient als grobe Zeitbasis von 10ms.
Ach ja das "BVC" löscht einfach das Bit, das "BV" setzt das
entsprechende Bit. Das "BVC" nutze ich, damit ich kein Bit vergesse zu
Initialisieren.
Vielleicht kann mir einer mal die Tomaten von den Augen nehmen.
Danke
Juergen