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