Hallo,
ich habe gerade ein kleines Programm geschrieben, um den CTC-Modus für einen Schrittmotor zu nutzen. Leider verändert sich die Frequenz bei Verschiedenen werten von OCR0A nicht. Kann mir jemand weiter helfen?
Das Board ist ein Arduino Mega
Code:#include <avr/io.h> #include <avr/interrupt.h> int step = 13; void setup() { pinMode(step, OUTPUT); // Timer 0 konfigurieren TCCR0A = 0b01000000; // CTC Modus, OC0 wird getoggelt TCCR0B = 0b00000011; // Prescaler 64 OCR0A = 24; //Obergrenze auf 24 festgelegt } void loop() { }
Habe das erstmal binär gemacht weil ich da am schnellsten erkenne, wie ich die register konfiguriere. Wo ist denn jetzt der Fehler?
Schau' Dir TCCR0A nochmal genau an.
ich hatte es so verstanden, dass ich bei den ersten 2 stellen (01) angebe, dass OC0 getoggelt wird und mit den letzten beiden (00) die pwm-betriebsart deaktiviere
- - - Aktualisiert - - -
ahh manchmal ist es hilfreicher, sich die mühe zu machen, statt bei mikrocontroller.net ins datenblatt zu schauen.
funktioniert soweit ich weisCode:TCCR0A = 0b01000010; // CTC Modus, OC0 wird getoggelt TCCR0B = 0b00001101; // Prescaler 1024
Er hat ja nicht von Fehler sondern von Zumutung geschrieben. Wenn Du es im Binärcode so schnell erkennst, dann ist das schon ne Sache - ich bin langsam, ich brauche da hilfen . . . und initialisiere meine CTC z.B. so (mega164-1284, 20MHz):... binär gemacht weil ich da am schnellsten erkenne, wie ich die register konfiguriere. Wo ist denn jetzt der Fehler?
Code:// ============================================================================== = // == Timer Aufgabe: Servo mit Soft-PWM ansteuern auf wählbarem Port // - - - - - - - - - - - - - - - - void TC1TMR_init(void) // Init Timer/Counter 1 für 2 ms Servoperiode { // TCCR1B |= (1<<WGM12); // WGM12 => CTC, TOP = OCR1A S135 TCCR1B |= (1<<CS11); // CS11+10 <=> clk/8 => 2,500 MHz S136 OCR1A = OCR1AV; // 10x OCR1AV = 63990=> alle 25,60 ms ein Interrupt // Interrupt zählt bis 6400 ! OCR1B = OCR1BV; // OCR1B = {???} => 1-2 ms Rampe // - - - - - - - - - - - - - - - - } // ============================================================================== =
Geändert von oberallgeier (23.06.2013 um 20:08 Uhr) Grund: Nachtrag: Controllertyp
Ciao sagt der JoeamBerg
Ja, DB ist recht hilfreich Einerseits musst Du dem OCn Pin erklären, wie er sich verhalten soll, andererseits muss der Mode eingestellt werden, was Du nicht gemacht hast. Deshalb taugt auch die Bit-Konfiguration nichts, denn bei Angabe der Bits in Klarnamen fällt ein Fehler leichter auf.
das ist sicherlich eine elegantere lösung, die notation beherrsche ich noch nicht
Werde die mir aber auf jeden Fall noch anschauen, das scheint ja deutlich einfacher zu sein. Im endeffekt lag der Fehler jetzt nur noch im WGM02-Bit
Danke für die Antworten!
Lesezeichen