Jag håller på att bygga en elektronisk konstlast (http://elektronikforumet.com/forum/view ... =3&t=81981) och har tänkt visa inställd och faktisk utström på en LCD. Jag har fått displayen att fungera men när jag vill läsa värden från olika kanaler verkar det som att den alltid väljer samma input/kanal. Jag vill ju läsa ifrån kanal 4 respektive 5, till exempel, men oavsett vilken pin jag lägger en spänning på så skrivs denna på båda raderna.
Finns det något känt problem/trick med mikrokontrollern eller är har jag gjort något fel i koden?

Jag tackar ödmjukast för all hjälp!
Bild finns här:
(Lite rolig bild, man ser hur en av siffrorna håller på att skrivas om i bildögonblicket)
*******************Koden börjar här***************************
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.c"
#define F_CPU 8000000 //Clock frequency
#define Isetpin 4
#define Ioutpin 5
/******Prototypes******/
unsigned int ReadADC(char ch);
void initADC(void);
/******Main code*******/
int main(void)
{
double Iset;
double Iout;
int Isetint;
int Ioutint;
initLcd();
initADC();
lstring(1, "Iset = ");
lstring(2, "Iout = ");
setAddress(0x0C);
writeLcd(1, 'A');
setAddress(0x4C);
writeLcd(1, 'A');
for(;;){
//Check set current
Iset = 5000*(double)ReadADC(Isetpin)/1024;
Isetint = (unsigned int)Iset;
setAddress(0x07);
writeNumber(Isetint/1000);
writeLcd(1, '.');
writeNumber((Isetint%1000)/100);
writeNumber((Isetint%100)/10);
_delay_ms(10);
//Check output current
Iout = 5000*(double)ReadADC(Ioutpin)/1024;
Ioutint = (unsigned int)Iout;
setAddress(0x47);
writeNumber(Ioutint/1000);
writeLcd(1, '.');
writeNumber((Ioutint%1000)/100);
writeNumber((Ioutint%100)/10);
_delay_ms(10);
}
return 0; /* never reached */
}
void initADC()
{
ADMUX=(1<<REFS0)|(1<<REFS1); // Voltage reference: Aref=AVcc;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Prescaler div factor =128
}
unsigned int ReadADC(char ch) //extremeelectronics.co.in
{
//Select ADC Channel ch must be 0-7
ch=ch&0b00000111;
ADMUX|=ch;
//Start Single conversion
ADCSRA|=(1<<ADSC);
//Wait for conversion to complete
while(!(ADCSRA & (1<<ADIF)));
//Clear ADIF by writing one to it
ADCSRA|=(1<<ADIF);
_delay_ms(5);
return(ADC);
}
*******************Koden slutar här***************************