Language C et montage PIC18F8722
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Language C et montage PIC18F8722



  1. #1
    invitec1dec194

    Language C et montage PIC18F8722


    ------

    Bonjour

    Je suis étudiant en Système Électronique, j'ai réaliser un montage simple comprenant un PIC 18F8722 , un écran LCD 8bit , et un Clavier Matriciel 16 touches.

    je programme en C avec le logiciel MikroC Pro et un module Pic Flash 2

    j'ai repris un exemple du logiciel permettant d'afficher la touche appuyé du clavier sur l’écran, je l'ai adapter a mon montage , mais je n'arrive pas a le faire fonctionner

    L'affichage n'a aucun problème , mais le microcontroleur ne lit pas le clavier.

    Je pense que le problème viens du PORTF ( un registre que je n'aurais pas ou mal régler ? )

    Si quelqu'un connait ce type de microcontroleur , son aide est la bienvenue .

    Merci d'avance



    voici mon programme :




    unsigned short kp, cnt, oldstate = 0;
    char txt[6];

    // Brochage du Clavier
    char keypadPort at PORTF;
    // Fin du brochage

    // Brochage de l'ecran LCD
    sbit LCD_RS at RE5_bit;
    sbit LCD_EN at RE7_bit;
    sbit LCD_D4 at RD4_bit;
    sbit LCD_D5 at RD5_bit;
    sbit LCD_D6 at RD6_bit;
    sbit LCD_D7 at RD7_bit;

    sbit LCD_RS_Direction at TRISE5_bit;
    sbit LCD_EN_Direction at TRISE7_bit;
    sbit LCD_D4_Direction at TRISD4_bit;
    sbit LCD_D5_Direction at TRISD5_bit;
    sbit LCD_D6_Direction at TRISD6_bit;
    sbit LCD_D7_Direction at TRISD7_bit;
    // Fin du brochage

    void main() {

    ADCON1 =0x0F; // Desactive le compteur analogique/numerique du PORTF et met les 0/I en numerique
    MEMCON.F7=1; // Desactive le bus de memoire externe sur le PORTD
    CMCON =0x07; // Desactive le comparateur sur le PORTF
    PORTE = 0; // Met le PORTE a 0
    PORTD = 0; // Met le PORTD a 0
    PORTF = 0;
    TRISE = 0; // Met le PORTE en sortie
    TRISD = 0; // Met le PORTD en sortie



    Keypad_Init(); // Initialise le Clavier
    Lcd_Init(); // Initialise l'ecran LCD
    Lcd_Cmd(_LCD_CLEAR); // Efface l'ecran LCD
    Lcd_Cmd(_LCD_CURSOR_OFF); // Desactive le curseur

    Lcd_Out(1, 1, "Vous avez presse"); // Ecrit ce texte sur l'ecran LCD
    Lcd_Out(2, 1, "la touche :"); // Ecrit ce texte sur l'ecran LCD


    do {
    kp = 0; // Met la variable kp a 0

    // Attend qu'une touche soit préssé et relaché

    kp = Keypad_Key_Click(); // Store key code in kp variable



    //Prepare la valeur en sortie , les cases correspondent a l'emplacement des touches sur le clavier
    //, la valeur de kp asssocié correspond au code ASCII en base 10 de la touche.

    // CASE // // TOUCHE //

    // 1 / 2 / 3 / 4 // // 1 / 2 / 3 / F //
    // 5 / 6 / 7 / 8 // // 4 / 5 / 6 / E //
    // 9 / 10 / 11 / 12 // // 7 / 8 / 9 / D //
    // 13 / 14 / 15 / 16 // // A / 0 / B / C //


    switch (kp) {

    case 1: kp = 49; break; // 1
    case 2: kp = 50; break; // 2
    case 3: kp = 51; break; // 3
    case 4: kp = 70; break; // F
    case 5: kp = 52; break; // 4
    case 6: kp = 53; break; // 5
    case 7: kp = 54; break; // 6
    case 8: kp = 69; break; // E
    case 9: kp = 55; break; // 7
    case 10: kp = 56; break; // 8
    case 11: kp = 57; break; // 9
    case 12: kp = 68; break; // D
    case 13: kp = 65; break; // A
    case 14: kp = 48; break; // 0
    case 15: kp = 66; break; // B
    case 16: kp = 67; break; // C

    }

    Lcd_Chr(2, 14, kp); // Affiche la valeur du code ASCII sur l'ecran

    } while (1);
    }

    -----

  2. #2
    invite89303051

    Re : Language C et montage PIC18F8722

    Bonjour,

    Juste comme ça en lecture rapide, je ne vois pas TRISF = 0xFF (port en entrée)

    Cordialement

  3. #3
    invitec1dec194

    Re : Language C et montage PIC18F8722

    oui je ne l'ai pas mit , je suppose que le "keypad init" gère les entrées et sorties a sa guise sur le PORTF.

    je viens d'essayer avec TRISF et sa ne fonctionne toujours pas ...

    merci quand meme

  4. #4
    inviteeb160de1

    Re : Language C et montage PIC18F8722

    Citation Envoyé par RicounetZap Voir le message
    Juste comme ça en lecture rapide, je ne vois pas TRISF = 0xFF (port en entrée)
    Inutile, c'est sa valeur par défaut.

    Par contre je ne vois pas le code de la fonction Keypad_Key_Click(), or c'est celle ci qui doit lire le port !

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

    Re : Language C et montage PIC18F8722

    je n'en es pas besoin si je comprend bien , juste d'avoir le clavier initialisé.

    Port needs to be initialized for working with the Keypad library, see Keypad_Init.

  7. #6
    Tryph

    Re : Language C et montage PIC18F8722

    Salut,

    moi je comprends qu'il faut forcément initialiser, pas que ça suffit.

  8. #7
    invitec1dec194

    Re : Language C et montage PIC18F8722

    salut

    Dans l'exemple d'utilisation du keypad ils écrivent le programme de la même façon, c'est pour sa que je pense que le problème viens plutôt d'un registre sur le PORTF que je n'ai pas activer ou désactivé

    ou de ma mauvaise utilisation des registre

    ADCON1 =0x0F;
    CMCON =0x07;

    ou TRIF, LATF ?

  9. #8
    invite89303051

    Re : Language C et montage PIC18F8722

    Vite fait encore une fois, ton clavier semble avoir 16 touches, donc une matrice de 4 par 4
    Donc, en théorie, il faut configurer 4 ports en entrées et 4 ports en sorties.
    Mais sans schéma et sans détail de la fonction d'init du clavier, on ne peut que supposer

    Cordialement

  10. #9
    inviteeb160de1

    Re : Language C et montage PIC18F8722

    Bon, tu nous le poste ton code pour les fonctions de gestion du clavier ???
    Peut etre qu'elles necessitent une gestion par IT, et si tu ne les as pas activées ça ne marchera pas. (meme si j'en doute si tu utilises le portF)

  11. #10
    invitec1dec194

    Re : Language C et montage PIC18F8722

    c'est ce code la que tu veux ?

    unsigned short kp, cnt, oldstate = 0;
    char txt[6];

    // Keypad module connections
    char keypadPort at PORTD;
    // End Keypad module connections

    // LCD module connections
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB5_bit;
    sbit LCD_D4 at RB0_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;

    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    // End LCD module connections

    void main() {
    cnt = 0; // Reset counter
    Keypad_Init(); // Initialize Keypad
    ANSEL = 0; // Configure AN pins as digital I/O
    ANSELH = 0;
    Lcd_Init(); // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR); // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
    Lcd_Out(1, 1, "1");
    Lcd_Out(1, 1, "Key :"); // Write message text on LCD
    Lcd_Out(2, 1, "Times:");

    do {
    kp = 0; // Reset key code variable

    // Wait for key to be pressed and released
    do
    // kp = Keypad_Key_Press(); // Store key code in kp variable
    kp = Keypad_Key_Click(); // Store key code in kp variable
    while (!kp);
    // Prepare value for output, transform key to it's ASCII value
    switch (kp) {
    //case 10: kp = 42; break; // '*' // Uncomment this block for keypad4x3
    //case 11: kp = 48; break; // '0'
    //case 12: kp = 35; break; // '#'
    //default: kp += 48;

    case 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4
    case 2: kp = 50; break; // 2
    case 3: kp = 51; break; // 3
    case 4: kp = 65; break; // A
    case 5: kp = 52; break; // 4
    case 6: kp = 53; break; // 5
    case 7: kp = 54; break; // 6
    case 8: kp = 66; break; // B
    case 9: kp = 55; break; // 7
    case 10: kp = 56; break; // 8
    case 11: kp = 57; break; // 9
    case 12: kp = 67; break; // C
    case 13: kp = 42; break; // *
    case 14: kp = 48; break; // 0
    case 15: kp = 35; break; // #
    case 16: kp = 68; break; // D

    }

    if (kp != oldstate) { // Pressed key differs from previous
    cnt = 1;
    oldstate = kp;
    }
    else { // Pressed key is same as previous
    cnt++;
    }

    Lcd_Chr(1, 10, kp); // Print key ASCII value on LCD

    if (cnt == 255) { // If counter varialble overflow
    cnt = 0;
    Lcd_Out(2, 10, " ");
    }

    WordToStr(cnt, txt); // Transform counter value to string
    Lcd_Out(2, 10, txt); // Display counter value on LCD
    } while (1);
    }







    sinon quelqu’une gestion par IT ?

  12. #11
    inviteeb160de1

    Re : Language C et montage PIC18F8722

    Non !
    Tu as un probleme avec ton clavier, donc il faut que tu mettes le code des fonctions qui gerent ton clavier. Je te l'ai deja demandé en #4 !
    Fonctions : Keypad_Key_Click() et Keypad_Init()

  13. #12
    invitec1dec194

    Re : Language C et montage PIC18F8722

    fonction :

    Keypad_Key_Click

    Description :

    Call to Keypad_Key_Click is a blocking call: the function waits until some key is pressed and released. When released, the function returns 1 to 16, depending on the key. If more than one key is pressed simultaneously the function will wait until all pressed keys are released. After that the function will return the code of the first pressed key.

    exemple

    char kp;
    ...
    kp = Keypad_Key_Click();


    ______________________________ ________________________

    cette fonction s'utilise tel quel

  14. #13
    inviteeb160de1

    Re : Language C et montage PIC18F8722

    Une fonction bloquante pour detecter des boutons poussoirs, ça se voit que son concepteur n'a jamais fait un programme depassant les interactions entre un bouton et une LED...

    Bon sinon, tu n'as toujours pas compris, c'est le CODE DE CES FONCTIONS qui peut nous amener la solution.

  15. #14
    invitec1dec194

    Re : Language C et montage PIC18F8722

    non je n'ai toujours pas compris , qu'es ce que tu appelle le " CODE "!

  16. #15
    inviteeb160de1

    Re : Language C et montage PIC18F8722

    Tu te fiches de moi ?
    Sur ce, je pars en vacance demain, marre d'être patient, debrouille toi.

  17. #16
    invitec1dec194

    Re : Language C et montage PIC18F8722

    Écoute si je viens sur ce forum c'est pour chercher de l'aide , je t'es demandé plusieurs foi ce que tu appeler " LE CODE"

    Je ne suis pas un pro du langage C sinon je ne serais pas ici a demander des conseils , et ce n'est pas par ce que tu a l'air d'en savoir plus que moi que tu peux te permettre de me prendre de haut.

    Je pense que l'on a pas tous le même niveau sur le forum et je pense aussi que c'est NORMAL. On es la pour s'entraider non ?
    Et si tu viens pour me parler dans un langage que je ne comprend pas dans le seul but de te mousser sa ne m’intéresse pas.

    Cordialement

  18. #17
    inviteeb160de1

    Re : Language C et montage PIC18F8722

    En #10 tu m'as répondu cela :
    "c'est ce code la que tu veux ?" suivi de ton code. J'en déduis que tu sais ce que veux dire le mot code.
    Ensuite, je te demande de me donner le code correspondant aux fonctions que je t'ai cité. Tu me dis ne pas comprendre ! Pourtant tu connais la signification du mot "code".
    Donc tu postes le CODE correspondant à la fonction ! En gros, elle fait quoi la fonction ! Si ta fonction ne marche pas, comment veux tu debugger sans connaitre ce qu'elle fait ?
    C'est pas un probleme de compétence, c'est un probleme de logique !

  19. #18
    invite89303051

    Re : Language C et montage PIC18F8722

    Bonjour

    Je réitère ma question concernant le clavier (qu'il faut initialiser).
    Comment fonctionne t'il ?
    Comme une matrice 4 X 4, c'est à dire 4 ports en sortie, 4 ports en entrée
    Je met un 1 sur la première sortie, je regarde si j'ai un 1 sur une des entrée et je passe ensuite à la sortie suivante ?
    Si, comme je le pense, c'est ce principe qui est utilisé, il faut initialiser le port F de la façon suivant : TRISF = 0xF0 ou TRISF = 0x0F selon la connexion.
    L'aide sur le forum est prise sur le temps libre des participants, lorsqu'on demande des informations, ce n'est pas pour taper des caractères sur le clavier
    La fonction d'init du clavier, que fait elle exactement ?
    La fonction de lecture du clavier, est il possible d'avoir le code correspondant ?
    On ne veut pas l'appel de la fonction, mais le corps de la fonction.
    Un schéma serait le bienvenu pour arrêter de partir dans des suppositions et enfin pouvoir résoudre ce problème.

    Cordialement

Discussions similaires

  1. language c
    Par invite31370605 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 04/12/2008, 21h44
  2. language C
    Par invitefa544961 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 22/07/2008, 09h10
  3. aide pour programation pic18f8722 (I2C)
    Par invite07331be8 dans le forum Électronique
    Réponses: 3
    Dernier message: 23/05/2008, 07h45
  4. Pic18f8722
    Par HULK28 dans le forum Électronique
    Réponses: 11
    Dernier message: 13/10/2007, 10h28
  5. language C
    Par invite00b08343 dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 02/09/2006, 17h03
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...