Gå til innhold

Enkel C programmerings oppgave, søkes hjelp


Anbefalte innlegg

  1. Lag et C-program som leser lufttrykket, fra en lufttrykk-sensor, som er koblet til ADC inngang 3, og som skriver ut lufttrykk på PC-skjerm, i hPa.

    Det brukes en analog lufttrykk-sensor, og elektronikken er laget slik at den dekker et området fra 900 til 1100 hPa. Elektronikken er laget slik at 900 hPa gir 0,0 Volt inn på ADC, og 1100 hPa gir 5,0 Volt inn på ADC. Programmet skal gå i evig løkke. Det er greit at det brukes 8 bit ADC. Det er ønskelig at konverteringstiden er lengst mulig.

    De som ønsker det, kan sende ut desimalverdien, og bruke 10 bit ADC.

 

Kan noen hjelpe meg med hvordan jeg skal få laget dette C-programmet?

 

dette er iallefall det jeg har, tror ikke det er riktig..

#include <stdio.h>
#include <dev/board.h>
#include <io.h>

/********************* Start paa hovedprogram **************/ 

int main(void)
{
	unsigned long baud = 115200;
	unsigned char x;
	
	NutRegisterDevice(&DEV_UART, 0, 0);
	
	freopen(DEV_UART_NAME, "w", stdout);
	freopen(DEV_UART_NAME, "r", stdin);
	_ioctl(_fileno(stdout), UART_SETSPEED, &baud);
	
	
	do {
		x = ADC & 3x01; // ER DETTE RIKTIG?
			if(x) {
				printf("1100 hPa (5V) \n");
			}
			else{
				printf("900 hPa (GND) inn\n");
			}
			
			}

	while(1);
	
	for(;;	
	
	return 0;

}

/********************* Slutt paa hovedprogram **************/ 
Endret av cenenzo
Lenke til kommentar
Videoannonse
Annonse

Du må sette opp registerene for ADC'en til å lese frå pinen. Du bør finne alt du trenger i databladet for ADC'en.

 

hvordan kan jeg gjøre dette? ser ikke ut som at det er lagt ut noe datablad..

 

http://www.atmel.com/Images/doc2467.pdf

 

kan dette være noe?

 

http://www.it.hiof.no/datateknikk/time/inputadc.pdf

 

dette er eksempel koden vi fikk.men ser ikke ut som om jeg skjønner så mye av dem.

 

Det jeg trodde var at det jeg hadde gjort over var riktig, men brått ikke...

 

Setter pris på om noen kan veilledet meg gjennom oppg.

Endret av cenenzo
Lenke til kommentar

Side 230 på det første dokumentet du linket. ADC pinnene er forresten PF0 til PF7.

 

ADC3 : ACME: 1 , ADEN: 0 , MUX2..0: 011, pinnene PF0 til PF7. hvor fant du dette?

 

Hvordan skal jeg bruke disse ? Tusen takk for at du hjelper meg.

Lenke til kommentar

 

Side 230 på det første dokumentet du linket. ADC pinnene er forresten PF0 til PF7.

 

ADC3 : ACME: 1 , ADEN: 0 , MUX2..0: 011, pinnene PF0 til PF7. hvor fant du dette?

 

Hvordan skal jeg bruke disse ? Tusen takk for at du hjelper meg.

 

På side 2, på figuren ser du at pinnene PF0 til PF7 er merket med ADC.

 

Ellers så må du bare lese i databladet. Her finner du blant annet: "The ADC is enabled by setting the ADC Enable bit, ADEN in ADCSRA."

 

"

After the conversion is complete (ADIF is high), the conversion result can be found in the ADC

Result Registers (ADCL, ADCH"

 

"

Bit 6 – ADSC: ADC Start Conversion

In Single Conversion mode, write this bit to one to start each conversion. In Free Running mode,

write this bit to one to start the first conversion."

Lenke til kommentar

 

 

Side 230 på det første dokumentet du linket. ADC pinnene er forresten PF0 til PF7.

 

ADC3 : ACME: 1 , ADEN: 0 , MUX2..0: 011, pinnene PF0 til PF7. hvor fant du dette?

 

Hvordan skal jeg bruke disse ? Tusen takk for at du hjelper meg.

 

På side 2, på figuren ser du at pinnene PF0 til PF7 er merket med ADC.

 

Ellers så må du bare lese i databladet. Her finner du blant annet: "The ADC is enabled by setting the ADC Enable bit, ADEN in ADCSRA."

 

"

After the conversion is complete (ADIF is high), the conversion result can be found in the ADC

Result Registers (ADCL, ADCH"

 

"

Bit 6 – ADSC: ADC Start Conversion

In Single Conversion mode, write this bit to one to start each conversion. In Free Running mode,

write this bit to one to start the first conversion."

 

#include <dev/board.h>
#include <stdio.h>
#include <io.h>
#include <sys/timer.h>



int main (void){
unsigned char les;
float lufttrykk;
unsigned long baud = 14400;
NutRegisterDevice(&DEV_UART, 0, 0);
freopen(DEV_UART_NAME, "w", stdout);
freopen(DEV_UART_NAME, "r", stdin);
ioctl(_fileno(stdout), UART_SETSPEED, &baud);



ADMUX = (1 << REFS0) | (1 << ADLAR) | (1 << MUX0);
while(1) {
ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADIF) | (1 << ADPS2);
while (!(ADCSRA & 0x10));
les = ADLAR;
lufttrykk =((les*1024)/205); //Det er 205 pHa per volt.

printf("\nLufttrykket er: %d pHa", lufttrykk);
NutSleep(400);

for(;;
return 0;
}  

ser dette riktig ut??

Endret av cenenzo
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...