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?