Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 32

PB basic pour pic



  1. #1
    joss

    PB basic pour pic

    Salut a tous.
    Je continu mon dur apprentissage de programmation de pic sur easypic 3 et ça avance pas mal grace aux conseils averti de membre de ce forum (merci a Umfred et Gérard )
    Voici mon nouveau probléme
    Je travaille actuellement sur la lecture l'incrementation et la lecture de données dans une eeprom (cool j'ai tous compris) mais la ou ca ce complique c'est que lorseque j'ai une chaine de 4 caracters "idrec as string[3]"
    aprés un opération j'ai un resultat du type :
    idrec[0] = 0
    idrec[1] = 0
    idrec[2] = 1
    idrec[3] = 6

    donc idrec=0016

    je ne sais pas comment recuperer cette valeur afin de l'utiliser comme multiplicateur ou autre.
    Si je fais ma_nouvelle_variable= 15+(idrec*16)
    ca marche pas il a a aparament une incompatibilité de type de variable.
    En gros comme transformer idrec ou idrec[0], idrec[1], idrec[2], idrec[3] en un autre format utilisable pour tout genre d'opération ????????????????????

    Mis a part ça la prog de pic en basic c'est cool

    -----


  2. Publicité
  3. #2
    umfred

    Re : PB basic pour pic

    Je pense qu'il y a confusion entre le nom du tableau et la valeur correspondante, je vais essayer d'expliquer:

    Quand tu met idrec[0], idrec correspond à l'adresse physique dans la mémoire RAM du PIC du début du tableau et non à une variable dont la valeur est le contenu de ce tableau.
    idrec est un "pointeur" qui pointe sur un espace mémoire de taille X (4 dans ton cas si je me trompe pas) de type byte .

    Donc pour avoir une valeur exploitable pour un calcul, il faut une autre variable (autre nom sinon risque de confusion) de type integer (ou short):

    idrec_val= (integer) idrec[0]*1000 + (integer) idrec[1]*100 +(integer) idrec[2]*10 +(integer) idrec[3]

    Le fait de mettre (integer) devant idrec[i] force le passage en integer du résultat du calcul impliquant idrec[i].

    Il suffirat ensuite de faire ma_nouvelle_variable= 15+(idrec_val*16) avoir un calcul cohérent (ma_nouvelle_variable doit aussi être de type integer)

  4. #3
    joss

    Re : PB basic pour pic

    Super j'ai bien compris la difference merci
    J'adapte la formule a mon compilateur (au niveau des parentheses)

    idrec_val= integer (idrec[0]*1000)+ integer (idrec[1])*100 + integer(idrec[2])*10 + integer(idrec[3])

    sa ne me genere plus d'erreur

    Mais lorseque je veux visualiser le resultat sur mon ecran glcd avec ce code

    someText = idrec_val
    Glcd_Set_Font(@FontSystem5x8, 5, 8, 32)
    Glcd_Write_Text(someText, 7, 7, 1)

    il y a une erreur a la compilation incompatible types (integer to char3])
    Lorseque c'est pas d'un coté c'est de l'autre

  5. #4
    umfred

    Re : PB basic pour pic

    il faut reconvertir après la valeur comme je l'ai expliqué dans un de mes MP (Messages Privés)

  6. #5
    joss

    Re : PB basic pour pic

    j'ai surement un truc qui m'échape
    Comme j'ai du mal a visualiser le resultat de mon opération sur l'ecran j'ai fais ça :

    idrec_val= integer (idrec[0]*1000)+ integer (idrec[1])*100 +
    integer(idrec[2])*10 + integer(idrec[3])

    boucle = 15+(idrec_val*16) 'adresse d'ecriture = 15+(id*16)

    'initialisation des valeurs a zero
    idrec[3] = "0"
    idrec[2] = "0"
    idrec[1] = "0"
    idrec[0] = "0"

    Boucle est un entier et il sers a modifier le nombre de boucle a faire dans un for i = 0 to boucle.
    Cette boucle incremente a chaque fois idrec[3] dans un calcul avec des retenues qui reconstitue idrec (ca c'est testé et sa fonctionne au niveau calacule et affichage) .
    La ou ca va pas dans mon cas je test avec idrec_val = 1 donc 15+(idrec_val*16) = 31 et mon résultat a l'ecran est 1312 si mon test s'effectue avec idrec_val superieur a 1 je me retrouve avec des caracteres du genre graphique a l'ecran ????????????????????????????
    Je disais la programmation en basic pour pic c'est bien,
    mais c'est galére au debut

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

    Re : PB basic pour pic

    Si tu pouvais joindre le code du programme en pièces on y verra peut être plus clair, ou au moins le code qui pose problème.
    Dis nous aussi quel compilateur tu utilise.

  9. Publicité
  10. #7
    joss

    Re : PB basic pour pic

    Merci pour votre aide j'ai enfin réussi a multiplier
    il falait convertir en binaire :

    Code:
     'On converti idrec  en binaire
     if idrec[3] = 0x30 then
    idrec[3] = %00000000
    end if
    if idrec[3] = 0x31 then
    idrec[3] = %00000001
    end if
    if idrec[3] = 0x32 then
    idrec[3] = %00000010
    end if
    if idrec[3] = 0x33 then
    idrec[3] = %00000011
    end if
    if idrec[3] = 0x34 then
    idrec[3] = %00000100
    end if
    if idrec[3] = 0x35 then
    idrec[3] = %00000101
    end if
    if idrec[3] = 0x36 then
    idrec[3] = %00000110
    end if
    if idrec[3] = 0x37 then
    idrec[3] = %00000111
    end if
    if idrec[3] = 0x38 then
    idrec[3] = %00001000
    end if
    if idrec[3] = 0x39 then
    idrec[3] = %00001001
    end if
    
     if idrec[2] = 0x30 then
    idrec[2] = %00000000
    end if
    if idrec[2] = 0x31 then
    idrec[2] = %00000001
    end if
    if idrec[2] = 0x32 then
    idrec[2] = %00000010
    end if
    if idrec[2] = 0x33 then
    idrec[2] = %00000011
    end if
    if idrec[2] = 0x34 then
    idrec[2] = %00000100
    end if
    if idrec[2] = 0x35 then
    idrec[2] = %00000101
    end if
    if idrec[2] = 0x36 then
    idrec[2] = %00000110
    end if
    if idrec[2] = 0x37 then
    idrec[2] = %00000111
    end if
    if idrec[2] = 0x38 then
    idrec[2] = %00001000
    end if
    if idrec[2] = 0x39 then
    idrec[2] = %00001001
    end if
    
    
     if idrec[1] = 0x30 then
    idrec[1] = %00000000
    end if
    if idrec[1] = 0x31 then
    idrec[1] = %00000001
    end if
    if idrec[1] = 0x32 then
    idrec[1] = %00000010
    end if
    if idrec[1] = 0x33 then
    idrec[1] = %00000011
    end if
    if idrec[1] = 0x34 then
    idrec[1] = %00000100
    end if
    if idrec[1] = 0x35 then
    idrec[1] = %00000101
    end if
    if idrec[1] = 0x36 then
    idrec[1] = %00000110
    end if
    if idrec[1] = 0x37 then
    idrec[1] = %00000111
    end if
    if idrec[1] = 0x38 then
    idrec[1] = %00001000
    end if
    if idrec[1] = 0x39 then
    idrec[1] = %00001001
    end if
    
     if idrec[0] = 0x30 then
    idrec[0] = %00000000
    end if
    if idrec[0] = 0x31 then
    idrec[0] = %00000001
    end if
    if idrec[0] = 0x32 then
    idrec[0] = %00000010
    end if
    if idrec[0] = 0x33 then
    idrec[0] = %00000011
    end if
    if idrec[0] = 0x34 then
    idrec[0] = %00000100
    end if
    if idrec[0] = 0x35 then
    idrec[0] = %00000101
    end if
    if idrec[0] = 0x36 then
    idrec[0] = %00000110
    end if
    if idrec[0] = 0x37 then
    idrec[0] = %00000111
    end if
    if idrec[0] = 0x38 then
    idrec[0] = %00001000
    end if
    if idrec[0] = 0x39 then
    idrec[0] = %00001001
    end if
     calcul = 0
     'On reconstitue idrec
     calcul = (integer(idrec[0])*1000)+(integer(idrec[1])*100)+(integer(idrec[2])*10)+integer(idrec[3])
    C'est cool j'ai plus aucun probléme au niveau lecture et ecriture dans l'eeprom
    Par contre j'ai une petite question, un truc qui me parait bizzare .
    Lorseque j'écrit dans l'eeprom j'affiche en même temps la variable sur mon ecran glcd :
    Code:
    curseur =  7
       for i = 0 to 3
       tmpData = idrec[i]
       EEPROM_24C02_WrSingle(i, idrec[i])'Le premier chiffre est la position
                                         'de l'octet a ecrire
      Glcd_Set_Font(@FontSystem5x8, 5, 8, 32)
      Glcd_Write_Char(idrec[i], curseur, 2, 1)
      curseur = curseur + 7
      next i
    ce qui me pose probléme est que si je vire les lignes
    Glcd_Set_Font(@FontSystem5x8, 5, 8, 32)
    Glcd_Write_Char(idrec[i], curseur, 2, 1)
    afin de ne plus afficher a l'ecran le résultat de mon écriture. L'ecriture dans l'eeprom est altéré ce qui est galére car l'ecran glcd s'initialise sur deux port
    Glcd_Init(PORTB, 2, 3, 4, 5, 7, 6, PORTD)
    (si j'ai bien tous suivi )
    Et que je compte utiliser cette ecran uniquement pour le programme de lecture afin de récupérer de les port libre.
    Si vous avez une idée je suis preneur

  11. #8
    nadroj13

    Re : PB basic pour pic

    toute vos reponse sont ici http://www.trop-fort.net/?news=29078

  12. #9
    joss

    Re : PB basic pour pic

    Mort de rire tellement c'est naz

  13. #10
    Gérard

    Re : PB basic pour pic

    Citation Envoyé par joss
    Mort de rire tellement c'est naz
    Notre "ami" a posté 2 messages depuis son inscription et c'est 2 fois le même, il est très fort.
    Encore un peu et je le signale aux modérateurs.
    La race des c... n'est pas éteinte.
    Gérard.

  14. #11
    joss

    Re : PB basic pour pic

    C'est clair.
    De toute maniére je vois pas les réponses qu'il peux chercher sur ce forum vu que ce doit étre le genre de mec qui ne se pose jamais de question

  15. #12
    umfred

    Re : PB basic pour pic

    Concernant l'altération de l'écriture dans l'eeprom, je pense qu'il s'agit d'un pb de timing. mets une tempo de 100ms (je pense que c'est suffisant) entre 2 écritures en EEPROM.

  16. Publicité
  17. #13
    umfred

    Re : PB basic pour pic

    Euh ... en regardant le code comme il faut de la conversion en binaire, il y a beaucoup plus simple, il suffit de retirer 0x30 ou %0011000, ou mieux encore de mettre à 0 les 4 bits de poids forts (faire un ET entre idrec[i] et 0x0F).

    Tu verras, si tu regardes bien mes MP, il me semble que c'est ce que je t'ai indiqué

    ton code devient donc
    Code:
    for i = 0 to 3
    idrec[i]= iderec[i] and 0x0f
    next i calcul = 0 'On reconstitue idrec calcul = (integer(idrec[0])*1000)+(integer(idrec[1])*100)+(integer(idrec[2])*10)+integer(idrec[3])
    ça allège bien le programme ça

  18. #14
    joss

    Re : PB basic pour pic

    Citation Envoyé par umfred
    ça allège bien le programme ça
    C'est clair que c'est beaucoup mieux
    Sa a l'air tellement simple
    mais bon j'aime bien me prendre la tête ça permet de mieux retenir les choses

  19. #15
    joss

    Re : PB basic pour pic

    Citation Envoyé par umfred
    Code:
    for i = 0 to 3
    idrec[i]= iderec[i] and 0x0f
    next i calcul = 0 'On reconstitue idrec calcul = (integer(idrec[0])*1000)+(integer(idrec[1])*100)+(integer(idrec[2])*10)+integer(idrec[3])
    ça allège bien le programme ça
    Et en plus ça marche impec
    par contre pour l'alteration des données en ecriture j'ai passé la tempo entre 2 ecriture a 100 ms puis 500 ms rien a faire.
    Je comprend pas pourquoi on est obligé de visualiser un résultat a l'ecran pour pouvoir l'enregistrer
    car ça :
    Code:
    curseur =  7
       for i = 0 to 3
       tmpData = idrec[i]
       EEPROM_24C02_WrSingle(i, idrec[i])'Le premier chiffre est la position
                                         'de l'octet a ecrire
      Glcd_Set_Font(@FontSystem5x8, 5, 8, 32)
      Glcd_Write_Char(idrec[i], curseur, 2, 1)
      curseur = curseur + 7
      next i
    ou ça
    Code:
       for i = 0 to 3
       tmpData = idrec[i]
       EEPROM_24C02_WrSingle(i, idrec[i])
      next i
    devrait procurer le même resultat au niveau de l'ecriture

  20. #16
    umfred

    Re : PB basic pour pic

    Quand je parle de mettre une tempo après l'écriture , tu la mets bien comme ça:
    Code:
      for i = 0 to 3
       tmpData = idrec[i]
       EEPROM_24C02_WrSingle(i, idrec[i])
       tempo_ms(500)
      next i

  21. #17
    joss

    Re : PB basic pour pic

    Non
    je métais la tempo en deux cycles d'ecriture et pas deux ecritures
    Comme ça sa marche

  22. #18
    joss

    Re : PB basic pour pic

    Je continue ma serie de questions a deux balles.
    J'ai deux modules externes + un clavier.
    Les deux modules sont a base d'eeprom,
    le premier 24cxx pour l'eregistrement des données et le second a base de PCF8583 pour la lecture de la date et l'heure.
    Sur les prog de ces deux module je n'ai pas d'initialisation comme pour un lcd type :
    LCD_init(PORTB)
    mais un ligne qui je pense fait le même boulot :
    I2C_init(100000) pour le module RTC (PCF8583) et pareil pour le module eeprom
    sub procedure EEPROM_24C02_Init
    I2C_Init(100000)
    end sub
    les deux sont placées dans des sous procedures puis apeler dans main:

    Mon probléme est que les deux sont sur le port c.
    Est ce qu'il est possible dans passer un sur le port B et est il possible d'utiliser deux eeprom en i2c ?
    Si ce n'est pas le cas je vais etre obligé de modifier la structure de mon montage
    Autre petite question le module RTC garde les infos en mémoire grace a une pile en cas de coupure de courant et il possible d'obtenir le même resultat en remplacant le module par une partie programme uniquement et pas materiel ?

  23. Publicité
  24. #19
    umfred

    Re : PB basic pour pic

    Concernant les initialisations I2C je pense qu'il s'agit de la configuration du port I2C donc ça ne pose pas de problème (tu écrit juste 2 fois la même chose au même endroit). Mais le mieux serait d'avoir le code de la fonction I2C_Init().

    Le bus I2C est un bus qui peut supporter un maître et plusieurs esclaves. Dans ton cas , le maitre est le PIC, et les esclaves sont la mémoire et la RTC. Donc tu peux utiliser le même port (le port C possédant des entrées/sorties dédiées à l'I2C autant les utilisés).


    Concernant la mémorisation des données, il n'y a pas de truc logiciel pour qu'il conserve ses paramètres (en particulier, elle continue à compter le temps quand elle a une pile). une chose qui est possible c'est à chaque démarrage de demander à l'utilisateur de rentrer l'heure et la date actuelle pour l'initialiser.
    Attention si tu utilise une pile de ne pas l'initialiser à chaque mise sous tension

  25. #20
    joss

    Re : PB basic pour pic

    Nickel tous fonctionne merci a tous
    Sans parlé du module RTC j'entre des infos fixes pour l'instant au niveau date et heure mais pour le reste c'est nickel pour la l'ecture et l'ecriture dans la mémoire et le code passe bien a l'enregistrement.
    Je vais peux etre essayer de faire un programme qui gére la date et l'heure histoire de me prendre encore un peut la tête
    Je vous tiens au courant de l'evolution.
    @+

  26. #21
    joss

    Re : PB basic pour pic

    [QUOTE=joss]
    mais un ligne qui je pense fait le même boulot :
    I2C_init(100000) pour le module RTC (PCF8583) et pareil pour le module eeprom
    sub procedure EEPROM_24C02_Init
    I2C_Init(100000)
    end sub
    les deux sont placées dans des sous procedures puis apeler dans main:
    [QUOTE]
    Vu les plans de montages maitre esclave que j'ai vu sur internet si j'ai bien compris sur ma station easypic3 je met sur le port c le premier module i2c, et le seconde module sur le premier (comme s'il etait un sur l'autre).

  27. #22
    LTHOMAS

    Re : PB basic pour pic

    salut Joss, je vois que tu programmes manifestement les pics en basic. J'aimerai savoir le matériel qu'il faut (programmateur, logiciel...) et où le trouver et si possible le fabriquer... Et aussi si il existe une "notice" d'utilisation pour apprendre la syntaxe et tout, en français si possible. Je souhaite également faire qques petits programmes en basic !!

    merci !

    @+

  28. #23
    joss

    Re : PB basic pour pic

    Salut LTHOMAS,
    Je travail sur le Starter-kit "EasyPIC 3" de Mikro Elektronika
    http://www.lextronic.fr/mikro/PP2.htm

    C'est trés pratique pour apprendre, il y a pas mal d'exemples fourni et possibilité d'acheter des petits modules de devellopement a des tarifs plus que correctes et pour chaque module des codes sources sympas et assez facile a metre en oeuvre.
    Pour le compilateur je travail avec MiKroBasic
    http://www.lextronic.fr/mikro/compil/PPa.htm
    Pour l'achat d'un Starter-kit "EasyPIC 3" il font une reduction de 50 euros sur le compilateur.
    Il y a une rubrique aide assez compléte avec des explication de code source mais en anglais.
    Tu peux toujour t'aranger avec eux pour commander ton Starter-kit et il te laisse un mois pour commander ton compilateur avec la reduction cela te laisse le temps de tester les 3 compilateurs :
    MikroC
    MikroPASCAL
    MikroBASIC
    Les versions limités sont téléchargeable sur leurs sites et 100 fonctionnelles (seul la taille du programme est brider).
    J'ai aussi investi dans le livre de christian Tavernier Microcontrôleurs PIC :
    programmation en Basic
    Bon bouquin mais avec les aides sur les forums et les exemples fournis + l'aide integrés au compilateur ca devrais allez tous seul.
    N'hésite pas si tu a besoin d'aide, se sera volontier dans la mesure de mes moyens

  29. #24
    LTHOMAS

    Re : PB basic pour pic

    merci pour ta réponse... Mais je trouve que ça fait quand même un investissement !!!
    J'avais acheté le livre d'Alain Reboux, "s'initier à la programmation des pics basic et assembleur" avec un CD avec un "convertisseur" basic->assembleur, complilateur et tout ! Le problème : je ne suis jamais arrivé à programmer un pic ainsi !! Pb de logiciel, de programmateur, de pic ?? je ne sais pas...

    Mais je ne souhaite pas dépenser autant d'argent là dedans... !!

    @+

  30. Publicité
  31. #25
    Gérard

    Re : PB basic pour pic

    Commence par te faire la main avec la version bridée de Mikro Elektronika, tu jugeras après.
    Pour le programmateur, voir ici http://kudelsko.free.fr/
    rubrique programmateurs.
    Gérard.
    PS : t'es ou en Alsace ?
    Dernière modification par Gérard ; 07/08/2006 à 20h58.

  32. #26
    umfred

    Re : PB basic pour pic

    [QUOTE=joss][QUOTE=joss]
    mais un ligne qui je pense fait le même boulot :
    I2C_init(100000) pour le module RTC (PCF8583) et pareil pour le module eeprom
    sub procedure EEPROM_24C02_Init
    I2C_Init(100000)
    end sub
    les deux sont placées dans des sous procedures puis apeler dans main:
    Vu les plans de montages maitre esclave que j'ai vu sur internet si j'ai bien compris sur ma station easypic3 je met sur le port c le premier module i2c, et le seconde module sur le premier (comme s'il etait un sur l'autre).
    Je suis pas sûr d'avoir bien compris :s:
    je crois que le I2C_Init sert à configurer le port en mode I2C maitre, rien de plus

    Pour le fait de "mettre le second sur le premier", si je prends ca au sens physique (composant sur composant) je doute que ça marche : le brochage n'est sans doute pas le même (alimentation pas au même endroit, pin qui n'ont pas la même fonction).
    Mais si tu parles de relier le SDA et SCL (portC.3 et portC.4 si je me trompe pas) sur les pins portant ce nom des composants, là pas de problème.

  33. #27
    LTHOMAS

    Re : PB basic pour pic

    salut !
    t'es ou en Alsace ?
    Moi, je suis dans le Bas Rhin, à Wasselonne, près de Saverne, et toi ??
    J'aivais comme projet de construire ce programmateur, mais bon le circuit imprimé est assez compliqué !!
    Mais je vais m'y mettre !!!!!
    @+

  34. #28
    joss

    Re : PB basic pour pic

    Citation Envoyé par umfred
    Mais si tu parles de relier le SDA et SCL (portC.3 et portC.4 si je me trompe pas) sur les pins portant ce nom des composants, là pas de problème.
    C'est bien de cela dont je parle.
    Mais si on regarde le brochage du port c de ma carte de devellopement de plus prêt:
    rc0 rc1
    rc2 rc3
    rc4 rc5
    rc6 rc7
    vcc gnd

    Les modules sont prevus pour se brochage, donc si je met mon premier module en place et le deuxieme sur le premier on est en parallele, ça devrais fonctionner.
    Enfin je pense

  35. #29
    Gérard

    Re : PB basic pour pic

    Citation Envoyé par LTHOMAS
    salut !

    Moi, je suis dans le Bas Rhin, à Wasselonne, près de Saverne, et toi ??
    J'aivais comme projet de construire ce programmateur, mais bon le circuit imprimé est assez compliqué !!
    Mais je vais m'y mettre !!!!!
    @+
    A 10km de Fessenheim, je travaille à la centrale nucléaire.
    Gérard.

  36. #30
    joss

    Re : PB basic pour pic

    Jette un oeuil ici
    http://www.rennes.supelec.fr/ren/fi/...77/maq877.html
    L'interface n'a pas l'air de couté trés chére niveau composant et n'est pas trop comliqué a fabriquer.

Sur le même thème :

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Cherche des cours de BASIC pour les PIC 16F84A
    Par zanzeoo dans le forum Électronique
    Réponses: 14
    Dernier message: 16/03/2012, 14h09
  2. Programme Pic Basic, valable ou non ?
    Par Fludo dans le forum Électronique
    Réponses: 3
    Dernier message: 15/03/2007, 17h19
  3. Pic 16f877 Pic basic pro conseil
    Par ledinblue dans le forum Électronique
    Réponses: 10
    Dernier message: 04/01/2007, 17h26
  4. Pic-Basic en français (ou ?)
    Par f6bes dans le forum Électronique
    Réponses: 3
    Dernier message: 18/09/2005, 21h01
  5. pic en basic ?!
    Par Tix dans le forum Électronique
    Réponses: 4
    Dernier message: 07/11/2004, 18h41