oZe
12.08.2007, 01:38
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:
$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?
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:
$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?