Modelbau Servo Code aus der Artikelsammlung

Gast #4982413
Hallo!

Kann mir bitte jamend mal den Code für die Ansteuerung eines Servos aus 
der Artikelsammlung erklären? Ich wollte jetzt auch mal den Timer im CTC 
Mode nutzen. Es wird noch immer nur die lange Pausenzeit (und zwar im 
Timer1_COMPA Interrupt)ins OCR1A geladen, aber wo wir die kurze Zeit für 
den Impuls an den Servo geladen? Was übersehe ich hier??

Viele Grüße Michael
1
#define F_CPU 1000000UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6

7
ISR( TIMER1_COMPA_vect )                // Interruptbehandlungsroutine
8
{
9
  OCR1A = 2500-OCR1A;      // Das Servosignal wird aus der Differenz von
10
                                        // Periodenlänge (2500*0,008ms=20ms) und letztem
11
                                        // Vergleichswert (OCR1A) gebildet 
12
}
13

14

15
int main (void)
16
{
17
  DDRB = 0b11111100;
18
  PORTB = (1<<PB1) | (1<<PB0);          // Pullup für PB0 und PB1
19

20
  TCCR1A = (1<<COM1A0);                 // Togglen bei Compare Match
21
  TCCR1B = (1<<WGM12) | (1<<CS11);      // CTC-Mode; Prescaler 8
22
  TIMSK  = (1<<OCIE1A);                 // Timer-Compare Interrupt an
23

24
  OCR1A = 2312;                         // Neutralposition ((2500-2312)*0.008ms=1,5ms)
25

26
  sei();                                // Interrupts global an
27

28
  while( 1 ) {
29

30
    if ( !(PINB & (1<<PINB0)) ) {       // Impuls-Zeit verlängern
31
      cli();
32
      OCR1A = OCR1A + 3;
33
      sei();
34
      _delay_ms(50);
35
    }
36

37
    if ( !(PINB & (1<<PINB1)) ) {       // Impuls-Zeit verkürzen
38
      cli();
39
      OCR1A = OCR1A - 3;
40
      sei();
41
      _delay_ms(50);
42
    }
43
  }
44

45
  return 0;
46
}
Gast
>Es wird noch immer nur die lange Pausenzeit...

Nö.

Am Anfang steht 2315 in OCR1A
Nach dem ersten Durchlauf steht 185 in OCR1A
OCR1A = 2500-2315
Nach dem zweiten Durchlauf steht wieder 2315 in OCR1A
OCR1A = 2500-185

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.