1 | '$sim
|
2 | $regfile = "m8515.dat" 'Atmega 8515-16PU
|
3 | $crystal = 16000000 'Quarz 8Mhz extern
|
4 | $hwstack = 100
|
5 | $swstack = 100
|
6 | $framesize = 100
|
7 | Config Dmxslave = Com1 , Channels = 9 , Store = 9
|
8 | Enable Interrupts
|
9 |
|
10 |
|
11 |
|
12 | 'Programmmvariablen:
|
13 | Dim Teiladresse1 As Bit
|
14 | Dim Teiladresse2 As Byte
|
15 | Dim Teiladresse3 As Byte
|
16 | Dim Teiladresse4 As Byte
|
17 | Dim Teiladresse5 As Byte
|
18 | Dim Teiladresse6 As Byte
|
19 | Dim Teiladresse7 As Byte
|
20 | Dim Teiladresse8 As Byte
|
21 | Dim Teiladresse9 As Word
|
22 | Dim Adresse As Word
|
23 | Dim Timer_zaehler As Byte
|
24 | Dim Dimmer_kanal_1 As Byte
|
25 | Dim Dimmer_kanal_2 As Byte
|
26 | Dim Dimmer_kanal_3 As Byte
|
27 | Dim Dimmer_kanal_4 As Byte
|
28 | Dim Dimmer_kanal_5 As Byte
|
29 | Dim Dimmer_kanal_6 As Byte
|
30 | Dim Dimmer_kanal_7 As Byte
|
31 | Dim Dimmer_kanal_8 As Byte
|
32 | Dim Dimmer_kanal_9 As Byte
|
33 |
|
34 |
|
35 | 'Subs / Funktionen deklarieren
|
36 | Declare Sub Dmx_adresse_auslesen
|
37 | Declare Sub Led_rot_doppelblinken
|
38 |
|
39 |
|
40 |
|
41 | 'Eingänge zuweisen
|
42 | Config Pinc.0 = Input 'Eingänge von PortC.0 bis PortC.7 = DIP-Schalter
|
43 | Config Pinc.1 = Input
|
44 | Config Pinc.2 = Input
|
45 | Config Pinc.3 = Input
|
46 | Config Pinc.4 = Input
|
47 | Config Pinc.5 = Input
|
48 | Config Pinc.6 = Input
|
49 | Config Pinc.7 = Input
|
50 | Config Pine.1 = Input 'Eingänge von PortE.1 bis PortE.2 = DIP-Schalter
|
51 | Config Pine.2 = Input
|
52 | Config Pind.5 = Input 'Spare 1 (Ausgabe Invertieren)
|
53 | Config Pind.4 = Input 'Spare 2
|
54 | Config Pind.3 = Input 'Spare 3
|
55 |
|
56 |
|
57 | 'Ausgänge zuweisen
|
58 | Config Portd.7 = Output 'LED Rot (Fehler)
|
59 | Config Portd.6 = Output 'LED Orange (DMX Aktiv)
|
60 | Config Porte.0 = Output 'Kanal 1
|
61 | Config Porta.7 = Output 'Kanal 2
|
62 | Config Porta.6 = Output 'Kanal 3
|
63 | Config Porta.5 = Output 'Kanal 4
|
64 | Config Porta.4 = Output 'Kanal 5
|
65 | Config Porta.3 = Output 'Kanal 6
|
66 | Config Porta.2 = Output 'Kanal 7
|
67 | Config Porta.1 = Output 'Kanal 8
|
68 | Config Porta.0 = Output 'Kanal 9
|
69 |
|
70 |
|
71 |
|
72 |
|
73 | 'Eingänge Alias Zuweisen
|
74 | Dip_1 Alias Pinc.0
|
75 | Dip_2 Alias Pinc.1
|
76 | Dip_3 Alias Pinc.2
|
77 | Dip_4 Alias Pinc.3
|
78 | Dip_5 Alias Pinc.4
|
79 | Dip_6 Alias Pinc.5
|
80 | Dip_7 Alias Pinc.6
|
81 | Dip_8 Alias Pinc.7
|
82 | Dip_9 Alias Pine.2
|
83 | Dip_10 Alias Pine.1
|
84 | Spare_1 Alias Pind.5
|
85 | Spare_2 Alias Pind.4
|
86 | Spare_3 Alias Pind.3
|
87 |
|
88 |
|
89 | 'Ausgänge Alias Zuweisen
|
90 | Led_rot Alias Portd.7 'Fehler LED
|
91 | Led_orange Alias Portd.6 'DMX aktiv LED
|
92 | Kanal_1 Alias Porte.0
|
93 | Kanal_2 Alias Porta.7
|
94 | Kanal_3 Alias Porta.6
|
95 | Kanal_4 Alias Porta.5
|
96 | Kanal_5 Alias Porta.4
|
97 | Kanal_6 Alias Porta.3
|
98 | Kanal_7 Alias Porta.2
|
99 | Kanal_8 Alias Porta.1
|
100 | Kanal_9 Alias Porta.0
|
101 |
|
102 |
|
103 | 'interne Pullup aktivieren
|
104 | Portc.0 = 1
|
105 | Portc.1 = 1
|
106 | Portc.2 = 1
|
107 | Portc.3 = 1
|
108 | Portc.4 = 1
|
109 | Portc.5 = 1
|
110 | Portc.6 = 1
|
111 | Portc.7 = 1
|
112 | Porte.2 = 1
|
113 | Porte.1 = 1
|
114 | Portd.5 = 1
|
115 | Portd.4 = 1
|
116 | Portd.3 = 1
|
117 |
|
118 |
|
119 |
|
120 | Config Timer0 = Timer , Prescale = 1
|
121 | On Timer0 Timerueberlauf
|
122 | Enable Timer0
|
123 |
|
124 |
|
125 | '##################START#################
|
126 |
|
127 |
|
128 | 'Power-On Sequenz
|
129 | Led_rot = 1
|
130 | Led_orange = 1
|
131 | Waitms 500
|
132 | Led_rot = 0
|
133 | Led_orange = 0
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 | 'Hauptschleife
|
140 |
|
141 | Do
|
142 | Main:
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 | 'Adresse auslesen:
|
149 | Call Dmx_adresse_auslesen
|
150 |
|
151 |
|
152 | 'Adresse auswerten:
|
153 | If Adresse = 0 And Dip_10 = 1 Then
|
154 | Call Led_rot_doppelblinken
|
155 | End If
|
156 |
|
157 |
|
158 |
|
159 | 'Test
|
160 |
|
161 | If _dmx_received(1) = 1 Then
|
162 | Dimmer_kanal_1 = 255
|
163 | End If
|
164 |
|
165 | dimmer_kanal_2 = _dmx_received(2)
|
166 |
|
167 |
|
168 |
|
169 |
|
170 |
|
171 |
|
172 |
|
173 |
|
174 |
|
175 | Loop
|
176 |
|
177 |
|
178 | 'Sub DMX_Adresse_Auslesen
|
179 | Sub Dmx_adresse_auslesen:
|
180 |
|
181 | 'Dip-Schalter abfragen
|
182 | If Dip_1 = 0 Then
|
183 | Teiladresse1 = 1
|
184 | Else
|
185 | Teiladresse1 = 0
|
186 | End If
|
187 |
|
188 | If Dip_2 = 0 Then
|
189 | Teiladresse2 = 2
|
190 | Else
|
191 | Teiladresse2 = 0
|
192 | End If
|
193 |
|
194 | If Dip_3 = 0 Then
|
195 | Teiladresse3 = 4
|
196 | Else
|
197 | Teiladresse3 = 0
|
198 | End If
|
199 |
|
200 | If Dip_4 = 0 Then
|
201 | Teiladresse4 = 8
|
202 | Else
|
203 | Teiladresse4 = 0
|
204 | End If
|
205 |
|
206 | If Dip_5 = 0 Then
|
207 | Teiladresse5 = 16
|
208 | Else
|
209 | Teiladresse5 = 0
|
210 | End If
|
211 |
|
212 | If Dip_6 = 0 Then
|
213 | Teiladresse6 = 32
|
214 | Else
|
215 | Teiladresse6 = 0
|
216 | End If
|
217 |
|
218 | If Dip_7 = 0 Then
|
219 | Teiladresse7 = 64
|
220 | Else
|
221 | Teiladresse7 = 0
|
222 | End If
|
223 |
|
224 | If Dip_8 = 0 Then
|
225 | Teiladresse8 = 128
|
226 | Else
|
227 | Teiladresse8 = 0
|
228 | End If
|
229 |
|
230 | If Dip_9 = 0 Then
|
231 | Teiladresse9 = 256
|
232 | Else
|
233 | Teiladresse9 = 0
|
234 | End If
|
235 |
|
236 | 'Adresse zusammenrechnen
|
237 |
|
238 | Adresse = 0
|
239 | Adresse = Adresse + Teiladresse1
|
240 | Adresse = Adresse + Teiladresse2
|
241 | Adresse = Adresse + Teiladresse3
|
242 | Adresse = Adresse + Teiladresse4
|
243 | Adresse = Adresse + Teiladresse5
|
244 | Adresse = Adresse + Teiladresse6
|
245 | Adresse = Adresse + Teiladresse7
|
246 | Adresse = Adresse + Teiladresse8
|
247 | Adresse = Adresse + Teiladresse9
|
248 |
|
249 | 'Adresse festlegen
|
250 | _dmx_address = Adresse
|
251 |
|
252 |
|
253 | End Sub
|
254 |
|
255 |
|
256 |
|
257 |
|
258 |
|
259 |
|
260 | 'Timerüberlauf
|
261 |
|
262 | Timerueberlauf:
|
263 |
|
264 |
|
265 | Timer0 = 6
|
266 | 'If Timer_zaehler = 255 Then
|
267 | 'Timer_zaehler = 0
|
268 | 'End If
|
269 |
|
270 | Incr Timer_zaehler ' Zähler hochzählen lassen
|
271 |
|
272 |
|
273 | If Timer_zaehler < Dimmer_kanal_1 Then
|
274 | Kanal_1 = 1
|
275 | Else
|
276 | Kanal_1 = 0
|
277 | End If
|
278 |
|
279 | If Timer_zaehler < Dimmer_kanal_2 Then
|
280 | Kanal_2 = 1
|
281 | Else
|
282 | Kanal_2 = 0
|
283 | End If
|
284 |
|
285 | If Timer_zaehler < Dimmer_kanal_3 Then
|
286 | Kanal_3 = 1
|
287 | Else
|
288 | Kanal_3 = 0
|
289 | End If
|
290 |
|
291 | If Timer_zaehler < Dimmer_kanal_4 Then
|
292 | Kanal_4 = 1
|
293 | Else
|
294 | Kanal_4 = 0
|
295 | End If
|
296 |
|
297 | If Timer_zaehler < Dimmer_kanal_5 Then
|
298 | Kanal_5 = 1
|
299 | Else
|
300 | Kanal_5 = 0
|
301 | End If
|
302 |
|
303 | If Timer_zaehler < Dimmer_kanal_6 Then
|
304 | Kanal_6 = 1
|
305 | Else
|
306 | Kanal_6 = 0
|
307 | End If
|
308 |
|
309 | If Timer_zaehler < Dimmer_kanal_7 Then
|
310 | Kanal_7 = 1
|
311 | Else
|
312 | Kanal_7 = 0
|
313 | End If
|
314 |
|
315 | If Timer_zaehler < Dimmer_kanal_8 Then
|
316 | Kanal_8 = 1
|
317 | Else
|
318 | Kanal_8 = 0
|
319 | End If
|
320 |
|
321 | If Timer_zaehler < Dimmer_kanal_9 Then
|
322 | Kanal_9 = 1
|
323 | Else
|
324 | Kanal_9 = 0
|
325 | End If
|
326 |
|
327 |
|
328 |
|
329 | Return
|
330 |
|
331 |
|
332 | 'Sub Led_rot_doppelblinken
|
333 | Sub Led_rot_doppelblinken:
|
334 |
|
335 | Led_rot = 1
|
336 | Waitms 50
|
337 | Led_rot = 0
|
338 | Waitms 20
|
339 | Led_rot = 1
|
340 | Waitms 50
|
341 | Led_rot = 0
|
342 | Waitms 200
|
343 | End Sub
|
344 |
|
345 |
|
346 |
|
347 |
|
348 |
|
349 |
|
350 | 'Ende des Programms
|
351 | End
|