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
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