Hallo,

zunächst mal recht vielen Dank für den Tipp mit dem LED-Toggle in der Timer-ISR.
Es stimmte ... der Timer-INT wird definitv bei einem PRESCALER-WERT von 1024 ca. alle 0,16s ausgelöst, was zu einem Blinken der LED von ~3Hz führt.

Ich habe noch eine Frage bzg. der Timer-Wertes - wo kann ich den Wert abgreifen (z.B. um ihn zu vergleichen) in TIMER0 oder in TCNT0 ? Kann es sein, dass die mathem. Operationen wie "<" oder ">" mit dem Tiny15 nicht verwendbar sind? Am Fernsteuer-Empfänger soll das PWM-Signal (ein max und ein min-Wert) detektiert werden. Das PWM-Signal hat einen H-Pegel, der zw. ~1ms und 2,5ms lang ist.
Die Idee ist, mit dem Signal einen INT0 (PortB.2) jeweils an der steigenden Flanke und bei der fallenden Flanke auszulösen (nochamls Danke für den Tipp bzgl: "CHANGE". Der TIMER0 soll bei der steigenden Flange bei Null gestartet werden und bei der fallenden Flanke auswertet werden. Bei einem Takt des TIMER0 von 1.6MHz ergeben sich bei einem PRESCALER-Wert von 64 entspr. TIMER-Werte von ~25 (bei 1ms) und 63 (bei 2.5ms)

Der Code sieht jetzt so aus ... funktioniert aber leider immer noch nicht ... hat noch jemand eine Idee ?

Vielen Dank,
Ulf


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
                                                               ' 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
                                                             '
Start Timer0                                                ' bei 1.6MHz: 1/(1.600.000/64) = ein TimerIncrement
                                                              ' alle 40 Mikrosek
                                                              ' zu erwartender Zählerbereich von ~25 bei 1ms PWM
                                                              ' und ~63 bei 2.5ms PWM

Config Int0 = Change                                        ' Konfiguration Int0 (PortB.2) wechselnde Flanke
                                                              ' Einschalten der Interrupts
Enable Int0                                                 ' Einschalten Von Interrupt Int0
On Int0 Servowert                                           ' Definition Sprungmarke INT0
Enable Interrupts

Portb.4 = 0                                                 ' beide Ports aus (LED aus)
Portb.3 = 0



Do                                                          ' Hauptschleife
Loop

End


Servowert:                                                  ' Interrupt-Routine (INT0)


If Portb.2 = 1 Then                                         ' steigende Flanke testen
 Tcnt0 = 0                                                  ' Timer zurücksetzen
 Start Timer0                                               ' Timer0 starten
 Return
End If


If Tcnt0 < 40 Then                                          ' Schwellwert des Zählers gemittelt zwischen
                                                          '    den maximalen Werten: 25 und 63
      Portb.3 = 1
      Return

End If

Portb.3 = 0

Return