Hi,
ich habe noch mal weiterversucht und ein Display angehängt was mir direkt den Wert von compare1a ausgibt.
Ich habe den Eingang mit einer sich alle 100ms verändernden Frequenz beaufschlagt, und konnte beobachten, dass sich der compare1a-Wert auch ganz brav alle 100ms mitverändert (variiert zwischen 10 und 45)
@ Stefan: ich habe meine 5 sekunden schätzung noch mal genau ermittelt, und folgendes ergebnis bekommen:
4 sekunden Frequenzausgabe, 18 sekunden low signal, 2,5 sekunden Frequenzausgabe, 20 sekunden hi signal, 40 sekunden Frequenzausgabe, 14 sekunden hi signal.... usw.
Es lässt sich also absolut keine regelmäßigkeit erkennen, sowohl die Unterbrechungsdauer scheint zufällig, als auch das Unterbrechungssignal (hi oder lo). (P.S.: Es liegt definitiv kein Wackelkontakt vor)
Watchdog ist nicht an. Overflow einer Variable sollte es auch nicht sein. Ob ich die Timer richtig eingestellt habe weiß ich nicht (siehe code). Globale Variablen in den Interrupts mit volatile deklarieren? Ich weiß leider nicht was das bedeutet...![]()
Code:$regfile = "m8def.dat" $crystal = 1000000 'Quarz: 1,000 MHz Intern '--------------------------------------------------------- Tccr1a = &B01000000 Tccr1b = &B00001100 Dim Pulsbreite As Long Dim Faktor As Word Dim ___lcdno As Bit Config Lcdpin = Pin , E = Portc.3 , E2 = Portd.7 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 Config Lcd = 20 * 4a , Chipset = Ks077 Config Lcdbus = 4 Config Pind.6 = Output 'RW=0 Portd.6 = 0 Config Pind.7 = Output Portd.7 = 1 'LCD Licht ein Initlcd Cursor Off Cls Config Pinc.0 = Input Config Pinb.1 = Output Config Pinb.0 = Input Portb.0 = 1 Enable Interrupts Do Pulsein Pulsbreite , Pinb , 0 , 0 Pulsbreite = Pulsbreite * 255 'Umrechnungsfaktor 2,55 Pulsbreite = Pulsbreite / 400 Pulsbreite = Pulsbreite * 512 Faktor = 490 Pulsbreite = Pulsbreite / Faktor If Pulsbreite = 0 Then Pulsbreite = 65535 End If Compare1a = Pulsbreite Waitms 100 Locate 1 , 3 lcd " " Locate 1 , 1 Lcd "c=" ; Compare1a Loop End







Zitieren

Lesezeichen