Forum: Mikrocontroller und Digitale Elektronik Timer1 im CTC und LCD Probleme


von Verzweifelter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

derzeit arbeite ich an einem für mich größerem Projekt.
Das Ganze wird eine Gewächshaussteuerung mit einem Atmega8 als 
Steuereinheit.

Kurz das drum herrum:
 - IC2 : Mit LM75 & SHT21 & PCF8574 als Portexpander
 - ADW : LED für Beleuchtungsmessung ein Bodenfeuchtesensor und
         ein über ein R2R Wiederstand gespeister Drehschalter für die
         Displaysteuerung

Desweiteren 3 Taster zur Steuerung der Betriebsparameter. Ein 2 Zeiliges 
LCD Display gibt die Parameter über die Sensoren aus.

Soweit funktioniert auch alles.
Über dein Timer0 steuere ich ein Switch, welcher nach und nach die 
Sensoren ausließt. Erreicht meine Zählvariable in Timer0 einen 
bestimmten Wert wird das LCD aktuallisiert.
Im EEPROM des MCs stehen Grenzwerte die mit den Messungen verglichen 
werden. Wird z.B die maximale Lüftfeuchte überschritten soll ein Servo 
ein Fenster öffnen.

Und nun zu meinem Problem. Ich hatte geplant den Servo über den Timer1 
anzusteuern, doch sobalt das Timerinterrupt aktiv ist. Funktioniert das 
LCD nicht mehr.

Zu Debug zwecken habe ich dann überall im Code marker eingefühgt und 
dabei festgestellt. das lediglich in meiner Initialisierungsfunktion das 
Display noch angesteuert wird. Interessanter Weise wird das Display 
scheibar ständig resetet und mein in der Init stehender "TEST" immer 
wieder neu angezeigt.
Es sieht so aus als wenn sobalt TIMSK  |= (1<<OCIE1A);  gesetzt ist der 
Atmega stänig resetet.

bekomm ich Servo und LCD irgendwie unter einen Hut?

Code hängt im Anhang.
Ich hoffe ihr könnt mir weiterhelfen.
und reißt mich nicht außeinander ich lerne immer noch:)

Lg Verzweifelter

von holger (Gast)


Lesenswert?

>  TIMSK  |= (1<<OCIE1A);        //Timer-Compare Inerrupt an

Das hier ist der Overflow Interrupt und nicht Compare
ISR (TIMER1_OVF_vect)

von H.Joachim S. (crazyhorse)


Lesenswert?

/* Interrupt für Timer1 - Steuert die Servoposition */
ISR (TIMER1_OVF_vect)
{
  //OCR1A = SERVO_PULS-OCR1A;
  OCR1A = 10000;

}

Du hast eine ISR für OV, willst aber eigentlich eine für OCR1A, oder?

von Verzweifelter (Gast)


Lesenswert?

Jab oh man, manchmal sieht man den Wald vor lauter Bäumen nicht mehr:)
vielen Dank für die schnelle Antwort.
jetzt funktioniert es.

Und euch einen schönen abend noch:D

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.