Muddel
09.07.2006, 14:29
Hallo,
ich habe ein Problem mit Variablen bei dem ich nicht weiterkomme. Ich lese mit einem ATmega48 Signale einer RC- Fernbedienung aus, dazu habe ich folgenden Code abgeändernt:
http://www.rclineforum.de/forum/thread.php?threadid=106253&sid=
Der Code gibt Werte im Bereich von ca. 16300 (Steuerknüppel linke Pos.) bis 8590 (Steuerknüppel rechte Pos.) aus. Um Servos anzusteuern wird von der Lib. Servo in Bascom eine Byte- Variable verlangt (Das ganze soll ein Empf. seitiger Mischer werden). Wie kann ich den Bereich von 7710 Schritten Linear in eine Byte- Variable von 50- 200 legen. Ich habe mir bereits folgenden Thread hier im Forum angeschaut werde aber nicht richtig schlau bez. des Index beim Lookup- Befehl.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=20832
hier noch mein Code:
'Konfiguration des Timer1
Config Timer2 = Timer , Prescale = 1
Config Timer1 = Timer , Prescale = 1
Config Timer0 = Timer , Prescale = 1
'Konfiguration des INT0
'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
Config Int0 = Change
Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
Config Portb = Output
Dim Temp As Byte
Dim Reading As Bit
Dim Rc_value As Word
Dim I As Byte
Dim Error As Bit
'================================================= =====
'Initialisierungen
'================================================= =====
'Zuweisung der Interrupt-Service-Routinen
On Int0 Rc_read
On Timer1 Rc_error
'Timer-Freigabe
Enable Timer1
Stop Timer1
'Freigabe der Interrupt-Routinen
Enable Int0
Enable Interrupts
'================================================= =====
'Hauptprogramm-Schleife
'================================================= =====
Do
Temp = 0
If Reading = 0 Then
Print "Kanal1: " ; Rc_value
End If
Loop
End
'================================================= =====
'ISR für INT0 - R/C-Kanal lesen
'================================================= =====
Rc_read:
'Den Timer starten mit steigender Flanke
If Reading = 0 Then
Start Timer1
Reading = 1
'Den Timer stoppen mit fallender Flanke
Else
Stop Timer1
Rc_value = Timer1
Timer1 = 0
Reading = 0
End If
'Error-Bit rücksetzen
Error = 0
Return
'================================================= =====
'ISR für Timer1 - Fehlerhandling
'================================================= =====
Rc_error:
'Error-Bit setzen
Error = 1
Reading = 0
Stop Timer1
Rc_value = 6300
Return
besten Dank
Torsten[/url]
ich habe ein Problem mit Variablen bei dem ich nicht weiterkomme. Ich lese mit einem ATmega48 Signale einer RC- Fernbedienung aus, dazu habe ich folgenden Code abgeändernt:
http://www.rclineforum.de/forum/thread.php?threadid=106253&sid=
Der Code gibt Werte im Bereich von ca. 16300 (Steuerknüppel linke Pos.) bis 8590 (Steuerknüppel rechte Pos.) aus. Um Servos anzusteuern wird von der Lib. Servo in Bascom eine Byte- Variable verlangt (Das ganze soll ein Empf. seitiger Mischer werden). Wie kann ich den Bereich von 7710 Schritten Linear in eine Byte- Variable von 50- 200 legen. Ich habe mir bereits folgenden Thread hier im Forum angeschaut werde aber nicht richtig schlau bez. des Index beim Lookup- Befehl.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=20832
hier noch mein Code:
'Konfiguration des Timer1
Config Timer2 = Timer , Prescale = 1
Config Timer1 = Timer , Prescale = 1
Config Timer0 = Timer , Prescale = 1
'Konfiguration des INT0
'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
Config Int0 = Change
Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
Config Portb = Output
Dim Temp As Byte
Dim Reading As Bit
Dim Rc_value As Word
Dim I As Byte
Dim Error As Bit
'================================================= =====
'Initialisierungen
'================================================= =====
'Zuweisung der Interrupt-Service-Routinen
On Int0 Rc_read
On Timer1 Rc_error
'Timer-Freigabe
Enable Timer1
Stop Timer1
'Freigabe der Interrupt-Routinen
Enable Int0
Enable Interrupts
'================================================= =====
'Hauptprogramm-Schleife
'================================================= =====
Do
Temp = 0
If Reading = 0 Then
Print "Kanal1: " ; Rc_value
End If
Loop
End
'================================================= =====
'ISR für INT0 - R/C-Kanal lesen
'================================================= =====
Rc_read:
'Den Timer starten mit steigender Flanke
If Reading = 0 Then
Start Timer1
Reading = 1
'Den Timer stoppen mit fallender Flanke
Else
Stop Timer1
Rc_value = Timer1
Timer1 = 0
Reading = 0
End If
'Error-Bit rücksetzen
Error = 0
Return
'================================================= =====
'ISR für Timer1 - Fehlerhandling
'================================================= =====
Rc_error:
'Error-Bit setzen
Error = 1
Reading = 0
Stop Timer1
Rc_value = 6300
Return
besten Dank
Torsten[/url]