Forum: Mikrocontroller und Digitale Elektronik ATMega8 16 bit Timer


von Sebastian (Gast)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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?

von spess53 (Gast)


Lesenswert?

Hi

Masse von Controller und Servo verbunden?

MfG Spess

von Stefan E. (sternst)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

Sebastian schrieb:
> Der Code dazu hat das Datenrichtungsbit des Pins B1 (OCA1) immer auf 0
> gesetzt

Wie soll da drauf jemand kommen, wenn du hier nicht den richtigen code 
postest?

Hauptsache 'tut jetzt ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.