www.mikrocontroller.net

Forum: Compiler & IDEs Analog Digital Tutorial fuzt nich


Autor: Markus Neubauer (roboscan)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Neubauer (roboscan)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <avr/io.h>
#include <stdint.h>

#define mux (1<<MUX2)

uint16_t rachannel (unsigned byte mux)
{

  uint8_t i;
  uint16_t result = 0;

  ADCSRA = (1<<ADEN) | (1<<ADPS1);    //Frequenzvorteiler
  ADMUX = mux;    //Auswahlt des Kanals
  ADMUX |= (1<<REFS1) | (1<<REFS0);  // Interne Referenzspannung nutzen

  //AD Dummy readout
  ADCSRA |= (1<<ADSC);
  while(!(ADCSRA & (1<<ADIF)));
  ADCSRA = (1<<ADIF);

  //Eigentliche  Messung
  for(i=0;i<4;i++)
  {
    ADCSRA |= (1<<ADSC);  //Eine Wandlung "single conversion"
    while(!(ADCSRA & (1<<ADIF)));
    //result += ADCW;
    result += ADCH;
    ADCSRA = (1<<ADIF);
  }
  ADCSRA &= ~(1<<ADEN);    //AD deaktivieren

  result /= 4;
  
  return result;

}



int main(void)
{

  while(1);

}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tutorial -hoffentlich- korrigiert.
Wo "byte" definiert wird, sehe ich allerdings im oben gezeigten Code
nicht. Ebenfalls moegliche Fehlerquelle.

Martin Thomas

Autor: Markus Neubauer (roboscan)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Himmstädt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Neubauer (roboscan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank.
Ne Sorry ich wohne hier in München.

Autor: Himmstädt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.