Lieber Besucher, herzlich willkommen bei: RCLine Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Donnerstag, 21. April 2005, 13:12

RC PPM Impulstelegramerzeugung für 8 analoge Kanäle

Besteht Interesse an sowas oder kann ich es mir sparen den Sourcecode für einen ATtiny26 hier reinzustellen.

Bevorzugter Anwendungsbereich meinerseits ist die Verfügbarmachung eines GameBird/GameCommander für den Reflex Simulator, der ja ein RC-PPM-Protokoll an seinem USB-Interface erwartet, oder eines anderen Simulators der z.B. mit dem PPJoy Interface zusammenarbeitet unter Umgehung des in meinen Augen wirklich nicht so tollen Joystickinterfaces.
"Die Deutsche Rechtschreibung ist Freeware, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
Quelle: GBO

2

Donnerstag, 21. April 2005, 14:25

RE: RC PPM Impulstelegramerzeugung für 8 analoge Kanäle

Hi...

besteht massivst!
Ich bin so nebenbei darani nen Einhandsender für Modellflug zu basteln, und verwende auch den attiny26 dazu..
Und nachdem der Ne5044 ja kaum mehr auffindbar ist besteht daran auf jeden Fall interesse.

Grüssle

andi

3

Donnerstag, 21. April 2005, 15:22

RE: RC PPM Impulstelegramerzeugung für 8 analoge Kanäle

Ok. Ist in BASCOM Basicdialekt für Atmel 8bit Prozessoren geschrieben und vom zeitlichen Ablauf her nicht optimiert! D.h. der Prozessor langweilt sich ne menge Zeit rum. ;)
Angedacht ist eine Erweiterung für Digitaltrimmung im Gegensatz zur derzeitigen analogen Variante.

An Port b.2, das ist Pin 3, steht das RC-PPM zur Verfügung. An Port b.3, das ist Pin 4, ist ein Taster angeschlossen um die abgelegte Mittelstellung zurücksetzen zu können.


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
'--------------------------------------------------------------
'                 (c) Tunichgut
'--------------------------------------------------------------
'  Umwandlung von 8 analogen Kanälen in ein RC-PPM
'  Protokoll
'--------------------------------------------------------------
$regfile = "At26def.dat"

$crystal = 8000000
'damit ich auf ein paar runde Zahlen komme mit den Vorteilern
'muss natürlich von Hand über die Fusebits gesetzt werden

Ddrb = &B11100111
Portb = &B00000000

Dim Maxchannel As Byte
Dim Channel As Byte
Dim Gchannel As Byte
Dim Wert(8) As Byte
Dim Zero(8) As Byte
Dim Ezero(8) As Eram Byte
Dim Overflow0 As Byte
Dim Overflow1 As Byte
Dim Wbuffer As Word
Dim Bbuffer As Byte
Dim Key As Byte
Dim Changed As Bit
Dim Value As Word
Dim Delta As Byte

Key = 0
Maxchannel = 8
Changed = 0

Config Adc = Single , Prescaler = 64 , Reference = Avcc
'cool, avcc setzt nicht auf avcc sondern auf externe referenz und off
'setzt auf avcc
'ist ja mal ne Überraschung

On Adc Adc_isr Nosave
On Ovf0 Ovf0_isr Nosave
On Ovf1 Ovf1_isr Nosave
On Oc1a Ocr1a_isr Nosave
On Oc1b Ocr1b_isr Nosave

Enable Interrupts


Main:

Key = Pinb
Key = Key And &B00001000
If Key = 0 Then
For Channel = 1 To Maxchannel
Ezero(channel) = 128
Next Channel
Wait 7
End If


For Channel = 1 To Maxchannel
Zero(channel) = Ezero(channel)
Next Channel


Enable Ovf0
Tcnt1 = 0
Ocr1a = 255
Ocr1b = 255
Enable Ovf1
Enable Oc1a
Enable Oc1b

Config Timer0 = Timer , Prescale = 8

Config Timer1 = Timer , Prescale = 32

Do
Stop Timer0
Tcnt0 = 0
Overflow0 = 0
Start Timer0

For Channel = 1 To Maxchannel

Tcnt1 = 0
Ocr1a = 2
Ocr1b = 77
Overflow1 = 0
Start Timer1

While Overflow1 = 0
Wend

Stop Timer1

Value = 255 - Wert(channel)
Tcnt1 = Value
Ocr1a = Value - 1
Ocr1b = Value - 1

Start Timer1

While Overflow1 = 1
Wend

Next Channel

Stop Timer1

Tcnt1 = 255 - 77
Ocr1a = 255 - 75
Ocr1b = 255

Overflow1 = 0
Start Timer1

While Overflow1 = 0
Wend

Stop Timer1

Getadcs:
Stop Timer0
Enable Adc
For Channel = 1 To Maxchannel
Gchannel = Channel - 1

  Start Adc
  Idle
  Stop Adc

Shift Wbuffer , Right , 2
Bbuffer = Wbuffer

If Bbuffer > 250 Then
Changed = 1
Bbuffer = 250
End If

If Zero(channel) < 125 Then
Delta = 124 - Zero(channel)
Bbuffer = Bbuffer + Delta
Else
Delta = Zero(channel) - 125
Bbuffer = Bbuffer - Delta
End If
Wert(channel) = Bbuffer

Next Channel
Disable Adc
Start Timer0



If Changed = 1 Then
Changed = 0
End If

Key = Pinb
Key = Key And &B00001000
If Key = 0 Then
Stop Timer0
Enable Adc

For Channel = 1 To Maxchannel
Gchannel = Channel - 1

  Start Adc
  Idle
  Stop Adc

Shift Wbuffer , Right , 2
Bbuffer = Wbuffer

Ezero(channel) = Bbuffer
Zero(channel) = Ezero(channel)
Next Channel
Disable Adc
Start Timer0
Wait 3
End If


'Sparetime

While Overflow0 <= 66
Wend

Loop
End

Adc_isr:
 Push R24
  in r24,sreg
  push r24
  push r25
Wbuffer = Getadc(gchannel)
  pop r25
  pop r24
  !out sreg,r24
  pop r24
Return

Ovf0_isr:
 Push R24
  in r24,sreg
  push r24
  push r26
Incr Overflow0
  pop r26
  pop r24
  !out sreg,r24
  pop r24
Return

Ovf1_isr:
 Push R24
  in r24,sreg
  push r24
  push r26
Incr Overflow1
  pop r26
  pop r24
  !out sreg,r24
  pop r24
Return

Ocr1a_isr:
Set Portb.2
Return

Ocr1b_isr:
Reset Portb.2
Return


Natürlich hafte ich nicht für direkte oder indirekte Schäden die durch Verwendung dieses Codes enstehen bzw. entstehen könnten. Jeder der diesen Code verwenden möchte sollte wissen was er tut.
Gegen eine private Nutzung dieses Codes habe ich überhaupt nix. Wenn jemand den Code ändert oder verbessert, was ich hoffe, so wäre es nett wenn er ihn hier zugänglich machen würde. Darauf bestehen tue ich aber nicht.
Gewerbliche Nutzung ohne Gestattung meinerseits schliesse ich explizit aus.
"Die Deutsche Rechtschreibung ist Freeware, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
Quelle: GBO

4

Donnerstag, 21. April 2005, 16:11

Im Moment betreibe ich den ATTiny26 in einem GameCommander mit 4 Kanälen. Den GameCommander habe ich umgerüstet auf autarke Spannungsversorgung und an den RC-PPM-Ausgang des ATTiny26 an das Sendemodul einer billigen Funkklingel angeschlossen. Das Empfängermodul ist an einen bei mir bereits vorhanden gewesenen JoyWarrior-RC angeschlossen. So kann ich jetzt kabellos fernsteuern. :)
Gut, nicht unbedingt weit weil 433.92MHz und AM aber was solls. Mein Monitor ist eh nicht so gross das ich weiter als 3 Meter weg will. Dafür war es preiswert.

Prinzipiell sollte das auch mit PPJoy am Parallelport so gehen wenn man dem Empfänger eine extra Spannungsversorgung spendiert. Bei mir liefert ja der USB-Port die Spannung die ich allerdings für das Empfangsmodul, ist leider eines für 9Volt, erst ein wenig hochsetzen musste mit einer Ladungspumpe.

Der Code belegt etwas mehr als die Hälfte des Speichers so das noch genügend Platz für Comfortfunktionen ist wenn man sie in die zur Verfügung stehenden Zeiträume gequetscht bekommt. Aber man kann ja noch Kanäle sparen, was sofort freie Zeit bedeutet, und hat dann gleichzeitig noch ein paar I/O-Ports frei.
"Die Deutsche Rechtschreibung ist Freeware, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
Quelle: GBO

5

Freitag, 22. April 2005, 15:58

Hey "Geist", vielen Dank :ok:
Werd´ich die Tage mal toasten und ausprobieren.

Was ich noch ganz lustig fände: Eine Anpassung (z.B. per umgemodelter IC-Fassung), mit der der Attiny direkt als Ersatz für den "üblichen" NE5044 in billiganlagen eingesetzt werden könnte... die Software etwas erweitern (Deltamischer, Dual Rate, Expo, Speicher... schliesslich hat das Ding ja n eeprom usw..), und schon hätte man für 5 Euro aus ner billigsten FM314 eine kleine aber feine Computeranlage gemacht... an der HF nimmt man ja dabei keinen Eingriff vor.



Grüssle

Andi

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »___...._____.« (22. April 2005, 15:59)


6

Freitag, 22. April 2005, 20:15

Wenn du es ausprobierst denke bitte daran das ich externe Referenz benutze wie man hier sehen kann:

Zitat

Config Adc = Single , Prescaler = 64 , Reference = Avcc
'cool, avcc setzt nicht auf avcc sondern auf externe referenz und off
'setzt auf avcc
'ist ja mal ne Überraschung


Auch wenn es so aussieht als wenn nicht. Der Kompiler hat da ein kleines Hickup wie man leicht im Debugger feststellen kann. Die externe Referenz die ich benutze ist einfach potentiometrisch aus der Betriebsspannung abgeleitet. Das hat den Vorteil das ich die Referenz auf den grössten von einem Potentiometer zurückgegebenen Wert einstellen kann.
Ich spreize damit einfach ein wenig die Auflösung.

Was den "Ersatz" des NE5044 angeht, naja, das wäre dann schon eher eine Subplatine und programmieren über irgend ein Interface müsste man auch noch. Also Display und wenigstens 5-6 Tasten.
Wenn ich an sowas rangehen würde dann würde ich die Signalerzeugung von der Messwerterfassung räumlich trennen indem ich 2 Prozessoren verwenden würde.
"Die Deutsche Rechtschreibung ist Freeware, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
Quelle: GBO