Habe den Code nochmals angepasst - schon richtig das mit RETURN innerhalb der IF THEN ELSE Section ist unsauber (aber Bascom hats nicht angemeckert)
... habe alles nochmals überprüft und alle möglichen Fehlerquellen eliminiert. Die Signalquelle für das PWM-Signal (mein Servotester) wurde durch den richtigen Empfänger ersetzt ... habe es auch mit einem richtigen Servo gecheckt, ob er sich auch bewegt.
Habe sogar den ATTiny25 durch einen brandneuen Chip ersetzt. Es half Alles nix .. die LED's blinken jetzt mehr oder weniger unkoordiniert. (d.h. die ISR wird angesprungen) ... da das Programm auf dem MEGA8 läuft, vermute ich hier entweder Bascom als Fehlerquelle (vielleicht kommt BASCOmM mit dem Tiny15 nicht klar bzw. erzeugt keinen korrekten Code) oder das Signal am Fernsteuer-Empfänger ist nicht "sauber" oder sieht sogar komplett anders aus (habe leider keinen LA oder Oszi). Ich hoffe mein Tiny25 kommt morgen bei mir an ... dann sehe ich weiter
Code:
Code:' Auswertung eines PWM-Servosignals (ein Kanal) ' PWM-Signal H-Pegel zwischen ~1ms und 2.5ms ' INT bei wechselnder Flanke $regfile = "ATtiny15.DAT" ' MC-Definitionen laden $crystal = 1600000 ' Quarzfrequenz (interal Clock 1.6 Mhz) Config Portb.4 = Output ' Status-LED am Port B.4 (Pin2) grün Config Portb.3 = Output ' Status-LED am Port B.3 (Pin3) gelb Config Portb.2 = Input Config Timer0 = Timer , Prescale = 64 ' Config Timer0 auf 160 Mikrosekunden pro Takt, Enable Timer0 ' bei 1.6MHz: 1/(1.600.000/64) = ein TimerIncrement ' alle 40 Mikrosek ' zu erwartender Zählerbereich von ~25 bei 1ms PWM ' und ~63bei 2.5ms PWM Config Int0 = Change ' Konfiguration Int0 wechselnde Flanke Enable Interrupts ' Einschalten der Interrupts Enable Int0 ' Einschalten Von Interrupt Int0 On Int0 Servowert ' Definition Sprungmarke INT0 Portb.4 = 0 ' beide Ports aus (LED aus) Portb.3 = 0 Do ' Hauptschleife Loop End Servowert: ' Interrupt-Routine (INT0) If Portb.2 = 0 Then 'Timer-Auswertung nur nach HL-Flanke If Tcnt0 < 40 Then Portb.3 = 0 Portb.4 = 1 Else Portb.3 = 1 Portb.4 = 0 End If Else 'Ansonsten (nach LH-Flanke): Timer für nächste Runde auf 0 setzen Tcnt0 = 0 End If Return







Zitieren

Lesezeichen