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.
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.
Transistorrrr schrieb: > Du solltest dir grundliegendes 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.