Hallöchen Bei meinem ersten AVR-Projekt großteils in Assembler bin ich mir noch zu unsicher ob ich alles richtig mache. Daher wäre es toll wenn sich jemand finden konnte der mal ein Auge auf den Code werfen könnte. Ich verwendet Timer 1 in dreifacher Weise. 1. Als Zeitmessung 2. Als Zeitüberlaufüberwachung 3. Als Zeitverzögerung Zum Start der Zeitmessung starte in den Timer und setze die OCR1A-Register auf den Zählerwert der maximalen Zeit ( Zeilen 1 - 6 ) Wird die Zeit überschritten ( der Zäherstand von Timer1 erreicht den Wert von OCR1A so wird der Interrupt aufgrufen - die Zeitüberlaufüberwachung wir behandelt) Erfolgt keine Zeitüberschreitung bis der Programmablauf die Zeile 111 erreicht, so wird der Zählerwert ausgelesen ( Zeitmessung ) , der Timer gestoppt, der Zählerwert ins OCR1A-register gschrieben, der Timer auf Null gesetzt und wieder gestartet. Wenn nun der Zählerstand von Timer1 den Wert von OCR1A erreicht so wird wieder der Interrupt aufgerufen und darin die gewünschte Aktion ausgeführt ( Zeitverzögerung ) Das ganz funktioniert soweit ganz gut. Bin aber nicht sicher ob ich alles ganz richtig programmiert habe. Wäre daher toll wenn sich jemand finden würde, der den Code kontrollieren könnte. VIELEN DANK. ============================================================== 1 Tccr1a = &H00 2 Tccr1b = &H0E ' Takt extern 3 Tccr1c = &H00 4 5 Ocr1ah = &HF0 6 Ocr1al = &H00 7 ldi r24,0 8 Out Tcnt1h , R24 ' Zähler rücksetzen 9 Out Tcnt1l , R24 10 On Oc1a Oc1a_int Nosave 11 Enable Interrupts 12 Enable Oc1a ~~~~ ~~~~ restlicher Code ~~~~ ~~~~ 111 in R19ctradc1l,TCNT1L 112 in R20ctradc1h,TCNT1H 113 ldi r24,&H08 114 sts TCCR1B,r24 ' Timer 1 stoppen 115 sts OCR1AH, R20ctradc1h ' Zählergrenzwert auf Triggerverzögerung setzen 116 sts OCR1AL, R19ctradc1l 117 ldi r24,0 118 Out Tcnt1h , R24 ' Zähler rücksetzen 119 Out Tcnt1l , R24 120 ldi r24,&H0E 121 sts TCCR1B,r24 ' Timer 1 starten =================================================================== mfg Manfred Schön
Hallöchen Wollt es nur wieder nach vorne bringen - sonst liest es ja keiner mehr ;-) hmg Mandi
Hallöchen In dem Forum ist soviel los. Hat keiner erbarmen mit mir ? hmg Mandi
Wenn es "ganz gut" funktioniert, warum suchst Du dann krampfhaft nach Fehlern? Abgesehen davon: Was soll das in den ersten Zeilen sein? Etwa BASCOM?
Hallöchen Da BASCOM leider den ATMEGA88 nicht richtig unterstützt musste ich einiges in Inline-Assembler machen. Auch wenn was funktionert kann man es besser machen und noch was lernen. Hab' erst heute wo gelesen: Erfahrung ist nichts wenn man es 30 Jahre lang falsch gemacht hat !! hmg Mandi
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.