Forum: Mikrocontroller und Digitale Elektronik RC Kanal auslesen


von Tazmandevil (Gast)


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

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

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

Am ganzen Konzept...

Ich hänge Dir mal ein paar kleine Spielereien in Bascom zum Thema 
RC-Schaltmodul an.

...

von Tazmandevil (Gast)


Lesenswert?

Danke erstmal. Ich werde mir das alles mal durchlesen und ausprobieren

MfG Michael

von Tazmandevil (Gast)


Angehängte Dateien:

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

von Michael (Gast)


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

Immer schön der Reihe nach, sonst wird das zu kompliziert:
1
 If Messung <= 135 Then                  '
2
    Zustand = 0
3
 Elseif Messung <= 165 Then
4
    Zustand = 1
5
 Else
6
    Zustand = 2

von Willi W. (Gast)


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

von Tazmandevil (Gast)


Lesenswert?

Ach so, ich dachte ich lasse ein wenig "hysterese". Das ich dann 7 
Zustände habe war mir so nicht bewusst, ist aber logisch.

Das Else Zustand = 2 werde ich nachher mal probieren. Sieht wie die 
Lösung aus :)
Bin nicht drauf gekommen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.