Hallo,
bin gerade etwas ratlos warum das Timer 2 Register TCCR2A nicht richtig gesetzt wird und davon auch die serielle Ausgabe beeinträchtig ist.
Ich weise allen Timerregistern konkrete Werte zu. Ich verodere nichts. Sodass ich mir das vorherige notwendige Nullen sparen kann. Eigentlich! Setze ich TCCR2A nicht auf 0, dann stimmt die Frequenz nicht und die 2. serielle Ausgabe fehlt.
Alles hängt von Zeile 47 ab.
Kann das jemand nachvollziehen?
Sieht jemand irgendeinen Fehler den ich nicht sehe?
/*
Arduino Mega2560
Timer 2: CTC, Mode 2
Pinouts >>> http://www.pighixxx.net/pinoutspg/boards/
Uno >>> http://www.pighixxx.net/portfolio-items/uno/?portfolioID=314
Mega2560 >>> http://www.pighixxx.net/portfolio-items/mega/?portfolioID=314
*/
const byte pin_T2 = 10;
void setup(void) {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pin_T2, OUTPUT);
Serial.print("OCR2A"); Serial.print('\t'); formatiere_Byte (OCR2A);
Serial.print("OCR2B"); Serial.print('\t'); formatiere_Byte (OCR2B);
Serial.print("TCCR2A"); Serial.print('\t'); formatiere_Byte (TCCR2A);
Serial.print("TCCR2B"); Serial.print('\t'); formatiere_Byte (TCCR2B);
Serial.print("TIMSK2"); Serial.print('\t'); formatiere_Byte (TIMSK2);
Serial.flush();
set_Timer2();
Serial.println();
Serial.print("OCR2A"); Serial.print('\t'); formatiere_Byte (OCR2A);
Serial.print("OCR2B"); Serial.print('\t'); formatiere_Byte (OCR2B);
Serial.print("TCCR2A"); Serial.print('\t'); formatiere_Byte (TCCR2A);
Serial.print("TCCR2B"); Serial.print('\t'); formatiere_Byte (TCCR2B);
Serial.print("TIMSK2"); Serial.print('\t'); formatiere_Byte (TIMSK2);
}
void loop(void) {
}
// ****** Funktionen ******* //
void set_Timer2() // CTC, Mode 2
{
cli(); // Interrupts ausschalten
TCNT2 = 0; // Reset Register
//TCCR2A = 0; // Warum Nullen notwendig?
OCR2A = 249; // Compare
TIMSK2 = (1<<OCIE2A); // Compare Match A
TCCR2A = (1<<WGM21); // set Mode
TCCR2B = (1<<CS22); // Prescaler 64
sei(); // Interrupts einschalten
}
ISR(TIMER2_COMPA_vect) // Timer 2 Interrupt
{
static bool state = LOW;
state = !state;
digitalWrite(pin_T2, state);
}
void formatiere_Byte (unsigned int data)
{
Serial.print(F("data: "));
for (char i=7;i>=4;i--) {
Serial.print( (data >> i) & 0x01);
}
Serial.print("'");
for (char i=3;i>=0;i--) {
Serial.print( (data >> i) & 0x01);
}
Serial.println();
}