PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Empfängersignal auswerten. (Modellbauempfänger PWM )



hunni
13.10.2008, 22:12
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

Willa
14.10.2008, 11:03
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

hunni
14.10.2008, 11:22
ä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

hunni
14.10.2008, 11:24
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

hunni
14.10.2008, 12:08
ja mhh, ich hab das auc schon mit falling und rising probiert, aber change kannte ich noch nich, wert ich gleich mal ausprobieren

Willa
14.10.2008, 14:16
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

hunni
14.10.2008, 14:55
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.

fhs
14.10.2008, 15:49
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

Willa
15.10.2008, 08:57
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".

hunni
15.10.2008, 16:11
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

Willa
15.10.2008, 16:31
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.

hunni
15.10.2008, 16:53
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

hunni
16.10.2008, 01:04
ahh ich habs glaub ich verstanden!! Cool vielen Dank