Hi. Ich versuche gerade das Beispiel aus dem GCC Tutorial in C zu programmieren. Jedoch kriege ich dauernd diese Fehlermeldung : "6: error: parse error before numeric constant" Ich habe schon viel ausprobiert nur ich krieg den Fehler einfach nicht weg. Ich benütze den ATMega16 dazu. Noch eine frage, wie kann ich dann (falls es klappen sollte) aus dem 10 bit werd der ja in 2 Bytes verpackt ist, eine ganze zahl also eine gesamte Variable bilden?
Schau mal, ob Du nicht ein Semikolon irgendwo vergessen hast. Zur Frage: Mit uint16_t wird eine Variable definiert, die 16 bit (= 2 Byte) groß ist. Man muß dann nicht mehr zwischen Low- und High-Byte unterscheiden.
Ach ich trottel hab den Code vergessen sorry. Im Moment lese ich nur die ersten 8bit aus. Ich muss beim Mega16 die 10Bits aus 2 Registern auslesen. Wenn ich das beim Auslesen wie im Tutorial abtippe, dann gibt es dort auch schon einen Fehler deswegen lasse ich im Moment nur 8bit auslesen.
1 | #include <avr/io.h> |
2 | #include <stdint.h> |
3 | |
4 | #define mux (1<<MUX2)
|
5 | |
6 | uint16_t rachannel (unsigned byte mux) |
7 | {
|
8 | |
9 | uint8_t i; |
10 | uint16_t result = 0; |
11 | |
12 | ADCSRA = (1<<ADEN) | (1<<ADPS1); //Frequenzvorteiler |
13 | ADMUX = mux; //Auswahlt des Kanals |
14 | ADMUX |= (1<<REFS1) | (1<<REFS0); // Interne Referenzspannung nutzen |
15 | |
16 | //AD Dummy readout
|
17 | ADCSRA |= (1<<ADSC); |
18 | while(!(ADCSRA & (1<<ADIF))); |
19 | ADCSRA = (1<<ADIF); |
20 | |
21 | //Eigentliche Messung
|
22 | for(i=0;i<4;i++) |
23 | {
|
24 | ADCSRA |= (1<<ADSC); //Eine Wandlung "single conversion" |
25 | while(!(ADCSRA & (1<<ADIF))); |
26 | //result += ADCW;
|
27 | result += ADCH; |
28 | ADCSRA = (1<<ADIF); |
29 | }
|
30 | ADCSRA &= ~(1<<ADEN); //AD deaktivieren |
31 | |
32 | result /= 4; |
33 | |
34 | return result; |
35 | |
36 | }
|
37 | |
38 | |
39 | |
40 | int main(void) |
41 | {
|
42 | |
43 | while(1); |
44 | |
45 | }
|
Da ist tatsaechlich ein Fehler im Tutorial #define mux (1<<MUX2) uint16_t rachannel (unsigned byte mux) { das kann nicht gut gehen. #define macht textuelle Ersetzung. dh. aus uint16_t rachannel (unsigned byte mux) wird uint16_t rachannel (unsigned byte 1<<MUX2) und das ist keine gueltige C Syntax. 2 Moeglichkeiten: * lass den #define weg. Dann muss beim Aufruf der Funktion das Kanal angageben werden. * definiere die Funktion so uint16_t rachannel () dann kannst Du beim Aufruf zwar nicht mehr den Kanal angeben, aber das Compiliert zumindest Und ganz wichtig: C lernen !
Tutorial -hoffentlich- korrigiert. Wo "byte" definiert wird, sehe ich allerdings im oben gezeigten Code nicht. Ebenfalls moegliche Fehlerquelle. Martin Thomas
Jo ich bin ja gerade fleissig dabei mim C lernen. Also ich habe deinen fehler jetzt korrigiert und der Compiler gibt keinen Fehler mehr raus. Nur mein MEGA16 lässt sich nicht mehr beschreiben. Immer wenn ich ihn z. B. nur "erasen" will krieg ich ne fehlermeldung. Ich habe keine Ahnung warum. Vorgestern konnte ich ihn noch beschreiben. Deswegen kann ich es leider nich testen. Was ist eigentlich der Analog Comparator z.B. im 8151? Macht der auch so etwas oder was macht der genau?
Guten Tag, eine Frage an Markus, bist Du zufällig Wien? Falls ja, habe ich Dir im August zwei Pakete gesandt. Ich habe massiven Äger mit der Post. Wäre nett, wenn Du Dich melden könntest. Danke, Frank
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.