Forum: Mikrocontroller und Digitale Elektronik ADC Kanal umschalten ATMEGA8


von Markus (Gast)


Lesenswert?

Hallo,
ich habe folgendes Problem der µC schaltet mir nicht die Kanäle um.
Ich habe auch jeden Pin einzeln getestet, dann funktioniert alles.
Im Moment bekomme ich den selben Wert von ADC0 auch für ADC1 angezeigt.

Zu Testzwecken wird im "main" nur temperatur_regeln(); aufgerufen

1
void temperatur_regeln (void)
2
{
3
4
5
lcd_clrscr();
6
7
char zulauf_bin_c[17];
8
char ablauf_bin_c[17];
9
10
uint16_t zulauf_bin= 0  ;  
11
uint16_t ablauf_bin = 0  ;
12
13
14
15
zulauf_bin= adc_lesen(0);  
16
_delay_ms(50);
17
ablauf_bin= adc_lesen(1);
18
19
20
itoa(zulauf_bin,zulauf_bin_c,10);
21
itoa(ablauf_bin,ablauf_bin_c,10);
22
23
lcd_gotoxy(0,0);
24
lcd_puts(ablauf_bin_c);
25
lcd_gotoxy(0,1);
26
lcd_puts(zulauf_bin_c);
27
28
29
lcd_gotoxy(6,1);
30
lcd_puts("ADC0");
31
lcd_gotoxy(6,0);
32
lcd_puts("ADC1");
33
};

Einmal wird bei Start des ganzem Programmes der ADC konfiguriert. Der 
Atmega8 hängt an einem 16Mhz Quarz.
1
ADCSRA |= (1<<ADEN) | (1<<ADPS0)|(1<<ADPS1) |(1<<ADPS2);// ADC Konfigurieren
2
ADMUX |= (1<<REFS0);
1
uint16_t adc_lesen (uint8_t mux)// liest adc aus 10b mux kann gewählt werden
2
{
3
uint16_t adc_bin = 0;  
4
5
6
  
7
if (mux==0) // adc 0
8
  {
9
  ADMUX |= (0<<MUX0);   // Auf ADC-Pin0 stellen (1<<ADLAR)
10
  };
11
12
if (mux==1)
13
  {
14
  
15
  ADMUX |= (1<<MUX0);   // Auf ADC-Pin0 stellen (1<<ADLAR)  
16
  };
17
  
18
19
ADCSRA |=(1<<ADSC); // Adc starten
20
while ((ADCSRA & (1<<ADSC) )) {       }  // auf Abschluss der Konvertierung warten
21
22
23
24
  
25
26
adc_bin = ADCW;
27
28
29
30
return(adc_bin)  ;
31
  
32
};


Was mach ich falsch? Ich überlege mir schon lange ob ich mir einen Jtag 
debugger holen soll, speziell den ICE3 von Atmel. Ist der was?

von spess53 (Gast)


Lesenswert?

Hi

>  ADMUX |= (0<<MUX0);   // Auf ADC-Pin0 stellen (1<<ADLAR)

Das Verodern mit einer Null hat keine Wirkung.

http://www.mikrocontroller.net/articles/Bitmanipulation

MfG Spess

von Markus (Gast)


Lesenswert?

Vielen Danke! Meine Rettung!
Jetzt habe ich gleich wieder was simples, aber wichtiges gelern ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.