Archiv verlassen und diese Seite im Standarddesign anzeigen : Empfängersignal auswerten. (Modellbauempfänger PWM )
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.
$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
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.
Könntet ihr mir vielleicht helfen.
mhunni
Hi! Also waitms im interrupt halte ich für sehr sehr "unkonventionell".... Mach das doch lieber so:
'hauptprogramm
do
lcd wert
waitms 100
loop
end
Sprung:
Wert=Timer1
Timer1=0
return
ähhm, dann zeigt jetzt aber immer nur 0 an? oda?
$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
Sauerbruch
14.10.2008, 11:44
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:
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):
$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
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,
ich glaub ihr versteht noch nich so ganz was ich machen möchte.
wie hätte das denn jemand aus Deinem ersten Posting entnehmen sollen?
Ich möchte einfach, dass ich weiss, welche Frequenz das Signal vom Empfänger (PWM oda Rechteck, kann ich nich genau sagen) hat.
Ganz einfach, etwa 50Hz pro Kanal.
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
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.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".
ach so, des wegen zeigt er immer das gleiche an!! AHA Effekt. Ich glaub, ich muss mich noch ml n bisschen mit deinen quellcode auseinandersetzten. Vielen dank. Eine frage hab ich übrigens gleich noch zu deinem quellcode, wo muss ich den empfänger den jetzt anschließen? Am PD2 oda wo?
An fhs möchte ich nur sagen, das das kein Vorwurf gegen euch war, warscheilich habe ich mich (mal wieder) falsch ausgedrückt. Sorry
Den Empfänger musst du an Int1 hängen, im Datenblatt deines ATmega8 steht welcher Pin das ist (auf der ersten oder zweiten Seite). Mein Code ist allerdings für das Summensignal eines RC-Empfängers geschrieben, d.h. der Empfänger sendet alle Kanäle nacheinander, deswegen braucht man nur 1 Port für alle Kanäle.
ach so du meinst ppm modulation, kannste vielleicht das noch n bisschen ausführlicher erklären? Im Quelltext verstehen bin ich nich so der Profi , ausserdem mache ich bascom noch nich all zu lange
ahh ich habs glaub ich verstanden!! Cool vielen Dank
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.