USART du PIC16F877 - Page 2
Discussion fermée
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 55 sur 55

USART du PIC16F877



  1. #31
    paulfjujo

    Re : USART du PIC16F877


    ------

    Ce code tourne pourtant...mais testé au milieu de MON programme..
    un autre exemple complet, testé avec un 16F874,mais le code est le meme pour le 16F877..





    Code:
    // test avec platine 16F874 + Nokia
    // 16F874 avec bootloader incorporé 10Mhz 19200 bauds
    // usage de Pic Downloader 1.09  pour transfert via bootloader du 16F874
    
    
    #define LedRouge PORTE.F2
    #define CLS 12
    #define TAB 9
    #define CR 13
    #define LF 10
    
    void Write_String(void);
    void CRLF(void);
    void  Chenillard(void);
    void UART1_Write_CText(const char *txt);
    
    char *txt;
    unsigned char TEXTE[32];
    unsigned int M;
    char outmode=0;
    char UnCar;
    unsigned int temp_res;
    
    void main()
    {
    int i,j,k;
    
    
      PORTB = 0x00;           // set PORTB to FF
      TRISB = 0xFF;           // designate portb pins as output
      PORTA = 0xFF;
      TRISA = 0xFF;          // PORTA is RA0,1,2,3,4,5=input
      TRISE=0;
      PORTE=0xFF;
      TRISD=0x00; // all outputs
     
      PORTC = 0xFF;       // set PORTC to $FF
      TRISC = 0xBF;  
    
      UART1_Init(9600);   // RS232
      Delay_ms(1000);
      UART1_Write(CLS);  // efface ecran VBRAY
      Delay_ms(1000);
      
      txt=TEXTE; // init pointeur txt
      
      txt= strcpy(txt,"Init UART 9600 bds.. OK ");
      Write_String();
      CRLF();
       
      UART1_Write_CText("ADC init\r\n ");
        
      //ADC_Init();
       ADCON0 = 0x81;  // ADON = 1, Channel A.0 select, Fosc/32 select
       ADCON1 = 0x8E;        // 0x8E,0xC0 port a as analog, right justified output
     
      UART1_Write_CText("Attente saisie au clavier");
      Write_String();
      CRLF();
    
     while(1)
     {
      UART1_Write_CText("ADC0 " );
      temp_res=ADC_Read(0);
      txt=TEXTE; // init pointeur txt
      WordToStr(temp_res,txt);
      UART1_Write_Text(txt);
      UART1_Write(TAB);
      
      UART1_Write_CText("ADC1 " );
      temp_res=ADC_Read(1);
      txt=TEXTE; // init pointeur txt
      WordToStr(temp_res,txt);
      UART1_Write_Text(txt);
      
      CRLF();
      
      
      LedRouge=!LedRouge;
    
      if (UART1_Data_Ready()==1)
      {
       UnCar=UART1_Read();
       UART1_Write (UnCar);   UART1_Write (TAB);
       *(txt)=0;
       if (UnCar=='A')
       {
       UART1_Write_CText("Les LEDS sont OK ");
       Chenillard();
       }
       if (UnCar=='X')
       {
       UART1_Write_CText("Le Moteur est OK ");
       Delay_ms(1800);
       }
        CRLF();
       }
        Delay_ms(500);
      } //while
     }
    
    
    void Write_String()
    {
    short int i1,j1,k;
     j1=strlen(TEXTE);
       i1=0;
       do
       {
       k=TEXTE[i1];
       UART1_Write(k);
       i1++;
       }while (i1<j1);
    }
     void CRLF()
     {
     UART1_Write(CR);
     UART1_Write(LF);
     }
     
     void Chenillard()
    {
     PORTD = 0;
        Delay_ms(150);
        PORTD = 1;
        Delay_ms(350);
        PORTD = 2;
        Delay_ms(350);
        PORTD = 3;
        Delay_ms(350);
        PORTD = 4;
        Delay_ms(350);
        PORTD = 5;
        Delay_ms(350);
        PORTD = 6;
        Delay_ms(350);
        PORTD = 5;
        Delay_ms(350);
        PORTD = 4;
        Delay_ms(350);
        PORTD = 3;
        Delay_ms(350);
       PORTD = 2;
        Delay_ms(350);
        PORTD = 1;
         Delay_ms(350);
        PORTD = 0;
     }
    
     
    void UART1_Write_CText(const char *txt)
     {
       while (*txt)
          UART1_Write(*txt++);
    }
    
    
    
    /*
     
    
     0 1 mikroCPIC1618.exe -MSF -DBG -pP16F874 -GC -C -DL -O11111115 -fo10 -N"C:\_MickroC\_MesProjets_MickroC\_16F877_Platine\16F874_Platine_Nokia_RS.mcppi" -SP"C:\Program Files\Mikroelektronika\mikroC PRO for PIC\defs\" -SP"C:\Program Files\Mikroelektronika\mikroC PRO for PIC\Uses\P16\" -SP"C:\_MickroC\_MesProjets_MickroC\_16F877_Platine\" -SP"C:\_MickroC\_MesProjets_MickroC\_Nokia_LCD\" "16F874_Test_RS232.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_CType.mcl" "__Lib_CString.mcl" "__Lib_CStdlib.mcl" "__Lib_Conversions.mcl" "__Lib_Sprinti.mcl" "__Lib_SoftI2C.mcl" "__Lib_ADC_A_C.mcl" "__Lib_UART_c67.mcl"  
    0 1139 Available RAM: 176 [bytes], Available ROM: 4096 [bytes]  
    0 126 All files Preprocessed in 31 ms  
    0 122 Compilation Started 16F874_Test_RS232.c
    41 1509 Generated baud rate is 18939 bps (error = 1.36 percent) 16F874_Test_RS232.c
    24 1163 Variable 'i' has been declared, but not used 16F874_Test_RS232.c
    24 1163 Variable 'j' has been declared, but not used 16F874_Test_RS232.c
    24 1163 Variable 'k' has been declared, but not used 16F874_Test_RS232.c
    144 123 Compiled Successfully 16F874_Test_RS232.c
    94 1164 Variable 'k' has been eliminated by optimizer 16F874_Test_RS232.c
    0 127 All files Compiled in 110 ms  
    0 1144 Used RAM (bytes): 71 (40%)  Free RAM (bytes): 105 (60%) Used RAM (bytes): 71 (40%)  Free RAM (bytes): 105 (60%)
    0 1144 Used ROM (program words): 852 (21%)  Free ROM (program words): 3244 (79%) Used ROM (program words): 852 (21%)  Free ROM (program words): 3244 (79%)
    0 125 Project Linked Successfully 16F874_Platine_Nokia_RS.mcppi
    0 1004 COFF file successfully generated COFF file successfully generated
    0 128 Linked in 515 ms  
    0 129 Project '16F874_Platine_Nokia_RS.mcppi' completed: 734 ms  
    0 103 Finished successfully: 17 juin 2014, 18:34:06 16F874_Platine_Nokia_RS.mcppi
    
    */

    le resultat capturé sur l'ecran
    ****** resultats ***********
    Init UART 1200 bds.. OK
    ADC init
    Attente saisie au clavierInit UART 1200 bds.. OK
    ADC0 793 ADC1 0
    ADC0 793 ADC1 0
    ADC0 793 ADC1 0
    ADC0 793 ADC1 0
    ADC0 793 ADC1 0
    ADC0 793 ADC1 55
    ADC0 793 ADC1 441
    ADC0 793 ADC1 613
    ADC0 793 ADC1 908
    ADC0 793 ADC1 1023
    ADC0 793 ADC1 1023
    ADC0 793 ADC1 1021
    ADC0 793 ADC1 701
    ADC0 793 ADC1 542
    ADC0 793 ADC1 466
    ADC0 793 ADC1 413
    ADC0 793 ADC1 329
    ADC0 793 ADC1 80
    ADC0 793 ADC1 74
    X Le Moteur est OK
    ADC0 793 ADC1 74


    ADC0 793 ADC1 74
    ADC0 793 ADC1 73
    ADC0 793 ADC1 74
    ADC0 793 ADC1 73
    ADC0 793 ADC1 74
    ADC0 793 ADC1 73
    A Les LEDS sont OK
    ADC0 793 ADC1 74


    ADC0 793 ADC1 73
    ADC0 793 ADC1 74
    ADC0 793 ADC1 73

    -----

  2. #32
    invitecc1144c9

    Re : USART du PIC16F877

    Décidément, rien ne va avec mon programme! J'ai testé le code que tu m'as filé mais j'obtiens toujours ces symboles bizarres illisibles.
    Donc ça vient sûrement de ma config!
    En double cliquant sur le PIC du Proteus, dans "edit component". Quelle valeur je dois mettre dans l'option Processor clock Frequency pour être sûr, moi j'utilise un horloge externe de 4 MHz. Au cas où ça vient de là! je ne sais plus!

    Est ce que tu as utilisé Proteus pour tester ce programme ou...?

  3. #33
    paulfjujo

    Re : USART du PIC16F877

    bonjour,

    Est ce que tu as utilisé Proteus pour tester ce programme
    je n'ai qu'une version lite d'ISIS pour faire uniquement des schemas .. pas de simul..
    je ne teste donc qu'en mode réel.. pour de vrai
    avec un PC et logiciel terminal VBRAY relié à mon PIC via un DS275 (equivalent Max232 mais sans aucun condo)..

    Au final, je pense que la simulation faut perdre plus de temps que les tests en reel.
    Tu n'as pas une breadboard (platine d'essais) pour monter le PIC et autres composants
    pour faire un test reel..

    dans mikroc,
    projet
    edit projet
    capture l'ecran
    ou fait un save scheme 16F877_4MHz.cfgsh et post le.

    de meme pour la fenettre Messages ( resultat de compilation)
    soit une capture d'ecran ou
    click droit dedans, sauve all as text dans un fichier
    et post le .
    Dernière modification par paulfjujo ; 18/06/2014 à 08h38.

  4. #34
    invitecc1144c9

    Re : USART du PIC16F877

    Bonjour!
    Pour répondre à ta question! je peux le tester en réel et j'ai aussi un plaque d'essai car cette carte est encore à réaliser. Donc tu pense que ça peux marcher en réel.
    Sinon voici le capture écran que tu m'as demandé
    Images attachées Images attachées  

  5. #35
    paulfjujo

    Re : USART du PIC16F877

    Donc tu pense que ça peux marcher en réel.
    si cela fonctionne chez moi ..why not...

    dans la config .. oscillateur :choisir plutot XT oscillator car 4MHz on prend HS pour les valeurs plus hautes 8,10,20MHz
    c'est bien un Quartz de 4Mhz encadré par 2x 27pf ?
    Laisser Power-up Timer sur ON cela permet un demarrage plus reussi de l'oscillateur.

  6. #36
    invitecc1144c9

    Re : USART du PIC16F877

    oui il s'agit bien d'un quartz à 4MHz mais j'ai utilisé des condensateur de 33pf, mais comme tu as suggéré un 27pf, j'ai essayé mais toujours rien! je pense que je vais prendre demain une plaque d'essai et essayer la simulation en réel pour voir ce que ça va donner!
    Je vais donc mettre au point la totalité de mon programme et l'essayer ensuite.

    euh! est ce normal que la pin CLKOUT du PIc est inactif comme le montre la figure ci-dessous? au cas ou le problème vient de là? et lorsque je le met à l'état haut, rien ne marche, aucun affichage sur le virtual terminal.
    Images attachées Images attachées  

  7. #37
    paulfjujo

    Re : USART du PIC16F877

    euh! est ce normal que la pin CLKOUT du PIc est inactif comme le montre la figure ci-dessous?
    je ne sais pas comment fonctionne Proteus
    mais clkout est à 4Mhz, donc je ne pense pas que proteus puisse voir un etat 1 ou une etat 0..
    surtout ne pas forcer cette sortie...

  8. #38
    invitecc1144c9

    Re : USART du PIC16F877

    ok! encore une question stp! puisque maintenant, j'utilise la version IntToStr dans mon programme, donc je pourrais quand même utilisé le Timer0 en 8bits pour avoir une interruption tous les 2ms?
    J'ai essayé avec le timer1, et j'ai utilisé un autre quartz de fréquence égale à 32GHz sur les pins RC0 et RC1 pour avoir une interruptions tous les 2ms, j'ai compilé, j'ai pas reçu d'erreur mais il faut encore le tester en réel et je ne sais pas si ça se fait!
    J'aimerai seulement savoir si ça marche ou tu me conseille d'utiliser le timer0 en utilisant un prédiviseur égale à 2 et un oscillateur à 4Mhz?

    en ce moment je suis encore en train d'attendre du matérielle pour ma réalisation en réel!

  9. #39
    paulfjujo

    Re : USART du PIC16F877

    bonsoir,

    puisque j'utilise la version IntToStr dans mon programme, donc je pourrais quand même utilisé le Timer0 en 8bits
    pour avoir une interruption tous les 2ms?
    Je ne comprends pas, il n'y a aucun rapport entre l'usage de IntToStr et le timer0 (ou timer1).

    j'ai utilisé un autre quartz de fréquence égale à 32GHz sur les pins RC0 et RC1
    plutot 32Khz ! quartz horloger..
    c'est une solution, si tu dois aussi gerer la date et l'heure ,mais si c'est uniquement pour generer une interrupt
    toutes les 2 ms, le timer0 suffit

    Code:
    pour 2ms avec l'horloge issue du quartz 4Mhz
    Quartz	4	MHz		
    cycle	1	µS		
    Prescaler	8	8 bits	2048	cycles
    delai	6			
    TMR0 cycles	250			
    time	2 000,00	µS	2,000	mS

  10. #40
    invitecc1144c9

    Re : USART du PIC16F877

    Bonjour! ça est la transmission est réussi! j'ai fait le montage et j'obtiens bien les caractères désirées! MAis pas au niveau de la réception!
    est ce que c'est possible de transmettre les données du PC vers PIC en 10bits?
    Mon vrai problème est que j'arrive pas à afficher les données que je tape sur mon PC à la sortie du PIC numériquement avant de les faire passer dans un CNA pour la récupération finale de la valeur analogique transmises.
    Regarde stp cette partie de code:
    [CODE] if (UART1_Data_Ready() == 1) {
    i=i+1; //pour la sélection des entrées
    if(i==1){ // la sortie 1
    buffe = UART1_Read();
    UART1_WRITE(buffe);
    PORTD = receive;

  11. #41
    invitecc1144c9

    Re : USART du PIC16F877

    j'ai aussi testé l'autre code que tu m'as fourni!
    Code:
      if (UART1_Data_Ready() == 1) {
              i=i+1;   //pour la sélection des entrées
              if(i==1){  // la sortie 1
                  receive  = RCREG;
                   PORTD = receive;       // Send lower 8 bits to PORTD
                   PORTB = receive >> 2;  // Send 2 most significant bits to RB7, RB6
                   Delay_ms(50);
                   PORTC.RC2 = 1;         //Pour avoir le front montant
                }
    }
    il y a des valeurs qui apparaissent mais pas la valeur attendue! si je tape 4 par exemple, il me fourni un 0.002...

  12. #42
    paulfjujo

    Re : USART du PIC16F877

    bonjour,


    Code:
     les données que je tape sur mon PC
    dans ton code, buffe ne contient qu'un seul caratere !
    qui cobtient je ne sais quoi .. en tout cas 8 bits maxi, pas 10 bits !

    qu'est ce que tu tapes exactement sur le clavier du PC ?
    est-ce que tu valides l'envoi par ENTER (= Carriage return= 0x0D=13=<CR>)

    si c'est par exemple 1020<CR> tu envoies 5 caracteres : les 4 digits + CR
    if faut utiliser un buffer et le mode interruption tel que precité auparavant.
    le fait de tetecter le <CR> arme un dapeau disant que tu viens de recevoir une donnee

    cette donnée , en ascii, doit ere convertie en binaire
    pour pouvoir etre ensuite affichéee sur le port D (8bits) et autre port pour les 2 bits restant

  13. #43
    paulfjujo

    Re : USART du PIC16F877

    Citation Envoyé par misselectro45 Voir le message
    j'ai aussi testé l'autre code que tu m'as fourni!
    ce n'est pas le bon ..

    pour recevoir une valeur tapee au clavier sur 1 à 4 digits
    soit 0,1,2,10,100, .. ou 1023 suivi de ENTER(CR)
    voici un exemple avec traitement IT et buffer de reception,
    qui renvoi en echo le nombre tapé au clavier (donc le contenu du buffer)
    + la valeur des 2 bytes ecris sur les leds (par relecture des port B et D en hexadecimal)

    Code:
    // test avec platine 16F877+ Nokia
    // 16F877 avec bootloader incorporé 10Mhz 19200 bauds
    // usage de Pic Downloader 1.09  pour transfert via bootloader du 16F877
    // error downloader line 129
    
    #define LedRouge PORTE.F2
    #define CLS 12
    #define TAB 9
    #define CR 13
    #define LF 10
    
    #define MAXLEN 16
    unsigned  char buffer[MAXLEN] ;
    
    unsigned char TEXTE[32];
    char *txt;
    unsigned int M;
    volatile int Index1, CptErr,i1;
    
    void Write_String(void);
    void CRLF(void);
    void  Chenillard(void);
    void UART1_Write_CText(const char *txt);
    int i,j,k,l;
    int temp_res;
    
    
    
    volatile struct chbits {   // 8 flags
                     unsigned FrameErr:1;
                     unsigned Store:1;
                     unsigned Elligible:1;
                     unsigned Togle:1;            
                     unsigned Second;
                     unsigned See:1;
                     unsigned Full:1;
                     unsigned Lcd:1;
                   }Drapeaux ;   
    
    
    void interrupt()
     {
        unsigned char c1;
        if ((RCIE_bit) && (RCIF_bit))
        {
           if (RCSTA.OERR==1)    // voir parag 16.1.26 p273
          {
           RCSTA.CREN = 0 ;
           c1 = RCREG;
           c1 = RCREG; 
           RCSTA.CREN = 1 ;
           CptErr++;
           c1=0;
           }
          if(RCSTA.FERR==1 )
          {
          RCSTA.SPEN = 0 ;
          RCSTA.SPEN= 1 ;
          CptErr++;
          c1 = RCREG;
          c1=0; 
          }
          c1 = RCREG;     // lecture registre => RAZ RCIF 
         if ((c1==CR) || (i1>=MAXLEN)) 
          {
          Drapeaux.Full=1;
          buffer[i1]=0;
          Index1=i1;
          i1=0;
          c1=0;
         }
         else
         { 
            buffer[i1]=c1;
            Index1=i1;
           i1++;
          }
        // RCIF_bit=0   ;
        }
     }
    
    void main()
    {
    
    
    
      PORTB = 0x00;           // set PORTB to FF
      TRISB = 0x00;           // designate portb RB0..RB7 pins as output   
      PORTA = 0xFF;
      TRISA = 0xFF;          // PORTA is RA0,1,2,3,4,5=input
      TRISE=0;
      PORTE=0xFF;
      TRISD=0x00; // all outputs
     
      PORTC = 0xFF;       // set PORTC to $FF
      TRISC = 0xBF;  
      Delay_ms(500);
      
      UART1_Init(9600);   // RS232
      Delay_ms(1000);
      UART1_Write(CLS);  // efface ecran VBRAY
      Delay_ms(1000);
      UART1_Write('A');
      UART1_Write('A');
       UART1_Write('A');
      txt=TEXTE; // init pointeur txt
      
       UART1_Write_Text("16F877 Avec bootloder\r\n");
      
      txt= strcpy(txt,"Init UART 9600 bds.. OK ");
      Write_String();
      CRLF();
      
      UART1_Write_CText("16F877 Avec bootloder monté sur platine Nokia\r\n "); 
    
      UART1_Write_CText("ADC init\r\n ");     // <- si declaré en premier , aucune sortie UART
        
      //ADC_Init();
       ADCON0 = 0x81;  // ADON = 1, Channel A.0 select, Fosc/32 select
       ADCON1 = 0x8E;        // 0x8E,0xC0 port a as analog, right justified output
     
      UART1_Write_CText("Attente saisie au clavier");
      Write_String();
      CRLF();
      
       UART1_Write_CText( "\r\nInit Interrupts UART \r\n ");
    //INTCON =>  GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
      INTCON=0;
      RCIE_bit=1;
      PEIE_bit=1;
      GIE_bit=1;
      
      j=0;
      i1=0;
      Index1=0;
      buffer[0]=0;
    
     while(1)
     {
      UART1_Write_CText("ADC0 " );
      temp_res=ADC_Read(0);
      txt=TEXTE; // init pointeur txt
      WordToStr(temp_res,txt);
      UART1_Write_Text(txt);
      UART1_Write(TAB);
      
      UART1_Write_CText("ADC1 " );
      temp_res=ADC_Read(1);
      txt=TEXTE; // init pointeur txt
      WordToStr(temp_res,txt);
      UART1_Write_Text(txt);
      CRLF();
      Delay_ms(500);
      
       if( Drapeaux.Full==1)
       { 
          txt=TEXTE;
          CRLF();
          UART1_Write_Text( buffer); // copie du buffer sur terminal
          UART1_Write(TAB);
          l=strlen(buffer);
         //WordToStr(l,txt);
         //UART1_Write_Text(txt);
         //CRLF();
         k=0;
         for (i=0;i<l;i++)
         {
          k=k+isdigit(buffer[i]); 
         }
         if (k==l)  // atous les caracteres sont des chiffre
         { 
            k=atoi (buffer);  // converti ascii to entier 
            PORTD= k & 0x00FF; // les 8 bits de poids faible sur D
            PORTB= (unsigned char)( k >> 8); // les 2 bits de poids fort sur PORTB
           // optionnel : juste pour verifier ..  car je n'ai pas de leds sur mes sorties
            UART1_Write(TAB);
            ByteToHex(PORTB,txt); UART1_Write_Text( txt);   UART1_Write(TAB);
            ByteToHex(PORTD,txt); UART1_Write_Text( txt); CRLF();          
          }
        buffer[0]=0;  
        Drapeaux.Full=0;
        Index1=0;
        i1=0;   
       }      
      } //while
     }
    
    
    void Write_String()
    {
    short int i1,j1,k;
     j1=strlen(TEXTE);
       i1=0;
       do
       {
       k=TEXTE[i1];
       UART1_Write(k);
       i1++;
       }while (i1<j1);
    }
     void CRLF()
     {
     UART1_Write(CR);
     UART1_Write(LF);
     }
     
     
    void UART1_Write_CText(const char *txt)
     {
       while (*txt)
          UART1_Write(*txt++);
    }

    et le resultat que tu dois obrnir sur l'ecran

    16F877 Avec bootloder
    Init UART 9600 bds.. OK
    16F877 Avec bootloder monté sur platine Nokia
    ADC init
    Attente saisie au clavierInit UART 9600 bds.. OK

    Init Interrupts UART
    ADC0 756 ADC1 822

    00 00
    ADC0 662 ADC1 821
    ADC0 665 ADC1 821
    ADC0 667 ADC1 821
    ADC0 667 ADC1 821

    1023 03 FF
    ADC0 667 ADC1 821
    ADC0 666 ADC1 821
    ADC0 663 ADC1 821
    ADC0 661 ADC1 821
    ADC0 661 ADC1 821
    ADC0 663 ADC1 821
    ADC0 666 ADC1 821
    ADC0 667 ADC1 821

    254 00 FE
    ADC0 667 ADC1 821
    ADC0 667 ADC1 821
    ADC0 666 ADC1 821

  14. #44
    invitecc1144c9

    Re : USART du PIC16F877

    slt! comment éviter un demo limit? car en écrivant mon programme, je suis tombé sur un message d'erreur : demo limit

  15. #45
    invitecc1144c9

    Re : USART du PIC16F877

    j'imagine que je dois écrire un code plus court? avec tous ce que je dois analyser, les valeurs positives ou négatives et tout! et les envoies et réceptions. Ou bien, y a t-il un autre moyen?
    Merci!

  16. #46
    invitecc1144c9

    Re : USART du PIC16F877

    est ce que tu peux me donner une version complète de microC avec un crak qui marche bien! car je crois que c'est ma version demo qui limite mon code! merci bien!

  17. #47
    paulfjujo

    Re : USART du PIC16F877

    Citation Envoyé par misselectro45 Voir le message
    est ce que tu peux me donner une version complète de microC avec un crak qui marche bien! car je crois que c'est ma version demo qui limite mon code! merci bien!
    Demande a ton Encadreur de te fournir le crackk qui va bien sous la
    forme d'une cle USB MikroE a ~230€.
    J'ai pour ma part une version duement enregistree ( donc payee!).
    La version demo devrait quand meme de te permettre de valider des parties de
    ton programme complet.

    tu disposes pourtant de Proteus,qui n'est pas donne !
    si ton encadreur ne veut pas,tu n'as plus qu'a utiliser MPLAB XC8.
    Dernière modification par paulfjujo ; 02/07/2014 à 08h24.

  18. #48
    invitecc1144c9

    Re : USART du PIC16F877

    et le problème du demo limite, ça vient bien du faite que ma version n'est pas crakée?

  19. #49
    paulfjujo

    Re : USART du PIC16F877

    Citation Envoyé par misselectro45 Voir le message
    et le problème du demo limite, ça vient bien du faite que ma version n'est pas crakée?
    je ne dirais pas tout à fait comme cela...
    je dirais simplement que tu utilises la version demo de mikroC qui est limitéee à 2K de code ..
    d'ou le message "demo lilmite".
    qui effectivement sera atteinte avec toutes les fonctionalites requises par ton application.
    Demande à to Encadreur de te donner les moyens necessaires pour achever ton projet :
    une licence MikroC (dispo sous la forme d'une clé USB par exemple)

    le notion de crack est interdire sur ce forum, sauf si on parle d'un maous-costaud !

    mais le programme en Post #43 devrait tourner car sa taille < 2K word program
    donc tu peux deja tester cette partie

    Nom : summary.jpg
Affichages : 104
Taille : 40,6 Ko

  20. #50
    invitecc1144c9

    Re : USART du PIC16F877

    Excuse moi d'insister mais je ne comprend pas bien! comment utiliser ce Post #43 pour réduire mon code?

    Puis une autre question. J'ai visualisé le dernier code que tu m'as fourni dans laquelle on trouve:
    Code:
     k=atoi (buffer);  // converti ascii to entier
    Avec ce code, j'obtiens un résultat en 4 bits(binaire) puis il l'affiche effectivement sur le port D.
    Ma question est, il n'y aurait pas un moyen de convertir ascii en réel car les valeurs que je veux afficher en 10 bits sur les ports D et B sont des valeurs réels. C'est-à-dire que si je tape 2.4, j'aimerai cette valeur soit convertit numériquement en 10bits mais pas en 4 bits!
    Merci

  21. #51
    paulfjujo

    Re : USART du PIC16F877

    l'exemple du post #43 n'est pas pour reduire ton code ,mais pour demontrer comment recevoir un nombre
    codé sur 10 bits , donc pouvant evoluer de 0 à 1203
    depuis ton clavier et le transposer sur les leds des ports D et B

    2.4 ..... TU NE PEUX PAS TRANSFORMER DU FLOTTANT EN 10 bits !
    ou alors tu t'exprimes mal..

    On ne sait toujours pas de quelle facon tu envoies le nombre ?
    sur quelle gamme ?

    2.4 c'est quoi, des volts ?
    ce peut etre 24 que tu divise par 10 apres la reception dans le buffer...
    ou 2400 que tu divise par 1000 apres la reception dans le buffer
    combien de decimales maxi
    2.400
    2.402 possible ?
    quelle gamme de nombres coté clavier PC ?

    Affichage sur leds
    la conversion DAC de 2,4V sur 10 bits


    Echelle du DAC 5,00 ? <- à preciser
    alors si tu envoie du PC 2.5 (en supposant que ce sont des volts)
    2.5*1024/5.0=> 512 soit 0x200 sur le DAC
    2 sur le portB et 00 sur le portD

  22. #52
    invitecc1144c9

    Re : USART du PIC16F877

    ok! merci pour tes explications!
    D'abord la plage de valeur que je dois envoyer varie de 0 à 5V et oui, en effet, il s'agit bien des données en Volts.

    De quelle façon transmettre les données? Personnellement, comme j'ai 4 sorties à gérer, les 4 conversions doivent donc se faire successivement avant de passer dans un registre de 10bits pour conserver les données.

    Bon donc, j'entre une valeur entre 0 à 5V, puis j'appuie sur entrée et 4 fois la même action avec des valeurs différentes toujours entre 0 à 5V.

    Comme mes sorties sont en 10bits, j'utilise également un convertisseur CNA 10bits, plus exactement des résistances diviseurs de tension.
    Juste une petite question?

    2.5*1024/5.0, Le .0 signifie quoi exactement, pas de chiffre après la virgule?

  23. #53
    invitecc1144c9

    Re : USART du PIC16F877

    Normalement si j'ai bien compris, je devrais procéder comme suit:
    Code:
     if (k==l)  // atous les caracteres sont des chiffre
         {
         k=atoi (buffer);  // converti ascii to entier
         temp_res = k*1024/5.0;
         PORTD= temp_res;
            PORTB= temp_res>>2;    
          }
    Mais cela bloque complètement mon programme et rien ne s'affiche sur l'écran

  24. #54
    paulfjujo

    Re : USART du PIC16F877

    bonjour,

    ca bloque car le point decimal n'est pas un digit !
    soit tu entres ta valeur en mV
    ex: 2450 pour 2,45V,
    et tu utilises un long int pour mettre a l'echelle
    k=atoi(buffer);
    L1=(long)k*1024/5000;
    Portd=L1&0x000000ff;
    portb=(unsigned char) (L1>>8);

    soit,il faudra traiter en flottant...

  25. #55
    gienas
    Modérateur

    Re : USART du PIC16F877

    Bonjour à tous

    Hors charte, voir par ailleurs.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. PIC 18F et USART
    Par invitecd702d98 dans le forum Électronique
    Réponses: 9
    Dernier message: 18/11/2013, 15h43
  2. Probleme USART PIC16F877
    Par invite2d9e7c03 dans le forum Électronique
    Réponses: 4
    Dernier message: 27/08/2009, 10h49
  3. USART sur PIC
    Par invite820b5138 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/04/2007, 07h39
  4. Usart ou I2C?
    Par invite0b3246fe dans le forum Électronique
    Réponses: 45
    Dernier message: 28/02/2007, 14h19
  5. Usart Avr
    Par invite2b4da655 dans le forum Électronique
    Réponses: 13
    Dernier message: 20/05/2006, 23h43
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...