problème --------->MikroC
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

problème --------->MikroC



  1. #1
    omar.STE

    problème --------->MikroC


    ------

    bjr
    je veux écrire sur un LCD après la génération d'une interruption
    càd je fais l'appel des fonctions de l'LCD d’après la routine de l'interruption
    le problème est que la fonction d'interruption ne connait peut-être pas les commande de l'LCD
    j'ai fais un prototype des fonctions de l'LCD avant le programme de l'interruption mais ...
    avez-vous une idée ??!!

    merci d'avance

    -----
    l'aide n'a aucun prix

  2. #2
    invite03481543

    Re : problème --------->MikroC

    Bonjour,

    fais voir ce que tu as fait, c'est plus simple.
    A mon avis il faudrait placer une variable à 1 quand ton interruption est détectée ainsi dans la main() quand cette variable est donc validée (au travers de l'interruption) tu écris sur l'afficheur puis tu la remets à 0, à la fin de ta fonction affichage, pour quelle puisse être de nouveau repositionnée par l'interruption plus tard.
    Déclare une variable type "volatile char".
    exemple:

    Code:
    volatile unsigned char flag_aff;
    .....
    void interrupt()
    {
         if(TMR0IF) // par exemple
          {flag_aff=1;
           .............
          }
        ........
    }
    
    main()
    {
    while(1){
    ..........
    if(flag_aff == 1)
      {
      LCD_Out(2,6,"HELLO"); 
      flag_aff=0;
      }
    ........
    }
    @+

  3. #3
    omar.STE

    Re : problème --------->MikroC

    Bsr
    premierement merci HULK28 pour la reponse
    c'est une solution qui marche bien, mais l'interruption n'a aucun avantage dans ce cas !!!!!

    voici mon Code

    Code:
    sbit LCD_RS at RA1_bit ;
    sbit LCD_EN at RB1_bit;
    sbit LCD_D4 at RB2_bit;
    sbit LCD_D5 at RB3_bit;
    sbit LCD_D6 at RB4_bit;
    sbit LCD_D7 at RB5_bit;
    sbit LCD_RS_Direction at TRISA1_bit;
    sbit LCD_EN_Direction at TRISB1_bit;
    sbit LCD_D4_Direction at TRISB2_bit;
    sbit LCD_D5_Direction at TRISB3_bit;
    sbit LCD_D6_Direction at TRISB4_bit;
    sbit LCD_D7_Direction at TRISB5_bit;
    
     unsigned int i,j;
    
    void interrupt() {
      
      if (INTF_bit) {
    
                    Lcd_Cmd(_LCD_CLEAR);                // Clear display
                    Lcd_Cmd(_LCD_CURSOR_OFF);           // Cursor off
                    Lcd_Out(1,1,"***REGLAGE***");
                    
    
                    if(PORTB.B7) {PORTB.B7=0;}
                    else { PORTB.B7=1;}
                    INTF_bit = 0;
                       }
    }
    
              
    void main()
    {
     // LCD module connections
      TRISB=0x01   ;
      TRISA = 0xF1;
      GIE_bit = 1;
      INTE_bit = 1;
      INTEDG_bit = 0;
    // End LCD module connections
      
      Lcd_Init();                        // Initialize LCD
    
      Lcd_Cmd(_LCD_CLEAR);                // Clear display
      Lcd_Cmd(_LCD_CURSOR_OFF);           // Cursor off
      Lcd_Out(1,1,"OMAR");                 // Write text in first row
      i=0x30;
      j=0x30;
       Lcd_Chr(2,5,i);
       Lcd_Chr(2,6,j);
    
      while(1){
      if(PORTA.B0==1){
      relache:         if(PORTA.B0==0){
                      i++;
                      if(i==0x3A){i=0x30;j++;}
                      if(j==0x36){j=0x30;}
                      Lcd_Chr(2,5,j);
                      Lcd_Chr(2,6,i);
                     }
                     else {goto relache;}
                     }
                 }
    
    
    
    }
    l'aide n'a aucun prix

  4. #4
    invite03481543

    Re : problème --------->MikroC

    C'est juste un exemple, en faisant au mieux tu ne rateras aucun évènement.
    Avec mikroC le fonctions "toutes faites" ne permettent pas facilement de faire ce qui est aisé à faire avec des fonctions que l'on maitrise.
    Là avec ton code ça ne peut pas marcher car les fonctions LCD utilisent déjà des interruptions et sont donc impossibles à traiter dans une interruption en cours de traitement donc le compilo les refusent.

    Je ne le dirai jamais assez: faites vos propres fonctions.
    Dernière modification par HULK28 ; 06/09/2011 à 21h30.

  5. A voir en vidéo sur Futura
  6. #5
    invite03481543

    Re : problème --------->MikroC

    On utilise pas de fonctions dans une interruption, il n'y a pas de temps à perdre, souviens toi bien de ça.
    On capte l'évènement et ensuite on envoie vers le traitement HORS interruption.
    On peut dans certains cas faire différemment mais ne jamais perdre de vue que sur un PIC jusqu'au "mid range" (PIC16) les niveaux d'interruptions sont pauvres et mal foutus, la pile est minable, bref c'est pas ce qu'ils ont fait de mieux.

    @+

  7. #6
    omar.STE

    Re : problème --------->MikroC

    Citation Envoyé par HULK28 Voir le message
    Là avec ton code ça ne peut pas marcher car les fonctions LCD utilisent déjà des interruptions et sont donc impossibles à traiter dans une interruption en cours de traitement donc le compilo les refusent.

    Je ne le dirai jamais assez: faites vos propres fonctions.
    c'est ça alors !!
    bon Merci Beaucoup Mr HULK28
    j'essayerai d'autres méthodes.
    mais j'ai encore une petite question : que signifie ce type volatile dans mikroC et combien de bits prend-il dans la RAM du µC ?
    Dernière modification par omar.STE ; 08/09/2011 à 16h28.
    l'aide n'a aucun prix

  8. #7
    omar.STE

    Re : problème --------->MikroC

    Citation Envoyé par HULK28 Voir le message
    On capte l'évènement et ensuite on envoie vers le traitement HORS interruption.
    et pendant ce traitement HORS interruption, à quel état est le FLAG de cette interruption ? et quand on l'effacera (flag=0) ?
    merci d'avance et @+
    l'aide n'a aucun prix

  9. #8
    omar.STE

    Exclamation Re : problème --------->MikroC

    Bsr tout le monde

    qui peut me dire pourquoi ce programme ne fonctionne t-il pas sur ma makette de test sachant qu'il roule bien en simulation !!!!

    Code:
    void main() {
    TRISB=0;
    PORTB=0;
    while(1){
             PORTB.B0=1;
             delay_ms(200);
             PORTB.B0=0;
             delay_ms(200);
    }
    }
    ne me dites pas que le problème vient de mon PIC (16F84A) car quand je le programme à l'aide de l'assembleur (MPLAB) il fonctionne parfaitement

    conclusion le mikroC n'est pas ... !!!! n'est ce pas ??

    merci d'avance
    Dernière modification par omar.STE ; 25/12/2011 à 17h27.
    l'aide n'a aucun prix

  10. #9
    kevin8z

    Re : problème --------->MikroC

    salut, j'utilise aussi mikroC, normalement ne faut pas t-il mettre PORTB.RB0 au lieu de PORTB.B0.

  11. #10
    invite03481543

    Re : problème --------->MikroC

    Ni l'un ni l'autre.
    C'est PORTB.F0
    @+

  12. #11
    ftorama

    Re : problème --------->MikroC

    Citation Envoyé par HULK28 Voir le message
    On utilise pas de fonctions dans une interruption, il n'y a pas de temps à perdre, souviens toi bien de ça.
    On capte l'évènement et ensuite on envoie vers le traitement HORS interruption.
    +1000

    Si le programme principal est bien foutu, ça ne pose pas réellement de problèmes. Maintenant si c'est vraiment un problème, il faut partir sur des archis qui permettent l'empilement d'interruption, mais on touche généralement à du haut de gamme dans ce cas. Le PIC peut théoriquement le faire par ré-activation des interruptions dès l'entrée dans celle-ci (de toutes façons il n'y a qu'un vecteur) mais la pile va exploser en moins de temps qu'il ne faut pour le dire et c'est sans doute ce qui t'arrive.

    On peut dans certains cas faire différemment mais ne jamais perdre de vue que sur un PIC jusqu'au "mid range" (PIC16) les niveaux d'interruptions sont pauvres et mal foutus, la pile est minable, bref c'est pas ce qu'ils ont fait de mieux.
    J'en connais qui auraient eu des problèmes pour avoir dit ça
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  13. #12
    invite03481543

    Re : problème --------->MikroC

    J'en connais qui auraient eu des problèmes pour avoir dit ça
    Non, jamais quand l'argument est une évidence indiscutable.
    Comme par exemple de dire que Microchip est le premier fabricant à avoir fait des outils à moins de 1000F (150 euros) il y a une quinzaine d'années, quand les autres étaient à tous à plus de 1500 euros au bas mot.
    Quand c'est aussi évident il n'y a aucun problème.

    Oui la pile est insuffisante, c'est un des points faibles des mid range, il suffit de le savoir, ce n'est pas pour autant si handicapant que ça.

  14. #13
    omar.STE

    Re : problème --------->MikroC

    Bjr

    Citation Envoyé par HULK28 Voir le message
    Ni l'un ni l'autre.
    C'est PORTB.F0
    @+
    PORTB.B0 et PORTB.F0 sont equivalents, rassurez-vous

    je tiens à vous remercier car j'ai résolu enfin le problème

    Cordialement
    l'aide n'a aucun prix

  15. #14
    Thetimax

    Re : problème --------->MikroC

    Bonsoir!!

    Pour agir sur une broche d'un port sous MikroC, il faut ecrire ainsi " RB0_bit = 0; " ou pour comparer " if(INTF_bit ==1){ "

    Cordialement

  16. #15
    invite03481543

    Re : problème --------->MikroC

    Citation Envoyé par omar.STE Voir le message
    Bjr



    PORTB.B0 et PORTB.F0 sont equivalents, rassurez-vous

    je tiens à vous remercier car j'ai résolu enfin le problème

    Cordialement
    Je ne suis pas inquiet, ET ce n'est pas équivalent du tout.

  17. #16
    invite03481543

    Re : problème --------->MikroC

    Citation Envoyé par Thetimax Voir le message
    Bonsoir!!

    Pour agir sur une broche d'un port sous MikroC, il faut ecrire ainsi " RB0_bit = 0; " ou pour comparer " if(INTF_bit ==1){ "

    Cordialement

    RB0_bit = 0; n'est pas non plus la bonne manière.... décidément.... quand allez vous ouvrir un peu les manuels.

  18. #17
    flyingrock

    Re : problème --------->MikroC

    Bonsoir,
    Au risque de paraître idiot c'est quoi la différence ?

    @+

Discussions similaires

  1. Probléme avec le MIKROC
    Par akramovic dans le forum Électronique
    Réponses: 5
    Dernier message: 11/04/2015, 11h12
  2. problème de programmation mikroc 18f2431
    Par invite114c880e dans le forum Électronique
    Réponses: 3
    Dernier message: 08/06/2011, 11h47
  3. PROBLEME PIC 16F628a mikroC
    Par invite9547c629 dans le forum Électronique
    Réponses: 0
    Dernier message: 07/05/2010, 08h50
  4. Problème MikroC compilation
    Par maximilien dans le forum Électronique
    Réponses: 17
    Dernier message: 21/08/2009, 07h25
  5. problème avec mikroC
    Par ABN84 dans le forum Électronique
    Réponses: 4
    Dernier message: 07/03/2007, 16h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.