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