Analog Digital Tutorial fuzt nich

OP #284553
Lesenswert?
• ▲
▼
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?
Gast #284554
Lesenswert?
• ▲
▼
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.
OP #284555
Lesenswert?
• ▲
▼
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
}
#284556
Lesenswert?
• ▲
▼
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 !
OP #284558
Lesenswert?
• ▲
▼
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?
Gast #284559
Lesenswert?
• ▲
▼
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.