MikroC et entrée sur Pic 16F88 (projet modelisme)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

MikroC et entrée sur Pic 16F88 (projet modelisme)



  1. #1
    bypbop

    MikroC et entrée sur Pic 16F88 (projet modelisme)


    ------

    Bonjour à tous,

    Voila j'ai équipé mon quadricopter d'un petit systeme de led. Pour cela j'ai utilisé un pic 16f88 que j'alimente directement avec le rouge et le noir d'un voie de mon recepteur radio (5v regulé)
    Sur ce montage j'ai mis un petit poussoir pour pouvoir changé l'animation des leds. J'aimerais maintenant recuperé le signal de cette voie via le Fil Blanc de ma voie pour pouvoir changer le mode via ma radio.

    Donc je suppose que je dois recuperé le signal et le mettre sur une entrée de mon pic mais au niveau du code sous MikroC je n'ai pas encore utilisé les entrées ...
    Voila est ce que qq'un pourrait m expliquer comment on utilise les entrée sous miKroC sachant que je recupere un pwm de mon recepteur.

    Ma radio est programmable donc je peux faire varier mon pwm sur une plage standard de servo.

    J'ai fait ce code pour l'instant qui fonctionne bien :

    Code:
    int i;
    void main()
    {
    ANSEL = 0;
    OSCCON = 0b01111000;
    TRISA = 0b00000000; ;
    TRISB = 0b00000001;
    
    i=1;
    
    PORTB.B2 = 1 ;
    Delay_ms(100) ;
    PORTB.B2 = 0 ;
    Delay_ms(100) ;
    
    
    while(1)
    {
    
    if (portb.b0==1)
    {
    PORTB.B2 = 1 ;
    Delay_ms(100) ;
    PORTB.B2 = 0 ;
    Delay_ms(100) ;
    i++;
        if (i==5)
        {
        i=1;
        }
    }
    
    if (i==1)
    {
    PORTA.B0 = 1 ;
    PORTA.B1 = 1 ;
    
    PORTA.B3 = 1 ;
    PORTA.B4 = 1 ;
    
    PORTA.B2 = 1 ;
    PORTB.B1 = 1 ;
    
    PORTA.B6 = 1 ;
    PORTA.B7 = 1 ;
    }
    if(i==2)
    {
    PORTA.B0 = 0 ;
    PORTA.B1 = 0 ;
    
    PORTA.B3 = 0 ;
    PORTA.B4 = 0 ;
    
    PORTA.B2 = 0 ;
    PORTB.B1 = 0 ;
    
    PORTA.B6 = 0 ;
    PORTA.B7 = 0 ;
    }
    if(i==3)
    {
    PORTA.B0 = 1 ;
    PORTA.B1 = 1 ;
    PORTA.B3 = 1 ;
    PORTA.B4 = 1 ;
    PORTA.B2 = 1 ;
    PORTB.B1 = 1 ;
    PORTA.B6 = 1 ;
    PORTA.B7 = 1 ;
    Delay_ms(1000) ;
    PORTA.B0 = 0 ;
    PORTA.B1 = 0 ;
    PORTA.B3 = 0;
    PORTA.B4 = 0 ;
    PORTA.B2 = 0 ;
    PORTB.B1 = 0 ;
    PORTA.B6 = 0 ;
    PORTA.B7 = 0 ;
    Delay_ms(50) ;
    PORTA.B0 = 1 ;
    PORTA.B1 = 1 ;
    PORTA.B3 = 1 ;
    PORTA.B4 = 1 ;
    PORTA.B2 = 1 ;
    PORTB.B1 = 1 ;
    PORTA.B6 = 1 ;
    PORTA.B7 = 1 ;
    Delay_ms(100) ;
    PORTA.B0 = 0 ;
    PORTA.B1 = 0 ;
    PORTA.B3 = 0 ;
    PORTA.B4 = 0 ;
    PORTA.B2 = 0 ;
    PORTB.B1 = 0 ;
    PORTA.B6 = 0 ;
    PORTA.B7 = 0 ;
    Delay_ms(10) ;
    
    
    PORTA.B1 = 0 ;
    Delay_ms(30) ;
    PORTA.B1 = 1 ;
    Delay_ms(30) ;
    PORTA.B1 = 0 ;
    Delay_ms(30) ;
    PORTA.B1 = 1 ;
    Delay_ms(30) ;
    PORTA.B1 = 0 ;
    Delay_ms(30) ;
    
    PORTA.B0 = 0 ;
    Delay_ms(30) ;
    PORTA.B0 = 1 ;
    Delay_ms(30) ;
    PORTA.B0 = 0 ;
    Delay_ms(30) ;
    PORTA.B0 = 1 ;
    Delay_ms(30) ;
    PORTA.B0 = 0 ;
    Delay_ms(30) ;
    
    PORTA.B4 = 0 ;
    Delay_ms(30) ;
    PORTA.B4 = 1 ;
    Delay_ms(30) ;
    PORTA.B4 = 0 ;
    Delay_ms(30) ;
    PORTA.B4 = 1 ;
    Delay_ms(30) ;
    PORTA.B4 = 0 ;
    Delay_ms(30) ;
    
    PORTA.B3 = 0 ;
    Delay_ms(30) ;
    PORTA.B3 = 1 ;
    Delay_ms(30) ;
    PORTA.B3 = 0 ;
    Delay_ms(30) ;
    PORTA.B3 = 1 ;
    Delay_ms(30) ;
    PORTA.B3 = 0 ;
    Delay_ms(30) ;
    
    PORTA.B7 = 0 ;
    Delay_ms(30) ;
    PORTA.B7 = 1 ;
    Delay_ms(30) ;
    PORTA.B7 = 0 ;
    Delay_ms(30) ;
    PORTA.B7 = 1 ;
    Delay_ms(30) ;
    PORTA.B7 = 0 ;
    Delay_ms(30) ;
    
    PORTA.B6 = 0 ;
    Delay_ms(30) ;
    PORTA.B6 = 1 ;
    Delay_ms(30) ;
    PORTA.B6 = 0 ;
    Delay_ms(30) ;
    PORTA.B6 = 1 ;
    Delay_ms(30) ;
    PORTA.B6 = 0 ;
    Delay_ms(30) ;
    
    PORTB.B1 = 0 ;
    Delay_ms(30) ;
    PORTB.B1 = 1 ;
    Delay_ms(30) ;
    PORTB.B1 = 0 ;
    Delay_ms(30) ;
    PORTB.B1 = 1 ;
    Delay_ms(30) ;
    PORTB.B1 = 0 ;
    Delay_ms(30) ;
    
    PORTA.B2 = 0 ;
    Delay_ms(30) ;
    PORTA.B2 = 1 ;
    Delay_ms(30) ;
    PORTA.B2 = 0 ;
    Delay_ms(30) ;
    PORTA.B2 = 1 ;
    Delay_ms(30) ;
    PORTA.B2 = 0 ;
    Delay_ms(30) ;
    }
    if(i==4)
    {
    PORTA.B0 = 0 ;
    PORTA.B1 = 0 ;
    PORTA.B3 = 0 ;
    PORTA.B4 = 0 ;
    PORTA.B2 = 0 ;
    PORTB.B1 = 0 ;
    PORTA.B6 = 0 ;
    PORTA.B7 = 0 ;
    Delay_ms(1000) ;
    PORTA.B0 = 1 ;
    PORTA.B1 = 1 ;
    PORTA.B3 = 1 ;
    PORTA.B4 = 1 ;
    PORTA.B2 = 1 ;
    PORTB.B1 = 1 ;
    PORTA.B6 = 1 ;
    PORTA.B7 = 1 ;
    Delay_ms(1000) ;
    PORTA.B0 = 0 ;
    PORTA.B1 = 0 ;
    PORTA.B3 = 0 ;
    PORTA.B4 = 0 ;
    PORTA.B2 = 0 ;
    PORTB.B1 = 0 ;
    PORTA.B6 = 0 ;
    PORTA.B7 = 0 ;
    
    PORTA.B0 = 1 ;
    Delay_ms(500) ;
    PORTA.B1 = 1 ;
    Delay_ms(500) ;
    PORTA.B3 = 1 ;
    Delay_ms(500) ;
    PORTA.B4 = 1 ;
    Delay_ms(500) ;
    PORTA.B2 = 1 ;
    Delay_ms(500) ;
    PORTB.B1 = 1 ;
    Delay_ms(500) ;
    PORTA.B6 = 1 ;
    Delay_ms(500) ;
    PORTA.B7 = 1 ;
    Delay_ms(500) ;
    
    
    }
    }
    }


    Cordialement,
    bypbop

    -----

  2. #2
    bypbop

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Bonsoir ,

    J'ai peut etre mal posé ma question ?

    En fait sur le code que j'ai fait je veux pouvoir changer de mode via ma radiocommande mais je ne sais pas comment analyser le signal a partir du pic .

    Cordialement,
    bypbop

  3. #3
    Thetimax

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Bonsoir!

    Je ne connais pas grand chose dans ce domaine mais je suppose que tu devrais utiliser le module capture/compare de ton pic (si il en a un!). Sous MikoC a priori tu pourrais utiliser les librairies d'exemple "PS2" (clavier)... pour te faire la main.

    A+

  4. #4
    bypbop

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Alors j'avance un peu

    apparement il faut utiliser 2 timer sur mon entrée 1 pour le front montant et un pour mesurer le front descendant et a partir de la interpreter le resultat pour faire varier mes leds.

    mais aprés ca ...

    Cordialement,
    bypbop

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

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Ou ptete q'un seule en fait vu que je ne pilote pas de servo ... donc si je detecte la durée du front montant ca peut ptete suffir .

    Cordialement,
    bypbop

  7. #6
    bypbop

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Bonjour,

    Est ce que je peux utiliser n'importe quelle broche disponible pour placer mon entrée ou suis je obligé de placer uniquement le broche T1 et T0 ?
    Ps : J'utilise l'oscillateur interne du pic 16f88

    Cordialement,
    bypbop

  8. #7
    invite60c6fa7f

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Salut!
    Si j'ai bien compris tu cherches a extraire une valeur en fonction du pwm que fourni ton récepteur.
    Je connais pas le 16f88, mais voila des idées de comment procéder.

    1:comme dit le ptiit max si il est equipe d'un module capture/compare tu peux l'utiliser (voire datasheet) du coup tu auras pas le choix de la pin.

    2: tu utilise une l'interruption externe (si dispo sur ton pic), lance le timer0 et lis la valeur du timer quand le signal retombe a 0 avec une interruption aussi ou en checkant l’état de la pin, la non plus, pas possible de choisir la pin.

    3:tu checke constamment la pin que tu a choisi par soft mais tu risque de plus pouvoir faire grand chose d'autre ou de manquer le début du signal.


    tu choise!

  9. #8
    invite60c6fa7f

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Remarque en lisant ton 1er post, je te conseille de taper bigonoff sur google, tu trouveras un cours pour connaitre les pics vraiment des mieux. en assembleur, mais toute la partie hardware (donc le PIC proprement dit) reste le même en C. Juste une autre approche.

    pour définir une entrée sur un pic, on utilise le registre TRIS... correspondant en mettant a 1 le ou les bits concernés. Attention aussi aux pics possédant des entrée analogiques! voir le le(s) registres ANSEL(H).

  10. #9
    bypbop

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Oui je me suis documenté un peu dessus mais bon c'est pa si simple pour moi

    alors pour l'instant j'ai compris qu'il fallait que je crée une interruption qd le front montant passe a 1 et declancher mon timer0
    mais c'est la première interruption et le premier timer ....

    pour l'instant j'en suis la :

    Code:
    int i;
    
    void interrupt (raison de l'interruption){
    
    
    }
    void main()
    {
    ANSEL = 0;
    OSCCON = 0b01111000;
    TRISA = 0b00000000; ;
    TRISB = 0b00000001;
    
    }

  11. #10
    bypbop

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Bonsoir bon j'ai pas mal avancer mais cela ne fonctionne pas tjrs.
    alors comme c'est ma première interruption j'ai un poussoir sur mon montage qui envoie un front montant sur RB0

    Code:
    int i;
    
    void interrupt (){
    if (INTCON.RBIF = 1 )
    {
    i++;
    if (i==3)
    {
    i=1;
    }
    }
    INTCON.RBIF = 0;
    }
    void main()
    {
    ANSEL = 0;
    OSCCON = 0b01111000;
    INTCON = 1;
    INTCON.GIE = 1;
    INTCON.RBIE = 1;
    INTCON.RBIF = 0;
    INTCON.INTE = 1;
    
    TRISA = 0b00000000; ; // port A en sortie
    TRISB = 0b00000001;   // port B en sortie pin 0 en entrée
    
    i=1;
    
    PORTB.B2 = 1 ;
    Delay_ms(100) ;
    PORTB.B2 = 0 ;
    Delay_ms(100) ;
    
    
    while(1)
    {
    
    if (i==1)
    {
    PORTA.B0 = 1 ;
    PORTA.B1 = 1 ;
    
    PORTA.B3 = 1 ;
    PORTA.B4 = 1 ;
    
    PORTA.B2 = 1 ;
    PORTB.B1 = 1 ;
    
    PORTA.B6 = 1 ;
    PORTA.B7 = 1 ;
    }
    if(i==2)
    {
    PORTA.B0 = 0 ;
    PORTA.B1 = 0 ;
    
    PORTA.B3 = 0 ;
    PORTA.B4 = 0 ;
    
    PORTA.B2 = 0 ;
    PORTB.B1 = 0 ;
    
    PORTA.B6 = 0 ;
    PORTA.B7 = 0 ;
    }
    }
    ca compile mais mes led reste sur le programme 1 et ne s eteigne pas quand j'appuie ...

    Cordialement,
    bypbop

  12. #11
    Thetimax

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Bonsoir!

    Honnêtement,que MikroC compile et programme ce code, c'est un miracle! Si tu veut réelement pouvoir exploiter du PWM (a ma connaissance biensur), tu dois utiliser le module CCP (chapitre 9.1 du datasheet). Comme expliqué, celui ci te permets de "relever" l’état du timer1 au moment de l’interruption (impulsion) sur sa broche. A partir de la valeur relevée sur le timer, tu peut déterminer une fréquence.

    Concernant ton code, lorsqu il s'agit d'une comparaison, il faut il utiliser par exemple cette syntaxe : "if(variable1 == variable2) {...}" ou "if(variable == 4){...}" ( 2x "=" ).

    Bon courage...A+

  13. #12
    bypbop

    Re : MikroC et entrée sur Pic 16F88 (projet modelisme)

    Pour me faire la main j'ai modifier mon code . Pour l'instant je veux juste creer une interruption sur le passage à 1 de ma broche BR0 pour bien comprendre aprés je passerais au PWM ... mais la ca ne marche pas.
    Cordialement,
    bypbop

Discussions similaires

  1. PWM sur un PIC 16F88 et avec Flowcode
    Par invite9913497d dans le forum Électronique
    Réponses: 14
    Dernier message: 23/07/2014, 15h58
  2. interrution sur pic et mode sleep sur 16F88
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/09/2011, 13h52
  3. Réponses: 8
    Dernier message: 01/05/2009, 15h36
  4. Memory Clear sur un PIC 16F88
    Par inviteab3ddeaa dans le forum Électronique
    Réponses: 5
    Dernier message: 11/05/2008, 20h37
  5. documentations sur le pic 16f88
    Par invite86fb36d4 dans le forum Électronique
    Réponses: 1
    Dernier message: 02/12/2007, 15h00
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...