Timer Stop/Pause und wieder starten

OP #2747515
Hallo, ich bin neu hier.   ich habe Probleme mit Timer, vielleicht 
könnte mir helfen. ich mache jetzt mit Atmega238 einen Schrittzähler. 
das programm funktioniert und möchte ich zusatzfunktionen zufügen, und 
zwar über HTerm.exe  wenn ich "S" eingebe, wird es anhalten/pause, "G" 
wieder starten  "R"  Reset.

ich habe so gemacht.
// Stop
void stop(void)
{

 TCCR1B=0;

}


//Go
void go(void)
{


init_Timer1();
start_Timer1();
init_ADC();
start_ADC();

}

// initialize timer1  **
void init_Timer1(void)
{

TCNT1 = 0;
        TCCR1A &= ~((1<< WGM11) | (1<< WGM10));
  TCCR1B &= ~((1 << WGM13 )|(1<< WGM12) | (1 << CS12) );
}

// start timer1 **
void start_Timer1(void)
{
TCCR1B |= ((1<<CS11)| (1<<CS10));
TIMSK1 |= (1 << TOIE1);
}

void init_ADC(void)
{

ADCSRA |= ((1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0));      //Prescaler at 128 so 
we have an 125Khz clock source
  ADMUX |= (1<<REFS0);
  ADMUX &= ~(1<<REFS1);                        //Avcc(+5v) as voltage 
reference
  ADCSRB &= ~((1<<ADTS2)|(1<<ADTS1)|(1<<ADTS0)|(1<<ADIE));    //ADC in 
free-running mode
  ADCSRA |= (1<<ADATE);                        //Signal source, in this 
case is the free-running
  ADCSRA |= (1<<ADEN);//Power up the ADC
}

// start ADC
void start_ADC(void)
{

ADCSRA |= (1<<ADSC);                        //Start converting

}


Stop funktioniert, aber wieder starten und reset funktionieren nicht.
Gast
Du solltest dir grundlegendes Wissen zu Timern aneignen. Lies im 
Datenblatt nach, welche Bedeutung die Register haben. Mach dir den 
Unterschied zwischen |= und &= ~ klar. Das gepostete Stückchen Code ist 
ziemlich kacke.
Andy C. schrieb:
> TCCR1A &= ~((1<< WGM11) | (1<< WGM10));
>   TCCR1B &= ~((1 << WGM13 )|(1<< WGM12) | (1 << CS12) );
Die Register sind nach Reset ohnehin 0. Das kannst du dir sparen.
Mit "Init" hat sowas nichts zu tun.

Jetzt guckst du dir im Datenblatt die Beschreibung für TCCR1B an.
Und zwar die Tabelle für die CS-Bits. Wenn die alle auf 0 stehen, steht 
der Timer. Um ihn dann wieder zu starten, setzt du einfach die 
entsprechenden CS-Bits. VORHER setzt du TCNT1 auf 0, um einen 
definierten Startpunkt zu erhalten.

mfg.

Antwort schreiben

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