ADC Problem Mega8

Gast #617133
Lesenswert?
• ▲
▼
Hi



Ich will eine Spannung am ADC Nessen´.

und habe da´zu z.B eine 3,3V Batterie mit + über einen 12KOhm 
wiederstand an den ADC 7 gehängt.
die Batterie Masse an GND.


mein Code

mux=7

ales ergebniss bekomme ich 1023
auch wenn nichts dran ist(batterie ab);

ist der code falsch oder die schaltung???
uint16_t ReadChannel(uint8_t mux)
{
  uint8_t i;
  uint16_t result;

  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler
                               // setzen auf 8 (1) und ADC aktivieren 
(1)
 ADMUX = mux;
                      // Kanal waehlen
  ADMUX |=  (1<<REFS0) ; // VCC Referenzspannung nutzen

  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man 
liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu 
lassen" */
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung
  while ( ADCSRA & (1<<ADSC) ) {
     ;     // auf Abschluss der Konvertierung warten
  }
  result = ADCW;  // ADCW muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.

  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden 
Wandlungen */
  result = 0;
  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result += ADCW;        // Wandlungsergebnisse aufaddieren
  }
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)

  result /= 4;                     // Summe durch vier teilen = arithm. 
Mittelwert

  return result;
}
Gast #617134
Lesenswert?
• ▲
▼
Abgesehen davon dass dein Codeschnipsel unglaubliuch anstrengend zu 
entziffern ist wäre die Portkonfiguration interessant. Port als Eingang? 
Pullups deaktiv? Wenn alternative Portfunktionen beim Mega8: Fusebits?

pumpkin
Gast #617177
Lesenswert?
• ▲
▼
So jetzt gehts schaltung falsch


Ich habe ein Poti dazwischen gehangen und kann jetzt von 0 bis 1023 
drehen.


Ich benötige dies um eine 360 Positionierung zu gestalten.


An einer drehscheibe (die von einen Motor angetrieben wird befindet sich 
dann das Poti und soll mir die Position einer Makierung auf der Scheib 
anzeigen.


Die Makierung wird ausgerichtet auf 360 Grad=1023 oder 0 im ADC


rein rechnerisch kann ich doch um z.B 270 Grad angezeigt zu bekommen

folgender maßen rechnen


grad=(adcwert*360)/1023;

macht es aber nicht es kommt z.B bei adc=1023 en grad von 93 raus.

wie kommt das der PC Rechner spuckt 360 aus.
Gast #617197
Lesenswert?
• ▲
▼
Probier's mal mit:
grad=(adcwert*360L)/1023;

Denn adcwert*360 passt nur bis ~91 in ein signed int (16Bit -> der 
Standardtyp für Berechnungen beim AVR-GCC).

hth. Jörg

ps.: Für Quellcode gibt's die Tags -- die stehen direkt über deinem 
Username beim Posten...
Gast #617199
Lesenswert?
• ▲
▼
d.h. deine variable KANN nur werte bis 65535 speichern ...
1023*360 = 368280 ... das geht sich nicht aus ...
wennst dann nur die 2 niederwertigeren bytes nimmst ist das 40600
und wennst dann 40600/1023 machst .. dann kommt 39 grad raus ...

d.h. deine rechnung stimmt schon .. nur hast du einen variablenüberlauf.
#617210
Lesenswert?
• ▲
▼
Herrmann wrote:
> Wie kann ich das verstehen????

Ganz einfach.
Die größte Zahl die mit 16 Bit darstellbar ist lautet:
65535 (2^16 - 1)

1023 * 360 = 368280

und das ist ein bischen größer.

Du musst auf den Datentyp long ausweichen.
Größte unsigned Zahl mit 32 Bit = 2^32 - 1 = um etliches größer

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.