test_motort.asm


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