PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega8 verwertet PPM Signal nicht :-(



nightflyer50
19.09.2007, 15:54
Ich versuche schon längere Zeit (einige nächtliche Stunden) das ich das PPM Signal von einem Modelbau-Empfänger(35Mhz) auf den Mega8 bringe, nur es will nicht funktionieren.
So ein s....

Zur zeit hab ichs direkt auf den "int0" (Interrupt) Eingang des Atmels versucht.
Ich habe zwar den Port auf "input"
gestellt. Aber er erkennt nichts, weder im interrupt Modus wo ein timer zurückgesetzt werden sollte sobald eine fallende Flanke kommt.
Noch wenn ich den Port per stinknormalen Abfrage in einer Schleife abfrage.

Das Oszi aber sagt mir das die Pausen je nach Steuerknüppelstellung 1-2 Millisekunden dauern. Also das Signal vom Empfänger ist da.
Dann dachte ich der mega8 kommt mit dem Pegel nicht klar. Und ich habe das Signal mit einem Transistor Invertiert.
... Leider fehlanzeige ist funktioniert nicht.

Folgenden Code habe ich mir dafür zusammengestöpselt. -->

Habt ihr ne Ahnung was ich da falsch mache ? Ich weis nicht mehr weiter :-(


$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

'================================================= =====
'Declarations
'================================================= =====

Dim Rc_value As Word


'================================================= =====
'Configurations
'================================================= =====

'I/O-Ports
Config Portd = Input
'Interrup 0
Config Int0 = Falling 'timing of pulses on negative flank

'Configuration of timer 1 (16 bit)
Config Timer1 = Timer , Prescale = 8


'Interrupt-Service-Routines
On Timer1 Signal_down 'overflow of timer occurs when the signal is down
On Int0 Read_signal 'On int0 timing of the signal pulses

'================================================= =====
'Initialisations
'================================================= =====
'Timer-release
Enable Timer1

'Release of interrupts
Enable Int0
Enable Interrupts
'Variables
Rc_value = 0

'================================================= =====
'Main program
'================================================= =====
Dim I As Integer

Do

Print Rc_value
Waitms 120

Loop

End

'************************************************* *****
'Interrupt Service Routines
'************************************************* *****
Read_signal:
Rc_value = Timer1 'First thing: store the timer value in an intermediate variable.
Timer1 = 0 'Then reset the timer
Print Rc_value
'set the signal up flag
Return


Signal_down: 'if no signal is detected for 65 ms
Print " Signal Down" 'reset number of syncpulses passed
Return

Schokohoernl
20.09.2007, 11:09
hallo!

könte es sein, dass du vergessen hast die GND-Pegel anzugleichen? also die GND leitungen von empfänger und AVR kurzschließen.

MfG

Schoko

nightflyer50
20.09.2007, 11:28
Das hätt ich schon gemacht, da der Empfänger die notw. 5V von meinem ATmega Board bekommt.

Schokohoernl
20.09.2007, 12:02
hmm.. ganz ehrlich: da fällt mir dann nix mehr ein...

hast du mal nen anderen pin probiert (egal ob interrupt oder nicht, geht hier mal drum obs funktioniert). evtl. ist ja der Pin, bzw. der ganze port aus irgendeinem grund kaputt.
oder evtl. haarrisse in der platine? schonmal direkt am AVR pin gemessen ob dort das signal noch ankommt??

MfG

Schoko

nightflyer50
20.09.2007, 12:47
okay gute idee !
Ich werde versuchen einen anderen Port zu verwenden.

Ich melde mich dann wieder ;-)

nightflyer50
20.09.2007, 16:11
So jetzt habe ich folgendes Probiert -->

$regfile = "m8def.dat"
$crystal = 8000000

'================================================= =====
'Configurations
'================================================= =====

'I/O-Ports
Config Portb.4 = Input
Config Portb.3 = Output

Do
Portb.4 = Portb.3
Loop

End


Das sollte ja theoretisch das Signal 1:1 am PIN B.3 ausgeben.
Tut es aber nich
Weder wenn ich das Eingangssignal (PPM Signal vom Empfänger)
normal noch invertiert anlege.

Was tu ich jetzt ? Kann man vielleicht was mit den Fuses des µControllers machen ?

roboterheld
20.09.2007, 18:20
....Modelbau-Empfänger(35Mhz)....

so einfach geht es nicht.

hier gab es so etwas schon einmal :

http://www.mikrocontroller.net/

suchen!

Hanni
20.09.2007, 18:24
Portb.4 = Portb.3

Mal davon abgesehen, das ein als Eingang konfiguriertes Bein am Mikrocontroller als PIN angesprochen wird sag ich ma nix dazu ...

Grüße,
Hanni

Christopher1
20.09.2007, 18:39
Zeigt Bascom bei sowas keinen Fehler an oder hast du den ignoriert ? ;-)

PicNick
20.09.2007, 18:59
Sollte heissen:


Config Pinb.4 = Input
Config Pinb.3 = Output

Do
Portb.4 = Pinb.3
Loop


Mach keinen "Print" in einer interrupt routine
bei 9600 Baud braucht er für jedes zeichen ~1 mS
das ist für ein Servo Signal etwas zu lang

nightflyer50
21.09.2007, 06:54
Portb.4 = Portb.3

Mal davon abgesehen, das ein als Eingang konfiguriertes Bein am Mikrocontroller als PIN angesprochen wird sag ich ma nix dazu ...

Grüße,
Hanni
Ja da bin ich kurz nach dem Post von gestern selber noch draufgekommen :-) aber andersrum hats leider auch nicht funktioniert.

@roboterheld

danke! ich werd mich gleich mal reinlesen !

Schokohoernl
21.09.2007, 11:53
....Modelbau-Empfänger(35Mhz)....

so einfach geht es nicht.

hier gab es so etwas schon einmal :

http://www.mikrocontroller.net/

suchen!

hä?? was meinst du mit "so einfach geht es nicht"?? das PPM signal für servos, etc auszuwerten is ja wohl nen kinderspiel.

hier (https://www.roboternetz.de/phpBB2/viewtopic.php?t=25289) habe ich auch lediglich einen Transistor und einen 10k widerstand zwischen PPM signal und µC.

bei nightflyer50 hab ich eher das gefühl, dass der µC abgeraucht ist, bzw. die ports nich mehr richtig anspricht. ich empfehle: einfach mal den µC austauschen.

MfG

Schoko

nightflyer50
21.09.2007, 13:15
Du meinst so --> ?




O +5Volt
|
_
| | R ~1kOhm
|_|
|
--------------o Atmel Eingang
1V |/
o----------|
|\
|
|
_ GND

roboterheld
21.09.2007, 13:54
er redet davon :....das ich das PPM Signal von einem Modelbau-Empfänger(35Mhz) auf den Mega8 bringe, nur es will nicht funktionieren. ......

nightflyer50
21.09.2007, 14:28
nun
ich bin mir jetzt auch nicht mehr sicher, ich werde mal den controler wechseln

nightflyer50
21.09.2007, 14:54
Hi Leute !

Ich denk ich habs :-)

Folgenden Code habe ich jetzt benutzt -->



$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

'================================================= =====
'Configurations
'================================================= =====
'I/O-Ports
Config Pinc.0 = Input
Config Portb.4 = Output

'================================================= =====
'Main
'================================================= =====

Do
Portb.4 = Pinc.0 'Hier lag der Fehler
Loop

End

Als "Verstärler" habe ich jetzt einen NPN Transistor mit nen 10K verwendet Widerstand. (siehe obige "Zeichnung")

Der Fehler lang bei folgender Zeile -->

Portb.4 = Pinc.0

Ich hatte immer mit Portc.0 versucht den aktuellen Status des jeweiligen Port-Pin auszulesen, aber anscheinend funktioniert es nur mit Pinc.0 richtig!


Okay ich werde mal weiter Proggen, aber ich denke das wars !

Vielen DANK für die zahlreiche Unterstützung Leute !

Sepp O.
06.10.2007, 10:36
Tag nightflyer50

Ich spiele mich auch gerade mit dem Gedanken die PPM-Signale der Fernbedienung auszuwerten bzw. zu verändern.

Beim Ausmessen der Signale von diversen Fernbedienungen (Futaba und eine No-Name) bin ich auf etwas gestoßen.

Die PPM-Signale haben etwas merkwürdige Signalpegel.
Genauer gesagt haben sie Pegel von +0,5V/-4V bzw. +0,2V/-2,5V.

Hat deine Fernbedienung die gleichen Signalpegel oder sind die Fernbedienungen die ich gemessen habe eine Ausnahme?

mfg Sepp

nightflyer50
08.10.2007, 06:49
Hi !

Ich habe nicht die Signale der Fernbedienung sondern des Empfängers (Multiplex RX5) ausgewertet. Daher habe ich mit der Fernbedienung selbst noch keine Erfahrungen gemacht.
Ich habe in meinem Projekt nur einen Servokanal ausgewertet und da hatte ich einen pegel von (wenns stimmt) ~ +1V, daher habe ich zur sicherheit das signal mit einem Transistor Invertiert und somit auf 5V gebracht.

Theoretisch müsste es bei der Fernbedienung gleich oder zumindest ähnlich sein, denke ich :-)
Ich bin da aber keine zuverlässige Quelle, da ich doch eher ein Anfänger bin.

greetz

Sepp O.
08.10.2007, 12:21
Tag

Ich hatte festgestellt dass ich schlicht und ergreifend eine falsche Einstellung im Oszi hatte.
Bei der Messung arbeitete das Oszi im Mathematikmodus.
(Kanal2 - Kanal 1)

Und wenn nunmal Kanal 2 kein Signal liefert, dann kommt das Signal invertiert auf den Schirm.

Weiters habe ich festgestellt dass der Offset daher gekommen ist weil ich die Antenne berührt habe.

Wenn man die Antenne im eingeschobenen Zustand berührt, wird dass Signal um bis zu 0,5V ins Minus gezogen.
Wenn man die Antenne ganz ausfährt kann dass sogar bis zu -0,7V sein.
Und wenn man die Antenne im ausgefahrenen Zustand berührt, bekommt man sogar einen Pegel von bis zu -0,9V.

Aber unter normalbedingungen kommt ein TTL Pegel daher.
Wenn ich also eine Schaltung anhängen will muß ich eine ordentluiche Schutzbeschaltung anhängen.

Weil du geschrieben hast dass du am Empfänger ein Signal von ungefähr +1V bekommst.
Bei den Empfängern die ich durchgemessen habe, ist der Pegel immer zwischen 0V und VCC minus ein paar mV herumgezappelt.

mfg Sepp