ATMega8 16 bit Timer

Gast #3425719
Hallo zusammen,

ich bin relativ neu was mC anbelangt und komme gerade einfach nicht 
weiter.
Ich möchte einen Servo mit dem 16bit Timer des ATMega8 steuern. Die 
Datenleitung des Servos (Modelcraft RS-2) hängt am OC1A Pin des 
Microcontrollers. Hier ist mein Code zur Initialisierung des Timers:
1
void init_timer(void)
2
{
3
  DDRB |= (1<<PB1);                //  Set OCRA1 to output
4
  
5

6

7
  ICR1 = 2499;          //  der Endwert (TOP) 
8
                  
9

10
  OCR1A = 110;           
11
              
12
  TCCR1A = (1<<COM1A1) | (1<<WGM11);              //  Modus 14: Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
13
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS11);   // Prescaler auf 8
14
}

Man sollte den Servo jeweils mit den Befehlen
1
OCRA1 = 110;
 bzw.
1
OCRA1 = 210;
maximal in beide Richtungen auslenken können. Beim Einschalten jedoch 
zuckt er nur kurz.
Ach ja: Mein mC läuft mit 1MHz.
Was mache ich falsch?

VG
Sebastian
Gast #3425732
Sebastian schrieb:
> mC

Deine <AltGr>-Taste klemmt ;-)

> Ach ja: Mein mC läuft mit 1MHz.
Wenn du eine LED mit delay(500) togglst, blinkt die dann ein mal pro 
Sekunde?
Ist deine Versorgungsspannung kräftig genug oder bricht die zusammen, 
wenn der Motor drehen soll?
#3425809
Und immer wieder gerne übersehen:
1
The ICR1 Register can only be written when using a Waveform Generation mode that utilizes
2
the ICR1 Register for defining the counter’s TOP value. In these cases the Waveform Generation
3
mode (WGM13:0) bits must be set before the TOP value can be written to the ICR1
4
Register.
Gast #3426392
Hallo,

danke für die schnellen Antworten!

@Wolfgang:
Ja, LED mit delay togglen funktioniert. Als Spannungsquelle hab ich ein 
5V Handynetzteil mit 700mA. Ich weis, das ist ein bisschen wenig, aber 
der Servo sollte sich doch im Unbelasteten Fall trotzdem drehen oder?

@spess53:
Ja, Masse von µC und Servo sind verbunden.

@Stefan Ernst:
Okay, vielen Dank, ich tausch mal die Codezeilen aus.

MfG
Sebastian
Gast #3427020
Habe das Problem nach einigem Rumprobieren nun gelöst:

Ich habe zu Debugzwecken eine LED blinken, lassen. Der Code dazu hat das 
Datenrichtungsbit des Pins B1 (OCA1) immer auf 0 gesetzt, was dazu 
geführt hat dass sich nichts mehr bewegt.

Trotzdem vielen Dank für die schnelle Hilfe!

MfG
Sebastian

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.