ADC met ADUC832

Wie bang is om te vragen schaamt zich om te leren.
Plaats reactie
enzoICT
Berichten: 2
Lid geworden op: ma 11 mei 2009, 14:58

ADC met ADUC832

Bericht door enzoICT »

Ik ben een programma aan het schrijven waarbij ik een 0 tot 5V waarde inlees en deze wil ik uitsturen naar de Display. Het probleem is dat ik deze waarde niet kan inlezen.

Code: Selecteer alles

#include <stdio>
#include "reg832.h"

#define e P0_2
#define rs P0_3
#define lcdport P0 //SELECTIE POORT 0

#define cleardisp 0x01 //LEEG MAKEN VAN HET SCHERM
#define cursathom 0x02 //CURSOR OP DE EERSTE PLAATS ZETTEN

#define ENTRYMODE 0x06 //00000110B ;CURSOR NAAR RECHTS, SCHERM VAST
#define DISPLAYON 0x01 //00000001B ;HOMEN EN CLEAR CURSOR
#define DISPLAYOF 0x08 //00001000B ;DISPLAY OFF, CURSOR OFF
#define CURSOROFF 0x0C //00001100B ;DISPLAY ON ZONDER CURSOR
#define CURSORONB 0x0F //00001111B ;CURSOR ON AND BLINK
#define CURSORONN 0x0E //00001110B ;CURSOR ON NO BLINK
#define FUNCTIONS 0x28 // 00101000B ;INTERFACE LENGTE EN KARAKTER FONT
#define CGRAM 0x40 //01000000B ;SELECTIE KARAKTER GENERATOR RAM
#define DDRAM 0x80 //10000000B ;SELECTIE DATA DISPLAY RAM


// SerInit stelt de seriële poort in op 9600 baud
void serinit (void)
{
if ((PLLCON & 0x07) <= 5)
{
//hier mogen we alleen komen als de waarde van de PLL bruikbaar is
T3FD = 0x2D;
T3CON = (((~PLLCON)-2) & 0x07)+0x80; //baudrate instellen afhankelijk van pll
SCON = 0x50; //Uart initializeren
}
}

// putchar functie nodig voor printf
void putchar(char c)
{
TI=0;
SBUF=c;
while(!TI); //wachten tot het karakter is verzonden
}

void wait (int time)
{
int i;
for (i=0;i<time;i++); // time keer niets doen.
}

void lcdnibd (unsigned char c)
{
rs=1;
e=0;
c&=0xF0;
c|=0x0b;
P0=c;
e=1;
e=1;
e=0;
wait(100);
}

void lcdd (unsigned char c)
{
lcdnibd(c);
c=c<<4;
lcdnibd(c);
}

void lcdmsg (unsigned char * str)
{
for(;*str!=0;str++)
lcdd(*str);
}

void lcdnibc (unsigned char c)
{
rs=0;
e=0;
c&=0xF0;
c|=0x03;
P0=c;
e=1;
e=1;
e=0;
wait(1000);
}

void lcdc (unsigned char c)
{
lcdnibc(c);
c=c<<4;
lcdnibc(c);
}

void lcdinit (void)
{
P0=0x03;
wait(100);
lcdnibc(0x30);
lcdnibc(0x30);
lcdnibc(0x30);
lcdnibc(0x20);
lcdc(FUNCTIONS);
lcdc(CURSORONB);
lcdc(DISPLAYON);
lcdc(ENTRYMODE);
}

int adcinlezen (void)
{
long int ingang;
ingang = ADCDATAH & ADCDATAL;
return ingang;
}

// hoofdprogramma
int main (void)
{
long int ingang;
char buff[16];
serinit();
lcdinit();
ADCCON1 = 0xEF;
ADCCON2 = 0x2C;

while(1)
{
ingang = adcinlezen();
sprintf(buff, "%ld",ingang);
lcdmsg (buff);
P2=0xAA;
wait(1500);
P2=0x55;
wait(1500);
}
}
brakke001
Berichten: 2
Lid geworden op: di 9 jun 2009, 19:01
Locatie: Vlaams-Brabant

Bericht door brakke001 »

Hey,

heb je het al gevonden?

want ik zou graag hetzelfde doen met mijn microcontroller

tis namelijk voor mijn eindwerk :(
enzoICT
Berichten: 2
Lid geworden op: ma 11 mei 2009, 14:58

Bericht door enzoICT »

Ja ik heb de oplossing gevonden. Hieronder vind je het stukje programma waar het mee zou moeten werken.

Code: Selecteer alles

unsigned int meeting(char kanaal)
{
	ADCCON1=0x9C; 	
	ADCCON2=0x10 | (kanaal & 0x0F); 
	while(ADCCON2 & 0x10);
	return ((ADCDATAH & 0x0F) <<4>> 4) & 0x0F);
}
Plaats reactie