RC Kanal auslesen

Gast #2136720
Lesenswert?

Hallo.

Bin blutiger anfänger und versuche über meinen Futaba Fasst empfänger 
via Fernbedienung Landelichter und Blitzer anzusteuert. Ich benutze den 
atmega8 und habe auch schon geringe erfolge erzielt. Jetzt hänge ich 
aber fest. Ich habe mir zusätzlich ein Display angeschlossen um mir die 
Werte des entsprechenden Kanals anzeige zu lassen. Das problem ist das 
die Werte schwanken und sich nicht wirklich ändern sondern immer auf 
einem ähnlichen Level sind. So kann ich keinen definierten Schaltzustand 
herbeiführen.

Hier mal mein Bascom Code
1
$regfile = "M8def.dat"
2
$crystal = 1000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6

7

8

9

10
Led1 Alias Portb.1
11
Config Led1 = Output
12

13
Led2 Alias Portb.2
14
Config Led2 = Output
15

16
Led3 Alias Portb.3
17
Config Led3 = Output
18

19
Led4 Alias Portb.4
20
Config Led4 = Output
21

22
Led5 Alias Portb.5
23
Config Led5 = Output
24

25
Config Timer1 = Timer , Prescale = 1
26

27
'Konfiguration des INT0
28
'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
29
Config Int0 = Change
30

31
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , _
32
   Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
33
Config Lcd = 16 * 2
34
Cursor Off
35

36

37

38

39

40
Dim Blitzer As Integer
41
Blitzer = 100
42

43
Dim Pause As Integer
44
Pause = 500
45

46
Dim Beacon As Integer
47
Beacon = 30
48

49
Dim Bpause As Integer
50
Bpause = 150
51

52
Dim Rc_value As Word
53

54
Dim Reading As Bit
55

56
On Int0 Rc_read
57

58

59

60
'Timer-Freigabe
61
Enable Timer1
62
Stop Timer1
63

64
'Freigabe der Interrupt-Routinen
65
Enable Int0
66
Enable Interrupts
67

68

69
  Do
70
  Locate 1 , 1
71
  Lcd "kanalwert"
72

73
 If Rc_value > 1000 Then
74

75
  Led1 = 1
76
  Led2 = 1
77
  Waitms Blitzer
78
  Led2 = 0
79
  Waitms Pause
80
  Led3 = 1
81
  Waitms Blitzer
82
  Led3 = 0
83
  Led4 = 1
84
  Waitms Beacon
85
  Led4 = 0
86
  Waitms Bpause
87
  Led4 = 1
88
  Waitms Beacon
89
  Led4 = 0
90
  Waitms Bpause
91
  Led4 = 1
92
  Waitms Beacon
93
  Led4 = 0
94
  Waitms Pause
95
  Led5 = 1
96
  Waitms Beacon
97
  Led5 = 0
98
  Waitms Bpause
99
  Led5 = 1
100
  Waitms Beacon
101
  Led5 = 0
102
  Waitms Bpause
103
  Led5 = 1
104
  Waitms Beacon
105
  Led5 = 0
106
  Waitms Pause
107

108
 Else
109

110
 Led1 = 0
111
 Led2 = 0
112
 Led3 = 0
113
 Led4 = 0
114
 Led5 = 0
115

116
 End If
117

118

119

120

121
  Loop
122

123
 End
124

125
Rc_read:
126
  If Reading = 0 Then
127
   Start Timer1
128
   Reading = 1
129
   Toggle Portc.0
130
'Den Timer stoppen mit fallender Flanke
131
  Else
132
   Stop Timer1
133
   Rc_value = Timer1
134
   Cls
135
   Locate 2 , 5
136
   Lcd Rc_value
137
   Waitms 500
138
   Timer1 = 0
139
   Reading = 0
140
   Toggle Portc.1
141
  End If
142
 Return

Ich würde sehr gerne wissen wo bei mir der Schuh drückt :-)

MfG Michael
Gast #2279960
Lesenswert?

Hollo nochmal

Nach einer kleinen Pause hab ich dann mal weiterexperimentiert. Die 
Schaltung ist komplett fertig und auch schon gebaut, aber an der 
Software da hapert es nun. Mittlerweile habe ich es geschafft den RC 
Kanal auszulesen und das Programm läuft auch auf 2 Schaltzuständen 
sicher. Ich brauche einen kleinen denkanstoß um mehr als 2 Flugzustände 
zu realisieren. Ist bestimmt ganz einfach aber ich sehe wohl gerade den 
Wald vor Bäumen nicht. Momentan entscheide ich ob die Pulslänge kleiner 
als 150*10µs also 1,5ms ist und schalte alles aus und größer 1,51ms 
alles an. Ich komm nicht drauf wie ich von z.b 1,1 - 1,3ms  und dann 1,4 
- 1,6ms und 1,7 - 2,0ms auswerden kann so das ich mindestens 3 
Schaltzuszände habe. Mein Programm habe ich im Anhang

MfG Michael
Angehängte Dateien:
Gast #2280049
Lesenswert?

Tazmandevil schrieb:
> Ich komm nicht drauf wie ich von z.b 1,1 - 1,3ms  und dann 1,4
> - 1,6ms und 1,7 - 2,0ms auswerden kann so das ich mindestens 3
> Schaltzuszände habe.

In deinem Programm mußt du auch festlegen, was bei den Zwischenwerten 
passieren soll. Mit deinen Grenzwerten wären das sieben Bereiche:
1
1.  < 1,1 ms
2
2. >= 1,1 ms ... <= 1,3 ms
3
3.  > 1,3 ms ...  < 1,4 ms
4
4. >= 1,4 ms ... <= 1,6 ms
5
5.  > 1,6 ms ...  < 1,7 ms
6
6. >= 1,7 ms ... <= 2,0 ms
7
7.  > 2,0 ms

Gruß Willi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren