Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

PIC118F2250 + CDC + AN0

Envoyé par slayerman 
PIC118F2250 + CDC + AN0
mercredi 10 juin 2009 07:41:33
Bonjour a tous,

j'ai réalisé une carte comprenant un pic18f2550 et un potentiometre entre l'alim et AN0 afin de numériser une tension.
Mon but est d'afficher dans l'hyperterminal la valeur de la tension sur AN0. La liaison entre la carte est en USB CDC, elle marche très bien mais mon seul problème est que je n'arrive pas à convertir le résultat de la numérisation convenablement.
Je m'explique : mon résultat de numérisation est dans ADRESL et ADRESH au format binaire si je ne m'abuse. Je converti donc ces registres en BCD puis en ASCII mais mon hyperterminal m'affiche toujours de mauvais caractères.
Voila une partie de mon code.


void SendUsb(void)

{   

	int i = 0; 

	for(i=0;i<64;i++){

		buffer = 0;

	}



	getacd(0, 1);

	BinToBcd(ADRESH, ADRESL);



    if(Switch2IsPressed())

    { 

		if(state == 0)

		{

			if(mUSBUSARTIsTxTrfReady())

			{

				putrsUSBUSART("\r\n Tension : "winking smiley;

				state++;

			}

		}

		else if(state == 1)

		{

			if(mUSBUSARTIsTxTrfReady())

			{

				putrsUSBUSART(buffer[0]);

				state = 0;

			}

		}			

	}  

}



char* BinToBcd(unsigned char binh,unsigned char binl){

char millier = 0;

char centaine = 0;

char dizaine = 0;

char unite = 0;



unsigned int v = ((unsigned int)binh << 8) + binl;

millier = v / 1000;

centaine = (v/100)%10;

dizaine = (v/10)%10;

unite = v%10;



millier |= 48;

centaine |= 48;

dizaine |= 48;

unite |= 48;



buffer[0] = millier;

buffer[1] = centaine;

buffer[2] = dizaine;

buffer[3] = unite;

buffer[4] = 0;



return 0;

}



Merci d'avance



Modifié 2 fois. Dernière modification le 10/06/09 08:42 par slayerman.

Re: PIC118F2250 + CDC + AN0
vendredi 12 juin 2009 06:54:44
Salut,

j'ai déjà pu constater que le compilateur de microchip avait de temps en temps du mal a interpreter certaines lignes de codes. Je te conseil de tester ta fonction BinToBcd étape par étape.

1 en lui faisant renvoyer un constante quelque soit l'entrée
2 En faisant avant passer cette constante avant l'addition par 30 (or 48)
3 En faisant passer cette constante par tes divisions.

Pour moi, a premiere vue, il y a de fortes chances que le problème soit un bugg du compilateur

A++

Benjamin
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter