ADC Port wechsel

Gast #164273
Hi Leute,

ich habe den ATMEGA8 und wollte mal ein wenig mit dem Ding spielen. Ich
habe mir ein Poti genommen 5V angeschlossen und den mittleren Pin an
meinen µC angschlossen (Port PC0 / ADC0). Da ich diesen Port aber gerne
für andere Zwecke nutzen möchte, würde ich den Poti gerne an die Port
PC5 / ADC5 anschließen. Von der Hardwareseite ein kein Problme, leider
bekomme ich es nicht hin, mein C++ Programm su umzuschreiben, dass ich
den Port PC5 abgreife. Ich kann immer nur den Port PC0 abgreifen. Hier
ist mein Quelle-Code, vielleicht habt Ihr ja ne Idee.

#include <mega8.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x00
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

void main(void)
{
...

/ ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;
SFIOR&=0xEF;
....
while(1)
{
...
...
}

}

Gruß
Olli
Gast
Danke für die fixe Antwort. Leider werder ich nicht ganz schlau aus dem
Datenblatt. Habe schon mehrere Versuche gestartet den ADMUX Wert
zuändern aber leider ohne Erfolg.

Gruß
Olli
Gast
>egal, was ich bei ADMUX einstelle (z.B. 0x05) greift er immer nur den
Port PC0 ab.

Entweder du stellst ADMUX nicht richtig ein (oder überschreibst es
später wieder), oder dein uC ist Schrott.
Wenn in ADMUX 5 steht, dann liest der uC auch ADC5 ein !

Poste mal das was der Compiler aus dem C Code macht.
Der Assemblercode sollte ja nicht groß sein
Gast
Ich verwende ausserdem immer den Interrupt dazu. Im Interrupt das
Ergebnis sichern, ein Statusbit setzen, eventuell ADC neu starten und
die Interruptroutine wieder verlassen. Ergibt die wenigsten Kollisionen
wenn man noch anderes macht, was ja meistens der Fall ist.

Hubert
Gast
AREF ist eine korrekte externe Referenz?

> SFIOR&=0xEF;

Hat mit der Sache nichts zu tun, ist aber trotzdem falsch. Setzt ein
Bit zurück, dass beim Mega8 garnicht definiert ist (nur 0..3, hier 4).
Gast
Danke Jungs,

war mein Fehler habe nur immer nur den ADMUX-Wert unten in der main
Funktion geänert und nicht auch in der Deklaration. Jetzt funkioniert
es, wie es soll.

Danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.