Hallo!
Also nachdem ich mir überlegt habe das es Schwachsinn ist eine Frequenz erst über nen D/A Wandler zu wandeln und anschließend mit dem ADC vom Mikrocontroller zu wandeln und weiter zu verarbeiten (is ja dumm weil ich dann ja "umsonst" umwandel) habe ich mir folgendes Programm überlegt um eine Rechteckfrequenz zu messen:
Code:$regfile = "2313def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 8000000 $baud = 9600 Config Portb.0 = Output 'definiert Portb.0 als output Config Pind.5 = Input 'Ein Pin (PD5) wird als Eingang definiert Portd.5 = 1 'Interner Pullup Widerstand ein Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 Enable Timer1 'schalte den Timer1 ein On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 Enable Interrupts Timer1 = 34285 'Timer1 soll schon von 34285 wegzählen Dim Signale As Integer Signale = 0 Do If Pind.5 = 0 Then Incr Signale Else 'nichts tun da wir keinen Eingangsimpuls haben End If Loop End Isr_von_timer1: 'ISR von Timer1 'Timer1 soll wieder von 34285 wegzählen If Signale > 3 Then Portb.0 = 1 Else Portb.0 = 0 End If Wait 1 Signale = 0 Timer1 = 34285 Return
Ich lege also an PD5 eine rechteckfrequenz an die den Eingang nach Masse zieht. Sobald der Eingang nach Masse gezogen wird wird die Variable "Signale" incrementiert. Der Timer ist so konfiguriert, dass jede Sekunde überprüft wird wieviele Eingangsimpulse in der Sekunde angekommen sind. Momentan überprüfe ich dann ob es mehr als 3 sind. Falls ja wird PB0 auf high gesetzt woran ich eine LED klemmen habe.
Zum testen habe ich einen Taster nach masse gelegt von PD5. Über diesen erzeuge ich also zum testen meine Rechteckfrequenz. Wenn ich jetzt schneller als 3 mal pro sekunde drücke sollte eigentlich die LED angehen. Leider ist die LED schon an sobald ich die Stromversorgung vom MC anmache....
Hab ich einen Denkfehler in meinem Programm?







Zitieren

Lesezeichen