Alors j'ai pas compris ton explication de la communication série asynchrone...
Asynchrone ca veut bien dire que ca fonctionne sans horloge n'est ce pas ? Alors pourquoi un UART asynchrone a besoin d'une horloge pour fonctionner ?
Quel idiot que je suis... j'enlève la pull up
ok MCLR à 5v !
L'horloge n'existe pas avec une transmission asynchrone. C'est le bit de start qui déclenche la synchronisation. Il faut que la durée d'un bit soit assez précise pour que l'horloge interne du récepteur qui échantillonne les "1" et les "0" qui suivent ne fasse pas d'erreur.
Il faut que l'horloge interne d'émetteur ne diffère pas de quelques pour-cent de l'horloge interne du récepteur
Asynchrone veut dire qu'il n'y a pas d'horloge commune aux récepteur et émetteur, que les deux ne sont pas synchronisés sur une horloge unique.
Chacun est synchronisé avec sa propre horloge.
Bonsoir,
si je résume ce que j'ai compris de cette demande:
->tu dois mesurer des choses puis les envoyer vers un FPGA par l'UART.
->tu es en émission uniquement, le FPGA n'envoit rien (à confirmer), donc seule Tx est utilisé sur le PIC, raison pour laquelle le SPI n'est utilisé puisque 4 pin nécessaire (c'est bêtement écrit dans le code je ne fais que lire).
Si c'est bien ça c'est très simple pour retrouver tes petits, tes I/O et leurs branchements.
Merci de confirmer avant.
@+
D'abord merçi à vous pour toutes ces infos ça m'a bien aidé !
Oui c'est bien ca HULK.
J'ai réussi à faire fonctionner l'ADC parfaitement, sauf que ca ne correspond pas au pin du code... mystère (devine laquelle pin d'entrée AN il faut utiliser)
Je comprends pas non plus la présence d'un bit. Regardez sur cette image : http://hpics.li/0a150a2
Ici le signal envoi un '1' numérique, je suis à 0v d'ou le premier bit à '1' après le bit de start.
C'est pas un bit de parité c'est sur, il est juste apres le bit de start de la seconde trame, je ne vois ce que c'est... Si vous avez une idée, je suis preneur !
Le bit0 est le premier ou le dernier ?
LSB first donc premier
Bah c'est quoi ce bit apres le second start bit, ou j'ai mis un point d'interrogation ?
Si channel vaut 4 (100), CHS dans ADCON0 contiendra après décalage de 3 vers la gauche : CHS:<01000> => AN8 => pin 8 => RC6Code:ADCON0 = ((1 << ADON) | (channel << 3)); //select particular channel and turn ON adc
Ce qui correspond à:
Code:for (;;) { //channel 4 ADC_StartConversion(4); ....... }
De quoi parles-tu au juste?
Je comprends pas non plus la présence d'un bit. Regardez sur cette image : http://hpics.li/0a150a2
Ici le signal envoi un '1' numérique, je suis à 0v d'ou le premier bit à '1' après le bit de start.
C'est pas un bit de parité c'est sur, il est juste apres le bit de start de la seconde trame, je ne vois ce que c'est... Si vous avez une idée, je suis preneur !
Quelle est cette trame?
C'est toi-même qui l'a dit : Ici le signal envoi un '1' numérique, je suis à 0v d'ou le premier bit à '1' après le bit de start.
C'est donc le bit0, ou alors je n'ai pas compris le sens de ton inquiétude.
Merci pour les détails de la fonction. C'est bien ca.. Cela dit je ne vois pas l'utilité de cette fonction qui active AN8 quand on choisit le 4...
je vous explique sur le prochain message je vais faire un autre screen pour que vous compreniez ce que je veux dire
Si c'est bien la trame issue de l'UART, on distingue donc le bit de start à 0 suivi de 8 bits de data (en l'occurrence ici je vois la valeur 0x40) et un bit de stop à 1, puis tu repars avec un bit de start et des datas qui suivent (cette fois 0x83), les 2 derniers bits à 1 et le bit de stop étant à 1.
Vu le programme tu envoies 2 datas, une data H et une data L.
Ici l'envoi des 2 datas:
Code:UART_TxChar(FL); UART_TxChar(FH);
Quand j'aurai un moment j'analyserai le code de plus près, mais il semblerait que la channel 4 mis sur AN8 ne soit pas forcément une erreur du codeur, juste qu'il a voulu faire 2 choses en même temps et c'est donc moins lisible du coup.
Il est la le hic. Deja ya pas 8 bits de data mais 7 puisque les 3 bits de poids fort sont sur la seconde trame.
je suis d'accord. On a le start bit à 0 sauf qu'il est suivi de 7 bits de data (je sais pas pourquoi). Logiquement je suis à 0v dont je devrais avoir 00 0000 0000 (ADC sur 10 bits) bon la j'ai 00 0000 0001, en envoyant le LSB first avec 7 bits de data je devrais avoir Start bit, puis 1000 000, stop bit, suivie de start bit, 000, suivie de l'état de repos sur 4 bits car ADFM est à 1, stop bit. Sauf que j'ai un 1 qui s'incruste apres le second start bit et avant mes 3 bits de poids forts de données.
en résumé j'ai :
Start----LSB-data----------Stop----------Start-------data----MSB-------------Stop
0---------1000 000----------1--------------0----------1000 001-----------------1
Et donc ma question c'est que fait ce bit rouge à 1 alors que c'est la data non ?
Moi je me fis à ce que je lis dans le code:
Code:void UART_Init() { TRISC = 0x80; // Configure Rx pin as input and Tx as output TXSTA = 0x20; // Asynchronous mode, 8-bit data & enable transmitter RCSTA = 0x90; // 8-bit continous receive enable SPBRG = 51; // 9600 Baud rate at 32MHz }
Bon bah le mieux c'est que je vous mettes un screen à 10 0000 0000 comme ca j'aurai ca sur l'oscilo
Start----LSB-data----------Stop----------Start-------data----MSB-------------Stop
0---------0000 000----------1--------------0----------1001 001-----------------1
et la j'aurai la preuve que j'ai bien 7 bits de données...
Tu "auras" ou "tu as"
As-tu mesuré physiquement avec un multimètre la tension qui entre dans ton entrée analogique du PIC?
en fait je peux vous l'affirmer que j'ai 3bits de l'autre coté parce qu'au moment ou je fais varier ma tension analogique je vois l'incrémentation des bits 1 par 1 et j'en compte 7 avant et 3 apres... et c'est une certitude
J'ai ! http://hpics.li/ba67d6b
non je ne l'ai pas mesuré, mais je vois pas à quoi ca sert, si je fais varier la tension de 0 à 5,5 V, et que je vois chaque bit s'incrémenté excepté celui qui me dérange. c'est que l'ADC fonctionne mais ca ne m'explique pas pourquoi le premier bit de la seconde trame est à 1
Je peux meme faire mieux je fais du 10 1010 1010 et la vous allez voir qu'il n'y en bien que 7 sur la data 1
Ne m'obligez pas à le faire par contre x)
Moi je vois ça:
Tu peux poster le code exact que tu utilises?