mikrocontroller.net

Forum: Compiler & IDEs AD Wandlung mit AD MEGA 32


Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich habe folgendes Problem und zwar möchte ich mit einem ATMEGA16 einen
Analog wert einlesen. Ich habe aber keine Ahnung, wie man den AD Wandler
benutzt. Ich habe mir schon das Beispiel im GCC Tutorial angesehen, kann
damit aber nix anfangen. Kann mir jemand von euch vielleeicht ein paar
Tipps geben.

vielen Dank für Eure Hilfe

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo genau kommst du denn nicht weiter?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Also wer damit nicht klar kommt, dem ist nicht zu helfen. Dort steht es
komplett mit Code und seitenlanger Erklärung auf deutsch. Oder ist die
Sprache das Problem?

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das habe ich mir auch schon angeguckt, diese function unter "Aktivieren
des ADC" funktioniert bei mir nicht

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solange du nicht definierst, was "funktioniert nicht" heißt, wird dir
wohl nicht geholfen werden. Der Code ist 100% i.O., also kann der
Fehler nur bei dir liegen :-)

Compilerfehlermeldung?
unerwartetes Ergebnis?

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADCSRA = (1 << ADEN)|(1 << ADSC)|(1 << ADPS2)
   |(1 << ADPS1)|(1 << ADPS0);                [S.214]
while (inp(ADCSRA) & BV(ADSC));              // Warten bis ADC bereit
ADMUX = 0x00;

.
.
.
.

ADMUX = 0x00; // für PA0 oder welchen auch immer
ADCSRA |= 0x40;  //start ADC
while (!(ADCSRA & (1<<ADIF)));    // Warten bis ADC bereit
CLRBIT(ADCSRA,ADIF);   // ADC Interrupt-Flag löschen
ERGEBNIS = ADC;

Das Funktioniert einwandfrei mit meinem Mega32....
Ansonsten RTFM!

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Großer Fehler: Wenn du schon Code postest, dann entweder komplett oder
nicht. Einem Anfänger fehlen da sofort Makros (inp, CLRBIT, ...).
Ausser Fehlermeldungen hat er also keinen Erkenntnisgewinn.

Abgesehen davon, warum pollst du das Interrupt-Flag?

Der Code im Tutorial ist doch wesentlich besser.

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mir ist noch nicht ganz klar welche Register man brauch um eine AD
Wandlung durchzuführen und welche Bits warum in welchem Register
gesetzt werden müssen

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, genau das steht im Tutorial auf deutsch und im Datenblatt auf
Englisch. Beides ist sehr ausführlich.

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso funktioniert folgendes nicht ?:

#include <avr/io.h>

int main(void)
{
  unsigned char i;
  R0=0xff;

  /* Endlosschleife */
  for (;;);

  return 0;
}

Compiler sagt folgendes:

test.c:12:2: warning: no newline at end of file
make.exe: *** [test.o] Error 1

> Process Exit Code: 2

ich dachte der ATMEGA 32 hätte 32 Arbeitsregister mit denen ich machen
kann was ich möchte.

was habe ich hier falsch gemacht ?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na herrlich :-)

Du kennst den Unterschied zwischen Assembler und C?

Wenn du in C programmierst, hast du auf die inneren Register keinen
Zugriff, die verwaltet der Compiler. Du kannst dir beliebig Variablen
deklarieren und diese manipulieren. Lediglich die IO-Register (des SPI,
ADC, TWI, ...) stehen dir zu Verfügung.

Also: int i = 0xFF;

Wie du die Warnung mit "no newline at end of file" beseitigst weißt
du hoffentlich ;-)

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry aber ich stehe ganz am Anfang was C und µC programmierung
betrifft. Jeder hat mal klein angefangen

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welche Register stehen mir genau zur Verfügung wenn ich mit c
programmiere ?
Kann mir das jemand erklären oder mir sagen wo ichs nachlesen kann

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachlesen kannst du das im Datenblatt.

Dir stehen nur die Register, welche in der Headerdatei deines MC
definiert sind zur Verfügung. (iom32.h oder ähnlich im WinAVR
Verzeichnis)

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

>>Sorry aber ich stehe ganz am Anfang was C und µC programmierung
>>betrifft. Jeder hat mal klein angefangen


Das jeder mal klein angefangen hat stimmt , aber dann sollte man erst
die Tutorial's bearbeiten und sich danaach langsam an ein Projekt
wagen.

Das Tutorial im Wiki zum GCC ist sehr zu empfehlen.

Mfg
Dirk

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.