Bonjour à tous,
Je dispose donc d'un p18f4520, d'une carte picdem 2+ et du compilateur C18.
J'aimerais afficher le résultat d'une conversion analogique numérique sur l'hyperterminal Windows (via liaison RS232 configurée en 9600 8 N 1).
J'ai tout d'abord testé les 2 programmes indépendamment:
-Envoi de données sur le terminal.
-Allumage de LEDs, en fonction de la position du potentiomètre (RA0).
Ils fonctionnent.
A présent je souhaiterais observer les valeurs évoluer sur le terminal lorsque je bouge le potar. Mon problème c'est que ma valeur est à 0 quand le potar est à 0, mais passe et reste à 1023 dès qu'il n'est plus à 0, quelque soit sa position.
Voici mon programme:
Est-ce la bonne façon de procéder? Merci d'avance.Code:#include <p18cxxx.H> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <usart.h> #include <adc.h> #include <delays.h> #include <string.h> //#define q 4.8828e-3 int i; char str_n[30]; int resultat; void Send_CR_LF (void) { while (BusyUSART()); // Wait if USART busy transmitting WriteUSART( 0x0D ); //write value while (BusyUSART()); // Wait if USART busy transmitting WriteUSART( 0x0A ); //write value } void Send_String_ROM (const rom char *data) { do { // Transmit a byte while(BusyUSART()); if (*data != 0) {WriteUSART(*data);} } while( *data++ ); } void main (void) { TRISCbits.TRISC6=1; //RX - UART Définit l'entrée RS232 TRISCbits.TRISC7=1; //TX - UART Définit l'entrée RS232 /*Configuration de l'USART */ OpenUSART( USART_TX_INT_ON & //Interruption de la transmission activée USART_RX_INT_ON & //Interruption de la réception activée USART_ASYNCH_MODE & // Mode asynchrone USART_EIGHT_BIT & //Données sur 8 bits USART_SINGLE_RX & //Une seule réception USART_BRGH_HIGH, //High baud rate 25); // With USART_BRGH_HIGH: baud rate = FOSC / (16 * (spbrg + 1)) /* Configuration du module ADC */ OpenADC(ADC_RIGHT_JUST & ADC_4_TAD & ADC_FOSC_32, ADC_CH0 & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS & ADC_INT_ON, ADC_1ANA); //Temps d'initialisation de l'ADC Delay10KTCYx(10); ConvertADC(); //conversion Analogique Numérique while(BusyADC()); //Attente fin de conversion resultat=ReadADC(); //on enregistre la valeur itoa(resultat, str_n); // Conversion de l'entier en châine de caractères //Affichage de la valeur Send_CR_LF(); Send_CR_LF(); Send_String_ROM("******ValeurADC******"); Send_CR_LF(); // End of line putsUSART(str_n); Delay10KTCYx(500); // Tempo pour défilement des valeurs }
-----