Wo hast Du denn den Code gefunden ??
Nu fällt´s mir schwer zu helfen, denn arduinoisch kann ich nicht. Und bei mir toggelts halt mit dem Code - simples C. Weils schnell gehen sollte mit Soft-Blinken auf PB5 (user definded LED); natürlich gehts auch mit Hardware-PWM auf PB1 (die ist auf meinem Clone-Testboard aber ohne LED.. ich versuche mit dem Nano und dem Timer1 einen Overflow interrupt nach ca. 32,768ms auszulösen.
Ich hab den Fehler selbst gefunden. Hier der korigierte Code:Code:.. void setup() { pinMode(timer1_led, OUTPUT); // ######### Timer 1 //Prescaler = 8 TCCR1B |= (0 << CS12) | (1 << CS11) | (0 << CS10); TCNT1 = 0; TIMSK1 |= (1 << TOIE1); sei(); } ..
..
Der "|" hat das Fehlverhalten verursacht. Was genau das bedeutet muss ich noch nachlesen. Aber nicht mehr heute!![]()
)
Code:// ============================================================================= = // == Timer Aufgabe: Soft-PWM ansteuern // Datenblatt Atmel-8271J-AVR- ATmega-Datasheet_11/2015 // - - - - - - - - - - - - - - - - void TC1TMR_init(void) // Init Timer/Counter 1 für 2 ms Servoperiode { // // - - - - - - - - - - - - - - - - // TCCR1B |= (0 << CS12) | (1 << CS11) | (0 << CS10); // Das ist Quatsch TCCR1B |= (1<<WGM12); // => CTC, TOP = OCR1A Doc Seite 133 TCCR1B |= (1<<CS11); // übliche Schreibweise für clk/8 => 2,000 MHz 134 //TCCR1B |= (1<<CS12); // Prescaler clk/256 => 136 // Wenn CS12 genommen wird, tickert der Interrupt mit 16MHz/256 => 62,5 kHz. // Dann kann mit // OCR1A = 1907; // => alle 32,774 ms 1 Interrupt gemessen werden // Bei dem von dir gewählten clk/8 bzw. 2 MHz müssen wir OCR1A höher ansetzen OCR1A = 61035; // => alle 32,768 ms 1 Interrupt gemessen werden // das ist schon etwas langsamer als Dein Wunsch // TCNT1 = 0; // Diese Festlegung versteh ich nicht ! ? ! ? TIMSK1 |= (1 << TOIE1); TIMSK1 |= (1<<OCIE1A); // Tmr/Cntr1 Oput CompA Mtch intrrpt enabled // - - - - - - - - - - - - - - - - } // ============================================================================= = // ============================================================================= = // === ISR für TIMER1_COMPA_vect ==================== = // Es wird NUR // - - - - - - - - - - - - - - - - ISR (TIMER1_COMPA_vect) // Servo[Svpt] wählen + dessen Rampe starten { // ToggleBit ( PORTB, PB5 ); // User defined LED // - - - - - - - - - - - - - - - - return; // // - - - - - - - - - - - - - - - } // Ende ISR (TIMER1_COMPA_vect) // ============================================================================= =







Zitieren

Lesezeichen