Hallo, ik wil een temperatuursensor gaan bouwen met de LM35D
die gaat van 0 - 100°C en dit word dan "binnekort" uitgelezen op een LCD display, omdit te realiseren heb ik een microcontroller gebruikt de ATmega88.
In mijne code voorbeeld zit nog niks in van het LCD, aleen de ADC. die delay die ga ik later in mijn prog nog gebruiken ? maar nu wou ik is weten ofdit wel klopte ? want ik krijg geen ADC aandegang. Mss moet ik is een simpelere voorbeeld maken met 5 leds, bij 1V 2V 3V 4V 5V. Maarja, hierdus de code:


#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <string.h>
void delay_ms(int t)
	{
	while(t>0)
		{
			_delay_ms(100);
		}
	}
int main(){
char channel;
float result; //float omdat het een kommagetal is.
unsigned int resultaat = ADC;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
//de ADC word enabled en de frequentieteller word ingeschakeld zodat mijn adc loopt op een frequentie van 62.5Khz
channel = 0;
//Ik wil gaan meten van kanaal 0 (ADC0)
ADMUX = channel;
//Ik wil gaan meten van kanaal 0 (ADC0)
ADMUX = (1<<REFS1) | (1<<REFS0);
//De interne Refspanning word ingesteld op 1.1V
 while ( ADCSRA & (1<<ADSC) ) { //wachten tot de conversie                           voltooid is
     ;     

  }
  result = resultaat / 10;
  //Welke waarde bevat de variable Result ?Van 0 - 102.4 ?
return 0;
}

Zo, dat was de code, wel een beetje overcommented.
welke waarde bevat de variable Result ?
Waar ligt mijn fout ?
Doe ik misschien iets fout in de hardware ?
De AREF laat ik gewoon leeg AVCC aan de VCC
en direct het output pootje van de LM35 aan de ADC0 doen ?
Alvast bedankt,

Ik zie een paar problemen.

  • De t in de delay routine wordt nooit kleiner. Dat geeft dus een oneindige delay.
  • ADMUX zet je tweemaal waarbij de eerste waarde overschreven wordt.
  • Het result moet je pas uitlezen na de conversie, niet ervoor.

Bedankt voor de snelle Reply marcel, ik heb mijn code aangepast aan jouw puntjes, mss kun je ze nu nog is nakijken ?


#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <string.h>
void delay_ms(int t)
	{
	while(t>0)
		{
			_delay_ms(100);
			t--;
		}
	}
int main()
	{
char channel;
float result;
channel = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
ADMUX = channel |(1<<REFS1) | (1<<REFS0);
while(1)
		{
while ( ADCSRA & (1<<ADSC) )
 			{
     ;     

 			}
 			
result = ADC / 10;
  //Welke waarde bevat de variable Result ?Van 0 - 102.4 ?
  		}
return 0;
	}

Zo dan ?
Alvast bedankt