MFRC522 et PIC18F46K22 mplab
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

MFRC522 et PIC18F46K22 mplab



  1. #1
    Stefox

    MFRC522 et PIC18F46K22 mplab


    ------

    Bonjour,

    j'ai un petit problème avec mon programme, je suis complètement bloqué depuis plusieurs jours et j'ai besoin de votre aide ! 

    Je développe un petit programme pour lire un module RFID (MFRC522) en SPI. Pour le piloter et interpréter les données, j'utilise un PIC18F46K22. Je développe sur MPLAB 6.20 XC8 2.50.

    Actuellement, le programme doit, s'il voit une puce RFID, éteindre une LED. Rien de plus pour le moment. Cependant, je lui ai présenté de nombreux types de cartes RFID, dont celle fournie avec le MFRC522 et la LED ne s'est pas éteinte du tout.

    J'ai remplacé le PIC18F46K22 sans succès... J'ai testé le MFRC522 avec un Arduino sur une interface série et il a bien réagi avec toutes les cartes que je lui ai présentées. J'ai mesuré les tensions, j'ai 5 volts sur le PIC18F et j'ai 3,3 volts via un diviseur de tension sur mon MFRC522.

    J'ai essayé pas mal de choses et j'avoue que je suis complètement à sec.

    Pourrais-tu m'éclairer et me dire ce qui ne va pas dans mon code ? Quelqu'un pourait me dire quoi changer pour régler ce problème..

    Voici mon programme en pièce jointe si quelqu'un a la gentillesse d'y jeter un oeil ! ^^
    main.txt
    Pour le câblage :
    • MFRC522 : SCK – RC3
    MOSI – RC5
    MISO – RC4
    SS – RA5
    RST – Non connecté
    IRQ – Non connecté
    • LED : RA0

    Je vous remercie d'avance pour vos lumières,

    Stefox !

    -----

  2. #2
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    ça vient peut-être d'un "bug" du PIC: il y a l'errata 7 qui évoque un souci de collision si on réagit trop vite après la détection de BF; il y a une méthode de contournement à implanter cf la doc des errata https://ww1.microchip.com/downloads/.../80000514J.pdf
    (quoique, avec CKE à 1, le problème ne devrait pas se poser)

    Tu as bien configurer les pins I2C et EA ? (I2C=0, EA=1 pour utiliser le SPI)

    Sauf erreur de ma part, je pense que tu as un souci dans la fonction MFRC522_ToCard, tu ne mets pas à jour backData (= backBits quand tu l'appelles dans MFRC522_Request), ce qui fait que la condition (backBits != 0x10) de Request est toujours vrai, donc status =0 donc pas modification de la Led.

  3. #3
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    Salut !

    Tout d'abord merci d'avoir pris le temps de regarder un peu, c'est super sympa !! ��

    Oui, je pense que l'errata est bon, j'ai quand même tcheck la doc et dans la 2eme méthode, ils conseillent de justement le mettre un 1 le CKE donc, je pense que de ce côté ça va non ? Qu'en penses-tu ?

    Les pins entrée sorties tu veux dire ? J'ai initialisé les pin dans la fonction SPI.init() J'ai peut être fait une erreur ou oublié quelque chose ? �� J'ai revérifier également le câblage qui est correct, tel que je l'ai écrit sur ce post ^^

    J'étais entrain de regarder à cette variable BackBits après avoir lu ta réponse, quand j'ai remarqué tout d'abord que je ne sais même plus a quoi me servait ce Backbits... Il ne sert nul par en fait, je pourrais sans problème le supprimer ? �� J'ai fait beaucoup de test avant d'écrire au secours, donc probable que ce soit une variable que j'ai utilisé précédemment pour tester quelque chose et que j'ai oublié de la delete.... Tu en penses quoi ? Je la supprimerais ?

    Et puis en creusant sur cette variable, je vois que j'ai inscrit ceci dans la fonction MFRC522_Request():

    If ((statut !=0 || (Backbits != 0x10))
    {
    Status = 0;
    }
    Return status;

    Donc Status quand il devient 1, il est automatiquement remis a 0 et donc la fonction retourne 0... La led ne s'allumera donc jamais

    Je n'avais pas remarqué cela avant, mais... Peut être que j'ai loupé quelque chose et que la condition est correct ?

    Dis-moi ce que tu penses de tout ça ! Je désespère de voir enfin cette fichue led s'allumer, tu serais le boss si tu y parviens ahah

    Bien à toi,

    Stefox.

  4. #4
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    Citation Envoyé par Stefox Voir le message
    S
    Oui, je pense que l'errata est bon, j'ai quand même tcheck la doc et dans la 2eme méthode, ils conseillent de justement le mettre un 1 le CKE donc, je pense que de ce côté ça va non ? Qu'en penses-tu ?
    Comme je l'ai aussi dit dans ma parenthèse, ça devrait être OK vu que CKE=1

    Les pins entrée sorties tu veux dire ? J'ai initialisé les pin dans la fonction SPI.init() J'ai peut être fait une erreur ou oublié quelque chose ? �� J'ai revérifier également le câblage qui est correct, tel que je l'ai écrit sur ce post ^^
    Tu ne mentionnes pas les pins I2C et EA, qui permettent le choix de l'interface utilisée si j'ai bien compris la doc du MFRC522 (tableau 5, page 9 de sa doc https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf)


    J'étais entrain de regarder à cette variable BackBits après avoir lu ta réponse, quand j'ai remarqué tout d'abord que je ne sais même plus a quoi me servait ce Backbits... Il ne sert nul par en fait, je pourrais sans problème le supprimer ? �� J'ai fait beaucoup de test avant d'écrire au secours, donc probable que ce soit une variable que j'ai utilisé précédemment pour tester quelque chose et que j'ai oublié de la delete.... Tu en penses quoi ? Je la supprimerais ?

    Et puis en creusant sur cette variable, je vois que j'ai inscrit ceci dans la fonction MFRC522_Request():

    If ((statut !=0 || (Backbits != 0x10))
    {
    Status = 0;
    }
    Return status;

    Donc Status quand il devient 1, il est automatiquement remis a 0 et donc la fonction retourne 0... La led ne s'allumera donc jamais

    Je n'avais pas remarqué cela avant, mais... Peut être que j'ai loupé quelque chose et que la condition est correct ?
    Je pense qu'il faut revoir (quitte à repartir de zéro) ta fonction ToCard; j'ai un doute sur les conditions de ta boucle do..while et sur les conditions d'après; puis la fonction Request qui l'appelle.

    Quel code tu utilisais sur Arduino ? et voir si possibilité de le transcrire sur PIC

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

    Re : MFRC522 et PIC18F46K22 mplab

    Sur Arduino, j'ai vu cette bibiliothèque qui possède une fonction IsNewCardPresent. https://github.com/miguelbalboa/rfid...C522.cpp#L1925
    Peut-être à adapter?

  7. #6
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    Comment puis-je les mentionner dans le code ? C'est à mettre dans le spi init ? J'ai trouvé un registre a la page 117 du pic avec le registre PIE1 qui parle d'EA c'est cela dont tu parles ?

    J'avoue que je ne suis pas du tout assez compétant pour développer un nouveau code seul, je suis automaticien junior, je me débrouille beaucoup mais bon voilà, loin d'être pro expert dans le développement de PIC

    Pour ce code ici par exemple, je me suis aidé d'Internet, de la doc du pic, du MFRC, même d'une IA pour comprendre ce que c'était le SPI exactement mais je ne maîtrise pas toute les notions du programme que j'ai réalisé.

    Donc oui, la meilleure chose serait de se fier à comment c'est fait sur Arduino, mais je ne suis pas du tout suffisamment compétant pour convertir des fichiers de ce genre, c'est un peu trop complexe..

    D'où ma sollicitation dans les forums, voir si quelqu'un n'aurait pas une aide, une correction, une explication, peut être même un morceau de code

    Je creuse partout où je peux et je prend un peu de tout puis je me débrouille pour faire ce dont j'ai besoin ^^

  8. #7
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    Pour EA et I2C, je parle des broches (pins) du MFRC522; il faut surtout s'assurer que la broche EA est à 0 pour utiliser le SPI, sinon il est configurer pour l'I2C ou l'UART (et comme tu l'as testé (positivement) en UART avec Arduino d'après ce que tu as dit et si j'ai bien compris, vérifier sa config)

    Tu as essayé de demander à ChatGPT de te faire le boulot ? il me sort un code ressemblant au tien (je te partage le lien du résultat de ma demande https://chatgpt.com/share/66f52b8d-e...7-c0b97b5b38d6 )
    Dans les conseils donnés, il y a aussi d'utiliser la même tension (3.3V) ou d'utiliser des convertisseur de niveau (comme celui-là par exemple https://letmeknow.fr/fr/convertisseu...733761774.html à sur les lignes de communications (je ne pense pas qu'un diviseur de tension convienne)

  9. #8
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    Je viens de vérifier, EA est bien en contact avec GND et uniquement GND et I2C est en contact avec 3.3V et uniquement celle-ci !

    Yep, ça vient majoritairement de la. Le projet exacte consiste a lire une carte RFID puis de vérifier si cette carte est connue via une lecture en mémoire eeprom. Si elle est connue, allumer une led verte et un bref son du buzzer et actionner un relai. Au sinon, une led rouge et un long son du buzzer. Puis un bp reset, un autre bp pour apprendre une nouvelle carte RFID et la stocker en eeproom via une interruption et un timer et puis un bp pour supprimer une carte connue de l'eeproom.

    Autant l'eeprom et le reste j'ai déjà fait par le passé pour d'autres mini projet, autant je ne sais pas du tout comment m'y prendre pour lire avec ce lecteur en SPI.. Je n'ai pas eu d'autres idée pour le programmer, pas trouver de sujet résolu ailleurs, ou bien j'ai trouvé pas mal de code/bibliothèque mais qui ne compile même pas et qui sont bien plus complexe pour moi par rapport a ce que j'ai actuellement comme code (Exemple avec ce .H et ce .C que j'ai trouvé pour constituer mon main mais qui n'a pas aboutit et qui je trouve est beaucoup plus complexe a comprendre https://github.com/Virviglaz/mylibra...mmon/MFRC522.c ),

    Donc ma dernière solution avant ce forum était de lui demander voir un peu ce qu'il racontait.. Et c'est le seul code qui a pu être compilé jusque maintenant, donc je suis partit sur ce que lui disait ^^ J'ai simplement modifié un peu pour ajouter plutôt l'oscillateur interne car je n'ai pas de quartz a brancher en externe, rajouter une led pour le debug, des petites bricoles ainsi a gauche a droite pour voir si oui ou non le code est fonctionnel.

    Oui, c'est vrai que je ne l'ai pas précisé mais un peu plus tard, je me suis rendu compte que mon 3.3V avec mon diviseur de tension n'était pas toujours très constant (2.2V par moment, d'autres fois 3.4) c'était parfois assez instable donc j'ai repris l'alim sur une arduino, le signal 3.3V est clair, précis, le lecteur est bien alimenté correctement, le GND provient également de l'arduino histoire que tout vienne du même endroit ^^

    Pour le PIC du coup, j'ai repris le 5V de l'arduino aussi au lieu de mon alim.

  10. #9
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    Pourquoi ne pas alimenter ton PIC et le reste aussi en 3.3V ?
    Il faut que tes signaux CS, MOSI, MISO, SCLK soit aussi 3.3V côté MFRC522 et en 5V côté PIC (si tu l'alimente en 5V) donc besoin de convertisseur sur ces lignes (cf mon précédent message); le plus simple étant de tout passé en 3.3V à mon avis, sauf autre contrainte.

  11. #10
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    J'avoue avoir mis 5v sur le pic par habitude, j'ai fait cela sans réfléchir, j'ignorais que cela aurait pu poser souci pour les broches SCK, MOSI, ...

    J'essaierai en 3,3V quand je rentrerai du boulot

    Tu penses que ce ne serait que ceci le problème ? Une alimentation trop élevé ? ��

  12. #11
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    J'ai essayé tout l'ensemble avec 3,3 volts, ça à changer un peu le truc mais toujours le même souci au final ��

    Au démarrage, la led s'éteint (peu importe s'il y a un badge, elle s'éteint) alors quand 5v, elle restait allumé tout le temps. Quelques secondes plus tard, la led se rallume et ne réagit toujours pas à la présentation d'une carte au lecteur rfid

  13. #12
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    L'alim est peut-être trop juste pour l'ensemble.
    Tu as regardé/testé le code fourni par mon lien chatgpt en #7?

  14. #13
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    J'ai branché mon alimentation de labo, j'ai un 3.3v constant et correct et 12ma de consommation avec mon code du début du topic. J'ai tenté de monté jusque 3,7 volts en espérant mais.. non.

    J'ai essayé ton code reçu par ChatGPT, mais qui, exactement le même problème, n'allume pas la led, et niveau conso, je suis descendu a 5ma.

    Voici le nouveau code complet que j'ai essayé

    J'ai bien vérifié le câblage bien entendu.
    newmain.txt
    MFRC522 header.txt
    MFRC522 C.txt

  15. #14
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    Je viens de remarquer que l'oscillateur interne du pic n'était pas configuré dans le nouveau code J'ai bien essayé en 16mhz et en configurant oscon par la suite, mais 5-6ma de conso toujours et toujours pas de led.. :/

    C'est vraiment étrange comme souci..

  16. #15
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    on peut essayer de faire un problème basique pour vérifier que le pic tourne, genre faire clignoter une led toutes les secondes par exemple. ou si tu peux, vérifier si des signaux sont bien envoyer sur les lignes scl et mosi.

  17. #16
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    J'avais oublié un #pragma, le pic ne tournait pas, j'aurai dû tester cela.. J'ai donc rajouter le FOSC = INTIO67 mais toujours rien

    Cependant, ma led clignote sans souci !

    Comment pourrais-je vérifier mes signaux ? Je n'ai pas d'oscilloscope, par contre je mesure différentes tension en mv sur les broches du MFRC522 en fonction de la broche (hors VCC et gnd bien évidemment)

  18. #17
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    Citation Envoyé par Stefox Voir le message
    Je viens de vérifier, EA est bien en contact avec GND et uniquement GND et I2C est en contact avec 3.3V et uniquement celle-ci !
    Mince je viens seulement de tilter: tel que décrit, c'est configuré pour fonctionner en I2C et pas SPI; ceci explique sans doute cela Donc réécrire ton code pour utiliser l'I2C ou changer l'état de ces broches

  19. #18
    Stefox

    Re : MFRC522 et PIC18F46K22 mplab

    Outch, étant étonné qu'il ne soit potentiellement pas en SPI, j'ai regardé et je me suis planté en écrivant en fait.. C'est totalement l'inverse de ce que j'ai raconté..

    J'avais suivi cette photo l'autre jour avant de partir au dodo pour mesurer la continuité et j'ai fait le post le lendemain, ce qui m'a surement induit en erreur lors de la rédaction du post.

    Nom : cpt.jpg
Affichages : 25
Taille : 93,9 Ko

    Il est donc bien en SPI et il fonctionne en SPI puisque Arduino parvient a le faire tourner de cette manière.

    C'est moi qui ai raconté n'importe quoi, j'ai dû confondre en écrivant ce jour là, my bad...

  20. #19
    umfred

    Re : MFRC522 et PIC18F46K22 mplab

    retour à la case départ du coup
    Sans oscillo, ça va être un poil compliqué je pense.
    Mais sinon ajouter des allumages/extinctions de LEDs dans le code, pour voir dans quelle étape on ne passe pas ou dans quelle étape on bloque (petit à petit, tu devrais trouver où se situe le problème dans le code)

Discussions similaires

  1. [Programmation] MRF24WG0MA et PIC18F46K22 (Driver WIFI)?
    Par invite1b6ab4ef dans le forum Électronique
    Réponses: 3
    Dernier message: 09/03/2021, 23h09
  2. Rfid mfrc522
    Par cubitus_54 dans le forum Électronique
    Réponses: 0
    Dernier message: 23/03/2014, 12h38
  3. URGENT! pic18f46k22 quart 4mhz et led
    Par inviteccc652d0 dans le forum Électronique
    Réponses: 2
    Dernier message: 04/09/2013, 16h13
  4. Problème RS232 et interruption PIC18F46K22
    Par invite831b139b dans le forum Électronique
    Réponses: 5
    Dernier message: 25/12/2012, 11h15
  5. probleme spi sur pic18f46k22 ou 46j50
    Par skydarc dans le forum Électronique
    Réponses: 1
    Dernier message: 18/11/2010, 21h49