ADC Port wechsel

Gast #164273
Lesenswert?
• ▲
▼
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 #164278
Lesenswert?
• ▲
▼
>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 #164279
Lesenswert?
• ▲
▼
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 #164280
Lesenswert?
• ▲
▼
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).

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.