1 | .include "m328Pdef.inc"
|
2 |
|
3 |
|
4 | .CSEG
|
5 | .def temp = r16
|
6 | .def temp2 = r17
|
7 | .def temp3 = r18
|
8 | .def temp4 = r19
|
9 | .def micros_lsb = r20 //micros beinhaltet die vergangenen microsekudnen *10 um mehr spielraum zwischen den interrupts zu bekommen
|
10 | .def micros_msb = r21
|
11 |
|
12 | .equ extruderddr = ddrb
|
13 | .equ pullyddr = ddrb
|
14 |
|
15 | .equ extruderpin = PB1
|
16 | .equ pullypin = PB2
|
17 | .equ extruderport = portb
|
18 | .equ pullyport = portb
|
19 | .equ debug_mode = 1 // Wenn 1 werden alle SRAM Adressen mit smulationsfreundlichen werten vorbelegt
|
20 | .def flags = r22 //Bit 0=interrupt vorgefallen->micros verlgeichen Bit 1=Solldrehzahl verändert
|
21 | .equ update = 0
|
22 | .equ ex_rpm_change = 1
|
23 | .equ pully_rpm_change = 2
|
24 | .equ pully_enable = 3
|
25 | .equ extruder_enable = 4
|
26 |
|
27 | .org 0x0000
|
28 | rjmp main
|
29 |
|
30 | .org 0x0016
|
31 | rjmp TIMER1_COMPA
|
32 | //Ein Timer
|
33 |
|
34 | // Die jeweiligen Werte die für ein event nötig sind werden im sram gespeichert
|
35 | //Die kontrolle der taktzeiten findet nur stadt wenn ein interrupt des timers aktiv war und das flag im flags register gesetzt ist
|
36 | // Die berechnung soll nur durchgeführt werden wenn sich die solldrehzahl geändert hat
|
37 |
|
38 | //*nicht umgesetzte und getestet ideen:
|
39 |
|
40 |
|
41 |
|
42 | .org 0x0042
|
43 | main:
|
44 |
|
45 | ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
|
46 | out SPH, temp
|
47 | ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
|
48 | out SPL, temp
|
49 | ldi temp, 1
|
50 | mov r2, temp
|
51 | clr r3
|
52 | nop
|
53 | rjmp setup
|
54 |
|
55 |
|
56 |
|
57 | rjmp main
|
58 |
|
59 | debugging:
|
60 | push temp
|
61 | ldi temp, 0x0E
|
62 | sts soll_RPM_extruder, temp
|
63 | pop temp
|
64 | call extruderpuls
|
65 | rjmp loop
|
66 |
|
67 |
|
68 | setup:
|
69 | timer_setup:
|
70 | ldi temp, 160
|
71 | sts OCR1AL, temp
|
72 | ldi temp, 0x09
|
73 | sts TCCR1B, temp
|
74 | ldi temp, 0x02
|
75 | sts TIMSK1, temp
|
76 | sei
|
77 |
|
78 | ldi temp, debug_mode
|
79 | cpi temp, 1
|
80 |
|
81 | breq debugging
|
82 |
|
83 | ldi temp, 1 //Initialwert für jeden Motor ist 1 RPM
|
84 | sts soll_RPM_extruder, temp
|
85 | sts soll_RPM_pully, temp
|
86 |
|
87 |
|
88 |
|
89 | sbr flags, 1<<ex_rpm_change //Erstmaliges Laden der Sollwerte auslösen
|
90 | sbr flags, 1<<pully_rpm_change
|
91 | rjmp loop
|
92 |
|
93 |
|
94 |
|
95 | ///////////////////////////////////////////////////////Hauptschleife////////////////////////////////////////////
|
96 | loop:
|
97 |
|
98 | call check_timings
|
99 | rjmp loop
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 | stop_pully:
|
106 | cbr flags, 1<<pully_enable
|
107 |
|
108 | ret
|
109 |
|
110 | start_pully:
|
111 | sbr flags, 1<<pully_enable
|
112 | //nun noch den micros wert etws erhöht ins micros pully schreiben
|
113 |
|
114 | mov temp, micros_lsb
|
115 | inc temp
|
116 | inc temp
|
117 | inc temp
|
118 |
|
119 |
|
120 | sts pully_LSB,temp
|
121 | sts pully_MSB, micros_msb
|
122 |
|
123 | ret
|
124 |
|
125 | stop_extruder:
|
126 | cbr flags, 1<<extruder_enable
|
127 | ret
|
128 |
|
129 | start_extruder:
|
130 | sbr flags, 1<<extruder_enable
|
131 | mov temp, micros_lsb
|
132 | inc temp
|
133 | inc temp
|
134 | inc temp
|
135 |
|
136 |
|
137 | sts extrudermotor_LSB,temp
|
138 | sts extrudermotor_MSB, micros_msb
|
139 |
|
140 |
|
141 |
|
142 |
|
143 | ret
|
144 |
|
145 |
|
146 |
|
147 | check_timings:
|
148 |
|
149 | push temp //temp sichern
|
150 | push temp2 //temp2 sichern
|
151 |
|
152 | sbrs flags, update //wenn bit 1 gesetzt ist, trat ein interrupt auf und die micros wurden aktuallisiert
|
153 | rjmp skipped_all
|
154 |
|
155 |
|
156 | sbrc flags, extruder_enable //Wenn der Extruder deaktiviert ist wird weiter gesprungen
|
157 | rjmp skipped_ex
|
158 | cbr flags, 1<<update
|
159 | //Extrudermotor
|
160 | lds temp, extrudermotor_MSB //msb aus RAM laden
|
161 | cp temp, micros_MSB //und mit micros msb vergleichen
|
162 | brne skipped_EX //wenn MSB nicht gleich ist ->abbruch
|
163 | lds temp, extrudermotor_LSB //LSB laden
|
164 | cp temp, micros_LSB //mit micros vergleichen
|
165 | brne skipped_ex
|
166 |
|
167 | cp temp, micros_LSB //mit micros vergleichen
|
168 | breq extruderpuls_true
|
169 | rjmp skipped_ex
|
170 | extruderpuls_true:
|
171 | rcall extruderpuls
|
172 |
|
173 | skipped_ex: //vergleich von Extruder nicht Wahr oder puls bereits ausgeführt
|
174 |
|
175 |
|
176 | sbrc flags, pully_enable
|
177 | rjmp skipped_pully
|
178 | //Antrieb des Pullys
|
179 | lds temp, pully_MSB //msb aus RAM laden
|
180 | cp temp, micros_MSB //und mit micros msb vergleichen
|
181 | brne skipped_pully //wenn MSB nicht gleich ist ->abbruch
|
182 | lds temp, pully_LSB //LSB laden
|
183 | cp temp, micros_LSB //mit micros vergleichen
|
184 | brne skipped_pully
|
185 |
|
186 | cp temp, micros_LSB //mit micros vergleichen
|
187 | breq pully_true
|
188 | rjmp skipped_pully
|
189 | pully_true:
|
190 | rcall pullypuls
|
191 |
|
192 | skipped_pully:
|
193 | nop
|
194 |
|
195 | skipped_all:
|
196 |
|
197 | pop temp2
|
198 | pop temp
|
199 |
|
200 |
|
201 | ret
|
202 |
|
203 |
|
204 | //////////////////////ALLES WAS DEN PULLY BERIFFT///////////////
|
205 |
|
206 |
|
207 |
|
208 |
|
209 |
|
210 |
|
211 |
|
212 |
|
213 |
|
214 |
|
215 |
|
216 |
|
217 |
|
218 | /////////////////////////////////////////////MOTORIMPULSE UND AKTUALISIERUNG//////////////////////////////
|
219 | pullypuls:
|
220 | ////////////////////////////////////////////IMPULSERZEUGUNG
|
221 | sbi pullyddr, pullypin
|
222 | sbi pullyport,pullypin
|
223 | push temp
|
224 | ldi temp, 3
|
225 | bla2:
|
226 | dec temp //mindestimpuls 1 microsekunde also 16 takte
|
227 | cpi temp, 0
|
228 | brne bla2
|
229 | cbi pullyport, pullypin
|
230 | sbrc flags, pully_rpm_change //Wenn Solldrehzahl unverändert ist nächsten sprung übrspringen
|
231 | rcall pully_time_calculation
|
232 |
|
233 | ////////////////////////////////////////////UPDATE
|
234 |
|
235 | //Drehzahlwert mit den werten aus dem ram aktuallisieren und addieren
|
236 |
|
237 | lds temp, pully_LSB //LSB in temp 1 lesen
|
238 | lds temp2,pully_LSB_soll //LSB des Sollwertes
|
239 | lds temp3, pully_MSB
|
240 | lds temp4, pully_MSB_soll
|
241 |
|
242 |
|
243 | add temp, temp2 //addition des LSB
|
244 | adc temp3, temp4
|
245 | sts pully_LSB, temp //neuen Wert speichern
|
246 | sts pully_MSB, temp3
|
247 |
|
248 | pop temp
|
249 | ret
|
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 | pully_time_calculation:
|
256 | .equ minimumpully = 1
|
257 | .equ maximumpully = 10
|
258 |
|
259 | push temp
|
260 | push temp2
|
261 | push temp3
|
262 | push temp4
|
263 |
|
264 | cbr flags, 1<<pully_rpm_change
|
265 |
|
266 |
|
267 | lds r16, soll_RPM_pully
|
268 | subi r16,minimumpully ; Nullpunkt verschieben
|
269 | cpi r16,(maximumpully-minimumpully+1) ; Index auf Maximum prüfen
|
270 | brsh kein_Treffer2 ; Index zu gross -> Fehler
|
271 | ldi ZL,low(Sprungtabelle_Pully) ; Tabellenzeiger laden, 16 Bit
|
272 | ldi ZH,high(Sprungtabelle_Pully)
|
273 | add ZL,r16 ; Index addieren, 16 Bit
|
274 | ldi r16,0
|
275 | adc ZH,r16
|
276 | ijmp ; indirekter Sprung in Sprungtabelle
|
277 |
|
278 | kein_treffer2:
|
279 |
|
280 | rjmp fertig2
|
281 |
|
282 | Sprungtabelle_Pully:
|
283 | rjmp Pu1RPM
|
284 | rjmp Pu2RPM ///HIER MUSS FÜR DIE HÖHEREN DREHZAHLEN NOCH DIE SPRUNGTABELLE ERGÄNZT WERDEN!!!!!!!!!!!!!!
|
285 | rjmp Pu3RPM
|
286 | rjmp Pu4RPM
|
287 | rjmp Pu5RPM
|
288 | rjmp Pu6RPM
|
289 | rjmp Pu7RPM
|
290 | rjmp Pu8RPM
|
291 | rjmp Pu9RPM
|
292 | rjmp Pu10RPM
|
293 |
|
294 |
|
295 |
|
296 | /*
|
297 | 0x1770
|
298 | 0x1388
|
299 | 0x10bd
|
300 | 0xea6
|
301 | 0xd05
|
302 | 0xbb8
|
303 | 0xaa7
|
304 | 0x9c4
|
305 | 0x903
|
306 | 0x85e
|
307 | 0x7d0
|
308 | 0x753
|
309 | 0x6e4
|
310 | 0x682
|
311 | 0x62a
|
312 | 0x5dc
|
313 | 0x594
|
314 | 0x553
|
315 | 0x518
|
316 | 0x4e2
|
317 | 0x4af
|
318 | */
|
319 |
|
320 | Pu1RPM:
|
321 |
|
322 | ldi temp, 0x75
|
323 | sts pully_MSB_soll, temp
|
324 | ldi temp, 0x30
|
325 | sts pully_LSB_soll, temp
|
326 | rjmp fertig2
|
327 |
|
328 |
|
329 | Pu2RPM:
|
330 |
|
331 | ldi temp, 0x3A
|
332 | sts pully_MSB_soll, temp
|
333 | ldi temp, 0x98
|
334 | sts pully_LSB_soll, temp
|
335 | rjmp fertig2
|
336 |
|
337 | Pu3RPM:
|
338 |
|
339 | ldi temp, 0x27
|
340 | sts pully_MSB_soll, temp
|
341 | ldi temp, 0x10
|
342 | sts pully_LSB_soll, temp
|
343 | rjmp fertig2
|
344 |
|
345 | Pu4RPM:
|
346 |
|
347 | ldi temp, 0x1D
|
348 | sts pully_MSB_soll, temp
|
349 | ldi temp, 0x4C
|
350 | sts pully_LSB_soll, temp
|
351 | rjmp fertig2
|
352 |
|
353 | Pu5RPM:
|
354 |
|
355 | ldi temp, 0x17
|
356 | sts pully_MSB_soll, temp
|
357 | ldi temp, 0x70
|
358 | sts pully_LSB_soll, temp
|
359 | rjmp fertig2
|
360 |
|
361 | Pu6RPM:
|
362 |
|
363 | ldi temp, 0x13
|
364 | sts pully_MSB_soll, temp
|
365 | ldi temp, 0x88
|
366 | sts pully_LSB_soll, temp
|
367 | rjmp fertig2
|
368 |
|
369 | Pu7RPM:
|
370 |
|
371 | ldi temp, 0x10
|
372 | sts pully_MSB_soll, temp
|
373 | ldi temp, 0xBD
|
374 | sts pully_LSB_soll, temp
|
375 | rjmp fertig2
|
376 | Pu8RPM:
|
377 |
|
378 | ldi temp, 0x0E
|
379 | sts pully_MSB_soll, temp
|
380 | ldi temp, 0xA6
|
381 | sts pully_LSB_soll, temp
|
382 | rjmp fertig2
|
383 |
|
384 | Pu9RPM:
|
385 |
|
386 | ldi temp, 0x0D
|
387 | sts pully_MSB_soll, temp
|
388 | ldi temp, 0x05
|
389 | sts pully_LSB_soll, temp
|
390 | rjmp fertig2
|
391 |
|
392 | Pu10RPM:
|
393 |
|
394 | ldi temp, 0x0B
|
395 | sts pully_MSB_soll, temp
|
396 | ldi temp, 0xB8
|
397 | sts pully_LSB_soll, temp
|
398 | rjmp fertig2
|
399 |
|
400 |
|
401 |
|
402 |
|
403 | fertig2:
|
404 | pop temp4
|
405 | pop temp3
|
406 | pop temp2
|
407 | pop temp
|
408 | ret
|
409 |
|
410 |
|
411 |
|
412 | ////////////////////ALLES WAS DEN EXTRUDERMOTOR BETRIFFT/////////////////////////
|
413 |
|
414 |
|
415 |
|
416 |
|
417 |
|
418 | /////////////////////////////////////////////MOTORIMPULSE UND AKTUALISIERUNG//////////////////////////////
|
419 | extruderpuls:
|
420 | ////////////////////////////////////////////IMPULSERZEUGUNG
|
421 | sbi extruderddr, extruderpin
|
422 | sbi extruderport,extruderpin
|
423 | push temp
|
424 | ldi temp, 3
|
425 | bla1:
|
426 | dec temp //mindestimpuls 1 microsekunde also 16 takte
|
427 | cpi temp, 0
|
428 | brne bla1
|
429 | cbi extruderport, extruderpin
|
430 | sbrc flags, ex_rpm_change //Wenn Solldrehzahl unverändert ist nächsten sprung übrspringen
|
431 | rcall extruder_time_calculation
|
432 |
|
433 | ////////////////////////////////////////////UPDATE
|
434 |
|
435 | //Extruderwert mit den werten aus dem ram aktuallisieren und addieren
|
436 |
|
437 | lds temp, extrudermotor_LSB //LSB in temp 1 lesen
|
438 | lds temp2,extrudermotor_LSB_soll //LSB des Sollwertes
|
439 | lds temp3, extrudermotor_MSB
|
440 | lds temp4, extrudermotor_MSB_soll
|
441 |
|
442 |
|
443 | add temp, temp2 //addition des LSB
|
444 | adc temp3, temp4
|
445 | sts extrudermotor_LSB, temp //neuen Wert speichern
|
446 | sts extrudermotor_MSB, temp3
|
447 |
|
448 | pop temp
|
449 | ret
|
450 |
|
451 |
|
452 |
|
453 | extruder_time_calculation:
|
454 | //////////////////////////////////////////Anhand der Drehzahl die Zeit als faktor von 10 micors berechnen
|
455 |
|
456 |
|
457 | //Nur ausführen wenn Flag 2 in flags gesetzt ist (update_request_extruder)
|
458 | //Es ergibt sich folgende formel 100000/(RPM/60*STEPPS)
|
459 |
|
460 | //Bei 1 RPM un d 200 steps auflösung ergibt sich ein wert von 30.000
|
461 | //Bei 100 RPM ergibt sich ein wert von 300
|
462 | //bei 60 RPM ein Wert von 500
|
463 |
|
464 | //Dar der Extruder ein Getribemotor 1:5 ist
|
465 | //ergibt sich (100.000/(RPM/60x1000)
|
466 | //somit für 60 RPM ein Wert von 100
|
467 | //für 1 RPM ein Wert von 6000
|
468 | //für 100RPM ein Wert von 60
|
469 |
|
470 |
|
471 | //Idee wurde verworfen
|
472 | //Daten sind im EEPROM gespeichert
|
473 | //Adresse 1 enstpsricht 1 RPM und aufwärts
|
474 |
|
475 | .equ minimum = 1
|
476 | .equ maximum = 15
|
477 |
|
478 | push temp
|
479 | push temp2
|
480 | push temp3
|
481 | push temp4
|
482 |
|
483 | cbr flags, 1<<ex_rpm_change
|
484 |
|
485 |
|
486 | lds r16, soll_RPM_extruder
|
487 | subi r16,minimum ; Nullpunkt verschieben
|
488 | cpi r16,(maximum-minimum+1) ; Index auf Maximum prüfen
|
489 | brsh kein_Treffer ; Index zu gross -> Fehler
|
490 | ldi ZL,low(Sprungtabelle) ; Tabellenzeiger laden, 16 Bit
|
491 | ldi ZH,high(Sprungtabelle)
|
492 | add ZL,r16 ; Index addieren, 16 Bit
|
493 | ldi r16,0
|
494 | adc ZH,r16
|
495 | ijmp ; indirekter Sprung in Sprungtabelle
|
496 |
|
497 | kein_treffer:
|
498 |
|
499 | rjmp fertig
|
500 |
|
501 | Sprungtabelle:
|
502 | rjmp Ex1RPM
|
503 | rjmp Ex2RPM ///HIER MUSS FÜR DIE HÖHEREN DREHZAHLEN NOCH DIE SPRUNGTABELLE ERGÄNZT WERDEN!!!!!!!!!!!!!!
|
504 | rjmp Ex3RPM
|
505 | rjmp Ex4RPM
|
506 | rjmp Ex5RPM
|
507 | rjmp Ex6RPM
|
508 | rjmp Ex7RPM
|
509 | rjmp Ex8RPM
|
510 | rjmp Ex9RPM
|
511 | rjmp Ex10RPM
|
512 | rjmp Ex11RPM
|
513 | rjmp Ex12RPM
|
514 | rjmp Ex13RPM
|
515 | rjmp Ex14RPM
|
516 | rjmp Ex15RPM
|
517 |
|
518 | Ex1RPM:
|
519 | ldi temp, 0x70
|
520 | sts extrudermotor_LSB_soll, temp
|
521 | ldi temp, 0x17
|
522 | sts extrudermotor_MSB_soll, temp
|
523 | rjmp fertig
|
524 |
|
525 |
|
526 | Ex2RPM:
|
527 | ldi temp, 0xB8
|
528 | sts extrudermotor_LSB_soll, temp
|
529 | ldi temp, 0x0B
|
530 | sts extrudermotor_MSB_soll, temp
|
531 |
|
532 | rjmp fertig
|
533 |
|
534 |
|
535 | Ex3RPM:
|
536 | ldi temp, 0xD0
|
537 | sts extrudermotor_LSB_soll, temp
|
538 | ldi temp, 0x07
|
539 | sts extrudermotor_MSB_soll, temp
|
540 | rjmp fertig
|
541 |
|
542 |
|
543 | Ex4RPM:
|
544 | ldi temp, 0xDC
|
545 | sts extrudermotor_LSB_soll, temp
|
546 | ldi temp, 0x05
|
547 | sts extrudermotor_MSB_soll, temp
|
548 | rjmp fertig
|
549 |
|
550 | Ex5RPM:
|
551 | ldi temp, 0xB0
|
552 | sts extrudermotor_LSB_soll, temp
|
553 | ldi temp, 0x04
|
554 | sts extrudermotor_MSB_soll, temp
|
555 | rjmp fertig
|
556 |
|
557 | Ex6RPM:
|
558 | ldi temp, 0xE8
|
559 | sts extrudermotor_LSB_soll, temp
|
560 | ldi temp, 0x03
|
561 | sts extrudermotor_MSB_soll, temp
|
562 | rjmp fertig
|
563 |
|
564 | Ex7RPM:
|
565 | ldi temp, 0x58
|
566 | sts extrudermotor_LSB_soll, temp
|
567 | ldi temp, 0x03
|
568 | sts extrudermotor_MSB_soll, temp
|
569 | rjmp fertig
|
570 |
|
571 | Ex8RPM:
|
572 | ldi temp, 0xEE
|
573 | sts extrudermotor_LSB_soll, temp
|
574 | ldi temp, 0x02
|
575 | sts extrudermotor_MSB_soll, temp
|
576 | rjmp fertig
|
577 |
|
578 | Ex9RPM:
|
579 | ldi temp, 0x9A
|
580 | sts extrudermotor_LSB_soll, temp
|
581 | ldi temp, 0x02
|
582 | sts extrudermotor_MSB_soll, temp
|
583 | rjmp fertig
|
584 |
|
585 | Ex10RPM:
|
586 | ldi temp, 0x58
|
587 | sts extrudermotor_LSB_soll, temp
|
588 | ldi temp, 0x02
|
589 | sts extrudermotor_MSB_soll, temp
|
590 | rjmp fertig
|
591 |
|
592 | Ex11RPM:
|
593 | ldi temp, 0x21
|
594 | sts extrudermotor_LSB_soll, temp
|
595 | ldi temp, 0x02
|
596 | sts extrudermotor_MSB_soll, temp
|
597 | rjmp fertig
|
598 |
|
599 | Ex12RPM:
|
600 | ldi temp, 0xF4
|
601 | sts extrudermotor_LSB_soll, temp
|
602 | ldi temp, 0x01
|
603 | sts extrudermotor_MSB_soll, temp
|
604 | rjmp fertig
|
605 |
|
606 | Ex13RPM:
|
607 | ldi temp, 0xCC
|
608 | sts extrudermotor_LSB_soll, temp
|
609 | ldi temp, 0x01
|
610 | sts extrudermotor_MSB_soll, temp
|
611 | rjmp fertig
|
612 |
|
613 | Ex14RPM:
|
614 | ldi temp, 0xAD
|
615 | sts extrudermotor_LSB_soll, temp
|
616 | ldi temp, 0x01
|
617 | sts extrudermotor_MSB_soll, temp
|
618 | rjmp fertig
|
619 |
|
620 | Ex15RPM:
|
621 | ldi temp, 0x90
|
622 | sts extrudermotor_LSB_soll, temp
|
623 | ldi temp, 0x01
|
624 | sts extrudermotor_MSB_soll, temp
|
625 | rjmp fertig
|
626 |
|
627 | Ex16RPM:
|
628 | ldi temp, 0x77
|
629 | sts extrudermotor_LSB_soll, temp
|
630 | ldi temp, 0x01
|
631 | sts extrudermotor_MSB_soll, temp
|
632 | rjmp fertig
|
633 |
|
634 | Ex17RPM:
|
635 | ldi temp, 0x60
|
636 | sts extrudermotor_LSB_soll, temp
|
637 | ldi temp, 0x01
|
638 | sts extrudermotor_MSB_soll, temp
|
639 | rjmp fertig
|
640 |
|
641 | Ex18RPM:
|
642 | ldi temp, 0x4D
|
643 | sts extrudermotor_LSB_soll, temp
|
644 | ldi temp, 0x01
|
645 | sts extrudermotor_MSB_soll, temp
|
646 | rjmp fertig
|
647 |
|
648 | Ex19RPM:
|
649 | ldi temp, 0x3B
|
650 | sts extrudermotor_LSB_soll, temp
|
651 | ldi temp, 0x01
|
652 | sts extrudermotor_MSB_soll, temp
|
653 | rjmp fertig
|
654 |
|
655 | Ex20RPM:
|
656 | ldi temp, 0x2C
|
657 | sts extrudermotor_LSB_soll, temp
|
658 | ldi temp, 0x01
|
659 | sts extrudermotor_MSB_soll, temp
|
660 | rjmp fertig
|
661 |
|
662 |
|
663 | fertig:
|
664 | pop temp4
|
665 | pop temp3
|
666 | pop temp2
|
667 | pop temp
|
668 | ret
|
669 |
|
670 |
|
671 |
|
672 |
|
673 |
|
674 |
|
675 | //////////////////////////////////////////////////Interruptroutinen///////////////////////////////////////////
|
676 | TIMER1_COMPA:
|
677 | push temp
|
678 | in temp, SREG
|
679 | push temp
|
680 | ldi temp, 1
|
681 | add micros_lsb, r2
|
682 | adc micros_msb, r3
|
683 | ldi temp, 160 //160 Takte ohne prescaler bei 16 mhz ergibt einen eine auflösung von 10 micros
|
684 | sts OCR1AL, temp //OCRA1H bleibt null dar Timer 1 ein 16biit timer ist, allerdings nur bis 160 im CTC Mode gezählt wird
|
685 | sbr flags, 1<<update //Zähler wurde aktuallisiert, also Flag setzen um im loop die motoren mit dem neuen Wert zu vegleichen
|
686 | pop temp
|
687 | out SREG, temp
|
688 | pop temp
|
689 | reti
|
690 |
|
691 |
|
692 |
|
693 |
|
694 |
|
695 | //Die RAM Adressen
|
696 | .DSEG ; Umschalten auf das SRAM Datensegment
|
697 | debbuging: .BYTE 1
|
698 | extrudermotor_LSB: .BYTE 1 //Zeitpunkt des nächsten events
|
699 | extrudermotor_MSB: .BYTE 1
|
700 | pully_LSB: .BYTE 1
|
701 | pully_MSB: .BYTE 1
|
702 |
|
703 |
|
704 | extrudermotor_LSB_soll: .BYTE 1 //Zeitdifferenz anhand der Drehzahl
|
705 | extrudermotor_MSB_soll: .BYTE 1
|
706 | pully_LSB_soll: .BYTE 1
|
707 | pully_MSB_soll: .BYTE 1
|
708 |
|
709 |
|
710 |
|
711 | soll_RPM_extruder: .BYTE 1 //Vorgabe Drehzahl
|
712 | soll_RPM_pully: .BYTE 1
|