Annyira mélyen nem vagyok benne az AVR fejlesztésben, (PIC hátterem van és Java (1 éve), szóval még csak botorkálok).
Írtam egy programot de nem igazán tudom leellenőrizni, mennyire életképes (keresek virtuális környezetet
Szóval a feladat, adott két ADC bemenet, mind a kettőn egy poti található. Egyik poti (legyen A) az esetek túlnyomó többségében fix értékkel dolgozik csak bizonyos időközönként vagy esemény hatására változik az értéke, másik poti (B) pedig folyamatosan vagy legalábbis sűrűbben változtatja az értékét, mint A. A feladat, ha B >= A akkor PORTB0 a Mosi csapja fel a ledet ha false akkor pedig ki! Egyszerű de nem vagyok 100% biztos magamban.
A kód amit alkottam:
Észrevétel, esetleg javaslat, hogy ez így nem fog működni, rövidítési lehetőségek? Előre is köszönöm szépen az időtöket!
Kód: Egész kijelölése
void InitADC()
{
ADMUX=(1<<REFS0);// For Aref=AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}
uint16_t ReadADC(uint8_t ch)
{
ch=ch&0b00000111;
ADMUX&=0b11100000;
ADMUX|=ch;
//Start Single conversion
ADCSRA|=(1<<ADSC);
//Wait for conversion to complete
while(!(ADCSRA & (1<<ADIF)));
ADCSRA|=(1<<ADIF);
return(ADC);
}
int main()
{
//Initialize ADC
InitADC();
while(1)
{
//On MOSI port
if(ReadADC(3) >= ReadADC(2)) PORTB |= (1 << PB0);
//Off MOSI port
if(ReadADC(3) < ReadADC(2)) PORTB &= ~ (1 << PB0);
}
}