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 extruder_ddr = ddrb
|
13 | .equ pully_ddr = ddrb
|
14 | .equ extruder_switch = PB0
|
15 | .equ extruder_step = PB1 //enable Pins sind activ low
|
16 | .equ extruder_enable = PB2
|
17 | .equ pully_step = PB3
|
18 | .equ pully_enable = PB4
|
19 | .equ pully_switch = PB5
|
20 | .equ extruder_port = portb
|
21 | .equ pully_port = portb
|
22 | .equ extruder_pin = pinb
|
23 | .equ pully_pin = pinb
|
24 | .equ debug_mode = 1 // Wenn 1 werden alle SRAM Adressen mit smulationsfreundlichen werten vorbelegt
|
25 | .def flags = r22 //Bit 0=interrupt vorgefallen->micros verlgeichen Bit 1=Solldrehzahl verändert
|
26 | .equ update = 0
|
27 | .equ extruder_running = 1
|
28 | .equ pully_running = 2
|
29 |
|
30 | .def UI_flags = r23 //flags für LCD User Interface
|
31 | .equ LCD_update = 0;
|
32 | .equ inc_exRPM = 1;
|
33 | .equ inc_puRPM = 2;
|
34 | .equ dec_exRPM = 3;
|
35 | .equ dec_puRPM = 4;
|
36 |
|
37 | .def menu = r24
|
38 | .def submenu = r25
|
39 | .def menuvalue = r26
|
40 |
|
41 |
|
42 | .org 0x0000
|
43 | rjmp main
|
44 |
|
45 | .org 0x0016
|
46 | rjmp TIMER1_COMPA
|
47 | //Ein Timer
|
48 |
|
49 | // Die jeweiligen Werte die für ein event nötig sind werden im sram gespeichert
|
50 | //Die kontrolle der taktzeiten findet nur stadt wenn ein interrupt des timers aktiv war und das flag im flags register gesetzt ist
|
51 | // Die berechnung soll nur durchgeführt werden wenn sich die solldrehzahl geändert hat
|
52 |
|
53 | //*nicht umgesetzte und getestet ideen:
|
54 |
|
55 |
|
56 |
|
57 | .org 0x0042
|
58 | main:
|
59 |
|
60 | ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
|
61 | out SPH, temp
|
62 | ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
|
63 | out SPL, temp
|
64 | ldi temp, 1
|
65 | mov r2, temp
|
66 | clr r3
|
67 | nop
|
68 | rjmp setup
|
69 |
|
70 |
|
71 |
|
72 | rjmp main
|
73 |
|
74 | debugging:
|
75 | push temp
|
76 | ldi temp, 0x09 //hier kann für tests de solldrehzahl vorgegeben werden
|
77 | sts soll_RPM_extruder, temp
|
78 | sts soll_RPM_pully, temp
|
79 | pop temp
|
80 | //call extruderpuls
|
81 | //call pullypuls
|
82 | ret
|
83 |
|
84 |
|
85 | setup:
|
86 | timer_setup:
|
87 | ldi temp, 160
|
88 | sts OCR1AL, temp
|
89 | ldi temp, 0x09
|
90 | sts TCCR1B, temp
|
91 | ldi temp, 0x02
|
92 | sts TIMSK1, temp
|
93 | sei
|
94 | rcall tempsetup
|
95 | ldi temp, debug_mode
|
96 | cpi temp, 1
|
97 |
|
98 | brne no_debugging
|
99 | rcall debugging
|
100 | no_debugging:
|
101 | //Initialwert für jeden Motor ist 1 RPM
|
102 |
|
103 | in temp, extruder_ddr
|
104 | sbr temp, 1<<extruder_enable
|
105 | sbr temp, 1<<extruder_step
|
106 | out extruder_ddr, temp
|
107 | in temp, extruder_port
|
108 | sbr temp, 1<<extruder_enable
|
109 | out extruder_port, temp
|
110 |
|
111 |
|
112 |
|
113 |
|
114 | in temp, pully_ddr
|
115 | sbr temp, 1<<pully_enable
|
116 | sbr temp, 1<<pully_step
|
117 | out pully_ddr, temp
|
118 | in temp,pully_port
|
119 | sbr temp, 1<<pully_enable
|
120 | out pully_port, temp
|
121 |
|
122 |
|
123 |
|
124 | ldi temp, 1
|
125 | sts soll_RPM_extruder, temp
|
126 | sts soll_RPM_pully, temp
|
127 |
|
128 |
|
129 |
|
130 | rjmp loop
|
131 |
|
132 |
|
133 |
|
134 | ///////////////////////////////////////////////////////Hauptschleife////////////////////////////////////////////
|
135 | loop:
|
136 |
|
137 | ldi temp, debug_mode
|
138 | cpi temp, 1
|
139 | brne skipped_debugging
|
140 |
|
141 |
|
142 |
|
143 | skipped_debugging:
|
144 |
|
145 | call check_timings
|
146 | rcall motor_stats
|
147 |
|
148 |
|
149 | rcall read_temp
|
150 |
|
151 | rjmp skipped_debugging
|
152 |
|
153 |
|
154 |
|
155 |
|
156 | ///////////////////////////////////////////////////////Unterprogramme
|
157 | motor_stats:
|
158 | // Hier werden die motoren nach Zustand der Schalter eingeschalten
|
159 | // Beim Extruder wird zusätzlich noch überprüft ob die Ist-Temperatur über 120 grad liegt
|
160 | // Also wenn die Temperatur höher ist und extruder_running nicht gesetzt ist wird start_extruder aufgerufen wenn der dementsprechende pin HIGH ist
|
161 |
|
162 | //Beim Pully das selbige, nur ist hier die temperatur egal
|
163 | push temp
|
164 |
|
165 | in temp, pully_pin
|
166 | sbrc temp, pully_switch
|
167 | rcall power_pully
|
168 |
|
169 | sbrs temp, pully_switch
|
170 | rcall power_down_pully
|
171 |
|
172 |
|
173 | in temp, extruder_pin
|
174 | sbrc temp, extruder_switch
|
175 | rcall power_extruder
|
176 |
|
177 | sbrs temp, extruder_switch
|
178 | rcall power_down_extruder
|
179 |
|
180 |
|
181 |
|
182 |
|
183 | pop temp
|
184 | ret
|
185 |
|
186 |
|
187 | power_down_pully:
|
188 | //sbrc flags, pully_running
|
189 | rcall stop_pully
|
190 |
|
191 | ret
|
192 | power_down_extruder:
|
193 |
|
194 |
|
195 | //sbrc flags, extruder_running
|
196 | rcall stop_extruder
|
197 |
|
198 | ret
|
199 |
|
200 |
|
201 | power_pully:
|
202 | sbrs flags, pully_running
|
203 | rcall start_pully
|
204 |
|
205 | ret
|
206 | power_extruder:
|
207 | push temp
|
208 |
|
209 | lds temp, ist_temperatur
|
210 | cpi temp, 120
|
211 | brlo power_down_extruder
|
212 |
|
213 | lds temp, ist_temperatur
|
214 | cpi temp, 120
|
215 | brlo temp_NIO
|
216 |
|
217 |
|
218 | sbrs flags, extruder_running
|
219 | rcall start_extruder
|
220 | temp_NIO:
|
221 | pop temp
|
222 | ret
|
223 |
|
224 |
|
225 |
|
226 | stop_pully:
|
227 | push temp
|
228 | lds temp, pully_port
|
229 | sbr temp, pully_enable
|
230 | sts pully_port, temp
|
231 | pop temp
|
232 | cbr flags, 1<<pully_running
|
233 | ret
|
234 |
|
235 | start_pully:
|
236 | push temp
|
237 | in temp, pully_port
|
238 | cbr temp, 1<<pully_enable
|
239 | out pully_port, temp
|
240 |
|
241 |
|
242 | //nun noch den micros wert etws erhöht ins micros pully schreiben
|
243 |
|
244 | mov temp, micros_lsb
|
245 | inc temp
|
246 | inc temp
|
247 | inc temp
|
248 |
|
249 |
|
250 | sts pully_LSB,temp
|
251 | sts pully_MSB, micros_msb
|
252 | pop temp
|
253 | sbr flags, 1<<pully_running
|
254 | ret
|
255 |
|
256 |
|
257 | stop_extruder:
|
258 | push temp
|
259 | lds temp, extruder_port
|
260 | sbr temp, extruder_enable
|
261 | sts extruder_port, temp
|
262 | pop temp
|
263 | cbr flags, 1<<extruder_running
|
264 | ret
|
265 |
|
266 | start_extruder:
|
267 | push temp
|
268 | in temp, extruder_port
|
269 | cbr temp, 1<<extruder_enable
|
270 | out extruder_port, temp
|
271 |
|
272 |
|
273 | mov temp, micros_lsb
|
274 | inc temp
|
275 | inc temp
|
276 | inc temp
|
277 |
|
278 |
|
279 | sts extrudermotor_LSB,temp
|
280 | sts extrudermotor_MSB, micros_msb
|
281 |
|
282 | pop temp
|
283 | sbr flags, 1<<extruder_running
|
284 | ret
|
285 |
|
286 |
|
287 |
|
288 | check_timings:
|
289 |
|
290 | push temp //temp sichern
|
291 | push temp2 //temp2 sichern
|
292 |
|
293 | sbrs flags, update //wenn bit 1 gesetzt ist, trat ein interrupt auf und die micros wurden aktuallisiert
|
294 | rjmp skipped_all
|
295 |
|
296 |
|
297 | //sbrs flags, extruder_enable //Wenn der Extruder deaktiviert ist wird weiter gesprungen
|
298 | //rjmp skipped_ex
|
299 | cbr flags, 1<<update
|
300 | //Extrudermotor
|
301 | lds temp, extrudermotor_MSB //msb aus RAM laden
|
302 | cp temp, micros_MSB //und mit micros msb vergleichen
|
303 | brne skipped_EX //wenn MSB nicht gleich ist ->abbruch
|
304 | lds temp, extrudermotor_LSB //LSB laden
|
305 | cp temp, micros_LSB //mit micros vergleichen
|
306 | brne skipped_ex
|
307 |
|
308 | cp temp, micros_LSB //mit micros vergleichen
|
309 | breq extruderpuls_true
|
310 | rjmp skipped_ex
|
311 | extruderpuls_true:
|
312 | rcall extruderpuls
|
313 |
|
314 | skipped_ex: //vergleich von Extruder nicht Wahr oder puls bereits ausgeführt
|
315 |
|
316 |
|
317 | //sbrs flags, pully_enable
|
318 | //rjmp skipped_pully
|
319 | //Antrieb des Pullys
|
320 | lds temp, pully_MSB //msb aus RAM laden
|
321 | cp temp, micros_MSB //und mit micros msb vergleichen
|
322 | brne skipped_pully //wenn MSB nicht gleich ist ->abbruch
|
323 | lds temp, pully_LSB //LSB laden
|
324 | cp temp, micros_LSB //mit micros vergleichen
|
325 | brne skipped_pully
|
326 |
|
327 | cp temp, micros_LSB //mit micros vergleichen
|
328 | breq pully_true
|
329 | rjmp skipped_pully
|
330 | pully_true:
|
331 | rcall pullypuls
|
332 |
|
333 | skipped_pully:
|
334 | nop
|
335 |
|
336 | skipped_all:
|
337 |
|
338 | pop temp2
|
339 | pop temp
|
340 |
|
341 |
|
342 | ret
|
343 |
|
344 |
|
345 | ///////////////////////////////////////////////////////Temperaturmessung
|
346 | tempsetup:
|
347 | push temp
|
348 | push temp2
|
349 | ldi temp, (1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)
|
350 | sts ADCSRA, temp
|
351 | //ADC freerunning mit prescaler 128
|
352 | ldi temp, (1<<REFS0)|(1<<ADLAR) //ADC im 8 bit Modus. Immer erst ADC low und dann ADC High auslesen!!
|
353 |
|
354 | sts ADMUX, temp //Messumformer auf 0-5V 0-250° einstellen
|
355 | pop temp2
|
356 | pop temp
|
357 | ret
|
358 |
|
359 | read_temp:
|
360 |
|
361 |
|
362 | push temp
|
363 | push temp2
|
364 | lds temp, ADCSRA
|
365 | sbrs temp, ADIF //zurück zur Hauptschleife wenn ADC noch nicht fertig
|
366 | rjmp no_temp
|
367 |
|
368 | lds temp, ADCL
|
369 | lds temp, ADCH
|
370 | sts ist_temperatur, temp //Temperatur in den RAM schreiben
|
371 | no_temp:
|
372 | pop temp2
|
373 | pop temp
|
374 | ret
|
375 |
|
376 |
|
377 |
|
378 | //////////////////////ALLES WAS DEN PULLY BERIFFT///////////////
|
379 |
|
380 |
|
381 |
|
382 |
|
383 |
|
384 |
|
385 |
|
386 |
|
387 |
|
388 |
|
389 |
|
390 |
|
391 |
|
392 | /////////////////////////////////////////////MOTORIMPULSE UND AKTUALISIERUNG//////////////////////////////
|
393 | pullypuls:
|
394 | ////////////////////////////////////////////IMPULSERZEUGUNG
|
395 | sbi pully_ddr, pully_step
|
396 | sbi pully_port,pully_step
|
397 | push temp
|
398 | ldi temp, 3
|
399 | bla2:
|
400 | dec temp //mindestimpuls 1 microsekunde also 16 takte
|
401 | cpi temp, 0
|
402 | brne bla2
|
403 | cbi pully_port, pully_step
|
404 | //sbrc flags, pully_rpm_change //Wenn Solldrehzahl unverändert ist nächsten sprung übrspringen
|
405 | rcall pully_time_calculation
|
406 |
|
407 | ////////////////////////////////////////////UPDATE
|
408 |
|
409 | //Drehzahlwert mit den werten aus dem ram aktuallisieren und addieren
|
410 |
|
411 | lds temp, pully_LSB //LSB in temp 1 lesen
|
412 | lds temp2,pully_LSB_soll //LSB des Sollwertes
|
413 | lds temp3, pully_MSB
|
414 | lds temp4, pully_MSB_soll
|
415 |
|
416 |
|
417 | add temp, temp2 //addition des LSB
|
418 | adc temp3, temp4
|
419 | sts pully_LSB, temp //neuen Wert speichern
|
420 | sts pully_MSB, temp3
|
421 |
|
422 | pop temp
|
423 | ret
|
424 |
|
425 |
|
426 |
|
427 |
|
428 |
|
429 | pully_time_calculation:
|
430 | .equ minimumpully = 1
|
431 | .equ maximumpully = 10
|
432 |
|
433 | push temp
|
434 | push temp2
|
435 | push temp3
|
436 | push temp4
|
437 |
|
438 |
|
439 |
|
440 | lds r16, soll_RPM_pully
|
441 | subi r16,minimumpully ; Nullpunkt verschieben
|
442 | cpi r16,(maximumpully-minimumpully+1) ; Index auf Maximum prüfen
|
443 | brsh kein_Treffer2 ; Index zu gross -> Fehler
|
444 | ldi ZL,low(Sprungtabelle_Pully) ; Tabellenzeiger laden, 16 Bit
|
445 | ldi ZH,high(Sprungtabelle_Pully)
|
446 | add ZL,r16 ; Index addieren, 16 Bit
|
447 | ldi r16,0
|
448 | adc ZH,r16
|
449 | ijmp ; indirekter Sprung in Sprungtabelle
|
450 |
|
451 | kein_treffer2:
|
452 |
|
453 | rjmp fertig2
|
454 |
|
455 | Sprungtabelle_Pully:
|
456 | rjmp Pu1RPM
|
457 | rjmp Pu2RPM ///HIER MUSS FÜR DIE HÖHEREN DREHZAHLEN NOCH DIE SPRUNGTABELLE ERGÄNZT WERDEN!!!!!!!!!!!!!!
|
458 | rjmp Pu3RPM
|
459 | rjmp Pu4RPM
|
460 | rjmp Pu5RPM
|
461 | rjmp Pu6RPM
|
462 | rjmp Pu7RPM
|
463 | rjmp Pu8RPM
|
464 | rjmp Pu9RPM
|
465 | rjmp Pu10RPM
|
466 |
|
467 |
|
468 |
|
469 | /*
|
470 | 0x1770
|
471 | 0x1388
|
472 | 0x10bd
|
473 | 0xea6
|
474 | 0xd05
|
475 | 0xbb8
|
476 | 0xaa7
|
477 | 0x9c4
|
478 | 0x903
|
479 | 0x85e
|
480 | 0x7d0
|
481 | 0x753
|
482 | 0x6e4
|
483 | 0x682
|
484 | 0x62a
|
485 | 0x5dc
|
486 | 0x594
|
487 | 0x553
|
488 | 0x518
|
489 | 0x4e2
|
490 | 0x4af
|
491 | */
|
492 |
|
493 | Pu1RPM:
|
494 |
|
495 | ldi temp, 0x75
|
496 | sts pully_MSB_soll, temp
|
497 | ldi temp, 0x30
|
498 | sts pully_LSB_soll, temp
|
499 | rjmp fertig2
|
500 |
|
501 |
|
502 | Pu2RPM:
|
503 |
|
504 | ldi temp, 0x3A
|
505 | sts pully_MSB_soll, temp
|
506 | ldi temp, 0x98
|
507 | sts pully_LSB_soll, temp
|
508 | rjmp fertig2
|
509 |
|
510 | Pu3RPM:
|
511 |
|
512 | ldi temp, 0x27
|
513 | sts pully_MSB_soll, temp
|
514 | ldi temp, 0x10
|
515 | sts pully_LSB_soll, temp
|
516 | rjmp fertig2
|
517 |
|
518 | Pu4RPM:
|
519 |
|
520 | ldi temp, 0x1D
|
521 | sts pully_MSB_soll, temp
|
522 | ldi temp, 0x4C
|
523 | sts pully_LSB_soll, temp
|
524 | rjmp fertig2
|
525 |
|
526 | Pu5RPM:
|
527 |
|
528 | ldi temp, 0x17
|
529 | sts pully_MSB_soll, temp
|
530 | ldi temp, 0x70
|
531 | sts pully_LSB_soll, temp
|
532 | rjmp fertig2
|
533 |
|
534 | Pu6RPM:
|
535 |
|
536 | ldi temp, 0x13
|
537 | sts pully_MSB_soll, temp
|
538 | ldi temp, 0x88
|
539 | sts pully_LSB_soll, temp
|
540 | rjmp fertig2
|
541 |
|
542 | Pu7RPM:
|
543 |
|
544 | ldi temp, 0x10
|
545 | sts pully_MSB_soll, temp
|
546 | ldi temp, 0xBD
|
547 | sts pully_LSB_soll, temp
|
548 | rjmp fertig2
|
549 | Pu8RPM:
|
550 |
|
551 | ldi temp, 0x0E
|
552 | sts pully_MSB_soll, temp
|
553 | ldi temp, 0xA6
|
554 | sts pully_LSB_soll, temp
|
555 | rjmp fertig2
|
556 |
|
557 | Pu9RPM:
|
558 |
|
559 | ldi temp, 0x0D
|
560 | sts pully_MSB_soll, temp
|
561 | ldi temp, 0x05
|
562 | sts pully_LSB_soll, temp
|
563 | rjmp fertig2
|
564 |
|
565 | Pu10RPM:
|
566 |
|
567 | ldi temp, 0x0B
|
568 | sts pully_MSB_soll, temp
|
569 | ldi temp, 0xB8
|
570 | sts pully_LSB_soll, temp
|
571 | rjmp fertig2
|
572 |
|
573 |
|
574 |
|
575 |
|
576 | fertig2:
|
577 | pop temp4
|
578 | pop temp3
|
579 | pop temp2
|
580 | pop temp
|
581 | ret
|
582 |
|
583 |
|
584 |
|
585 | ////////////////////ALLES WAS DEN EXTRUDERMOTOR BETRIFFT/////////////////////////
|
586 |
|
587 |
|
588 |
|
589 |
|
590 |
|
591 | /////////////////////////////////////////////MOTORIMPULSE UND AKTUALISIERUNG//////////////////////////////
|
592 | extruderpuls:
|
593 | ////////////////////////////////////////////IMPULSERZEUGUNG
|
594 | sbi extruder_ddr, extruder_step
|
595 | sbi extruder_port,extruder_step
|
596 | push temp
|
597 | ldi temp, 3
|
598 | bla1:
|
599 | dec temp //mindestimpuls 1 microsekunde also 16 takte
|
600 | cpi temp, 0
|
601 | brne bla1
|
602 | cbi extruder_port, extruder_step
|
603 | //sbrc flags, ex_rpm_change //Wenn Solldrehzahl unverändert ist nächsten sprung übrspringen
|
604 | rcall extruder_time_calculation
|
605 |
|
606 | ////////////////////////////////////////////UPDATE
|
607 |
|
608 | //Extruderwert mit den werten aus dem ram aktuallisieren und addieren
|
609 |
|
610 | lds temp, extrudermotor_LSB //LSB in temp 1 lesen
|
611 | lds temp2,extrudermotor_LSB_soll //LSB des Sollwertes
|
612 | lds temp3, extrudermotor_MSB
|
613 | lds temp4, extrudermotor_MSB_soll
|
614 |
|
615 |
|
616 | add temp, temp2 //addition des LSB
|
617 | adc temp3, temp4
|
618 | sts extrudermotor_LSB, temp //neuen Wert speichern
|
619 | sts extrudermotor_MSB, temp3
|
620 |
|
621 | pop temp
|
622 | ret
|
623 |
|
624 |
|
625 |
|
626 | extruder_time_calculation:
|
627 | //////////////////////////////////////////Anhand der Drehzahl die Zeit als faktor von 10 micors berechnen
|
628 |
|
629 |
|
630 | //Nur ausführen wenn Flag 2 in flags gesetzt ist (update_request_extruder)
|
631 | //Es ergibt sich folgende formel 100000/(RPM/60*STEPPS)
|
632 |
|
633 | //Bei 1 RPM un d 200 steps auflösung ergibt sich ein wert von 30.000
|
634 | //Bei 100 RPM ergibt sich ein wert von 300
|
635 | //bei 60 RPM ein Wert von 500
|
636 |
|
637 | //Dar der Extruder ein Getribemotor 1:5 ist
|
638 | //ergibt sich (100.000/(RPM/60x1000)
|
639 | //somit für 60 RPM ein Wert von 100
|
640 | //für 1 RPM ein Wert von 6000
|
641 | //für 100RPM ein Wert von 60
|
642 |
|
643 |
|
644 | //Idee wurde verworfen
|
645 | //Daten sind im EEPROM gespeichert
|
646 | //Adresse 1 enstpsricht 1 RPM und aufwärts
|
647 |
|
648 | .equ minimum = 1
|
649 | .equ maximum = 15
|
650 |
|
651 | push temp
|
652 | push temp2
|
653 | push temp3
|
654 | push temp4
|
655 |
|
656 |
|
657 | lds r16, soll_RPM_extruder
|
658 | subi r16,minimum ; Nullpunkt verschieben
|
659 | cpi r16,(maximum-minimum+1) ; Index auf Maximum prüfen
|
660 | brsh kein_Treffer ; Index zu gross -> Fehler
|
661 | ldi ZL,low(Sprungtabelle) ; Tabellenzeiger laden, 16 Bit
|
662 | ldi ZH,high(Sprungtabelle)
|
663 | add ZL,r16 ; Index addieren, 16 Bit
|
664 | ldi r16,0
|
665 | adc ZH,r16
|
666 | ijmp ; indirekter Sprung in Sprungtabelle
|
667 |
|
668 | kein_treffer:
|
669 |
|
670 | rjmp fertig
|
671 |
|
672 | Sprungtabelle:
|
673 | rjmp Ex1RPM
|
674 | rjmp Ex2RPM ///HIER MUSS FÜR DIE HÖHEREN DREHZAHLEN NOCH DIE SPRUNGTABELLE ERGÄNZT WERDEN!!!!!!!!!!!!!!
|
675 | rjmp Ex3RPM
|
676 | rjmp Ex4RPM
|
677 | rjmp Ex5RPM
|
678 | rjmp Ex6RPM
|
679 | rjmp Ex7RPM
|
680 | rjmp Ex8RPM
|
681 | rjmp Ex9RPM
|
682 | rjmp Ex10RPM
|
683 | rjmp Ex11RPM
|
684 | rjmp Ex12RPM
|
685 | rjmp Ex13RPM
|
686 | rjmp Ex14RPM
|
687 | rjmp Ex15RPM
|
688 |
|
689 | Ex1RPM:
|
690 | ldi temp, 0x70
|
691 | sts extrudermotor_LSB_soll, temp
|
692 | ldi temp, 0x17
|
693 | sts extrudermotor_MSB_soll, temp
|
694 | rjmp fertig
|
695 |
|
696 |
|
697 | Ex2RPM:
|
698 | ldi temp, 0xB8
|
699 | sts extrudermotor_LSB_soll, temp
|
700 | ldi temp, 0x0B
|
701 | sts extrudermotor_MSB_soll, temp
|
702 |
|
703 | rjmp fertig
|
704 |
|
705 |
|
706 | Ex3RPM:
|
707 | ldi temp, 0xD0
|
708 | sts extrudermotor_LSB_soll, temp
|
709 | ldi temp, 0x07
|
710 | sts extrudermotor_MSB_soll, temp
|
711 | rjmp fertig
|
712 |
|
713 |
|
714 | Ex4RPM:
|
715 | ldi temp, 0xDC
|
716 | sts extrudermotor_LSB_soll, temp
|
717 | ldi temp, 0x05
|
718 | sts extrudermotor_MSB_soll, temp
|
719 | rjmp fertig
|
720 |
|
721 | Ex5RPM:
|
722 | ldi temp, 0xB0
|
723 | sts extrudermotor_LSB_soll, temp
|
724 | ldi temp, 0x04
|
725 | sts extrudermotor_MSB_soll, temp
|
726 | rjmp fertig
|
727 |
|
728 | Ex6RPM:
|
729 | ldi temp, 0xE8
|
730 | sts extrudermotor_LSB_soll, temp
|
731 | ldi temp, 0x03
|
732 | sts extrudermotor_MSB_soll, temp
|
733 | rjmp fertig
|
734 |
|
735 | Ex7RPM:
|
736 | ldi temp, 0x58
|
737 | sts extrudermotor_LSB_soll, temp
|
738 | ldi temp, 0x03
|
739 | sts extrudermotor_MSB_soll, temp
|
740 | rjmp fertig
|
741 |
|
742 | Ex8RPM:
|
743 | ldi temp, 0xEE
|
744 | sts extrudermotor_LSB_soll, temp
|
745 | ldi temp, 0x02
|
746 | sts extrudermotor_MSB_soll, temp
|
747 | rjmp fertig
|
748 |
|
749 | Ex9RPM:
|
750 | ldi temp, 0x9A
|
751 | sts extrudermotor_LSB_soll, temp
|
752 | ldi temp, 0x02
|
753 | sts extrudermotor_MSB_soll, temp
|
754 | rjmp fertig
|
755 |
|
756 | Ex10RPM:
|
757 | ldi temp, 0x58
|
758 | sts extrudermotor_LSB_soll, temp
|
759 | ldi temp, 0x02
|
760 | sts extrudermotor_MSB_soll, temp
|
761 | rjmp fertig
|
762 |
|
763 | Ex11RPM:
|
764 | ldi temp, 0x21
|
765 | sts extrudermotor_LSB_soll, temp
|
766 | ldi temp, 0x02
|
767 | sts extrudermotor_MSB_soll, temp
|
768 | rjmp fertig
|
769 |
|
770 | Ex12RPM:
|
771 | ldi temp, 0xF4
|
772 | sts extrudermotor_LSB_soll, temp
|
773 | ldi temp, 0x01
|
774 | sts extrudermotor_MSB_soll, temp
|
775 | rjmp fertig
|
776 |
|
777 | Ex13RPM:
|
778 | ldi temp, 0xCC
|
779 | sts extrudermotor_LSB_soll, temp
|
780 | ldi temp, 0x01
|
781 | sts extrudermotor_MSB_soll, temp
|
782 | rjmp fertig
|
783 |
|
784 | Ex14RPM:
|
785 | ldi temp, 0xAD
|
786 | sts extrudermotor_LSB_soll, temp
|
787 | ldi temp, 0x01
|
788 | sts extrudermotor_MSB_soll, temp
|
789 | rjmp fertig
|
790 |
|
791 | Ex15RPM:
|
792 | ldi temp, 0x90
|
793 | sts extrudermotor_LSB_soll, temp
|
794 | ldi temp, 0x01
|
795 | sts extrudermotor_MSB_soll, temp
|
796 | rjmp fertig
|
797 |
|
798 | Ex16RPM:
|
799 | ldi temp, 0x77
|
800 | sts extrudermotor_LSB_soll, temp
|
801 | ldi temp, 0x01
|
802 | sts extrudermotor_MSB_soll, temp
|
803 | rjmp fertig
|
804 |
|
805 | Ex17RPM:
|
806 | ldi temp, 0x60
|
807 | sts extrudermotor_LSB_soll, temp
|
808 | ldi temp, 0x01
|
809 | sts extrudermotor_MSB_soll, temp
|
810 | rjmp fertig
|
811 |
|
812 | Ex18RPM:
|
813 | ldi temp, 0x4D
|
814 | sts extrudermotor_LSB_soll, temp
|
815 | ldi temp, 0x01
|
816 | sts extrudermotor_MSB_soll, temp
|
817 | rjmp fertig
|
818 |
|
819 | Ex19RPM:
|
820 | ldi temp, 0x3B
|
821 | sts extrudermotor_LSB_soll, temp
|
822 | ldi temp, 0x01
|
823 | sts extrudermotor_MSB_soll, temp
|
824 | rjmp fertig
|
825 |
|
826 | Ex20RPM:
|
827 | ldi temp, 0x2C
|
828 | sts extrudermotor_LSB_soll, temp
|
829 | ldi temp, 0x01
|
830 | sts extrudermotor_MSB_soll, temp
|
831 | rjmp fertig
|
832 |
|
833 |
|
834 | fertig:
|
835 | pop temp4
|
836 | pop temp3
|
837 | pop temp2
|
838 | pop temp
|
839 | ret
|
840 |
|
841 |
|
842 |
|
843 |
|
844 |
|
845 |
|
846 | //////////////////////////////////////////////////Interruptroutinen///////////////////////////////////////////
|
847 | TIMER1_COMPA:
|
848 | push temp
|
849 | in temp, SREG
|
850 | push temp
|
851 | ldi temp, 1
|
852 | add micros_lsb, r2
|
853 | adc micros_msb, r3
|
854 | ldi temp, 160 //160 Takte ohne prescaler bei 16 mhz ergibt einen eine auflösung von 10 micros
|
855 | sts OCR1AL, temp //OCRA1H bleibt null dar Timer 1 ein 16biit timer ist, allerdings nur bis 160 im CTC Mode gezählt wird
|
856 | sbr flags, 1<<update //Zähler wurde aktuallisiert, also Flag setzen um im loop die motoren mit dem neuen Wert zu vegleichen
|
857 | pop temp
|
858 | out SREG, temp
|
859 | pop temp
|
860 | reti
|
861 |
|
862 |
|
863 |
|
864 |
|
865 |
|
866 | //Die RAM Adressen
|
867 | .DSEG ; Umschalten auf das SRAM Datensegment
|
868 | debbuging: .BYTE 1
|
869 | extrudermotor_LSB: .BYTE 1 //Zeitpunkt des nächsten events
|
870 | extrudermotor_MSB: .BYTE 1
|
871 | pully_LSB: .BYTE 1
|
872 | pully_MSB: .BYTE 1
|
873 |
|
874 |
|
875 | extrudermotor_LSB_soll: .BYTE 1 //Zeitdifferenz anhand der Drehzahl
|
876 | extrudermotor_MSB_soll: .BYTE 1
|
877 | pully_LSB_soll: .BYTE 1
|
878 | pully_MSB_soll: .BYTE 1
|
879 |
|
880 |
|
881 |
|
882 | soll_RPM_extruder: .BYTE 1 //Vorgabe Drehzahl
|
883 | soll_RPM_pully: .BYTE 1
|
884 |
|
885 | ist_temperatur: .BYTE 1
|