www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Atmega8L - Unterschiede Atmega8?


Autor: L. R. (badinode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich betreibe einen M8L@3.3V mit dem Quellcode eines M8 der bei 5V läuft. 
Dabei fällt mir auf, dass der ADC bei 0-1650mV Werte von 0-777 liefert, 
und bei 1650-3300mV Werte von 1000-1777.
Ist das normal? Ich hätte schon erwartet, dass der Bereich 777-1000 auch 
ausgefüllt wird.
Oder mach ich irgendwo einen Fehler?

Eine weitere Sache die mir nicht ganz einleuchtet. Bei 10 Bit hab ich 
einen Bereich von 0-1023. Der ADC geht aber bis 1777. Warum?

Danke.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ L. R. (badinode)

>ich betreibe einen M8L@3.3V mit dem Quellcode eines M8 der bei 5V läuft.
>Dabei fällt mir auf, dass der ADC bei 0-1650mV Werte von 0-777 liefert,
>und bei 1650-3300mV Werte von 1000-1777.
>Ist das normal?

Der ADC liefert sicher keine 1777. Denn der macht bestenfalls 10 Bit, 
sprich 1023 ist das Maximum.

>Oder mach ich irgendwo einen Fehler?

Wahscheinlich liefert deine Funktion schon ein in mV umgerechnetes 
Ergbnis. Und wenn der Code für 5V Betriebs-und Referenzspannung 
ausgelegt ist, dann klappt das mit 3.3V eben nicht.

>einen Bereich von 0-1023. Der ADC geht aber bis 1777. Warum?

Siehe oben.

Festkommaarithmetik

MfG
Falk

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das schreit nach einem Programmfehler und normal ist das keinesfalls.

Autor: L. R. (badinode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void adc_init(void) {
      ADMUX = 0b01000000;
      ADCSRA |= 0x80;
}

uint16_t readadchan(char n) {

      ADMUX = n;
      ADMUX |= 0x40;
      ADCSRA |= 0x44;

      while((ADCSRA & 0x40) !=0){};

      ADCSRA &= ~(0x44);
      return ADCW;
}

Das ist der Code. readadchan() wird öfters aufgerufen um zu mitteln.
Es findet keine Umrechnung in Spannungen oder sonstws statt. Ich gebe 
direkt den ADC-Wert aus.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist das Problem?

   0- 777 (oktal) ->   0- 511 (dezimal)
1000-1777 (oktal) -> 512-1023 (dezimal)

Autor: L. R. (badinode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Mann...

Danke yalu :)

Autor: L. R. (badinode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, nun nochmal für diejenigen, denen das vielleicht auch mal 
passieren sollte.

Der Fehler lag im
itoa(a, buf, 8);
. Hatte irrtümlicherweise angenommen, die 8 stünde für die Bufferlänge. 
Dabei steht sie für Octal. Also muss da eine 10 draus werden und gut is.

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.