Hi! Also waitms im interrupt halte ich für sehr sehr "unkonventionell".... Mach das doch lieber so:
Code:'hauptprogramm do lcd wert waitms 100 loop end Sprung: Wert=Timer1 Timer1=0 return
Hallo geschätzte fachleute,
Ich bin gerade mal wieder am verzweifeln. Ich wollte eine kleine Schaltung aufbauen, womit ich das PWm signal eines Modellbauempfängers auswerte.
Nun habe ich ein Problem. ER zeigt mir immer den gleichen wert von 43570 an. Wiso? Ich habs am Oszi überprüft, das signal verändert sich, aber nich der Timer Wert.
Ich hatte es auch schon einmal versucht, dies über den AD Wandler zu machen, nur leider is der zu ungenau und gibt mir nur den Wert von 38 und 39 aus.Code:$regfile "m8def.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0 Config Lcd = 16 * 2 Config Lcdbus = 4 Config Timer1 = Timer , Prescale = 1 Config Int0 = Low Level Enable Interrupts Enable Int0 On Int0 Sprung: Config Portd.1 = Output Config Portd.7 = Output Config Portd.6 = Output Config Portd.5 = Output Config Portd.4 = Output Config Portd.2 = Input Start Timer1 Cls Do Loop Sprung: Cls Lcd Timer1 Waitms 100 Timer1 = 0 Return
Könntet ihr mir vielleicht helfen.
mhunni
Hi! Also waitms im interrupt halte ich für sehr sehr "unkonventionell".... Mach das doch lieber so:
Code:'hauptprogramm do lcd wert waitms 100 loop end Sprung: Wert=Timer1 Timer1=0 return
Viele Grüße, William
-> http://william.thielicke.org/
ähhm, dann zeigt jetzt aber immer nur 0 an? oda?
Code:$regfile "m8def.dat" $crystal = 8000000 $sim Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0 Config Lcd = 16 * 2 Config Lcdbus = 4 Config Timer1 = Timer , Prescale = 1 Config Int0 = low level Enable Interrupts Enable Int0 On Int0 Sprung: Config Portd.1 = Output Config Portd.7 = Output Config Portd.6 = Output Config Portd.5 = Output Config Portd.4 = Output Config Portd.2 = Input Dim Wert As Word Start Timer1 Do lcd wert waitms 100 loop end Sprung: Wert=Timer1 Timer1=0 return
das waitms hab ich gemacht, damit mein LCD display nich verrückt spielt und ich die Zahl auch ablesen kann. Ansonsten löscht er das gleich sofort und es steht nichts da
Ich glaube, Dein Pproblem liegt in der Konfiguration des Interrupts. Mit Config INT0 = Low Level zwingst Du en Controller so lange in die ISR, wie der Impuls low ist. Mach´s doch mal so:
Code:Config INT0 = change 'ISR bei jedem Flankenwechsel On INT0 Sprung Enable INT0 Enable Interrupts Dim Flag as Bit ' "Habe-fertig"-Flag Config Timer1=Timer, Prescale = 1 Do If Flag = 1 then Flag = 0 CLS LCD Timer1 Timer1=0 Waitms 100 End if ... ... Loop Sprung: If PIND.2=0 then 'Fallende Flanke: Impulsbeginn Start timer1 Else 'Steigende Flanke: Impulsende Stop Timer1 Flag = 1 Return
ja mhh, ich hab das auc schon mit falling und rising probiert, aber change kannte ich noch nich, wert ich gleich mal ausprobieren
Hi hunni!
Folgender Code funktioniert (solltest du aber auf z.B. deinen Quarz umbasteln):
Code:$baud = 9600 $crystal = 16000000 $regfile "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 64 Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling , Noise Cancel = 1 Enable Timer1 On Timer1 Pausenerkennung Config Int1 = Falling Enable Interrupts Enable Int1 On Int1 Summensignalmessung Dim Empf(6) As Word Dim Channel As Byte Sound Portd.7 , 200 , 300 Do Print empf(1) Print empf(2) Print empf(3) Print empf(4) Print empf(5) Print empf(6) Waitms 500 Loop Summensignalmessung: Select Case Channel Case 1 : Empf(1) = Timer1 Case 2 : Empf(2) = Timer1 Case 3 : Empf(3) = Timer1 Case 4: Empf(4) = Timer1 Case 5: Empf(5) = Timer1 Case 6: Empf(6) = Timer1 End Select Timer1 = 57536 'preload for 4ms Incr Channel Return Pausenerkennung: Channel = 0 Return End
Viele Grüße, William
-> http://william.thielicke.org/
ich glaub ihr versteht noch nich so ganz was ich machen möchte. Ich möchte einfach, dass ich weiss, welche Frequenz das Signal vom Empfänger (PWM oda Rechteck, kann ich nich genau sagen) hat.
Dazu brauche ich einfach nur den Timer wert. Der ist aber immer gleich, aus welchen gründen auch immer.
Hallo hunni,
wie hätte das denn jemand aus Deinem ersten Posting entnehmen sollen?Zitat von hunni
Ganz einfach, etwa 50Hz pro Kanal.Ich möchte einfach, dass ich weiss, welche Frequenz das Signal vom Empfänger (PWM oda Rechteck, kann ich nich genau sagen) hat.
Es wird ein PWM-Rechtecksignal sein; Deine Formulierung "PWM oder Rechteck" ist unverständlich.
Du solltest Deine Fragen schon so formulieren, dass man Dir helfen kann.
Ich kann nicht helfen, da ich keine Anhnung von Bascom habe.
Welche Information möchtest Du denn nun wirklich aus dem Signal extrahieren? Ist das Signal geeignet, direkt mit einem Eingangspin eines Controllers verbunden zu werden?
MfG
Fred aus dem Assembler- und C-Land
Only entropy comes easy. - Anton Checkhov
Die Frequenz vom Empfänger ist immer gleich. Also was willst du damit anfangen..? Das einzige was sich ändert ist das Verhältnis high/ low. Dieses Verhältnis ist interessant und das wird von meinem Code "gemessen".ich glaub ihr versteht noch nich so ganz was ich machen möchte. Ich möchte einfach, dass ich weiss, welche Frequenz das Signal vom Empfänger (PWM oda Rechteck, kann ich nich genau sagen) hat.
Dazu brauche ich einfach nur den Timer wert.
Viele Grüße, William
-> http://william.thielicke.org/
Lesezeichen