Har klurat på detta i ett par dagar, men kommer inte fram till någon "lösning" eller svar på mina funderingar..
Sitter och klurar på vad det egentligen är jag får in på ADC pinnen på min AVR från en potentiometer.
Hårdvarumässigt så är det ju en spänning som går in, sen gör ju ADC delen om detta till ett digitalt värde,
men vad är det egentligen detta digitala värde står för?
Jag har kopplat 5V på ena delen av potten, GND på andra och i mitten finns ju såklart referenspinnen.
Mellan referenspinnen och jord har jag satt en 100nF kondensator, över 5V och GND har jag vardera satt ett
330 ohm motstånd för att se till så ingen av ändpunkterna på potentiometern gör kortslutning..
När jag sedan läser in värdena, har tre potentiometrar kopplade på detta sätt till ADC0, ADC1 samt ADC2,
så får jag in ett värde på mellan ~32 och ~990. Skulle jag inte haft motstånden skulle det väl varit något
annorlunda värden, men frågan är vad står egentligen dessa värden för?
Är det rakt upp och ner ett Volt referensvärde? Som med viss matte kan göras om till det riktiga Volt värdet?
Eller är det kanske ett värde mellan 0 och 1000 baserat på det riktiga Volt värdet eller är det för vad ADC "utrymmet" klarar?
Slutligen undrar jag vad som är bäst att använda? Det värdet mellan ~32 och ~990 eller göra om det till mer
"användarvänligt" 0-100, med andra ord procent.
Jag har två användarområden som jag behöver täcka, dock inte i samma projekt.
Det ena är just 0-100, för volymkontroll och liknande kontroller där 0-100 skulle passa rätt bra.
Det andra är att kontrollera ett servo i slutändan, ADC sitter på en sändare och tar emot värdena från pot och
sedan skickas det till en mottagare trådlöst som i sin tur gör verklighet av värdet och kontrollerar ett servo.
Kanske man kan göra om det till 0-254 också?
Vilket tycker ni skulle vara bäst?
Och framförallt, hur skulle man kunna omvandla (med matte? / direkt i ADC avläsningen?) till antingen 0-100 eller 0-254?
Eller skulle ni helt enkelt använda 32-990, det är väl "större" upplösning i det värdet än i exempelvis 0-100?
Jag har klippt ut den aktuella koden för att läsa av ADC och för att presentera på en LCD. Det ända som egentligen skiljer
är att den kod som ligger i processorn är interrupt-baserad istället för loop-baserad som följande kod är, men det ändrar ju
inte själva värdet från ADCn

Kod: Markera allt
int main(void)
{
ADMUX = (1 << REFS0); // External Aref (5V)
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) | (1 << ADIE); // ADC prescaler
ADCSRA |= (1 << ADEN); // Enable ADC
while(1)
{
potvalue = readADC(0); // Read value from ADC, specify channel
LCD_W(potvalue); // Write to LCD
_delay_ms(100);
}
}
static uint16_t readADC(uint8_t channel)
{
ADMUX &= ~0x1F; // Clear channel selection
ADMUX |= channel; // Specify channel
ADCSRA |= (1 << ADSC); // Start conversion
while (bit_is_set(ADCSRA, ADSC)); // Wait for conversion complete
return ADC; // Return ADC value
}