Jag är nybörjare och har just börjat trixa med ADC.
Kan inget om interupts ännu.
Mitt mål är att i slutändan kunna läsa av två pinnar om det är 2,5V eller 0V samtidigt.
Detta går ju inte på vanliga I/O portar om man matar ATMEGAn med 5V.
Jag labbar nu med basic kod men vet att jag är ute och cyklar.
Finns det något simpelt sätt för en nybörjare att lösa detta?
Just nu har jag kopplat upp 8 dioder på en labplatta och anslutit fotoresistorer till ADC0 och ADC4.
Om spänningen går lägre än 2,5V (ADC=500) på någon av fotoresistorerna ska de första eller sista 4 dioderna tändas beroende på vilken ADC-pinne som sjunker i spänning.
tips?
Här är mitt misslyckade försök:
Kod: Markera allt
#include <avr/io.h>
#include <util/delay.h>
// ----------------Functions-------------------------------------------------
static inline void initADC4(void)
{
ADMUX |= (1<< REFS0)|(1<< MUX2);
ADCSRA |= (1<< ADPS1) | (1<< ADPS0);
ADCSRA |= (1<< ADEN);
}
static inline void initADC0(void)
{
ADMUX |= (1<< REFS0);
ADCSRA |= (1<< ADPS1) | (1<< ADPS0);
ADCSRA |= (1<< ADEN);
}
int main(void)
{
DDRD = 0xFF;
uint16_t adc4Value;
uint16_t adc0Value;
while (1)
{
initADC4();
ADCSRA |= (1<< ADSC);
loop_until_bit_is_clear(ADCSRA, ADSC);
adc4Value = ADC;
PORTD = 0;
initADC0();
ADCSRA |= (1<< ADSC);
loop_until_bit_is_clear(ADCSRA, ADSC);
adc0Value = ADC;
if(adc0Value < 500)
{
PORTD |= 0xF0;
}
if(adc4Value < 500)
{
PORTD |= 0x0F;
}
_delay_ms(100);
}
return (0);
}
Tar gärna emot alla tips som finns för att utvecklas.
Ha en bra dag!