Aus RN-Wissen.de
Version vom 27. Januar 2009, 18:28 Uhr von Willa (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Laderegler Test Tueftler Seite

Vorwort

Um einen RC-Empfänger mit einem ATmega auszuwerten bedient man sich am besten des Summensignals. Im Wiki von Mikrokopter.de findet sich eine Liste mit getesteten Empfängern und kurzen Anleitungen wie man an das Signal kommt. Die Quellcode Beispiele in diesem Artikel funktionieren mit einen Atmel ATmega32 der mit einem 16Mhz Quarz betrieben wird. Werden andere µC's oder andere Quarze verwendet ändern sich natürlich einige Zeilen. Besonders bei Verwendung eines anderen Quarzes müssen die Zeilen "preload für 4ms" auf den entsprechend richtigen Preload geändert werden! Evtl. muss auch der Prescaler angepasst werden.

Für BASCOM kann man mit folgendem Code die Kanäle 1-6 auslesen (atmega32, 16Mhz Quarz - bei Bedarf anpassen):

Auslesen mit Timer0

$baud = 9600
$crystal = 16000000
$regfile "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
Config Timer0 = Timer , Prescale = 256 , Capture Edge = Falling , Noise Cancel = 1
Enable Timer0
On Timer0 Pausedetected
Config Int1 = Falling                             'Summensignal an int1, Reaktion auf fallende Flanke
Enable Interrupts
Enable Int1                                       'einschalten Int1
On Int1 Measure                                   'springe zum Interrupt von Timer0
Dim Empf(6) As Word
Dim Channel As Byte

Do
Print Empf(1) ; " CH1"
Print Empf(2) ; " CH2"
Print Empf(3) ; " CH3"
Print Empf(4) ; " CH4"
Print Empf(5) ; " CH5"
Print Empf(6) ; " CH6"
Print " "
Waitms 500
Loop

Measure:                               'Reaktion auf fallende Flanke
Select Case Channel
    Case 1 :
    Empf(1) = Timer0
    Case 2 :
    Empf(2) = Timer0
    Case 3 :
    Empf(3) = Timer0
    Case 4:
    Empf(4) = Timer0
    Case 5:
    Empf(5) = Timer0
    Case 6:
    Empf(6) = Timer0
End Select
Timer0 = 6                                        'preload für 4ms
Incr Channel
Return

Pausedetected:
Channel = 0
Return

End

Auslesen mit Timer1

Alternativ kann man den Empfänger natürlich auch mit Timer1 auslesen. Hier ist die Auflösung höher:

$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 PauseDetect
Config Int1 = Falling
Enable Interrupts
Enable Int1    
On Int1 Measure
Dim Empf(6) As Word
Dim Channel As Byte
Do
Print Empf(1) ; " CH1"
Print Empf(2) ; " CH2"
Print Empf(3) ; " CH3"
Print Empf(4) ; " CH4"
Print Empf(5) ; " CH5"
Print Empf(6) ; " CH6"
Print " "
Waitms 500
Loop

Measure:
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 für 4ms
Incr Channel
Return

PauseDetect:
Channel = 0
Return
End

Autoren


LiFePO4 Speicher Test