Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

 
K
Zeile 1: Zeile 1:
 +
{{Ausbauwunsch|Mehr Grundlagen/ Erklärungen, und Code Beispiele in C}}
 +
 
==Vorwort==
 
==Vorwort==
 
Um einen RC-Empfänger mit einem ATmega auszuwerten bedient man sich am besten des Summensignals. Im [http://www.mikrokopter.de/ucwiki/RC-Empf%C3%A4nger Wiki von Mikrokopter.de] findet sich eine Liste mit getesteten Empfängern und kurzen Anleitungen wie man an das Signal kommt.
 
Um einen RC-Empfänger mit einem ATmega auszuwerten bedient man sich am besten des Summensignals. Im [http://www.mikrokopter.de/ucwiki/RC-Empf%C3%A4nger Wiki von Mikrokopter.de] findet sich eine Liste mit getesteten Empfängern und kurzen Anleitungen wie man an das Signal kommt.
Zeile 15: Zeile 17:
 
Enable Timer0
 
Enable Timer0
 
On Timer0 Pausedetected
 
On Timer0 Pausedetected
Config Int1 = Falling                            'Summensignal an int1, Reaktion auf fallende Flanke
+
Config Int1 = Falling                            'Summensignal an int1 (am Mega32: Port D3), Reaktion auf fallende Flanke
 
Enable Interrupts
 
Enable Interrupts
 
Enable Int1                                      'einschalten Int1
 
Enable Int1                                      'einschalten Int1
Zeile 22: Zeile 24:
 
Dim Channel As Byte
 
Dim Channel As Byte
  
Do
+
Do                               'Main Loop gibt Signale per UART aus
Print Empf(1) ; " CH1"
+
    Print Empf(1) ; " CH1"
Print Empf(2) ; " CH2"
+
    Print Empf(2) ; " CH2"
Print Empf(3) ; " CH3"
+
    Print Empf(3) ; " CH3"
Print Empf(4) ; " CH4"
+
    Print Empf(4) ; " CH4"
Print Empf(5) ; " CH5"
+
    Print Empf(5) ; " CH5"
Print Empf(6) ; " CH6"
+
    Print Empf(6) ; " CH6"
Print " "
+
    Print " "
Waitms 500
+
    Waitms 500
 
Loop
 
Loop
  
Zeile 78: Zeile 80:
 
Dim Channel As Byte
 
Dim Channel As Byte
 
Do
 
Do
Print Empf(1) ; " CH1"
+
    Print Empf(1) ; " CH1"
Print Empf(2) ; " CH2"
+
    Print Empf(2) ; " CH2"
Print Empf(3) ; " CH3"
+
    Print Empf(3) ; " CH3"
Print Empf(4) ; " CH4"
+
    Print Empf(4) ; " CH4"
Print Empf(5) ; " CH5"
+
    Print Empf(5) ; " CH5"
Print Empf(6) ; " CH6"
+
    Print Empf(6) ; " CH6"
Print " "
+
    Print " "
Waitms 500
+
    Waitms 500
 
Loop
 
Loop
  

Version vom 29. Januar 2009, 20:45 Uhr

Dieser Artikel ist noch lange nicht vollständig. Der Auto/Initiator hofft das sich weitere User am Ausbau des Artikels beteiligen.

Das Ergänzen ist also ausdrücklich gewünscht! Besonders folgende Dinge würden noch fehlen:

Mehr Grundlagen/ Erklärungen, und Code Beispiele in C


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 (am Mega32: Port D3), 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                                'Main Loop gibt Signale per UART aus
    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