Hallo,
ich bin gerade dabei eine Stoppuhr mittels µC mit LCD zu realisieren.
Soweit keine Probleme nur sobald ich die Timerkonfiguration usw.
schreibe funktioniert das LCD nicht mehr. Hier die main Funkion. Wenn
ich alles von TCCR0 bis OCR0 ausklammere läuft das Display. Im Anhang
meine LCD Routinen. (Display an PORTA, ATmega16)
int main(void)
{
TCCR0|=(1<<WGM01)|(1<<CS01);
TIMSK|=(1<<OCIE0);
MCUCR|=(1<<ISC10)|(1<<ISC11)|(1<<ISC00)|(1<<ISC01);
GICR|=(1<<INT0)|(1<<INT1);
OCR0=125;
sei();
char buffer[20];
uint8_t i=0;
lcd_init();
lcd_set_position(1,0);
lcd_puts(" FF Ma.Schmolln");
while(1);
}
Sebastian Gerner schrieb: > TCCR0|=(1<<WGM01)|(1<<CS01); > TIMSK|=(1<<OCIE0); > MCUCR|=(1<<ISC10)|(1<<ISC11)|(1<<ISC00)|(1<<ISC01); > GICR|=(1<<INT0)|(1<<INT1); > OCR0=125; Kannst du jeweils kurz dazuschreiben, was die einzelnen Register bzw. Bits bedeuten, die du setzt?!
Hi
> TIMSK|=(1<<OCIE0);
Gibt es auch eine zugehörige Interruptroutine?
MfG spess
Kann ich ;)
int main(void)
{
TCCR0|=(1<<WGM01)|(1<<CS01); //CTC Mode; Prescaler 8
TIMSK|=(1<<OCIE0); // Compare Match Interrupt enable
MCUCR|=(1<<ISC10)|(1<<ISC11)|(1<<ISC00)|(1<<ISC01); //INT0 u. INT1
sensing auf steigende Flanke
GICR|=(1<<INT0)|(1<<INT1); enable INT0 und INT1
OCR0=125; Compare Match bei 125
sei();
char buffer[20];
uint8_t i=0;
lcd_init();
lcd_set_position(1,0);
lcd_puts(" FF Ma.Schmolln");
while(1);
}
>Ja die Routine gibt es: ISR(TIMER0_COMP_vect)
Und was steht da drin?
Gibt es auch eine für INT0 und INT1?
Meine nächste Frage wirst du sicher raten können;)
Gut dann gleich der Rest des Programmes (noch nicht fertig):
ISR(TIMER0_COMP_vect)
{
ms++;
if(ms==1000)
{
sek++;
ms=0;
}
}
ISR(INT0_vect)
{
ms=0;
sek=0;
TCNT0=0;
uhr_on=1;
}
ISR(INT1_vect)
{
uhr_on=0;
}
Sebastian Gerner schrieb: > ISR(INT1_vect) > { > uhr_on=0; > } Das wird Dir das Display vermutlich ausschalten....
Sebastian Gerner schrieb: > warum sollte das das LCD abschalten. Ich weiss ja nicht was uhr_on bewirken soll bzw. wo diese Variable verwendet wird. War nur eine Vermutung. Aus meiner Sicht ist der Code den Du gepostet hast nicht vollständig(?).
Wie oben erwähnt ist der Code noch nicht fertig Sebastian Gerner schrieb: > Gut dann gleich der Rest des Programmes (noch nicht fertig): uhr_on wenn uhr_on auf Null geht wird abgestoppt. Variablenname ist eventuell etwas unglücklich gewählt. Lg
Ich sehe in deinem Code kein Problem. Zwei Möglichkeiten weshalb das nicht funktioniert: Es wird nicht der richtige Interruptvektor angesprungen, falscher Controller eingestellt. Eine Interruptroutine fummelt an PORTA rum.
Habe jetz von PORTA auf PORTB gewechselt umd jetzt geht es.... Naja. Wird wohl ein interrupt am PORTA gefummelt haben.
>Wird wohl ein interrupt am PORTA gefummelt haben.
Nicht in deinem Code. Ist AVCC angeschlossen?
Sebastian Gerner schrieb: > Wird wohl ein interrupt am PORTA gefummelt haben. Und die Moral von der Geschichte: Wenn du schnell Hilfe möchtest, poste das gesamte Projekt und keine Schnipsel.
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.