Hallo zusammen, ich bin im Moment meine ersten Schritte in der Microcontroller Welt am machen und habe mir dazu von MY Avr, den MySmartUSB mit Software My Workpad Plus gekauft. Im Programm, lasse ich 4 Led´s nacheinander auf leuchten und bei der 4. Led ändert sich immer die Geschwindikeit eines Motors über PWM. Das Programm funktioniert einwandfrei, bis zu dem Zeitpunkt, an dem ich eine GOTO Anweisung einbringe, um einen gewissen Teil des Proramms zu überspringen. Wenn ich diese Anweisung mit reinschreibe, bekomme ich immer die Fehlermeldung: "Original- und gelesene Daten haben unterschiedliche Längen. " Kann mir jemand erklären was es mit der Fehlermeldung auf sich hat? Ich finde leider in diversen Foren nichts dazu. Ich arbeite mit einem Attiny 2313. Danke.
Maddin265 schrieb: > Im Programm Im welchem denn? Häng es doch einfach hier an, dann wissen wir, wovon du redest...
Hi, Entschuldigung ich war bis gerade auf der Arbeit. Ich habe die Datei in .cc angehängt und hoffe das es ok ist, wenn ich den Text so reinkopiere? Also nochmal, ich bin wirklich ganz am Anfang und habe mich ins Thema nur etwas reingelesen, deshalb verzeit mir bitte wenn das Programm zu unübersichtlich oder falsch ist. Danke schon einmal. Also in diesem Programm welches ich unten reingeschrieben habe, kommt die Meldung: compilieren ... linken ... vorbereiten ... brennen ... benutze: mySmartUSB Light an com3 mit ATtiny2313 schreibe Flash: 2110 Bytes schreibe EEPROM: 1 Bytes »baud=51200 Dauer: 4.75 s Original- und gelesene Daten haben unterschiedliche Längen. Lasse ich den Teil unter "Led´s start gegen Uhrzeigersinn" weg, klappt alles wunderbar.
1 | #define F_CPU 3686400
|
2 | #include <avr\io.h> |
3 | #include <stdlib.h> |
4 | |
5 | unsigned int static a=0; |
6 | unsigned char b=0; //Anzahl Schleifen |
7 | unsigned int c=1500; //Schleifendurchläufe |
8 | unsigned char speed=20; |
9 | unsigned char Dummy=0; |
10 | unsigned char x; |
11 | uint8_t pwm_phase=0; |
12 | uint8_t pwm_soll; |
13 | unsigned int start; |
14 | |
15 | #define gruen PORTA |= (1 << PA0);
|
16 | #define rot PORTA |= (1 << PA1);
|
17 | #define blau PORTD |= (1 << PD2);
|
18 | #define gelb PORTD |= (1 << PD3);
|
19 | #define alle_aus PORTA &= ~(1 << PA0),PORTA &= ~(1 << PA1),PORTD &= ~(1 << PD2),PORTD &= ~(1 << PD3)
|
20 | #define gruen_aus PORTA &= ~(1 << PA0);
|
21 | #define rot_aus PORTA &= ~(1 << PA1);
|
22 | #define blau_aus PORTD &= ~(1 << PD2);
|
23 | #define gelb_aus PORTD &= ~(1 << PD3);
|
24 | |
25 | int rand(void); |
26 | void srand(unsigned int __seed); |
27 | main (void) |
28 | {
|
29 | // Ausgänge definieren
|
30 | DDRA |= ((1 << PA1) | (1 << PA0)); |
31 | DDRD |= ((1 << PD2) | (1 << PD3) | (1 << PD5)); |
32 | |
33 | ///////////////////////////////////////////
|
34 | // Start LED´s
|
35 | ///////////////////////////////////////////
|
36 | |
37 | for (start=0; start<20000; start++) |
38 | {
|
39 | |
40 | if (start==c) |
41 | gruen
|
42 | |
43 | if (start==(c+c+c)) |
44 | rot
|
45 | |
46 | if (start==(c+c+c+c+c)) |
47 | blau
|
48 | |
49 | if (start==(c+c+c+c+c+c+c)) |
50 | gelb
|
51 | |
52 | if (start==(c+c+c+c+c+c+c+c+c)) |
53 | {
|
54 | alle_aus; |
55 | }
|
56 | }
|
57 | |
58 | ///////////////////////////////////////////
|
59 | // Dauerschleife Hauptprogramm
|
60 | ///////////////////////////////////////////
|
61 | |
62 | while (1) |
63 | for (a=0; a<20000; a++) |
64 | {
|
65 | if (b<10) { |
66 | |
67 | ///////////////////////////////////////////
|
68 | // Led´s start Uhrzeigersinn
|
69 | ///////////////////////////////////////////
|
70 | |
71 | if (a==c) |
72 | {
|
73 | rot
|
74 | gruen_aus
|
75 | }
|
76 | |
77 | if (a==(c+c)) |
78 | {
|
79 | blau
|
80 | rot_aus
|
81 | }
|
82 | |
83 | if (a==(c+c+c)) |
84 | {
|
85 | gelb
|
86 | blau_aus
|
87 | }
|
88 | |
89 | if (a==(c+c+c+c)) |
90 | {
|
91 | gruen
|
92 | gelb_aus
|
93 | x++; |
94 | b++; |
95 | a=0; |
96 | }
|
97 | }
|
98 | |
99 | ///////////////////////////////////////////
|
100 | // LED´s gegen den Uhrzeigersinn
|
101 | ////////////////////////////////////////////
|
102 | if (b>9) { |
103 | |
104 | ///////////////////////////////////////////
|
105 | // Led´s start gegen Uhrzeigersinn
|
106 | ///////////////////////////////////////////
|
107 | |
108 | if (a==c) |
109 | {
|
110 | gruen
|
111 | rot_aus
|
112 | }
|
113 | |
114 | |
115 | |
116 | if (a==(c+c)) |
117 | {
|
118 | gelb
|
119 | gruen_aus
|
120 | }
|
121 | |
122 | if (a==(c+c+c)) |
123 | {
|
124 | blau
|
125 | gelb_aus
|
126 | }
|
127 | |
128 | if (a==(c+c+c+c)) |
129 | {
|
130 | rot
|
131 | blau_aus
|
132 | x++; |
133 | b++; |
134 | a=0; |
135 | }
|
136 | }
|
137 | ///////////////////////////////////////////
|
138 | //Rücksetzten Schleife links/rechts
|
139 | ///////////////////////////////////////////
|
140 | if (b==20) |
141 | b=0; |
142 | ///////////////////////////////////////////
|
143 | //Geschwindigkeit für PWM initialisieren
|
144 | ///////////////////////////////////////////
|
145 | if (x==1) |
146 | {
|
147 | Dummy= rand()%6; |
148 | x=0; |
149 | }
|
150 | |
151 | if (Dummy==1) |
152 | speed=25; |
153 | |
154 | if (Dummy==2) |
155 | speed=20; |
156 | |
157 | if (Dummy==3) |
158 | speed=30; |
159 | |
160 | if (Dummy==4) |
161 | speed=22; |
162 | |
163 | if (Dummy==5) |
164 | speed=21; |
165 | |
166 | if (Dummy==6) |
167 | speed=24; |
168 | |
169 | ///////////////////////////////////////////
|
170 | // PWM
|
171 | ///////////////////////////////////////////
|
172 | |
173 | uint8_t pwm_soll = speed; |
174 | if( pwm_soll == pwm_phase ) |
175 | |
176 | {
|
177 | PORTD |= (1<<PD5); // active low LED aus |
178 | }
|
179 | pwm_phase++; |
180 | if( pwm_phase == 30 ) |
181 | {
|
182 | pwm_phase = 0; |
183 | PORTD &= ~(1<<PD5); // active low LED an |
184 | }
|
185 | }
|
186 | }
|
:
Bearbeitet durch User
Thread kann gelöscht werden.
Martin W. schrieb: > Thread kann gelöscht werden. Und warum? Falls du den Fehler gefunden hast, wäre es nett, wenn du das auch hier mitteilst, woran es lag. Dann kann evtl. auch jemand anderes was lernen.
Maddin265 schrieb: > benutze: mySmartUSB Light an com3 mit ATtiny2313 > schreibe Flash: 2110 Bytes ATtiny2313 2K Bytes of In-System Self Programmable Flash schreibe Flash: 2110 Bytes damit sollte es wohl klar sein.
npn schrieb: > Und warum? Ich hatte einen neuen Thread aufgemacht. Ich habe direkt mein Problem mit Quelltext beschrieben. Da niemand mehr geantwortet hatte wollte ich noch einmal alles Übersichtlich machen. Also muss mein Programm kleiner wie 2k Bytes sein? Danke..
>Also muss mein Programm kleiner wie 2k Bytes sein? Nö, du kannst alternativ auch einen größeren AVR nehmen;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.