atmega8 adc

Gast #39691
Lesenswert?
• ▲
▼
Hallo miteinander,

ich versuche gerade verzweifelt den adc am atmega8 anzusprechen, 
allerdings scheitert es schon daran, dass der compiler die ganzen 
register nicht kennt.

#include <inttypes.h>
#include <avr/io.h>
#include <string.h>
#include <stdlib.h>

int main(void) {
  outp((1<<ADEN) & (1<<ADFR) & 5, ADCSR);
  ADMUX = 0;
  ...

mehr ist es noch nicht, aber ich bekomme als fehlermeldungen:

error: ADCSR undeclared
error: ADFR undeclared
error: ADEN undeclared
error: ADMUX undeclared

woran kann das liegen? in allen tutorials die ich gefunden habe wird der 
adc so gestartet. als programmierumgebung verwende ich das avr studio 
von atmel und avr-gcc.

danke schonmal!
mfg
--steffen
Gast #39692
Lesenswert?
• ▲
▼
ok, die frage hat sich jetzt doch erledigt, ich hatte vergessen an den 
anfang das

#define _AVR_ATmega8_

zu schreiben. jetzt gibt es keine probleme mehr mit dem compilieren. 
allerdings funktioniert jetzt die ausgabe an den port d mit

PORTD = 0xFF;

bzw.

outp(0xFF, PORTD);

seltsamerweise nicht mehr. weiß da jemand rat?

mfg
--steffen
Gast #39693
Lesenswert?
• ▲
▼
Deine Anweisung _AVR_ATMega8_ gehört nicht ins Source File !
Den AVR Typ muss man mit dem Compiler Flag -mmcu=ATMega8 mitgeben, siehe 
Beispiel \winavr\sample\Makefile.
Bitte neueste WinAVR Version verwenden, nur diese unterstützt ATMega8.
Gast #39694
Lesenswert?
• ▲
▼
wenn ich im makefile den atmega8 einstelle, dann bekomme ich die meldung 
"mcu 'atmega8' supported for assembler only". die neueste winavr version 
habe ich (20030312).

wer hat ideen?
danke & viele grüße
--steffen
Gast #39696
Lesenswert?
• ▲
▼
Was soll das denn bitte bedeuten?

> outp((1<<ADEN) & (1<<ADFR) & 5, ADCSR);

Ich gehe mal davon aus das (1 << ADEN) und (1 << ADFR) das 4er und 1er 
Bit bilden, du diese mit 5 (also ebenso 4er und 1er Bit) verknüpfst und 
hoffst da auch als Ergebnis 5 raus zu bekommen?

outp(5, ADCSR)

währe die eine Möglichkeit, das übliche ist aber eine Oder-Verknüpfung 
der geshifteten 1en.

outp((1 << ADEN) | (1 << ADFR), ADCSR);

Des weiteren scheinst du dich nicht zwischen outp() und einer direkten 
Zuweisung entscheiden zu können... da outp() als veraltet gilt benutz 
lieber die direkte Zuweisung:

ADCSR = (1 << ADEN) | (1 << ADFR);
Gast #39697
Lesenswert?
• ▲
▼
also erstmal danke an alle, der code wird jetzt fehlerfrei compiliert. 
ich habe mich jetzt auch für die direkte zuweisung entschieden und alles 
so geschrieben.

allerdings habe ich jetzt ein neues, sehr komisches problem. siehe mein 
anderer thread.

mfg
--steffen

Antwort schreiben

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.

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.