PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit ATmega128 ADC



Hannes87
02.09.2007, 17:29
Hallo
Ich hab ein Problem mit dem ADC vom ATmega128.

Bei ADC Kanal 0 und 1 passen die ADC Werte (auf beiden hängen Potis)

Bei Kanal 2 und 3 passen sie nicht:

Auf 2 hängt ein NTC und auf 3 ein LDR. Beide mit Spannungsteiler. Die Eingangsspannungen dieser Kanäle sind auch messbar (0 - 3V).
Jedoch kommt ein völlig falscher Wert raus und der ändert sich auch nicht (wenn man den LDR verdunkelt oder ins Licht hält). Der Controller hängt sich auch nicht auf.

Mit JTAG und M103 Fuses hab ich's auch schon probiert, jedoch kein Erfolg.

Kann mir irgendwer helfen?

Hubert.G
02.09.2007, 20:16
Wenn du den Code hereinstellst wird dir der eine oder andere helfen können.

Hannes87
03.09.2007, 10:25
Hier mein Code




#include <mega128.h>

// LCD functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>

#define ADC_VREF_TYPE 0x20


void lcd(unsigned char uclcd);
unsigned char read_adc(unsigned char adc_input);

unsigned char ucLDR;

void main(void)
{

PORTF=0x00;
DDRF=0x00;

// ADC init
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;

// LCD init
lcd_init(24);

while (1)
{
ucLDR=read_adc(3);

lcd(ucLDR);


};
}

void lcd(unsigned char uclcd)
{
unsigned char ucHundert,ucZehn,ucEiner;

ucHundert=uclcd/100;
ucZehn=((uclcd-(ucHundert*100))/10);
ucEiner=(uclcd-(ucHundert*100)-(ucZehn*10));


ucHundert+=0x30;
ucZehn+=0x30;
ucEiner+=0x30;

lcd_gotoxy(1,1);
lcd_putchar(ucHundert);
lcd_putchar(ucZehn);
lcd_putchar(ucEiner);

}

unsigned char 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 ADCH;
}

[/code]

Hubert.G
03.09.2007, 16:40
Etwas sehr wenig Kommentar zu den Zeilen. So etwas "ADCSRA=0x87" ist auch nicht sehr aussagekräftig, man braucht immer das Datenblatt dazu. Änderst du nur hier "ucLDR=read_adc(3);" den ADC-Eingang
So kann ich nichts erkennen. AREF ist richtig?

Hannes87
03.09.2007, 17:19
Ich glaub, dass der Controller tot ist. Weil jetz rührt sich beim ADC gar nichts mehr. Auch das, was früher funktioniert hat, geht nicht mehr.

Hubert.G
03.09.2007, 20:39
Da müsstest du ihn aber totgestromt haben. Du wirst doch nicht mehr als VCC für die ADC-Eingänge verwendet haben.