So - nachdem ich das Brett vor meinem Kopf demontiert habe, klappt auch die Flankenauswertung.
Jetzt muss ich noch die Zeitmessung machen, aber das sollte das kleinere problem sein.
Danke euch für die Hilfe... Ich komme bestimmt nochmal darauf zurück wenn es an das Feintuning gehrt...
Code:
'Emon.bas
'Energiemonitor für Strom, Gas und Wasser
'Sensor für Strom: 2 CNY70 am AD-Wandler
'Sensor für Gas und Wasser Kontakte an Portpins
'v0.1 16.01.2010 - Test der Analogen Eingänge, Debug über RS232
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
'LCD Display konfigurieren
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Config Lcdbus = 4
'Timer 1 konfigurieren
'Wert für Timervorgabe
'Timer läuft bei 34286 alle 1 sek über
Const Timervorgabe = 34286
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Isr_von_timer1
Enable Interrupts
'Timer1 Startwert
Timer1 = 34286
'AD-Wandler konfigurieren
Config Adc = Single , Prescaler = Auto
Start Adc
'Variablen deklarieren
Dim W1 As Word , W2 As Word , Diff As Word , Mark As Bit , Count As Word , Count2 As Word , Schwelle As Word
Dim Flanke As Bit , Flanke_old As Bit
Dim Sekunden As Word , Sekunden_alt As Word , Sekunden_delta As Word
'Schwellwert zur Erkennung der Markierung
'Bei Silber ist die Differenz 0...8
'Bei Rot (Markierung) ist die Differenz < 15
Schwelle = 15
'Init für Flankenerkennung und Zeitmessung
Flanke_old = 0
Sekunden_alt = 0
'Hauptschleife
Do
'ADC-Messwerte holen
W1 = Getadc(0)
W2 = Getadc(1)
'Differenzwert bilden
Diff = W2 - W1
'Durchlauf der roten Markierung erkennen
If Diff > Schwelle Then
Mark = 1
Elseif Diff < Schwelle Then
Mark = 0
End If
'Flankenauswertung
Flanke = Mark
If Flanke <> Flanke_old Then
Flanke_old = Flanke
If Flanke = 1 Then
Incr Count2
'Messung der Umdrehungszeit
Sekunden = Count - Sekunden_alt
Sekunden_alt = Count
End If
End If
'DEBUG-Ausgabe über RS232
Print ";Kanal1:" ; W1 ; ";Kanal2:" ; W2 ; ";Differenz:" ; Diff ; ";Flanke:" ; Count2 ; ; ";Count" ; Count ; ";Time:" ; Sekunden
'DEBUG-Ausgabe über LCD
Cls
Locate 1 , 1
Lcd "Diff.:" ; Diff
Locate 2 , 1
Lcd "Count.:" ; Count2
Locate 2 , 12
Lcd "s" ; Sekunden
Waitms 250
Loop
End
Isr_von_timer1: 'ISR von Timer1
Timer1 = 34286 'Timer1 soll wieder von 34285 wegzählen
Incr Count
Return
Lesezeichen