Subversion Repositories BL-Ctrl

Compare Revisions

Ignore whitespace Rev 65 → Rev 66

/branches/V0.37_neueStruktur/out/main.lst
0,0 → 1,2590
1 .file "main.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
100 .global SetPWM
102 SetPWM:
103 .stabd 46,0,0
1:src/main.c **** /*#######################################################################################
2:src/main.c **** Flight Control
3:src/main.c **** #######################################################################################*/
4:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5:src/main.c **** // + Regler für Brushless-Motoren
6:src/main.c **** // + ATMEGA8 mit 8MHz
7:src/main.c **** // + Nur für den privaten Gebrauch
8:src/main.c **** // + Copyright (c) 12.2007 Holger Buss
9:src/main.c **** // + www.MikroKopter.com
10:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11:src/main.c **** // + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation)
12:src/main.c **** // + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulä
13:src/main.c **** // + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikro
14:src/main.c **** // + bzgl. der Nutzungsbedingungen aufzunehmen.
15:src/main.c **** // + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platine
16:src/main.c **** // + Verkauf von Luftbildaufnahmen, usw.
17:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18:src/main.c **** // + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
19:src/main.c **** // + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright
20:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21:src/main.c **** // + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
22:src/main.c **** // + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http:
23:src/main.c **** // + eindeutig als Ursprung verlinkt werden
24:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
25:src/main.c **** // + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
26:src/main.c **** // + Benutzung auf eigene Gefahr
27:src/main.c **** // + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
28:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
29:src/main.c **** // + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www
30:src/main.c **** // + mit unserer Zustimmung zulässig
31:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32:src/main.c **** // + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
33:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
34:src/main.c **** // + Redistributions of source code (with or without modifications) must retain the above copyright
35:src/main.c **** // + this list of conditions and the following disclaimer.
36:src/main.c **** // + * Neither the name of the copyright holders nor the names of contributors may be used to end
37:src/main.c **** // + from this software without specific prior written permission.
38:src/main.c **** // + * The use of this project (hardware, software, binary files, sources and documentation) is o
39:src/main.c **** // + for non-commercial use (directly or indirectly)
40:src/main.c **** // + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is
41:src/main.c **** // + with our written permission
42:src/main.c **** // + * If sources or documentations are redistributet on other webpages, out webpage (http://www.
43:src/main.c **** // + clearly linked as origin
44:src/main.c **** // + * porting to systems other than hardware from www.mikrokopter.de is not allowed
45:src/main.c **** // + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
46:src/main.c **** // + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47:src/main.c **** // + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48:src/main.c **** // + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
49:src/main.c **** // + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50:src/main.c **** // + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51:src/main.c **** // + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52:src/main.c **** // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT
53:src/main.c **** // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54:src/main.c **** // + POSSIBILITY OF SUCH DAMAGE.
55:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56:src/main.c ****
57:src/main.c **** #include "main.h"
58:src/main.c ****
59:src/main.c **** unsigned int PWM = 0;
60:src/main.c **** unsigned int Strom = 0,RuheStrom; //ca. in 0,1A
61:src/main.c **** unsigned char Strom_max = 0;
62:src/main.c **** unsigned char Mittelstrom = 0;
63:src/main.c **** unsigned int Drehzahl = 0; // in 100UPM 60 = 6000
64:src/main.c **** unsigned int KommutierDelay = 10;
65:src/main.c **** unsigned int I2C_Timeout = 0;
66:src/main.c **** unsigned int SIO_Timeout = 0;
67:src/main.c **** unsigned int SollDrehzahl = 0;
68:src/main.c **** unsigned int IstDrehzahl = 0;
69:src/main.c **** unsigned int DrehZahlTabelle[256];//vorberechnete Werte zur Drehzahlerfassung
70:src/main.c **** unsigned char ZeitFuerBerechnungen = 1;
71:src/main.c **** unsigned char MotorAnwerfen = 0;
72:src/main.c **** unsigned char MotorGestoppt = 1;
73:src/main.c **** unsigned char MaxPWM = MAX_PWM;
74:src/main.c **** unsigned int CntKommutierungen = 0;
75:src/main.c **** unsigned int SIO_Drehzahl = 0;
76:src/main.c **** unsigned char ZeitZumAdWandeln = 1;
77:src/main.c **** unsigned char MotorAdresse = 1;
78:src/main.c **** unsigned char PPM_Betrieb = 1;
79:src/main.c ****
80:src/main.c **** //############################################################################
81:src/main.c **** //
82:src/main.c **** void SetPWM(void)
83:src/main.c **** //############################################################################
84:src/main.c **** {
105 .LM0:
106 .LFBB1:
107 /* prologue: frame size=0 */
108 /* prologue end (size=0) */
85:src/main.c **** unsigned char tmp_pwm;
86:src/main.c **** tmp_pwm = PWM;
110 .LM1:
111 0000 2091 0000 lds r18,PWM
87:src/main.c **** if(tmp_pwm > MaxPWM) // Strombegrenzung
113 .LM2:
114 0004 8091 0000 lds r24,MaxPWM
115 0008 8217 cp r24,r18
116 000a 00F4 brsh .L2
88:src/main.c **** {
89:src/main.c **** tmp_pwm = MaxPWM;
90:src/main.c **** PORTC |= ROT;
118 .LM3:
119 000c AB9A sbi 53-0x20,3
120 000e 282F mov r18,r24
121 .L2:
91:src/main.c **** }
92:src/main.c **** if(Strom > MAX_STROM) // Strombegrenzung
123 .LM4:
124 0010 8091 0000 lds r24,Strom
125 0014 9091 0000 lds r25,(Strom)+1
126 0018 893C cpi r24,201
127 001a 9105 cpc r25,__zero_reg__
128 001c 00F0 brlo .L4
93:src/main.c **** {
94:src/main.c **** OCR1A = 0; OCR1B = 0; OCR2 = 0;
130 .LM5:
131 001e 1BBC out (74)+1-0x20,__zero_reg__
132 0020 1ABC out 74-0x20,__zero_reg__
133 0022 19BC out (72)+1-0x20,__zero_reg__
134 0024 18BC out 72-0x20,__zero_reg__
135 0026 13BC out 67-0x20,__zero_reg__
95:src/main.c **** PORTC |= ROT;
137 .LM6:
138 0028 AB9A sbi 53-0x20,3
96:src/main.c **** Strom--;
140 .LM7:
141 002a 0197 sbiw r24,1
142 002c 9093 0000 sts (Strom)+1,r25
143 0030 8093 0000 sts Strom,r24
144 0034 0895 ret
145 .L4:
97:src/main.c **** }
98:src/main.c **** else
99:src/main.c **** {
100:src/main.c **** #ifdef _32KHZ
101:src/main.c **** OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
102:src/main.c **** #endif
103:src/main.c ****
104:src/main.c **** #ifdef _16KHZ
105:src/main.c **** //OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2 = tmp_pwm;
106:src/main.c **** OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
147 .LM8:
148 0036 822F mov r24,r18
149 0038 9927 clr r25
150 003a 9BBD out (74)+1-0x20,r25
151 003c 8ABD out 74-0x20,r24
152 003e 99BD out (72)+1-0x20,r25
153 0040 88BD out 72-0x20,r24
154 0042 23BD out 67-0x20,r18
155 0044 0895 ret
156 /* epilogue: frame size=0 */
157 /* epilogue: noreturn */
158 /* epilogue end (size=0) */
159 /* function SetPWM size 35 (35) */
164 .Lscope1:
166 .stabd 78,0,0
168 .global PWM_Init
170 PWM_Init:
171 .stabd 46,0,0
107:src/main.c **** #endif
108:src/main.c **** }
109:src/main.c **** }
110:src/main.c ****
111:src/main.c **** //############################################################################
112:src/main.c **** //
113:src/main.c **** void PWM_Init(void)
114:src/main.c **** //############################################################################
115:src/main.c **** {
173 .LM9:
174 .LFBB2:
175 /* prologue: frame size=0 */
176 /* prologue end (size=0) */
116:src/main.c **** PWM_OFF;
178 .LM10:
179 0046 91E0 ldi r25,lo8(1)
180 0048 9FBD out 79-0x20,r25
181 004a 81E4 ldi r24,lo8(65)
182 004c 85BD out 69-0x20,r24
183 004e 8EE0 ldi r24,lo8(14)
184 0050 87BB out 55-0x20,r24
185 0052 88B3 in r24,56-0x20
186 0054 817F andi r24,lo8(-15)
187 0056 88BB out 56-0x20,r24
117:src/main.c **** TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (0 << WGM12) |
189 .LM11:
190 0058 9EBD out 78-0x20,r25
191 /* epilogue: frame size=0 */
192 005a 0895 ret
193 /* epilogue end (size=1) */
194 /* function PWM_Init size 11 (10) */
196 .Lscope2:
198 .stabd 78,0,0
201 .global Wait
203 Wait:
204 .stabd 46,0,0
118:src/main.c **** (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
119:src/main.c **** /* TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |
120:src/main.c **** (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
121:src/main.c **** */
122:src/main.c **** }
123:src/main.c ****
124:src/main.c **** //############################################################################
125:src/main.c **** //
126:src/main.c **** void Wait(unsigned char dauer)
127:src/main.c **** //############################################################################
128:src/main.c **** {
206 .LM12:
207 .LFBB3:
208 /* prologue: frame size=0 */
209 /* prologue end (size=0) */
129:src/main.c **** dauer = (unsigned char)TCNT0 + dauer;
211 .LM13:
212 005c 92B7 in r25,82-0x20
213 005e 980F add r25,r24
130:src/main.c **** while((TCNT0 - dauer) & 0x80);
215 .LM14:
216 0060 292F mov r18,r25
217 0062 3327 clr r19
218 .L11:
220 .LM15:
221 0064 82B7 in r24,82-0x20
222 0066 821B sub r24,r18
223 0068 87FD sbrc r24,7
224 006a 00C0 rjmp .L11
225 /* epilogue: frame size=0 */
226 006c 0895 ret
227 /* epilogue end (size=1) */
228 /* function Wait size 9 (8) */
230 .Lscope3:
232 .stabd 78,0,0
235 .global Delay
237 Delay:
238 .stabd 46,0,0
131:src/main.c **** }
132:src/main.c ****
133:src/main.c **** //############################################################################
134:src/main.c **** //
135:src/main.c **** void Anwerfen(unsigned char pwm)
136:src/main.c **** //############################################################################
137:src/main.c **** {
138:src/main.c **** unsigned long timer = 300,i;
139:src/main.c **** DISABLE_SENSE_INT;
140:src/main.c **** PWM = 5;
141:src/main.c **** SetPWM();
142:src/main.c **** Manuell();
143:src/main.c **** Delay_ms(200);
144:src/main.c **** PWM = pwm;
145:src/main.c **** while(1)
146:src/main.c **** {
147:src/main.c **** for(i=0;i<timer; i++)
148:src/main.c **** {
149:src/main.c **** if(!UebertragungAbgeschlossen) SendUart();
150:src/main.c **** else DatenUebertragung();
151:src/main.c **** Wait(100); // warten
152:src/main.c **** }
153:src/main.c **** timer-= timer/15+1;
154:src/main.c **** if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }
155:src/main.c ****
156:src/main.c **** Manuell();
157:src/main.c **** Phase++;
158:src/main.c **** Phase %= 6;
159:src/main.c **** AdConvert();
160:src/main.c **** PWM = pwm;
161:src/main.c **** SetPWM();
162:src/main.c **** if(SENSE)
163:src/main.c **** {
164:src/main.c **** PORTD ^= GRUEN;
165:src/main.c **** }
166:src/main.c **** }
167:src/main.c **** }
168:src/main.c ****
169:src/main.c **** /*
170:src/main.c **** #define SENSE_A ADMUX = 0;
171:src/main.c **** #define SENSE_B ADMUX = 1;
172:src/main.c **** #define SENSE_C ADMUX = 2;
173:src/main.c ****
174:src/main.c **** #define ClrSENSE ACSR |= 0x10
175:src/main.c **** #define SENSE ((ACSR & 0x10))
176:src/main.c **** #define SENSE_L (!(ACSR & 0x20))
177:src/main.c **** #define SENSE_H ((ACSR & 0x20))
178:src/main.c **** */
179:src/main.c ****
180:src/main.c **** void RotBlink(unsigned char anz)
181:src/main.c **** {
182:src/main.c **** sei(); // Interrupts ein
183:src/main.c **** while(anz--)
184:src/main.c **** {
185:src/main.c **** PORTC |= ROT;
186:src/main.c **** Delay_ms(300);
187:src/main.c **** PORTC &= ~ROT;
188:src/main.c **** Delay_ms(300);
189:src/main.c **** }
190:src/main.c **** Delay_ms(1000);
191:src/main.c **** }
192:src/main.c ****
193:src/main.c **** #define TEST_STROMGRENZE 120
194:src/main.c **** unsigned char DelayM(unsigned int timer)
195:src/main.c **** {
196:src/main.c **** while(timer--)
197:src/main.c **** {
198:src/main.c **** FastADConvert();
199:src/main.c **** if(Strom > (TEST_STROMGRENZE + RuheStrom))
200:src/main.c **** {
201:src/main.c **** FETS_OFF;
202:src/main.c **** return(1);
203:src/main.c **** }
204:src/main.c **** }
205:src/main.c **** return(0);
206:src/main.c **** }
207:src/main.c ****
208:src/main.c **** unsigned char Delay(unsigned int timer)
209:src/main.c **** {
240 .LM16:
241 .LFBB4:
242 /* prologue: frame size=0 */
243 /* prologue end (size=0) */
210:src/main.c **** while(timer--)
211:src/main.c **** {
212:src/main.c **** // if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
213:src/main.c **** }
214:src/main.c **** return(0);
215:src/main.c **** }
245 .LM17:
246 006e 80E0 ldi r24,lo8(0)
247 0070 90E0 ldi r25,hi8(0)
248 /* epilogue: frame size=0 */
249 0072 0895 ret
250 /* epilogue end (size=1) */
251 /* function Delay size 3 (2) */
253 .Lscope4:
255 .stabd 78,0,0
257 .global SollwertErmittlung
259 SollwertErmittlung:
260 .stabd 46,0,0
216:src/main.c ****
217:src/main.c **** /*
218:src/main.c **** void ShowSense(void)
219:src/main.c **** {
220:src/main.c **** if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
221:src/main.c ****
222:src/main.c **** }
223:src/main.c **** */
224:src/main.c **** #define HIGH_A_EIN PORTB |= 0x08
225:src/main.c **** #define HIGH_B_EIN PORTB |= 0x04
226:src/main.c **** #define HIGH_C_EIN PORTB |= 0x02
227:src/main.c **** #define LOW_A_EIN PORTD |= 0x08
228:src/main.c **** #define LOW_B_EIN PORTD |= 0x10
229:src/main.c **** #define LOW_C_EIN PORTD |= 0x20
230:src/main.c ****
231:src/main.c **** void MotorTon(void)
232:src/main.c **** //############################################################################
233:src/main.c **** {
234:src/main.c **** unsigned char ADR_TAB[5] = {0,0,2,1,3};
235:src/main.c **** unsigned int timer = 300,i;
236:src/main.c **** unsigned int t = 0;
237:src/main.c **** unsigned char anz = 0,MosfetOkay = 0, grenze = 50;
238:src/main.c ****
239:src/main.c **** PORTC &= ~ROT;
240:src/main.c **** Delay_ms(300 * ADR_TAB[MotorAdresse]);
241:src/main.c **** DISABLE_SENSE_INT;
242:src/main.c **** cli();//Globale Interrupts Ausschalten
243:src/main.c **** uart_putchar('\n');
244:src/main.c **** STEUER_OFF;
245:src/main.c **** Strom_max = 0;
246:src/main.c **** DelayM(50);
247:src/main.c **** RuheStrom = Strom_max;
248:src/main.c **** // uart_putchar(RuheStrom + 'A');
249:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
250:src/main.c **** //+ High-Mosfets auf Kurzschluss testen
251:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
252:src/main.c **** Strom = 0;
253:src/main.c **** LOW_B_EIN;
254:src/main.c **** HIGH_A_EIN;
255:src/main.c **** if(DelayM(3))
256:src/main.c **** {
257:src/main.c **** anz = 1;
258:src/main.c **** uart_putchar('1');
259:src/main.c **** }
260:src/main.c **** FETS_OFF;
261:src/main.c **** Delay(1000);
262:src/main.c **** Strom = 0;
263:src/main.c **** LOW_A_EIN;
264:src/main.c **** HIGH_B_EIN;
265:src/main.c **** if(DelayM(3))
266:src/main.c **** {
267:src/main.c **** anz = 2;
268:src/main.c **** uart_putchar('2');
269:src/main.c **** }
270:src/main.c **** FETS_OFF;
271:src/main.c **** Delay(1000);
272:src/main.c **** Strom = 0;
273:src/main.c **** LOW_B_EIN; // Low C ein
274:src/main.c **** HIGH_C_EIN; // High B ein
275:src/main.c **** if(DelayM(3))
276:src/main.c **** {
277:src/main.c **** anz = 3;
278:src/main.c **** uart_putchar('3');
279:src/main.c **** }
280:src/main.c **** FETS_OFF;
281:src/main.c **** Delay(1000);
282:src/main.c **** LOW_A_EIN; // Low A ein; und A gegen C
283:src/main.c **** HIGH_C_EIN; // High C ein
284:src/main.c **** if(DelayM(3))
285:src/main.c **** {
286:src/main.c **** anz = 3;
287:src/main.c **** uart_putchar('7');
288:src/main.c **** }
289:src/main.c **** FETS_OFF;
290:src/main.c **** DelayM(10000);
291:src/main.c **** if(anz) while(1) RotBlink(anz); // bei Kurzschluss nicht starten
292:src/main.c ****
293:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
294:src/main.c **** //+ LOW-Mosfets auf Schalten und Kurzschluss testen
295:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
296:src/main.c **** if(UDR == ' ') {t = 65535; grenze = 40; uart_putchar('_');} else t = 1000; // Ausführlicher Test
297:src/main.c **** Strom = 0;
298:src/main.c **** for(i=0;i<t;i++)
299:src/main.c **** {
300:src/main.c **** LOW_A_EIN;
301:src/main.c **** DelayM(1);
302:src/main.c **** FETS_OFF;
303:src/main.c **** Delay(5);
304:src/main.c **** HIGH_A_EIN;
305:src/main.c **** DelayM(1);
306:src/main.c **** FETS_OFF;
307:src/main.c **** if(Strom > grenze + RuheStrom) {anz = 4; uart_putchar('4'); break;}
308:src/main.c **** Delay(5);
309:src/main.c **** }
310:src/main.c **** Delay(10000);
311:src/main.c ****
312:src/main.c **** Strom = 0;
313:src/main.c **** for(i=0;i<t;i++)
314:src/main.c **** {
315:src/main.c **** LOW_B_EIN;
316:src/main.c **** DelayM(1);
317:src/main.c **** FETS_OFF;
318:src/main.c **** Delay(5);
319:src/main.c **** HIGH_B_EIN;
320:src/main.c **** DelayM(1);
321:src/main.c **** FETS_OFF;
322:src/main.c **** if(Strom > grenze + RuheStrom) {anz = 5; uart_putchar('5'); break;}
323:src/main.c **** Delay(5);
324:src/main.c **** }
325:src/main.c ****
326:src/main.c **** Strom = 0;
327:src/main.c **** Delay(10000);
328:src/main.c ****
329:src/main.c **** for(i=0;i<t;i++)
330:src/main.c **** {
331:src/main.c **** LOW_C_EIN;
332:src/main.c **** DelayM(1);
333:src/main.c **** FETS_OFF;
334:src/main.c **** Delay(5);
335:src/main.c **** HIGH_C_EIN;
336:src/main.c **** DelayM(1);
337:src/main.c **** FETS_OFF;
338:src/main.c **** if(Strom > grenze + RuheStrom) {anz = 6; uart_putchar('6'); break;}
339:src/main.c **** Delay(5);
340:src/main.c **** }
341:src/main.c ****
342:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
343:src/main.c **** //+ High-Mosfets auf Schalten testen
344:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
345:src/main.c **** SENSE_A;
346:src/main.c **** FETS_OFF;
347:src/main.c **** LOW_B_EIN; // Low B ein
348:src/main.c **** LOW_C_EIN; // Low C ein
349:src/main.c **** Strom = 0;
350:src/main.c **** #define TONDAUER 40000
351:src/main.c **** #define SOUND_E 2
352:src/main.c **** #define SOUND1_A 300
353:src/main.c **** #define SOUND2_A 330
354:src/main.c **** #define SOUND3_A 360
355:src/main.c ****
356:src/main.c **** for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
357:src/main.c **** {
358:src/main.c **** HIGH_A_EIN; // Test A
359:src/main.c **** Delay(SOUND_E);
360:src/main.c **** if(MessAD(0) > 50) { MosfetOkay |= 0x01; } else { MosfetOkay &= ~0x01;};
361:src/main.c **** PORTB = 0;
362:src/main.c **** Delay(SOUND1_A);
363:src/main.c **** }
364:src/main.c **** FETS_OFF;
365:src/main.c ****
366:src/main.c **** LOW_A_EIN; // Low A ein
367:src/main.c **** LOW_C_EIN; // Low C ein
368:src/main.c **** for(i=0; i<(TONDAUER / SOUND1_A); i++)
369:src/main.c **** {
370:src/main.c **** HIGH_B_EIN; // Test B
371:src/main.c **** Delay(SOUND_E);
372:src/main.c **** if(MessAD(1) > 50) { MosfetOkay |= 0x02; } else { MosfetOkay &= ~0x02;};
373:src/main.c **** PORTB = 0;
374:src/main.c **** Delay(SOUND1_A);
375:src/main.c **** }
376:src/main.c ****
377:src/main.c **** FETS_OFF;
378:src/main.c **** LOW_A_EIN; // Low A ein
379:src/main.c **** LOW_B_EIN; // Low B ein
380:src/main.c **** for(i=0; i<(TONDAUER / SOUND3_A); i++)
381:src/main.c **** {
382:src/main.c **** HIGH_C_EIN; // Test C
383:src/main.c **** Delay(SOUND_E);
384:src/main.c **** if(MessAD(2) > 50) { MosfetOkay |= 0x04; } else { MosfetOkay &= ~0x04;};
385:src/main.c **** PORTB = 0;
386:src/main.c **** Delay(SOUND2_A);
387:src/main.c **** }
388:src/main.c **** FETS_OFF;
389:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
390:src/main.c **** //+ Low-Mosfets auf Schalten testen
391:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
392:src/main.c **** SENSE_B;
393:src/main.c **** LOW_A_EIN; // Low A ein
394:src/main.c **** for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
395:src/main.c **** {
396:src/main.c **** HIGH_B_EIN; // Test B
397:src/main.c **** Delay(SOUND_E);
398:src/main.c **** if(MessAD(0) > 50) { MosfetOkay &= ~0x08;} else { MosfetOkay |= 0x08;};
399:src/main.c **** PORTB = 0;
400:src/main.c **** Delay(SOUND2_A);
401:src/main.c **** }
402:src/main.c ****
403:src/main.c **** //++++++++++++++++++++++++++++++++++++
404:src/main.c **** LOW_C_EIN; // Low C ein
405:src/main.c **** for(i=0; i<(TONDAUER / SOUND1_A); i++)
406:src/main.c **** {
407:src/main.c **** HIGH_B_EIN; // Test B
408:src/main.c **** Delay(SOUND_E);
409:src/main.c **** if(MessAD(2) > 50) { MosfetOkay &= ~0x20;} else { MosfetOkay |= 0x20;};
410:src/main.c **** PORTB = 0;
411:src/main.c **** Delay(SOUND3_A);
412:src/main.c **** }
413:src/main.c **** FETS_OFF;
414:src/main.c **** //++++++++++++++++++++++++++++++++++++
415:src/main.c **** FETS_OFF;
416:src/main.c **** LOW_B_EIN; // Low B ein
417:src/main.c **** for(i=0; i<(TONDAUER / SOUND3_A); i++)
418:src/main.c **** {
419:src/main.c **** HIGH_C_EIN; // Test C
420:src/main.c **** Delay(SOUND_E);
421:src/main.c **** if(MessAD(1) > 50) { MosfetOkay &= ~0x10;} else { MosfetOkay |= 0x10;};
422:src/main.c **** PORTB = 0;
423:src/main.c **** Delay(SOUND3_A);
424:src/main.c **** }
425:src/main.c **** FETS_OFF;
426:src/main.c **** //++++++++++++++++++++++++++++++++++++
427:src/main.c ****
428:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
429:src/main.c **** sei();//Globale Interrupts Einschalten
430:src/main.c **** // Delay_ms(250 * MotorAdresse);
431:src/main.c **** /*
432:src/main.c **** LOW_A_EIN; // Low B ein
433:src/main.c **** #define SOUND8_A 650
434:src/main.c **** for(i=0; i<(TONDAUER / SOUND8_A); i++)
435:src/main.c **** {
436:src/main.c **** HIGH_B_EIN; // Test B
437:src/main.c **** Delay(SOUND_E);
438:src/main.c **** PORTB = 0;
439:src/main.c **** Delay(SOUND8_A);
440:src/main.c **** }
441:src/main.c **** */
442:src/main.c **** Delay_ms(300 * (4-ADR_TAB[MotorAdresse]));
443:src/main.c **** if(!(MosfetOkay & 0x01)) { anz = 1; UDR='A'; } else
444:src/main.c **** if(!(MosfetOkay & 0x02)) { anz = 2; UDR='B'; } else
445:src/main.c **** if(!(MosfetOkay & 0x04)) { anz = 3; UDR='C'; } else
446:src/main.c **** if(!(MosfetOkay & 0x08)) { anz = 4; UDR='a'; } else
447:src/main.c **** if(!(MosfetOkay & 0x10)) { anz = 5; UDR='b'; } else
448:src/main.c **** if(!(MosfetOkay & 0x20)) { anz = 6; UDR='c'; }
449:src/main.c ****
450:src/main.c **** if(anz) Delay_ms(1000);
451:src/main.c ****
452:src/main.c **** RotBlink(anz);
453:src/main.c **** uart_putchar('.');
454:src/main.c **** }
455:src/main.c ****
456:src/main.c **** //############################################################################
457:src/main.c **** //
458:src/main.c **** unsigned char SollwertErmittlung(void)
459:src/main.c **** //############################################################################
460:src/main.c **** {
262 .LM18:
263 .LFBB5:
264 /* prologue: frame size=0 */
265 /* prologue end (size=0) */
461:src/main.c **** static unsigned int sollwert = 0;
462:src/main.c **** unsigned int ppm;
463:src/main.c **** if(!I2C_Timeout) // bei Erreichen von 0 ist der Wert ungültig
267 .LM19:
268 0074 8091 0000 lds r24,I2C_Timeout
269 0078 9091 0000 lds r25,(I2C_Timeout)+1
270 007c 892B or r24,r25
271 007e 01F0 breq .+2
272 0080 00C0 rjmp .L20
464:src/main.c **** {
465:src/main.c **** if(SIO_Timeout) // es gibt gültige SIO-Daten
274 .LM20:
275 0082 8091 0000 lds r24,SIO_Timeout
276 0086 9091 0000 lds r25,(SIO_Timeout)+1
277 008a 892B or r24,r25
278 008c 01F0 breq .L22
466:src/main.c **** {
467:src/main.c **** sollwert = (MAX_PWM * (unsigned int) SIO_Sollwert) / 200; // skalieren auf 0-200 = 0
280 .LM21:
281 008e 9091 0000 lds r25,SIO_Sollwert
282 0092 8FEF ldi r24,lo8(-1)
283 0094 989F mul r25,r24
284 0096 C001 movw r24,r0
285 0098 1124 clr r1
286 009a 68EC ldi r22,lo8(200)
287 009c 70E0 ldi r23,hi8(200)
288 009e 00D0 rcall __udivmodhi4
289 00a0 7093 0000 sts (sollwert.2390)+1,r23
290 00a4 6093 0000 sts sollwert.2390,r22
468:src/main.c **** PPM_Betrieb = 0;
292 .LM22:
293 00a8 1092 0000 sts PPM_Betrieb,__zero_reg__
469:src/main.c **** ICP_INT_DISABLE;
295 .LM23:
296 00ac 89B7 in r24,89-0x20
297 00ae 8F7D andi r24,lo8(-33)
298 00b0 89BF out 89-0x20,r24
299 00b2 00C0 rjmp .L32
300 .L22:
470:src/main.c **** PORTC &= ~ROT;
471:src/main.c **** }
472:src/main.c **** else
473:src/main.c **** if(anz_ppm_werte > 20) // es gibt gültige PPM-Daten
302 .LM24:
303 00b4 8091 0000 lds r24,anz_ppm_werte
304 00b8 8531 cpi r24,lo8(21)
305 00ba 00F0 brlo .L25
474:src/main.c **** {
475:src/main.c **** PPM_Betrieb = 1;
307 .LM25:
308 00bc 81E0 ldi r24,lo8(1)
309 00be 8093 0000 sts PPM_Betrieb,r24
476:src/main.c **** ppm = PPM_Signal;
311 .LM26:
312 00c2 2091 0000 lds r18,PPM_Signal
313 00c6 3091 0000 lds r19,(PPM_Signal)+1
477:src/main.c **** if(ppm > 300) ppm = 0; // ungültiges Signal
315 .LM27:
316 00ca 41E0 ldi r20,hi8(301)
317 00cc 2D32 cpi r18,lo8(301)
318 00ce 3407 cpc r19,r20
319 00d0 00F4 brsh .L27
478:src/main.c **** if(ppm > 200) ppm = 200;
321 .LM28:
322 00d2 293C cpi r18,201
323 00d4 3105 cpc r19,__zero_reg__
324 00d6 00F4 brsh .L29
479:src/main.c **** if(ppm <= MIN_PPM) sollwert = 0;
326 .LM29:
327 00d8 2B30 cpi r18,11
328 00da 3105 cpc r19,__zero_reg__
329 00dc 00F4 brsh .L31
330 .L27:
331 00de 1092 0000 sts (sollwert.2390)+1,__zero_reg__
332 00e2 1092 0000 sts sollwert.2390,__zero_reg__
333 00e6 00C0 rjmp .L32
334 .L29:
335 00e8 28EC ldi r18,lo8(200)
336 00ea 30E0 ldi r19,hi8(200)
337 .L31:
480:src/main.c **** else
481:src/main.c **** {
482:src/main.c **** sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN
339 .LM30:
340 00ec 8CEF ldi r24,lo8(252)
341 00ee 90E0 ldi r25,hi8(252)
342 00f0 AC01 movw r20,r24
343 00f2 249F mul r18,r20
344 00f4 C001 movw r24,r0
345 00f6 259F mul r18,r21
346 00f8 900D add r25,r0
347 00fa 349F mul r19,r20
348 00fc 900D add r25,r0
349 00fe 1124 clr r1
350 0100 885D subi r24,lo8(-(-2520))
351 0102 9940 sbci r25,hi8(-(-2520))
352 0104 64EB ldi r22,lo8(180)
353 0106 70E0 ldi r23,hi8(180)
354 0108 00D0 rcall __udivmodhi4
355 010a 6D5F subi r22,lo8(-(3))
356 010c 7F4F sbci r23,hi8(-(3))
357 010e 7093 0000 sts (sollwert.2390)+1,r23
358 0112 6093 0000 sts sollwert.2390,r22
359 .L32:
483:src/main.c **** }
484:src/main.c **** PORTC &= ~ROT;
361 .LM31:
362 0116 AB98 cbi 53-0x20,3
363 0118 00C0 rjmp .L24
364 .L25:
485:src/main.c **** }
486:src/main.c **** else // Kein gültiger Sollwert
487:src/main.c **** {
488:src/main.c **** if(!TEST_SCHUB) { if(sollwert) sollwert--; }
366 .LM32:
367 011a 8091 0000 lds r24,sollwert.2390
368 011e 9091 0000 lds r25,(sollwert.2390)+1
369 0122 0097 sbiw r24,0
370 0124 01F0 breq .L33
371 0126 0197 sbiw r24,1
372 0128 9093 0000 sts (sollwert.2390)+1,r25
373 012c 8093 0000 sts sollwert.2390,r24
374 .L33:
489:src/main.c **** PORTC |= ROT;
376 .LM33:
377 0130 AB9A sbi 53-0x20,3
378 0132 00C0 rjmp .L24
379 .L20:
490:src/main.c **** }
491:src/main.c **** }
492:src/main.c **** else // I2C-Daten sind gültig
493:src/main.c **** {
494:src/main.c **** sollwert = I2C_RXBuffer;
381 .LM34:
382 0134 8091 0000 lds r24,I2C_RXBuffer
383 0138 9927 clr r25
384 013a 9093 0000 sts (sollwert.2390)+1,r25
385 013e 8093 0000 sts sollwert.2390,r24
495:src/main.c **** PPM_Betrieb = 0;
387 .LM35:
388 0142 1092 0000 sts PPM_Betrieb,__zero_reg__
496:src/main.c **** PORTC &= ~ROT;
390 .LM36:
391 0146 AB98 cbi 53-0x20,3
497:src/main.c **** ICP_INT_DISABLE;
393 .LM37:
394 0148 89B7 in r24,89-0x20
395 014a 8F7D andi r24,lo8(-33)
396 014c 89BF out 89-0x20,r24
397 .L24:
498:src/main.c **** }
499:src/main.c **** if(sollwert > MAX_PWM) sollwert = MAX_PWM;
399 .LM38:
400 014e 8091 0000 lds r24,sollwert.2390
401 0152 9091 0000 lds r25,(sollwert.2390)+1
402 0156 8F3F cpi r24,255
403 0158 9105 cpc r25,__zero_reg__
404 015a 01F0 breq .L35
405 015c 00F0 brlo .L35
406 015e 8FEF ldi r24,lo8(255)
407 0160 90E0 ldi r25,hi8(255)
408 0162 9093 0000 sts (sollwert.2390)+1,r25
409 0166 8093 0000 sts sollwert.2390,r24
410 .L35:
411 016a 8091 0000 lds r24,sollwert.2390
500:src/main.c **** return(sollwert);
501:src/main.c **** }
413 .LM39:
414 016e 9927 clr r25
415 /* epilogue: frame size=0 */
416 0170 0895 ret
417 /* epilogue end (size=1) */
418 /* function SollwertErmittlung size 127 (126) */
424 .Lscope5:
426 .stabd 78,0,0
428 .global DebugAusgaben
430 DebugAusgaben:
431 .stabd 46,0,0
502:src/main.c ****
503:src/main.c **** void DebugAusgaben(void)
504:src/main.c **** {
433 .LM40:
434 .LFBB6:
435 /* prologue: frame size=0 */
436 /* prologue end (size=0) */
505:src/main.c **** DebugOut.Analog[0] = Strom;
438 .LM41:
439 0172 8091 0000 lds r24,Strom
440 0176 9091 0000 lds r25,(Strom)+1
441 017a 9093 0000 sts (DebugOut+18)+1,r25
442 017e 8093 0000 sts DebugOut+18,r24
506:src/main.c **** DebugOut.Analog[1] = Mittelstrom;
444 .LM42:
445 0182 8091 0000 lds r24,Mittelstrom
446 0186 9927 clr r25
447 0188 9093 0000 sts (DebugOut+20)+1,r25
448 018c 8093 0000 sts DebugOut+20,r24
507:src/main.c **** DebugOut.Analog[2] = SIO_Drehzahl;
450 .LM43:
451 0190 8091 0000 lds r24,SIO_Drehzahl
452 0194 9091 0000 lds r25,(SIO_Drehzahl)+1
453 0198 9093 0000 sts (DebugOut+22)+1,r25
454 019c 8093 0000 sts DebugOut+22,r24
508:src/main.c **** DebugOut.Analog[3] = PPM_Signal;
456 .LM44:
457 01a0 8091 0000 lds r24,PPM_Signal
458 01a4 9091 0000 lds r25,(PPM_Signal)+1
459 01a8 9093 0000 sts (DebugOut+24)+1,r25
460 01ac 8093 0000 sts DebugOut+24,r24
461 /* epilogue: frame size=0 */
462 01b0 0895 ret
463 /* epilogue end (size=1) */
464 /* function DebugAusgaben size 32 (31) */
466 .Lscope6:
468 .stabd 78,0,0
471 .global RotBlink
473 RotBlink:
474 .stabd 46,0,0
476 .LM45:
477 .LFBB7:
478 /* prologue: frame size=0 */
479 01b2 1F93 push r17
480 /* prologue end (size=1) */
481 01b4 182F mov r17,r24
483 .LM46:
484 /* #APP */
485 01b6 7894 sei
486 /* #NOAPP */
487 01b8 00C0 rjmp .L41
488 .L42:
490 .LM47:
491 01ba AB9A sbi 53-0x20,3
493 .LM48:
494 01bc 8CE2 ldi r24,lo8(300)
495 01be 91E0 ldi r25,hi8(300)
496 01c0 00D0 rcall Delay_ms
498 .LM49:
499 01c2 AB98 cbi 53-0x20,3
501 .LM50:
502 01c4 8CE2 ldi r24,lo8(300)
503 01c6 91E0 ldi r25,hi8(300)
504 01c8 00D0 rcall Delay_ms
505 .L41:
507 .LM51:
508 01ca 1150 subi r17,1
509 01cc 00F4 brcc .L42
511 .LM52:
512 01ce 88EE ldi r24,lo8(1000)
513 01d0 93E0 ldi r25,hi8(1000)
514 01d2 00D0 rcall Delay_ms
515 /* epilogue: frame size=0 */
516 01d4 1F91 pop r17
517 01d6 0895 ret
518 /* epilogue end (size=2) */
519 /* function RotBlink size 21 (18) */
521 .Lscope7:
523 .stabd 78,0,0
526 .global DelayM
528 DelayM:
529 .stabd 46,0,0
531 .LM53:
532 .LFBB8:
533 /* prologue: frame size=0 */
534 01d8 CF93 push r28
535 01da DF93 push r29
536 /* prologue end (size=2) */
537 01dc EC01 movw r28,r24
538 01de 00C0 rjmp .L46
539 .L47:
541 .LM54:
542 01e0 00D0 rcall FastADConvert
544 .LM55:
545 01e2 8091 0000 lds r24,RuheStrom
546 01e6 9091 0000 lds r25,(RuheStrom)+1
547 01ea 8858 subi r24,lo8(-(120))
548 01ec 9F4F sbci r25,hi8(-(120))
549 01ee 2091 0000 lds r18,Strom
550 01f2 3091 0000 lds r19,(Strom)+1
551 01f6 8217 cp r24,r18
552 01f8 9307 cpc r25,r19
553 01fa 00F4 brsh .L46
555 .LM56:
556 01fc 82B3 in r24,50-0x20
557 01fe 877C andi r24,lo8(-57)
558 0200 82BB out 50-0x20,r24
559 0202 88B3 in r24,56-0x20
560 0204 817F andi r24,lo8(-15)
561 0206 88BB out 56-0x20,r24
562 0208 81E0 ldi r24,lo8(1)
563 020a 90E0 ldi r25,hi8(1)
564 020c 00C0 rjmp .L49
565 .L46:
567 .LM57:
568 020e 2197 sbiw r28,1
569 0210 8FEF ldi r24,hi8(-1)
570 0212 CF3F cpi r28,lo8(-1)
571 0214 D807 cpc r29,r24
572 0216 01F4 brne .L47
573 0218 80E0 ldi r24,lo8(0)
574 021a 90E0 ldi r25,hi8(0)
575 .L49:
576 /* epilogue: frame size=0 */
577 021c DF91 pop r29
578 021e CF91 pop r28
579 0220 0895 ret
580 /* epilogue end (size=3) */
581 /* function DelayM size 37 (32) */
583 .Lscope8:
585 .stabd 78,0,0
587 .global MotorTon
589 MotorTon:
590 .stabd 46,0,0
592 .LM58:
593 .LFBB9:
594 /* prologue: frame size=5 */
595 0222 8F92 push r8
596 0224 9F92 push r9
597 0226 BF92 push r11
598 0228 CF92 push r12
599 022a DF92 push r13
600 022c EF92 push r14
601 022e FF92 push r15
602 0230 0F93 push r16
603 0232 1F93 push r17
604 0234 CF93 push r28
605 0236 DF93 push r29
606 0238 CDB7 in r28,__SP_L__
607 023a DEB7 in r29,__SP_H__
608 023c 2597 sbiw r28,5
609 023e 0FB6 in __tmp_reg__,__SREG__
610 0240 F894 cli
611 0242 DEBF out __SP_H__,r29
612 0244 0FBE out __SREG__,__tmp_reg__
613 0246 CDBF out __SP_L__,r28
614 /* prologue end (size=19) */
616 .LM59:
617 0248 DE01 movw r26,r28
618 024a 1196 adiw r26,1
619 024c E0E0 ldi r30,lo8(C.8.2210)
620 024e F0E0 ldi r31,hi8(C.8.2210)
621 0250 85E0 ldi r24,lo8(5)
622 .L55:
624 .LM60:
625 0252 0190 ld r0,Z+
626 0254 0D92 st X+,r0
627 0256 8150 subi r24,lo8(-(-1))
628 0258 01F4 brne .L55
630 .LM61:
631 025a AB98 cbi 53-0x20,3
633 .LM62:
634 025c 8091 0000 lds r24,MotorAdresse
635 0260 FE01 movw r30,r28
636 0262 E80F add r30,r24
637 0264 F11D adc r31,__zero_reg__
638 0266 8181 ldd r24,Z+1
639 0268 9927 clr r25
640 026a 2CE2 ldi r18,lo8(300)
641 026c 31E0 ldi r19,hi8(300)
642 026e AC01 movw r20,r24
643 0270 429F mul r20,r18
644 0272 C001 movw r24,r0
645 0274 439F mul r20,r19
646 0276 900D add r25,r0
647 0278 529F mul r21,r18
648 027a 900D add r25,r0
649 027c 1124 clr r1
650 027e 00D0 rcall Delay_ms
652 .LM63:
653 0280 1092 0000 sts CompInterruptFreigabe,__zero_reg__
654 0284 4398 cbi 40-0x20,3
656 .LM64:
657 /* #APP */
658 0286 F894 cli
660 .LM65:
661 /* #NOAPP */
662 0288 8AE0 ldi r24,lo8(10)
663 028a 00D0 rcall uart_putchar
665 .LM66:
666 028c 82B3 in r24,50-0x20
667 028e 877C andi r24,lo8(-57)
668 0290 82BB out 50-0x20,r24
669 0292 81E0 ldi r24,lo8(1)
670 0294 8FBD out 79-0x20,r24
671 0296 81E4 ldi r24,lo8(65)
672 0298 85BD out 69-0x20,r24
673 029a 8EE0 ldi r24,lo8(14)
674 029c 87BB out 55-0x20,r24
675 029e 88B3 in r24,56-0x20
676 02a0 817F andi r24,lo8(-15)
677 02a2 88BB out 56-0x20,r24
679 .LM67:
680 02a4 1092 0000 sts Strom_max,__zero_reg__
682 .LM68:
683 02a8 82E3 ldi r24,lo8(50)
684 02aa 90E0 ldi r25,hi8(50)
685 02ac 00D0 rcall DelayM
687 .LM69:
688 02ae 8091 0000 lds r24,Strom_max
689 02b2 9927 clr r25
690 02b4 9093 0000 sts (RuheStrom)+1,r25
691 02b8 8093 0000 sts RuheStrom,r24
693 .LM70:
694 02bc 1092 0000 sts (Strom)+1,__zero_reg__
695 02c0 1092 0000 sts Strom,__zero_reg__
697 .LM71:
698 02c4 949A sbi 50-0x20,4
700 .LM72:
701 02c6 C39A sbi 56-0x20,3
703 .LM73:
704 02c8 83E0 ldi r24,lo8(3)
705 02ca 90E0 ldi r25,hi8(3)
706 02cc 00D0 rcall DelayM
707 02ce 8823 tst r24
708 02d0 01F4 brne .L56
709 02d2 BB24 clr r11
710 02d4 00C0 rjmp .L58
711 .L56:
713 .LM74:
714 02d6 81E3 ldi r24,lo8(49)
715 02d8 00D0 rcall uart_putchar
716 02da BB24 clr r11
717 02dc B394 inc r11
718 .L58:
720 .LM75:
721 02de 82B3 in r24,50-0x20
722 02e0 877C andi r24,lo8(-57)
723 02e2 82BB out 50-0x20,r24
724 02e4 88B3 in r24,56-0x20
725 02e6 817F andi r24,lo8(-15)
726 02e8 88BB out 56-0x20,r24
728 .LM76:
729 02ea 1092 0000 sts (Strom)+1,__zero_reg__
730 02ee 1092 0000 sts Strom,__zero_reg__
732 .LM77:
733 02f2 939A sbi 50-0x20,3
735 .LM78:
736 02f4 C29A sbi 56-0x20,2
738 .LM79:
739 02f6 83E0 ldi r24,lo8(3)
740 02f8 90E0 ldi r25,hi8(3)
741 02fa 00D0 rcall DelayM
742 02fc 8823 tst r24
743 02fe 01F0 breq .L59
745 .LM80:
746 0300 82E3 ldi r24,lo8(50)
747 0302 00D0 rcall uart_putchar
748 0304 B2E0 ldi r27,lo8(2)
749 0306 BB2E mov r11,r27
750 .L59:
752 .LM81:
753 0308 82B3 in r24,50-0x20
754 030a 877C andi r24,lo8(-57)
755 030c 82BB out 50-0x20,r24
756 030e 88B3 in r24,56-0x20
757 0310 817F andi r24,lo8(-15)
758 0312 88BB out 56-0x20,r24
760 .LM82:
761 0314 1092 0000 sts (Strom)+1,__zero_reg__
762 0318 1092 0000 sts Strom,__zero_reg__
764 .LM83:
765 031c 949A sbi 50-0x20,4
767 .LM84:
768 031e C19A sbi 56-0x20,1
770 .LM85:
771 0320 83E0 ldi r24,lo8(3)
772 0322 90E0 ldi r25,hi8(3)
773 0324 00D0 rcall DelayM
774 0326 8823 tst r24
775 0328 01F0 breq .L61
777 .LM86:
778 032a 83E3 ldi r24,lo8(51)
779 032c 00D0 rcall uart_putchar
780 032e A3E0 ldi r26,lo8(3)
781 0330 BA2E mov r11,r26
782 .L61:
784 .LM87:
785 0332 82B3 in r24,50-0x20
786 0334 877C andi r24,lo8(-57)
787 0336 82BB out 50-0x20,r24
788 0338 88B3 in r24,56-0x20
789 033a 817F andi r24,lo8(-15)
790 033c 88BB out 56-0x20,r24
792 .LM88:
793 033e 939A sbi 50-0x20,3
795 .LM89:
796 0340 C19A sbi 56-0x20,1
798 .LM90:
799 0342 83E0 ldi r24,lo8(3)
800 0344 90E0 ldi r25,hi8(3)
801 0346 00D0 rcall DelayM
802 0348 8823 tst r24
803 034a 01F0 breq .L63
805 .LM91:
806 034c 87E3 ldi r24,lo8(55)
807 034e 00D0 rcall uart_putchar
808 0350 F3E0 ldi r31,lo8(3)
809 0352 BF2E mov r11,r31
810 .L63:
812 .LM92:
813 0354 82B3 in r24,50-0x20
814 0356 877C andi r24,lo8(-57)
815 0358 82BB out 50-0x20,r24
816 035a 88B3 in r24,56-0x20
817 035c 817F andi r24,lo8(-15)
818 035e 88BB out 56-0x20,r24
820 .LM93:
821 0360 80E1 ldi r24,lo8(10000)
822 0362 97E2 ldi r25,hi8(10000)
823 0364 00D0 rcall DelayM
825 .LM94:
826 0366 BB20 tst r11
827 0368 01F0 breq .L65
828 .L138:
829 036a 8B2D mov r24,r11
830 036c 00D0 rcall RotBlink
831 036e 00C0 rjmp .L138
832 .L65:
834 .LM95:
835 0370 8CB1 in r24,44-0x20
836 0372 8032 cpi r24,lo8(32)
837 0374 01F0 breq .L67
838 0376 E8EE ldi r30,lo8(1000)
839 0378 8E2E mov r8,r30
840 037a E3E0 ldi r30,hi8(1000)
841 037c 9E2E mov r9,r30
842 037e 82E3 ldi r24,lo8(50)
843 0380 00C0 rjmp .L69
844 .L67:
845 0382 8FE5 ldi r24,lo8(95)
846 0384 00D0 rcall uart_putchar
847 0386 8824 clr r8
848 0388 8A94 dec r8
849 038a 982C mov r9,r8
850 038c 88E2 ldi r24,lo8(40)
851 .L69:
853 .LM96:
854 038e 1092 0000 sts (Strom)+1,__zero_reg__
855 0392 1092 0000 sts Strom,__zero_reg__
856 0396 00E0 ldi r16,lo8(0)
857 0398 10E0 ldi r17,hi8(0)
859 .LM97:
860 039a C82E mov r12,r24
861 039c DD24 clr r13
862 .L70:
864 .LM98:
865 039e 939A sbi 50-0x20,3
867 .LM99:
868 03a0 81E0 ldi r24,lo8(1)
869 03a2 90E0 ldi r25,hi8(1)
870 03a4 00D0 rcall DelayM
872 .LM100:
873 03a6 82B3 in r24,50-0x20
874 03a8 877C andi r24,lo8(-57)
875 03aa 82BB out 50-0x20,r24
876 03ac 88B3 in r24,56-0x20
877 03ae 817F andi r24,lo8(-15)
878 03b0 88BB out 56-0x20,r24
880 .LM101:
881 03b2 C39A sbi 56-0x20,3
883 .LM102:
884 03b4 81E0 ldi r24,lo8(1)
885 03b6 90E0 ldi r25,hi8(1)
886 03b8 00D0 rcall DelayM
888 .LM103:
889 03ba 82B3 in r24,50-0x20
890 03bc 877C andi r24,lo8(-57)
891 03be 82BB out 50-0x20,r24
892 03c0 88B3 in r24,56-0x20
893 03c2 817F andi r24,lo8(-15)
894 03c4 88BB out 56-0x20,r24
896 .LM104:
897 03c6 7601 movw r14,r12
898 03c8 8091 0000 lds r24,RuheStrom
899 03cc 9091 0000 lds r25,(RuheStrom)+1
900 03d0 8C0D add r24,r12
901 03d2 9D1D adc r25,r13
902 03d4 2091 0000 lds r18,Strom
903 03d8 3091 0000 lds r19,(Strom)+1
904 03dc 8217 cp r24,r18
905 03de 9307 cpc r25,r19
906 03e0 00F4 brsh .L71
907 03e2 84E3 ldi r24,lo8(52)
908 03e4 00D0 rcall uart_putchar
909 03e6 74E0 ldi r23,lo8(4)
910 03e8 B72E mov r11,r23
911 03ea 00C0 rjmp .L73
912 .L71:
914 .LM105:
915 03ec 0F5F subi r16,lo8(-(1))
916 03ee 1F4F sbci r17,hi8(-(1))
917 03f0 0815 cp r16,r8
918 03f2 1905 cpc r17,r9
919 03f4 01F4 brne .L70
920 .L73:
922 .LM106:
923 03f6 1092 0000 sts (Strom)+1,__zero_reg__
924 03fa 1092 0000 sts Strom,__zero_reg__
925 03fe 00E0 ldi r16,lo8(0)
926 0400 10E0 ldi r17,hi8(0)
927 .L74:
929 .LM107:
930 0402 949A sbi 50-0x20,4
932 .LM108:
933 0404 81E0 ldi r24,lo8(1)
934 0406 90E0 ldi r25,hi8(1)
935 0408 00D0 rcall DelayM
937 .LM109:
938 040a 82B3 in r24,50-0x20
939 040c 877C andi r24,lo8(-57)
940 040e 82BB out 50-0x20,r24
941 0410 88B3 in r24,56-0x20
942 0412 817F andi r24,lo8(-15)
943 0414 88BB out 56-0x20,r24
945 .LM110:
946 0416 C29A sbi 56-0x20,2
948 .LM111:
949 0418 81E0 ldi r24,lo8(1)
950 041a 90E0 ldi r25,hi8(1)
951 041c 00D0 rcall DelayM
953 .LM112:
954 041e 82B3 in r24,50-0x20
955 0420 877C andi r24,lo8(-57)
956 0422 82BB out 50-0x20,r24
957 0424 88B3 in r24,56-0x20
958 0426 817F andi r24,lo8(-15)
959 0428 88BB out 56-0x20,r24
961 .LM113:
962 042a 8091 0000 lds r24,RuheStrom
963 042e 9091 0000 lds r25,(RuheStrom)+1
964 0432 8E0D add r24,r14
965 0434 9F1D adc r25,r15
966 0436 2091 0000 lds r18,Strom
967 043a 3091 0000 lds r19,(Strom)+1
968 043e 8217 cp r24,r18
969 0440 9307 cpc r25,r19
970 0442 00F4 brsh .L75
971 0444 85E3 ldi r24,lo8(53)
972 0446 00D0 rcall uart_putchar
973 0448 65E0 ldi r22,lo8(5)
974 044a B62E mov r11,r22
975 044c 00C0 rjmp .L77
976 .L75:
978 .LM114:
979 044e 0F5F subi r16,lo8(-(1))
980 0450 1F4F sbci r17,hi8(-(1))
981 0452 0815 cp r16,r8
982 0454 1905 cpc r17,r9
983 0456 01F4 brne .L74
984 .L77:
986 .LM115:
987 0458 1092 0000 sts (Strom)+1,__zero_reg__
988 045c 1092 0000 sts Strom,__zero_reg__
989 0460 00E0 ldi r16,lo8(0)
990 0462 10E0 ldi r17,hi8(0)
991 .L78:
993 .LM116:
994 0464 959A sbi 50-0x20,5
996 .LM117:
997 0466 81E0 ldi r24,lo8(1)
998 0468 90E0 ldi r25,hi8(1)
999 046a 00D0 rcall DelayM
1001 .LM118:
1002 046c 82B3 in r24,50-0x20
1003 046e 877C andi r24,lo8(-57)
1004 0470 82BB out 50-0x20,r24
1005 0472 88B3 in r24,56-0x20
1006 0474 817F andi r24,lo8(-15)
1007 0476 88BB out 56-0x20,r24
1009 .LM119:
1010 0478 C19A sbi 56-0x20,1
1012 .LM120:
1013 047a 81E0 ldi r24,lo8(1)
1014 047c 90E0 ldi r25,hi8(1)
1015 047e 00D0 rcall DelayM
1017 .LM121:
1018 0480 82B3 in r24,50-0x20
1019 0482 877C andi r24,lo8(-57)
1020 0484 82BB out 50-0x20,r24
1021 0486 88B3 in r24,56-0x20
1022 0488 817F andi r24,lo8(-15)
1023 048a 88BB out 56-0x20,r24
1025 .LM122:
1026 048c 8091 0000 lds r24,RuheStrom
1027 0490 9091 0000 lds r25,(RuheStrom)+1
1028 0494 8E0D add r24,r14
1029 0496 9F1D adc r25,r15
1030 0498 2091 0000 lds r18,Strom
1031 049c 3091 0000 lds r19,(Strom)+1
1032 04a0 8217 cp r24,r18
1033 04a2 9307 cpc r25,r19
1034 04a4 00F4 brsh .L79
1035 04a6 86E3 ldi r24,lo8(54)
1036 04a8 00D0 rcall uart_putchar
1037 04aa 56E0 ldi r21,lo8(6)
1038 04ac B52E mov r11,r21
1039 04ae 00C0 rjmp .L81
1040 .L79:
1042 .LM123:
1043 04b0 0F5F subi r16,lo8(-(1))
1044 04b2 1F4F sbci r17,hi8(-(1))
1045 04b4 0815 cp r16,r8
1046 04b6 1905 cpc r17,r9
1047 04b8 01F4 brne .L78
1048 .L81:
1050 .LM124:
1051 04ba 17B8 out 39-0x20,__zero_reg__
1053 .LM125:
1054 04bc 82B3 in r24,50-0x20
1055 04be 877C andi r24,lo8(-57)
1056 04c0 82BB out 50-0x20,r24
1057 04c2 88B3 in r24,56-0x20
1058 04c4 817F andi r24,lo8(-15)
1059 04c6 88BB out 56-0x20,r24
1061 .LM126:
1062 04c8 949A sbi 50-0x20,4
1064 .LM127:
1065 04ca 959A sbi 50-0x20,5
1067 .LM128:
1068 04cc 1092 0000 sts (Strom)+1,__zero_reg__
1069 04d0 1092 0000 sts Strom,__zero_reg__
1070 04d4 00E0 ldi r16,lo8(0)
1071 04d6 10E0 ldi r17,hi8(0)
1072 04d8 FF24 clr r15
1073 .L82:
1075 .LM129:
1076 04da C39A sbi 56-0x20,3
1078 .LM130:
1079 04dc 80E0 ldi r24,lo8(0)
1080 04de 90E0 ldi r25,hi8(0)
1081 04e0 00D0 rcall MessAD
1082 04e2 C397 sbiw r24,51
1083 04e4 04F0 brlt .L83
1084 04e6 51E0 ldi r21,lo8(1)
1085 04e8 F52A or r15,r21
1086 04ea 00C0 rjmp .L85
1087 .L83:
1088 04ec 8EEF ldi r24,lo8(-2)
1089 04ee F822 and r15,r24
1090 .L85:
1092 .LM131:
1093 04f0 18BA out 56-0x20,__zero_reg__
1095 .LM132:
1096 04f2 0F5F subi r16,lo8(-(1))
1097 04f4 1F4F sbci r17,hi8(-(1))
1098 04f6 0937 cpi r16,121
1099 04f8 1105 cpc r17,__zero_reg__
1100 04fa 01F4 brne .L82
1102 .LM133:
1103 04fc 82B3 in r24,50-0x20
1104 04fe 877C andi r24,lo8(-57)
1105 0500 82BB out 50-0x20,r24
1106 0502 88B3 in r24,56-0x20
1107 0504 817F andi r24,lo8(-15)
1108 0506 88BB out 56-0x20,r24
1110 .LM134:
1111 0508 939A sbi 50-0x20,3
1113 .LM135:
1114 050a 959A sbi 50-0x20,5
1115 050c 00E0 ldi r16,lo8(0)
1116 050e 10E0 ldi r17,hi8(0)
1117 .L87:
1119 .LM136:
1120 0510 C29A sbi 56-0x20,2
1122 .LM137:
1123 0512 81E0 ldi r24,lo8(1)
1124 0514 90E0 ldi r25,hi8(1)
1125 0516 00D0 rcall MessAD
1126 0518 C397 sbiw r24,51
1127 051a 04F0 brlt .L88
1128 051c 42E0 ldi r20,lo8(2)
1129 051e F42A or r15,r20
1130 0520 00C0 rjmp .L90
1131 .L88:
1132 0522 5DEF ldi r21,lo8(-3)
1133 0524 F522 and r15,r21
1134 .L90:
1136 .LM138:
1137 0526 18BA out 56-0x20,__zero_reg__
1139 .LM139:
1140 0528 0F5F subi r16,lo8(-(1))
1141 052a 1F4F sbci r17,hi8(-(1))
1142 052c 0538 cpi r16,133
1143 052e 1105 cpc r17,__zero_reg__
1144 0530 01F4 brne .L87
1146 .LM140:
1147 0532 82B3 in r24,50-0x20
1148 0534 877C andi r24,lo8(-57)
1149 0536 82BB out 50-0x20,r24
1150 0538 88B3 in r24,56-0x20
1151 053a 817F andi r24,lo8(-15)
1152 053c 88BB out 56-0x20,r24
1154 .LM141:
1155 053e 939A sbi 50-0x20,3
1157 .LM142:
1158 0540 949A sbi 50-0x20,4
1159 0542 00E0 ldi r16,lo8(0)
1160 0544 10E0 ldi r17,hi8(0)
1161 .L92:
1163 .LM143:
1164 0546 C19A sbi 56-0x20,1
1166 .LM144:
1167 0548 82E0 ldi r24,lo8(2)
1168 054a 90E0 ldi r25,hi8(2)
1169 054c 00D0 rcall MessAD
1170 054e C397 sbiw r24,51
1171 0550 04F0 brlt .L93
1172 0552 84E0 ldi r24,lo8(4)
1173 0554 F82A or r15,r24
1174 0556 00C0 rjmp .L95
1175 .L93:
1176 0558 4BEF ldi r20,lo8(-5)
1177 055a F422 and r15,r20
1178 .L95:
1180 .LM145:
1181 055c 18BA out 56-0x20,__zero_reg__
1183 .LM146:
1184 055e 0F5F subi r16,lo8(-(1))
1185 0560 1F4F sbci r17,hi8(-(1))
1186 0562 0F36 cpi r16,111
1187 0564 1105 cpc r17,__zero_reg__
1188 0566 01F4 brne .L92
1190 .LM147:
1191 0568 82B3 in r24,50-0x20
1192 056a 877C andi r24,lo8(-57)
1193 056c 82BB out 50-0x20,r24
1194 056e 88B3 in r24,56-0x20
1195 0570 817F andi r24,lo8(-15)
1196 0572 88BB out 56-0x20,r24
1198 .LM148:
1199 0574 81E0 ldi r24,lo8(1)
1200 0576 87B9 out 39-0x20,r24
1202 .LM149:
1203 0578 939A sbi 50-0x20,3
1204 057a 00E0 ldi r16,lo8(0)
1205 057c 10E0 ldi r17,hi8(0)
1206 .L97:
1208 .LM150:
1209 057e C29A sbi 56-0x20,2
1211 .LM151:
1212 0580 80E0 ldi r24,lo8(0)
1213 0582 90E0 ldi r25,hi8(0)
1214 0584 00D0 rcall MessAD
1215 0586 C397 sbiw r24,51
1216 0588 04F0 brlt .L98
1217 058a 57EF ldi r21,lo8(-9)
1218 058c F522 and r15,r21
1219 058e 00C0 rjmp .L100
1220 .L98:
1221 0590 88E0 ldi r24,lo8(8)
1222 0592 F82A or r15,r24
1223 .L100:
1225 .LM152:
1226 0594 18BA out 56-0x20,__zero_reg__
1228 .LM153:
1229 0596 0F5F subi r16,lo8(-(1))
1230 0598 1F4F sbci r17,hi8(-(1))
1231 059a 0937 cpi r16,121
1232 059c 1105 cpc r17,__zero_reg__
1233 059e 01F4 brne .L97
1235 .LM154:
1236 05a0 959A sbi 50-0x20,5
1237 05a2 00E0 ldi r16,lo8(0)
1238 05a4 10E0 ldi r17,hi8(0)
1239 .L102:
1241 .LM155:
1242 05a6 C29A sbi 56-0x20,2
1244 .LM156:
1245 05a8 82E0 ldi r24,lo8(2)
1246 05aa 90E0 ldi r25,hi8(2)
1247 05ac 00D0 rcall MessAD
1248 05ae C397 sbiw r24,51
1249 05b0 04F0 brlt .L103
1250 05b2 4FED ldi r20,lo8(-33)
1251 05b4 F422 and r15,r20
1252 05b6 00C0 rjmp .L105
1253 .L103:
1254 05b8 50E2 ldi r21,lo8(32)
1255 05ba F52A or r15,r21
1256 .L105:
1258 .LM157:
1259 05bc 18BA out 56-0x20,__zero_reg__
1261 .LM158:
1262 05be 0F5F subi r16,lo8(-(1))
1263 05c0 1F4F sbci r17,hi8(-(1))
1264 05c2 0538 cpi r16,133
1265 05c4 1105 cpc r17,__zero_reg__
1266 05c6 01F4 brne .L102
1268 .LM159:
1269 05c8 82B3 in r24,50-0x20
1270 05ca 877C andi r24,lo8(-57)
1271 05cc 82BB out 50-0x20,r24
1272 05ce 88B3 in r24,56-0x20
1273 05d0 817F andi r24,lo8(-15)
1274 05d2 88BB out 56-0x20,r24
1276 .LM160:
1277 05d4 82B3 in r24,50-0x20
1278 05d6 877C andi r24,lo8(-57)
1279 05d8 82BB out 50-0x20,r24
1280 05da 88B3 in r24,56-0x20
1281 05dc 817F andi r24,lo8(-15)
1282 05de 88BB out 56-0x20,r24
1284 .LM161:
1285 05e0 949A sbi 50-0x20,4
1286 05e2 00E0 ldi r16,lo8(0)
1287 05e4 10E0 ldi r17,hi8(0)
1288 .L107:
1290 .LM162:
1291 05e6 C19A sbi 56-0x20,1
1293 .LM163:
1294 05e8 81E0 ldi r24,lo8(1)
1295 05ea 90E0 ldi r25,hi8(1)
1296 05ec 00D0 rcall MessAD
1297 05ee C397 sbiw r24,51
1298 05f0 04F0 brlt .L108
1299 05f2 8FEE ldi r24,lo8(-17)
1300 05f4 F822 and r15,r24
1301 05f6 00C0 rjmp .L110
1302 .L108:
1303 05f8 40E1 ldi r20,lo8(16)
1304 05fa F42A or r15,r20
1305 .L110:
1307 .LM164:
1308 05fc 18BA out 56-0x20,__zero_reg__
1310 .LM165:
1311 05fe 0F5F subi r16,lo8(-(1))
1312 0600 1F4F sbci r17,hi8(-(1))
1313 0602 0F36 cpi r16,111
1314 0604 1105 cpc r17,__zero_reg__
1315 0606 01F4 brne .L107
1317 .LM166:
1318 0608 82B3 in r24,50-0x20
1319 060a 877C andi r24,lo8(-57)
1320 060c 82BB out 50-0x20,r24
1321 060e 88B3 in r24,56-0x20
1322 0610 817F andi r24,lo8(-15)
1323 0612 88BB out 56-0x20,r24
1325 .LM167:
1326 /* #APP */
1327 0614 7894 sei
1329 .LM168:
1330 /* #NOAPP */
1331 0616 8091 0000 lds r24,MotorAdresse
1332 061a FE01 movw r30,r28
1333 061c E80F add r30,r24
1334 061e F11D adc r31,__zero_reg__
1335 0620 2181 ldd r18,Z+1
1336 0622 84E0 ldi r24,lo8(4)
1337 0624 90E0 ldi r25,hi8(4)
1338 0626 821B sub r24,r18
1339 0628 9109 sbc r25,__zero_reg__
1340 062a 2CE2 ldi r18,lo8(300)
1341 062c 31E0 ldi r19,hi8(300)
1342 062e AC01 movw r20,r24
1343 0630 429F mul r20,r18
1344 0632 C001 movw r24,r0
1345 0634 439F mul r20,r19
1346 0636 900D add r25,r0
1347 0638 529F mul r21,r18
1348 063a 900D add r25,r0
1349 063c 1124 clr r1
1350 063e 00D0 rcall Delay_ms
1352 .LM169:
1353 0640 8F2D mov r24,r15
1354 0642 9927 clr r25
1355 0644 80FD sbrc r24,0
1356 0646 00C0 rjmp .L112
1357 0648 81E4 ldi r24,lo8(65)
1358 064a 8CB9 out 44-0x20,r24
1359 064c BB24 clr r11
1360 064e B394 inc r11
1361 0650 00C0 rjmp .L114
1362 .L112:
1364 .LM170:
1365 0652 81FD sbrc r24,1
1366 0654 00C0 rjmp .L115
1367 0656 82E4 ldi r24,lo8(66)
1368 0658 8CB9 out 44-0x20,r24
1369 065a 42E0 ldi r20,lo8(2)
1370 065c B42E mov r11,r20
1371 065e 00C0 rjmp .L114
1372 .L115:
1374 .LM171:
1375 0660 82FD sbrc r24,2
1376 0662 00C0 rjmp .L117
1377 0664 83E4 ldi r24,lo8(67)
1378 0666 8CB9 out 44-0x20,r24
1379 0668 33E0 ldi r19,lo8(3)
1380 066a B32E mov r11,r19
1381 066c 00C0 rjmp .L114
1382 .L117:
1384 .LM172:
1385 066e 83FD sbrc r24,3
1386 0670 00C0 rjmp .L119
1387 0672 81E6 ldi r24,lo8(97)
1388 0674 8CB9 out 44-0x20,r24
1389 0676 24E0 ldi r18,lo8(4)
1390 0678 B22E mov r11,r18
1391 067a 00C0 rjmp .L114
1392 .L119:
1394 .LM173:
1395 067c 84FD sbrc r24,4
1396 067e 00C0 rjmp .L121
1397 0680 82E6 ldi r24,lo8(98)
1398 0682 8CB9 out 44-0x20,r24
1399 0684 95E0 ldi r25,lo8(5)
1400 0686 B92E mov r11,r25
1401 0688 00C0 rjmp .L114
1402 .L121:
1404 .LM174:
1405 068a 85FD sbrc r24,5
1406 068c 00C0 rjmp .L123
1407 068e 83E6 ldi r24,lo8(99)
1408 0690 8CB9 out 44-0x20,r24
1409 0692 86E0 ldi r24,lo8(6)
1410 0694 B82E mov r11,r24
1411 0696 00C0 rjmp .L114
1412 .L123:
1414 .LM175:
1415 0698 BB20 tst r11
1416 069a 01F0 breq .L125
1417 .L114:
1418 069c 88EE ldi r24,lo8(1000)
1419 069e 93E0 ldi r25,hi8(1000)
1420 06a0 00D0 rcall Delay_ms
1421 .L125:
1423 .LM176:
1424 06a2 8B2D mov r24,r11
1425 06a4 00D0 rcall RotBlink
1427 .LM177:
1428 06a6 8EE2 ldi r24,lo8(46)
1429 06a8 00D0 rcall uart_putchar
1430 /* epilogue: frame size=5 */
1431 06aa 2596 adiw r28,5
1432 06ac 0FB6 in __tmp_reg__,__SREG__
1433 06ae F894 cli
1434 06b0 DEBF out __SP_H__,r29
1435 06b2 0FBE out __SREG__,__tmp_reg__
1436 06b4 CDBF out __SP_L__,r28
1437 06b6 DF91 pop r29
1438 06b8 CF91 pop r28
1439 06ba 1F91 pop r17
1440 06bc 0F91 pop r16
1441 06be FF90 pop r15
1442 06c0 EF90 pop r14
1443 06c2 DF90 pop r13
1444 06c4 CF90 pop r12
1445 06c6 BF90 pop r11
1446 06c8 9F90 pop r9
1447 06ca 8F90 pop r8
1448 06cc 0895 ret
1449 /* epilogue end (size=18) */
1450 /* function MotorTon size 607 (570) */
1460 .Lscope9:
1462 .stabd 78,0,0
1465 .global Anwerfen
1467 Anwerfen:
1468 .stabd 46,0,0
1470 .LM178:
1471 .LFBB10:
1472 /* prologue: frame size=0 */
1473 06ce AF92 push r10
1474 06d0 BF92 push r11
1475 06d2 CF92 push r12
1476 06d4 DF92 push r13
1477 06d6 EF92 push r14
1478 06d8 FF92 push r15
1479 06da 0F93 push r16
1480 06dc 1F93 push r17
1481 06de CF93 push r28
1482 06e0 DF93 push r29
1483 /* prologue end (size=10) */
1484 06e2 182F mov r17,r24
1486 .LM179:
1487 06e4 1092 0000 sts CompInterruptFreigabe,__zero_reg__
1488 06e8 4398 cbi 40-0x20,3
1490 .LM180:
1491 06ea 85E0 ldi r24,lo8(5)
1492 06ec 90E0 ldi r25,hi8(5)
1493 06ee 9093 0000 sts (PWM)+1,r25
1494 06f2 8093 0000 sts PWM,r24
1496 .LM181:
1497 06f6 00D0 rcall SetPWM
1499 .LM182:
1500 06f8 00D0 rcall Manuell
1502 .LM183:
1503 06fa 88EC ldi r24,lo8(200)
1504 06fc 90E0 ldi r25,hi8(200)
1505 06fe 00D0 rcall Delay_ms
1507 .LM184:
1508 0700 C12F mov r28,r17
1509 0702 DD27 clr r29
1510 0704 D093 0000 sts (PWM)+1,r29
1511 0708 C093 0000 sts PWM,r28
1512 070c 1CE2 ldi r17,lo8(300)
1513 070e A12E mov r10,r17
1514 0710 11E0 ldi r17,hi8(300)
1515 0712 B12E mov r11,r17
1516 0714 C12C mov r12,__zero_reg__
1517 0716 D12C mov r13,__zero_reg__
1518 .L160:
1520 .LM185:
1521 0718 EE24 clr r14
1522 071a FF24 clr r15
1523 071c 8701 movw r16,r14
1524 071e 00C0 rjmp .L147
1525 .L148:
1527 .LM186:
1528 0720 8091 0000 lds r24,UebertragungAbgeschlossen
1529 0724 8823 tst r24
1530 0726 01F4 brne .L149
1531 0728 00D0 rcall SendUart
1532 072a 00C0 rjmp .L151
1533 .L149:
1535 .LM187:
1536 072c 00D0 rcall DatenUebertragung
1537 .L151:
1539 .LM188:
1540 072e 84E6 ldi r24,lo8(100)
1541 0730 00D0 rcall Wait
1543 .LM189:
1544 0732 0894 sec
1545 0734 E11C adc r14,__zero_reg__
1546 0736 F11C adc r15,__zero_reg__
1547 0738 011D adc r16,__zero_reg__
1548 073a 111D adc r17,__zero_reg__
1549 .L147:
1550 073c EA14 cp r14,r10
1551 073e FB04 cpc r15,r11
1552 0740 0C05 cpc r16,r12
1553 0742 1D05 cpc r17,r13
1554 0744 01F4 brne .L148
1556 .LM190:
1557 0746 C601 movw r24,r12
1558 0748 B501 movw r22,r10
1559 074a 2FE0 ldi r18,lo8(15)
1560 074c 30E0 ldi r19,hi8(15)
1561 074e 40E0 ldi r20,hlo8(15)
1562 0750 50E0 ldi r21,hhi8(15)
1563 0752 00D0 rcall __udivmodsi4
1564 0754 A21A sub r10,r18
1565 0756 B30A sbc r11,r19
1566 0758 C40A sbc r12,r20
1567 075a D50A sbc r13,r21
1568 075c 0894 sec
1569 075e A108 sbc r10,__zero_reg__
1570 0760 B108 sbc r11,__zero_reg__
1571 0762 C108 sbc r12,__zero_reg__
1572 0764 D108 sbc r13,__zero_reg__
1574 .LM191:
1575 0766 89E1 ldi r24,lo8(25)
1576 0768 A816 cp r10,r24
1577 076a B104 cpc r11,__zero_reg__
1578 076c C104 cpc r12,__zero_reg__
1579 076e D104 cpc r13,__zero_reg__
1580 0770 00F0 brlo .L156
1582 .LM192:
1583 0772 00D0 rcall Manuell
1585 .LM193:
1586 0774 8091 0000 lds r24,Phase
1587 0778 8F5F subi r24,lo8(-(1))
1588 077a 8093 0000 sts Phase,r24
1590 .LM194:
1591 077e 8091 0000 lds r24,Phase
1592 0782 66E0 ldi r22,lo8(6)
1593 0784 00D0 rcall __udivmodqi4
1594 0786 9093 0000 sts Phase,r25
1596 .LM195:
1597 078a 00D0 rcall AdConvert
1599 .LM196:
1600 078c D093 0000 sts (PWM)+1,r29
1601 0790 C093 0000 sts PWM,r28
1603 .LM197:
1604 0794 00D0 rcall SetPWM
1606 .LM198:
1607 0796 449B sbis 40-0x20,4
1608 0798 00C0 rjmp .L160
1610 .LM199:
1611 079a 82B3 in r24,50-0x20
1612 079c 8058 subi r24,lo8(-(-128))
1613 079e 82BB out 50-0x20,r24
1614 07a0 00C0 rjmp .L160
1615 .L156:
1616 /* epilogue: frame size=0 */
1617 07a2 DF91 pop r29
1618 07a4 CF91 pop r28
1619 07a6 1F91 pop r17
1620 07a8 0F91 pop r16
1621 07aa FF90 pop r15
1622 07ac EF90 pop r14
1623 07ae DF90 pop r13
1624 07b0 CF90 pop r12
1625 07b2 BF90 pop r11
1626 07b4 AF90 pop r10
1627 07b6 0895 ret
1628 /* epilogue end (size=11) */
1629 /* function Anwerfen size 117 (96) */
1635 .Lscope10:
1637 .stabd 78,0,0
1639 .global main
1641 main:
1642 .stabd 46,0,0
509:src/main.c **** }
510:src/main.c ****
511:src/main.c ****
512:src/main.c **** //############################################################################
513:src/main.c **** //Hauptprogramm
514:src/main.c **** int main (void)
515:src/main.c **** //############################################################################
516:src/main.c **** {
1644 .LM200:
1645 .LFBB11:
1646 /* prologue: frame size=0 */
1647 07b8 C0E0 ldi r28,lo8(__stack - 0)
1648 07ba D0E0 ldi r29,hi8(__stack - 0)
1649 07bc DEBF out __SP_H__,r29
1650 07be CDBF out __SP_L__,r28
1651 /* prologue end (size=4) */
517:src/main.c **** char altPhase = 0;
518:src/main.c **** int test = 0;
519:src/main.c **** unsigned int MinUpmPulse,Blink,TestschubTimer;
520:src/main.c **** unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;
521:src/main.c ****
522:src/main.c **** DDRC = 0x08;
1653 .LM201:
1654 07c0 88E0 ldi r24,lo8(8)
1655 07c2 84BB out 52-0x20,r24
523:src/main.c **** PORTC = 0x08;
1657 .LM202:
1658 07c4 85BB out 53-0x20,r24
524:src/main.c **** DDRD = 0xBA;
1660 .LM203:
1661 07c6 8AEB ldi r24,lo8(-70)
1662 07c8 81BB out 49-0x20,r24
525:src/main.c **** PORTD = 0x00;
1664 .LM204:
1665 07ca 12BA out 50-0x20,__zero_reg__
526:src/main.c **** DDRB = 0x0E;
1667 .LM205:
1668 07cc 8EE0 ldi r24,lo8(14)
1669 07ce 87BB out 55-0x20,r24
527:src/main.c **** PORTB = 0x31;
1671 .LM206:
1672 07d0 81E3 ldi r24,lo8(49)
1673 07d2 88BB out 56-0x20,r24
528:src/main.c ****
529:src/main.c **** #if (MOTORADRESSE == 0)
530:src/main.c **** PORTB |= (ADR1 + ADR2); // Pullups für Adresswahl
1675 .LM207:
1676 07d4 88B3 in r24,56-0x20
1677 07d6 806C ori r24,lo8(-64)
1678 07d8 88BB out 56-0x20,r24
531:src/main.c **** for(test=0;test<500;test++);
532:src/main.c **** if (PINB & ADR1)
1680 .LM208:
1681 07da B69B sbis 54-0x20,6
1682 07dc 00C0 rjmp .L162
533:src/main.c **** {
534:src/main.c **** if (PINB & ADR2) MotorAdresse = 1;
1684 .LM209:
1685 07de B79B sbis 54-0x20,7
1686 07e0 00C0 rjmp .L164
1687 07e2 81E0 ldi r24,lo8(1)
1688 07e4 00C0 rjmp .L220
1689 .L164:
535:src/main.c **** else MotorAdresse = 2;
1691 .LM210:
1692 07e6 82E0 ldi r24,lo8(2)
1693 07e8 00C0 rjmp .L220
1694 .L162:
536:src/main.c **** }
537:src/main.c **** else
538:src/main.c **** {
539:src/main.c **** if (PINB & ADR2) MotorAdresse = 3;
1696 .LM211:
1697 07ea B79B sbis 54-0x20,7
1698 07ec 00C0 rjmp .L167
1699 07ee 83E0 ldi r24,lo8(3)
1700 07f0 00C0 rjmp .L220
1701 .L167:
540:src/main.c **** else MotorAdresse = 4;
1703 .LM212:
1704 07f2 84E0 ldi r24,lo8(4)
1705 .L220:
1706 07f4 8093 0000 sts MotorAdresse,r24
541:src/main.c **** }
542:src/main.c **** #else
543:src/main.c **** MotorAdresse = MOTORADRESSE;
544:src/main.c **** #endif
545:src/main.c ****
546:src/main.c **** UART_Init();
1708 .LM213:
1709 07f8 00D0 rcall UART_Init
547:src/main.c **** Timer0_Init();
1711 .LM214:
1712 07fa 00D0 rcall Timer0_Init
548:src/main.c **** sei();//Globale Interrupts Einschalten
1714 .LM215:
1715 /* #APP */
1716 07fc 7894 sei
549:src/main.c ****
550:src/main.c **** // Am Blinken erkennt man die richtige Motoradresse
551:src/main.c **** /*
552:src/main.c **** for(test=0;test<5;test++)
553:src/main.c **** {
554:src/main.c **** if(test == MotorAdresse) PORTD |= GRUEN;
555:src/main.c **** Delay_ms(150);
556:src/main.c **** PORTD &= ~GRUEN;
557:src/main.c **** Delay_ms(250);
558:src/main.c **** }
559:src/main.c ****
560:src/main.c **** Delay_ms(500);
561:src/main.c **** */
562:src/main.c **** // UART_Init(); // war doppelt
563:src/main.c **** PWM_Init();
1718 .LM216:
1719 /* #NOAPP */
1720 07fe 00D0 rcall PWM_Init
564:src/main.c ****
565:src/main.c **** InitIC2_Slave(0x50);
1722 .LM217:
1723 0800 80E5 ldi r24,lo8(80)
1724 0802 00D0 rcall InitIC2_Slave
566:src/main.c **** InitPPM();
1726 .LM218:
1727 0804 00D0 rcall InitPPM
567:src/main.c ****
568:src/main.c **** Blink = SetDelay(101);
1729 .LM219:
1730 0806 85E6 ldi r24,lo8(101)
1731 0808 90E0 ldi r25,hi8(101)
1732 080a 00D0 rcall SetDelay
569:src/main.c **** Blink2 = SetDelay(102);
1734 .LM220:
1735 080c 86E6 ldi r24,lo8(102)
1736 080e 90E0 ldi r25,hi8(102)
1737 0810 00D0 rcall SetDelay
570:src/main.c **** MinUpmPulse = SetDelay(103);
1739 .LM221:
1740 0812 87E6 ldi r24,lo8(103)
1741 0814 90E0 ldi r25,hi8(103)
1742 0816 00D0 rcall SetDelay
1743 0818 EC01 movw r28,r24
571:src/main.c **** MittelstromTimer = SetDelay(254);
1745 .LM222:
1746 081a 8EEF ldi r24,lo8(254)
1747 081c 90E0 ldi r25,hi8(254)
1748 081e 00D0 rcall SetDelay
1749 0820 6C01 movw r12,r24
572:src/main.c **** DrehzahlMessTimer = SetDelay(1005);
1751 .LM223:
1752 0822 8DEE ldi r24,lo8(1005)
1753 0824 93E0 ldi r25,hi8(1005)
1754 0826 00D0 rcall SetDelay
1755 0828 8C01 movw r16,r24
573:src/main.c **** TestschubTimer = SetDelay(1006);
1757 .LM224:
1758 082a 8EEE ldi r24,lo8(1006)
1759 082c 93E0 ldi r25,hi8(1006)
1760 082e 00D0 rcall SetDelay
1761 0830 00C0 rjmp .L169
1762 .L170:
574:src/main.c **** while(!CheckDelay(MinUpmPulse))
575:src/main.c **** {
576:src/main.c **** if(SollwertErmittlung()) break;
1764 .LM225:
1765 0832 00D0 rcall SollwertErmittlung
1766 0834 8823 tst r24
1767 0836 01F4 brne .L171
1768 .L169:
1770 .LM226:
1771 0838 CE01 movw r24,r28
1772 083a 00D0 rcall CheckDelay
1773 083c 8823 tst r24
1774 083e 01F0 breq .L170
1775 .L171:
577:src/main.c **** }
578:src/main.c **** ;
579:src/main.c **** PORTD |= GRUEN;
1777 .LM227:
1778 0840 979A sbi 50-0x20,7
580:src/main.c **** PWM = 0;
1780 .LM228:
1781 0842 1092 0000 sts (PWM)+1,__zero_reg__
1782 0846 1092 0000 sts PWM,__zero_reg__
581:src/main.c ****
582:src/main.c **** SetPWM();
1784 .LM229:
1785 084a 00D0 rcall SetPWM
583:src/main.c ****
584:src/main.c **** SFIOR = 0x08; // Analog Comperator ein
1787 .LM230:
1788 084c 88E0 ldi r24,lo8(8)
1789 084e 80BF out 80-0x20,r24
585:src/main.c **** ADMUX = 1;
1791 .LM231:
1792 0850 81E0 ldi r24,lo8(1)
1793 0852 87B9 out 39-0x20,r24
586:src/main.c ****
587:src/main.c **** MinUpmPulse = SetDelay(10);
1795 .LM232:
1796 0854 8AE0 ldi r24,lo8(10)
1797 0856 90E0 ldi r25,hi8(10)
1798 0858 00D0 rcall SetDelay
1799 085a EC01 movw r28,r24
588:src/main.c **** DebugOut.Analog[1] = 1;
1801 .LM233:
1802 085c 81E0 ldi r24,lo8(1)
1803 085e 90E0 ldi r25,hi8(1)
1804 0860 9093 0000 sts (DebugOut+20)+1,r25
1805 0864 8093 0000 sts DebugOut+20,r24
589:src/main.c **** PPM_Signal = 0;
1807 .LM234:
1808 0868 1092 0000 sts (PPM_Signal)+1,__zero_reg__
1809 086c 1092 0000 sts PPM_Signal,__zero_reg__
590:src/main.c ****
591:src/main.c **** if(!SollwertErmittlung()) MotorTon();
1811 .LM235:
1812 0870 00D0 rcall SollwertErmittlung
1813 0872 8823 tst r24
1814 0874 01F4 brne .L172
1815 0876 00D0 rcall MotorTon
1816 .L172:
592:src/main.c **** //MotorTon();
593:src/main.c **** PORTB = 0x31; // Pullups wieder einschalten
1818 .LM236:
1819 0878 81E3 ldi r24,lo8(49)
1820 087a 88BB out 56-0x20,r24
1821 087c EE24 clr r14
1822 .L222:
594:src/main.c ****
595:src/main.c **** // zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
596:src/main.c **** if(TEST_MANUELL) Anwerfen(TEST_MANUELL); // kommt von dort nicht wieder
597:src/main.c ****
598:src/main.c **** while (1)
599:src/main.c **** {
600:src/main.c **** //ShowSense();
601:src/main.c ****
602:src/main.c **** if(!TEST_SCHUB) PWM = SollwertErmittlung();
1824 .LM237:
1825 087e 00D0 rcall SollwertErmittlung
1826 0880 9927 clr r25
1827 0882 9093 0000 sts (PWM)+1,r25
1828 0886 8093 0000 sts PWM,r24
603:src/main.c **** //I2C_TXBuffer = PWM; // Antwort über I2C-Bus
604:src/main.c **** if(MANUELL_PWM) PWM = MANUELL_PWM;
605:src/main.c ****
606:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
607:src/main.c **** if(Phase != altPhase) // es gab eine Kommutierung im Interrupt
1830 .LM238:
1831 088a 8091 0000 lds r24,Phase
1832 088e 8E15 cp r24,r14
1833 0890 01F0 breq .L175
608:src/main.c **** {
609:src/main.c **** MotorGestoppt = 0;
1835 .LM239:
1836 0892 1092 0000 sts MotorGestoppt,__zero_reg__
610:src/main.c **** ZeitFuerBerechnungen = 0; // direkt nach einer Kommutierung ist Zeit
1838 .LM240:
1839 0896 1092 0000 sts ZeitFuerBerechnungen,__zero_reg__
611:src/main.c **** MinUpmPulse = SetDelay(250); // Timeout, falls ein Motor stehen bleibt
1841 .LM241:
1842 089a 8AEF ldi r24,lo8(250)
1843 089c 90E0 ldi r25,hi8(250)
1844 089e 00D0 rcall SetDelay
1845 08a0 EC01 movw r28,r24
612:src/main.c **** altPhase = Phase;
1847 .LM242:
1848 08a2 E090 0000 lds r14,Phase
1849 .L175:
613:src/main.c **** }
614:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
615:src/main.c **** if(!PWM) // Sollwert == 0
1851 .LM243:
1852 08a6 8091 0000 lds r24,PWM
1853 08aa 9091 0000 lds r25,(PWM)+1
1854 08ae 892B or r24,r25
1855 08b0 01F4 brne .L177
616:src/main.c **** {
617:src/main.c **** MotorAnwerfen = 0; // kein Startversuch
1857 .LM244:
1858 08b2 1092 0000 sts MotorAnwerfen,__zero_reg__
618:src/main.c **** ZeitFuerBerechnungen = 0;
1860 .LM245:
1861 08b6 1092 0000 sts ZeitFuerBerechnungen,__zero_reg__
619:src/main.c **** // nach 1,5 Sekunden den Motor als gestoppt betrachten
620:src/main.c **** if(CheckDelay(MotorGestopptTimer))
1863 .LM246:
1864 08ba C501 movw r24,r10
1865 08bc 00D0 rcall CheckDelay
1866 08be 8823 tst r24
1867 08c0 01F0 breq .L179
621:src/main.c **** {
622:src/main.c **** DISABLE_SENSE_INT;
1869 .LM247:
1870 08c2 1092 0000 sts CompInterruptFreigabe,__zero_reg__
1871 08c6 4398 cbi 40-0x20,3
623:src/main.c **** MotorGestoppt = 1;
1873 .LM248:
1874 08c8 91E0 ldi r25,lo8(1)
1875 08ca 9093 0000 sts MotorGestoppt,r25
624:src/main.c **** STEUER_OFF;
1877 .LM249:
1878 08ce 82B3 in r24,50-0x20
1879 08d0 877C andi r24,lo8(-57)
1880 08d2 82BB out 50-0x20,r24
1881 08d4 9FBD out 79-0x20,r25
1882 08d6 81E4 ldi r24,lo8(65)
1883 08d8 85BD out 69-0x20,r24
1884 08da 8EE0 ldi r24,lo8(14)
1885 08dc 87BB out 55-0x20,r24
1886 08de 88B3 in r24,56-0x20
1887 08e0 817F andi r24,lo8(-15)
1888 08e2 88BB out 56-0x20,r24
1889 08e4 00C0 rjmp .L179
1890 .L177:
625:src/main.c **** }
626:src/main.c **** }
627:src/main.c **** else
628:src/main.c **** {
629:src/main.c **** if(MotorGestoppt) MotorAnwerfen = 1; // Startversuch
1892 .LM250:
1893 08e6 8091 0000 lds r24,MotorGestoppt
1894 08ea 8823 tst r24
1895 08ec 01F0 breq .L181
1896 08ee 81E0 ldi r24,lo8(1)
1897 08f0 8093 0000 sts MotorAnwerfen,r24
1898 .L181:
630:src/main.c **** MotorGestopptTimer = SetDelay(1500);
1900 .LM251:
1901 08f4 8CED ldi r24,lo8(1500)
1902 08f6 95E0 ldi r25,hi8(1500)
1903 08f8 00D0 rcall SetDelay
1904 08fa 5C01 movw r10,r24
1905 .L179:
631:src/main.c **** }
632:src/main.c ****
633:src/main.c **** if(MotorGestoppt && !TEST_SCHUB) PWM = 0;
1907 .LM252:
1908 08fc 8091 0000 lds r24,MotorGestoppt
1909 0900 8823 tst r24
1910 0902 01F0 breq .L183
1911 0904 1092 0000 sts (PWM)+1,__zero_reg__
1912 0908 1092 0000 sts PWM,__zero_reg__
1913 .L183:
634:src/main.c **** SetPWM();
1915 .LM253:
1916 090c 00D0 rcall SetPWM
635:src/main.c **** // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
636:src/main.c **** if(!ZeitFuerBerechnungen++)
1918 .LM254:
1919 090e 8091 0000 lds r24,ZeitFuerBerechnungen
1920 0912 8F5F subi r24,lo8(-(1))
1921 0914 8093 0000 sts ZeitFuerBerechnungen,r24
1922 0918 8130 cpi r24,lo8(1)
1923 091a 01F0 breq .+2
1924 091c 00C0 rjmp .L222
637:src/main.c **** {
638:src/main.c **** if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;
1926 .LM255:
1927 091e 8091 0000 lds r24,MotorGestoppt
1928 0922 8111 cpse r24,__zero_reg__
1929 0924 979A sbi 50-0x20,7
1930 .L186:
639:src/main.c **** if(SIO_DEBUG)
640:src/main.c **** {
641:src/main.c **** DebugAusgaben(); // welche Werte sollen angezeigt werden?
642:src/main.c **** if(!UebertragungAbgeschlossen) SendUart();
643:src/main.c **** else DatenUebertragung();
644:src/main.c **** }
645:src/main.c **** // Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung
646:src/main.c **** if(CheckDelay(MittelstromTimer))
1932 .LM256:
1933 0926 C601 movw r24,r12
1934 0928 00D0 rcall CheckDelay
1935 092a 8823 tst r24
1936 092c 01F0 breq .L188
647:src/main.c **** {
648:src/main.c **** MittelstromTimer = SetDelay(50); // alle 50ms
1938 .LM257:
1939 092e 82E3 ldi r24,lo8(50)
1940 0930 90E0 ldi r25,hi8(50)
1941 0932 00D0 rcall SetDelay
1942 0934 6C01 movw r12,r24
649:src/main.c **** if(Mittelstrom < Strom) Mittelstrom++;// Mittelwert des Stroms bilden
1944 .LM258:
1945 0936 8091 0000 lds r24,Mittelstrom
1946 093a 482F mov r20,r24
1947 093c 5527 clr r21
1948 093e 2091 0000 lds r18,Strom
1949 0942 3091 0000 lds r19,(Strom)+1
1950 0946 4217 cp r20,r18
1951 0948 5307 cpc r21,r19
1952 094a 00F4 brsh .L190
1953 094c 8F5F subi r24,lo8(-(1))
1954 094e 00C0 rjmp .L221
1955 .L190:
650:src/main.c **** else if(Mittelstrom > Strom) Mittelstrom--;
1957 .LM259:
1958 0950 2417 cp r18,r20
1959 0952 3507 cpc r19,r21
1960 0954 00F4 brsh .L192
1961 0956 8150 subi r24,lo8(-(-1))
1962 .L221:
1963 0958 8093 0000 sts Mittelstrom,r24
1964 .L192:
651:src/main.c **** if(Strom > MAX_STROM) MaxPWM -= MaxPWM / 32;
1966 .LM260:
1967 095c 293C cpi r18,201
1968 095e 3105 cpc r19,__zero_reg__
1969 0960 00F0 brlo .L194
1970 0962 8091 0000 lds r24,MaxPWM
1971 0966 982F mov r25,r24
1972 0968 9295 swap r25
1973 096a 9695 lsr r25
1974 096c 9770 andi r25,0x7
1975 096e 891B sub r24,r25
1976 0970 8093 0000 sts MaxPWM,r24
1977 .L194:
652:src/main.c **** if((Mittelstrom > LIMIT_STROM))// Strom am Limit?
1979 .LM261:
1980 0974 8091 0000 lds r24,Mittelstrom
1981 0978 9091 0000 lds r25,MaxPWM
1982 097c 8937 cpi r24,lo8(121)
1983 097e 00F0 brlo .L196
653:src/main.c **** {
654:src/main.c **** if(MaxPWM) MaxPWM--;// dann die Maximale PWM herunterfahren
1985 .LM262:
1986 0980 9923 tst r25
1987 0982 01F0 breq .L198
1988 0984 9150 subi r25,lo8(-(-1))
1989 0986 9093 0000 sts MaxPWM,r25
1990 .L198:
655:src/main.c **** PORTC |= ROT;
1992 .LM263:
1993 098a AB9A sbi 53-0x20,3
1994 098c 00C0 rjmp .L188
1995 .L196:
656:src/main.c **** }
657:src/main.c **** else
658:src/main.c **** {
659:src/main.c **** if(MaxPWM < MAX_PWM) MaxPWM++;
1997 .LM264:
1998 098e 9F3F cpi r25,lo8(-1)
1999 0990 01F0 breq .L188
2000 0992 9F5F subi r25,lo8(-(1))
2001 0994 9093 0000 sts MaxPWM,r25
2002 .L188:
660:src/main.c **** }
661:src/main.c **** }
662:src/main.c ****
663:src/main.c **** if(CheckDelay(DrehzahlMessTimer)) // Ist-Drehzahl bestimmen
2004 .LM265:
2005 0998 C801 movw r24,r16
2006 099a 00D0 rcall CheckDelay
2007 099c 8823 tst r24
2008 099e 01F0 breq .L201
664:src/main.c **** {
665:src/main.c **** DrehzahlMessTimer = SetDelay(10);
2010 .LM266:
2011 09a0 8AE0 ldi r24,lo8(10)
2012 09a2 90E0 ldi r25,hi8(10)
2013 09a4 00D0 rcall SetDelay
2014 09a6 8C01 movw r16,r24
666:src/main.c **** SIO_Drehzahl = CntKommutierungen;//(6 * CntKommutierungen) / (POLANZAHL / 2);
2016 .LM267:
2017 09a8 8091 0000 lds r24,CntKommutierungen
2018 09ac 9091 0000 lds r25,(CntKommutierungen)+1
2019 09b0 9093 0000 sts (SIO_Drehzahl)+1,r25
2020 09b4 8093 0000 sts SIO_Drehzahl,r24
667:src/main.c **** CntKommutierungen = 0;
2022 .LM268:
2023 09b8 1092 0000 sts (CntKommutierungen)+1,__zero_reg__
2024 09bc 1092 0000 sts CntKommutierungen,__zero_reg__
668:src/main.c **** if(PPM_Timeout == 0) // keine PPM-Signale
2026 .LM269:
2027 09c0 8091 0000 lds r24,PPM_Timeout
2028 09c4 8823 tst r24
2029 09c6 01F4 brne .L201
669:src/main.c **** ZeitZumAdWandeln = 1;
2031 .LM270:
2032 09c8 81E0 ldi r24,lo8(1)
2033 09ca 8093 0000 sts ZeitZumAdWandeln,r24
2034 .L201:
670:src/main.c **** }
671:src/main.c ****
672:src/main.c **** if(TEST_SCHUB)
673:src/main.c **** {
674:src/main.c **** if(CheckDelay(TestschubTimer))
675:src/main.c **** {
676:src/main.c **** TestschubTimer = SetDelay(1500);
677:src/main.c **** switch(test)
678:src/main.c **** {
679:src/main.c **** case 0: PWM = 50; test++; break;
680:src/main.c **** case 1: PWM = 130; test++; break;
681:src/main.c **** case 2: PWM = 60; test++; break;
682:src/main.c **** case 3: PWM = 140; test++; break;
683:src/main.c **** case 4: PWM = 150; test = 0; break;
684:src/main.c **** default: test = 0;
685:src/main.c **** }
686:src/main.c **** }
687:src/main.c **** }
688:src/main.c **** // Motor Stehen geblieben
689:src/main.c **** if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen)
2036 .LM271:
2037 09ce CE01 movw r24,r28
2038 09d0 00D0 rcall CheckDelay
2039 09d2 8823 tst r24
2040 09d4 01F0 breq .L204
2041 09d6 8091 0000 lds r24,SIO_Drehzahl
2042 09da 9091 0000 lds r25,(SIO_Drehzahl)+1
2043 09de 892B or r24,r25
2044 09e0 01F0 breq .L206
2045 .L204:
2046 09e2 8091 0000 lds r24,MotorAnwerfen
2047 09e6 8823 tst r24
2048 09e8 01F4 brne .+2
2049 09ea 00C0 rjmp .L222
2050 .L206:
690:src/main.c **** {
691:src/main.c **** MotorGestoppt = 1;
2052 .LM272:
2053 09ec FF24 clr r15
2054 09ee F394 inc r15
2055 09f0 F092 0000 sts MotorGestoppt,r15
692:src/main.c **** DISABLE_SENSE_INT;
2057 .LM273:
2058 09f4 1092 0000 sts CompInterruptFreigabe,__zero_reg__
2059 09f8 4398 cbi 40-0x20,3
693:src/main.c **** MinUpmPulse = SetDelay(100);
2061 .LM274:
2062 09fa 84E6 ldi r24,lo8(100)
2063 09fc 90E0 ldi r25,hi8(100)
2064 09fe 00D0 rcall SetDelay
2065 0a00 EC01 movw r28,r24
694:src/main.c **** if(MotorAnwerfen)
2067 .LM275:
2068 0a02 8091 0000 lds r24,MotorAnwerfen
2069 0a06 8823 tst r24
2070 0a08 01F4 brne .+2
2071 0a0a 00C0 rjmp .L222
695:src/main.c **** {
696:src/main.c **** PORTC &= ~ROT;
2073 .LM276:
2074 0a0c AB98 cbi 53-0x20,3
697:src/main.c **** MotorAnwerfen = 0;
2076 .LM277:
2077 0a0e 1092 0000 sts MotorAnwerfen,__zero_reg__
698:src/main.c **** Anwerfen(10);
2079 .LM278:
2080 0a12 8AE0 ldi r24,lo8(10)
2081 0a14 00D0 rcall Anwerfen
699:src/main.c **** PORTD |= GRUEN;
2083 .LM279:
2084 0a16 979A sbi 50-0x20,7
700:src/main.c **** MotorGestoppt = 0;
2086 .LM280:
2087 0a18 1092 0000 sts MotorGestoppt,__zero_reg__
701:src/main.c **** Phase--;
2089 .LM281:
2090 0a1c 8091 0000 lds r24,Phase
2091 0a20 8150 subi r24,lo8(-(-1))
2092 0a22 8093 0000 sts Phase,r24
702:src/main.c **** PWM = 1;
2094 .LM282:
2095 0a26 81E0 ldi r24,lo8(1)
2096 0a28 90E0 ldi r25,hi8(1)
2097 0a2a 9093 0000 sts (PWM)+1,r25
2098 0a2e 8093 0000 sts PWM,r24
703:src/main.c **** SetPWM();
2100 .LM283:
2101 0a32 00D0 rcall SetPWM
704:src/main.c **** SENSE_TOGGLE_INT;
2103 .LM284:
2104 0a34 88B1 in r24,40-0x20
2105 0a36 8C7F andi r24,lo8(-4)
2106 0a38 88B9 out 40-0x20,r24
705:src/main.c **** ENABLE_SENSE_INT;
2108 .LM285:
2109 0a3a F092 0000 sts CompInterruptFreigabe,r15
2110 0a3e 88B1 in r24,40-0x20
2111 0a40 8A60 ori r24,lo8(10)
2112 0a42 88B9 out 40-0x20,r24
706:src/main.c **** MinUpmPulse = SetDelay(20);
2114 .LM286:
2115 0a44 84E1 ldi r24,lo8(20)
2116 0a46 90E0 ldi r25,hi8(20)
2117 0a48 00D0 rcall SetDelay
2118 0a4a EC01 movw r28,r24
2119 .L208:
707:src/main.c **** while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren
2121 .LM287:
2122 0a4c CE01 movw r24,r28
2123 0a4e 00D0 rcall CheckDelay
2124 0a50 8823 tst r24
2125 0a52 01F0 breq .L208
708:src/main.c **** PWM = 15;
2127 .LM288:
2128 0a54 8FE0 ldi r24,lo8(15)
2129 0a56 90E0 ldi r25,hi8(15)
2130 0a58 9093 0000 sts (PWM)+1,r25
2131 0a5c 8093 0000 sts PWM,r24
709:src/main.c **** SetPWM();
2133 .LM289:
2134 0a60 00D0 rcall SetPWM
710:src/main.c **** MinUpmPulse = SetDelay(300);
2136 .LM290:
2137 0a62 8CE2 ldi r24,lo8(300)
2138 0a64 91E0 ldi r25,hi8(300)
2139 0a66 00D0 rcall SetDelay
2140 0a68 EC01 movw r28,r24
2141 .L210:
711:src/main.c **** while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten
2143 .LM291:
2144 0a6a CE01 movw r24,r28
2145 0a6c 00D0 rcall CheckDelay
2146 0a6e 8823 tst r24
2147 0a70 01F0 breq .L210
712:src/main.c ****
713:src/main.c **** // Drehzahlmessung wieder aufsetzen
714:src/main.c **** DrehzahlMessTimer = SetDelay(50);
2149 .LM292:
2150 0a72 82E3 ldi r24,lo8(50)
2151 0a74 90E0 ldi r25,hi8(50)
2152 0a76 00D0 rcall SetDelay
2153 0a78 8C01 movw r16,r24
2154 0a7a 87E0 ldi r24,lo8(7)
2155 0a7c E82E mov r14,r24
2156 0a7e 00C0 rjmp .L222
2157 /* epilogue: frame size=0 */
2158 /* epilogue: noreturn */
2159 /* epilogue end (size=0) */
2160 /* function main size 358 (354) */
2169 .Lscope11:
2171 .stabd 78,0,0
2172 .global PWM
2173 .global PWM
2174 .section .bss
2177 PWM:
2178 0000 0000 .skip 2,0
2179 .global Strom
2180 .global Strom
2183 Strom:
2184 0002 0000 .skip 2,0
2185 .global Strom_max
2186 .global Strom_max
2189 Strom_max:
2190 0004 00 .skip 1,0
2191 .global Mittelstrom
2192 .global Mittelstrom
2195 Mittelstrom:
2196 0005 00 .skip 1,0
2197 .global Drehzahl
2198 .global Drehzahl
2201 Drehzahl:
2202 0006 0000 .skip 2,0
2203 .global KommutierDelay
2204 .data
2207 KommutierDelay:
2208 0000 0A00 .word 10
2209 .global I2C_Timeout
2210 .global I2C_Timeout
2211 .section .bss
2214 I2C_Timeout:
2215 0008 0000 .skip 2,0
2216 .global SIO_Timeout
2217 .global SIO_Timeout
2220 SIO_Timeout:
2221 000a 0000 .skip 2,0
2222 .global SollDrehzahl
2223 .global SollDrehzahl
2226 SollDrehzahl:
2227 000c 0000 .skip 2,0
2228 .global IstDrehzahl
2229 .global IstDrehzahl
2232 IstDrehzahl:
2233 000e 0000 .skip 2,0
2234 .global ZeitFuerBerechnungen
2235 .data
2238 ZeitFuerBerechnungen:
2239 0002 01 .byte 1
2240 .global MotorAnwerfen
2241 .global MotorAnwerfen
2242 .section .bss
2245 MotorAnwerfen:
2246 0010 00 .skip 1,0
2247 .global MotorGestoppt
2248 .data
2251 MotorGestoppt:
2252 0003 01 .byte 1
2253 .global MaxPWM
2256 MaxPWM:
2257 0004 FF .byte -1
2258 .global CntKommutierungen
2259 .global CntKommutierungen
2260 .section .bss
2263 CntKommutierungen:
2264 0011 0000 .skip 2,0
2265 .global SIO_Drehzahl
2266 .global SIO_Drehzahl
2269 SIO_Drehzahl:
2270 0013 0000 .skip 2,0
2271 .global ZeitZumAdWandeln
2272 .data
2275 ZeitZumAdWandeln:
2276 0005 01 .byte 1
2277 .global MotorAdresse
2280 MotorAdresse:
2281 0006 01 .byte 1
2282 .global PPM_Betrieb
2285 PPM_Betrieb:
2286 0007 01 .byte 1
2287 .lcomm sollwert.2390,2
2290 C.8.2210:
2291 0008 00 .byte 0
2292 0009 00 .byte 0
2293 000a 02 .byte 2
2294 000b 01 .byte 1
2295 000c 03 .byte 3
2296 .comm RuheStrom,2,1
2297 .comm DrehZahlTabelle,512,1
2320 .text
2322 .Letext0:
2323 /* File "src/main.c": code 1357 = 0x054d (1282), prologues 36, epilogues 39 */
DEFINED SYMBOLS
*ABS*:00000000 main.c
/tmp/ccPB1ogc.s:2 *ABS*:0000003f __SREG__
/tmp/ccPB1ogc.s:3 *ABS*:0000003e __SP_H__
/tmp/ccPB1ogc.s:4 *ABS*:0000003d __SP_L__
/tmp/ccPB1ogc.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccPB1ogc.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccPB1ogc.s:102 .text:00000000 SetPWM
/tmp/ccPB1ogc.s:2177 .bss:00000000 PWM
/tmp/ccPB1ogc.s:2256 .data:00000004 MaxPWM
/tmp/ccPB1ogc.s:2183 .bss:00000002 Strom
/tmp/ccPB1ogc.s:170 .text:00000046 PWM_Init
/tmp/ccPB1ogc.s:203 .text:0000005c Wait
/tmp/ccPB1ogc.s:237 .text:0000006e Delay
/tmp/ccPB1ogc.s:259 .text:00000074 SollwertErmittlung
/tmp/ccPB1ogc.s:2214 .bss:00000008 I2C_Timeout
/tmp/ccPB1ogc.s:2220 .bss:0000000a SIO_Timeout
.bss:00000015 sollwert.2390
/tmp/ccPB1ogc.s:2285 .data:00000007 PPM_Betrieb
/tmp/ccPB1ogc.s:430 .text:00000172 DebugAusgaben
/tmp/ccPB1ogc.s:2195 .bss:00000005 Mittelstrom
/tmp/ccPB1ogc.s:2269 .bss:00000013 SIO_Drehzahl
/tmp/ccPB1ogc.s:473 .text:000001b2 RotBlink
/tmp/ccPB1ogc.s:528 .text:000001d8 DelayM
*COM*:00000002 RuheStrom
/tmp/ccPB1ogc.s:589 .text:00000222 MotorTon
/tmp/ccPB1ogc.s:2290 .data:00000008 C.8.2210
/tmp/ccPB1ogc.s:2280 .data:00000006 MotorAdresse
/tmp/ccPB1ogc.s:2189 .bss:00000004 Strom_max
/tmp/ccPB1ogc.s:1467 .text:000006ce Anwerfen
/tmp/ccPB1ogc.s:1641 .text:000007b8 main
/tmp/ccPB1ogc.s:2251 .data:00000003 MotorGestoppt
/tmp/ccPB1ogc.s:2238 .data:00000002 ZeitFuerBerechnungen
/tmp/ccPB1ogc.s:2245 .bss:00000010 MotorAnwerfen
/tmp/ccPB1ogc.s:2263 .bss:00000011 CntKommutierungen
/tmp/ccPB1ogc.s:2275 .data:00000005 ZeitZumAdWandeln
/tmp/ccPB1ogc.s:2201 .bss:00000006 Drehzahl
/tmp/ccPB1ogc.s:2207 .data:00000000 KommutierDelay
/tmp/ccPB1ogc.s:2226 .bss:0000000c SollDrehzahl
/tmp/ccPB1ogc.s:2232 .bss:0000000e IstDrehzahl
*COM*:00000200 DrehZahlTabelle
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SIO_Sollwert
__udivmodhi4
anz_ppm_werte
PPM_Signal
I2C_RXBuffer
DebugOut
Delay_ms
FastADConvert
CompInterruptFreigabe
uart_putchar
MessAD
Manuell
UebertragungAbgeschlossen
SendUart
DatenUebertragung
__udivmodsi4
Phase
__udivmodqi4
AdConvert
__stack
UART_Init
Timer0_Init
InitIC2_Slave
InitPPM
SetDelay
CheckDelay
PPM_Timeout