tecnicus
Electronics--> if it works it makes your day but else it brakes your day
Hoi allemaal,
Ik ben vandaag wat aan het prutsen geweest met een atmega8, en ik krijg de ADC maar niet werkend.
Ik heb alles nu gereduceerd tot een spanningsdeler aan ADC0, voedingspanning aan de AVR, GND en AVCC aan gnd en +5V gehangen. Aref is niet aangesloten.
Nu is dit mijn code:
#include <avr/io.h>
#include <util/delay.h>
int main (void)
{
DDRD |= (1<<DDD0)|(1<<DDD1); //Output on DDD
DDRC &= 0; // Input on C
int value;
/*while(1)
{
PORTD|= (1<<PD0);
_delay_ms(500);
PORTD&= ~(1<<PD0);
_delay_ms(500);
}*/
ADMUX |= (1<<ADLAR); //sufficient to read adch (left adjust on) mux3..0 = 0 thus select input0
ADCSRA|= (1<<ADEN)|(1<<ADPS0)|(1<<ADPS1);//8x prescaling
ADCSRA|=(1<<ADSC);
while(1)
{
ADCSRA|= (1<<ADSC); //start conversion
while (ADCSRA & (1<<ADSC));// wacht tot conversie klaar is
value = ADCH;
if(value>=125)
PORTD|= (1<<PD0);
else
PORTD&= ~(1<<PD0);
PORTD|= (1<<PD1);
_delay_ms(500);
PORTD&= ~(1<<PD1);
_delay_ms(500);
}
return(0);
}
Heeft iemand misschien een idee waar het fout gaat? Want portd0 blijft constant hoog op dit moment. Of heeft misschien iemand code waarvan hij zeker is dat deze werkt? Dan kan ik testen of de AD mss kapot is?
Vriendelijke groet
Tecnicus
Gatze
Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously
Je gebruikt avcc als referentie, dit moet je ook nog aangeven.
ADMUX |= (1<<ADLAR) | (1 << REFS0);
In de datasheet staat dat je ook nog een condensator moet doen aan de aref pin, als je avcc als referentie gebruikt.
[Bericht gewijzigd door Gatze op (37%)]
tecnicus
Electronics--> if it works it makes your day but else it brakes your day
Hey,
Ik was zo gewend om de adc van een Attiny te gebruiken dat ik niet in de gaten had dat dit hier zo expliciet moet worden aangegeven welke referentie je gebruikt. Maar het werkt perfect nu.
Bedankt!