IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Programmation EEPROM


Sujet :

C++Builder

  1. #41
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Le delai peut ne pas etre le meme pour la lecture et l'ecriture? intuitivement si ca devait varier je parierais que c l'ecriture qui demanderait un delai plus long......hors l'ecriture marche nikel.....

  2. #42
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Exact, donc on pourrait en déduire qu'il sagit d'une erreur de protocol...
    En conservant le même délai que pour l'écriture, met au point la lecture...

  3. #43
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Sub0
    Exact, donc on pourrait en déduire qu'il sagit d'une erreur de protocol...
    En conservant le même délai que pour l'écriture, met au point la lecture...
    Ca marche pas je commence a craaaquer......

  4. #44
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    post ton code et le protocol que tu as récupéré...
    Si tu attend que je potasse, j'ai pas trop le temps en réalité,
    alors donne-moi toutes les infos nécessaires pour l'analyse si tu veux...

  5. #45
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Sub0
    post ton code et le protocol que tu as récupéré...
    Si tu attend que je potasse, j'ai pas trop le temps en réalité,
    alors donne-moi toutes les infos nécessaires pour l'analyse si tu veux...
    Je t'avais envoyé mon code je crois par mp...non? l'ecriture est bonne juste la lecture marche pas..pourtant je suis scrupuleusement le protocole du datasheet.....

  6. #46
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Donc ton code actuel...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ubyte IO_ubI2C_Read_Bytes(char Canal,ubyte chip_address, ubyte data_address) 
    { 
    ubyte ACK=0; 
    ubyte data=0; 
    unsigned int i; 
     
    while (ACK == 0) 
    { 
    ACK = 1; 
    IO_vI2C_Start(Canal); 
    ACK &= IO_ubI2C_Write(Canal,(chip_address & 0xFE)); 
    ACK &= IO_ubI2C_Write(Canal,data_address); 
    IO_vI2C_Stop(Canal); 
    IO_vI2C_Start(Canal); 
    ACK &= IO_ubI2C_Write(Canal,(chip_address | 0x01)); 
     
    data = IO_ubI2C_Read(Canal); 
    IO_vI2C_Ack0(Canal); 
    IO_vI2C_Stop(Canal); 
    } 
     
    return data; 
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data== IO_ubI2C_Read_Bytes(I2C_ARME_LC,160,1);
    Et le protocol du datasheet...


    Bon, ton code correspond à quel tableaux ci-dessus?
    Tu as choisi le 8-2 j'ai l'impression, non?
    Je n'ai pas compris à quoi correspond "canal"...
    "& 0xFE" sert à quoi?
    Tu as un stop à la place de l'accusé, c'est pas la même chose.
    le NOACK est important aussi, il est différent de l'ACK...
    Lit le datasheet sur ce point.

    à+

  7. #47
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    salut,
    oui mon code corespond a la figure 8-2.
    Canal corespond a un numero d'I2C, parcequ'il y a un autre composant sur un autre I2C que je programme aussi.....ne tiens pas compte du canal....
    0xFE permet de rentrer un seul parametre lors de l'appel de la fonction...
    "& 0xFE" permet de mettre un 0 au bit R/W pour l'ecriture et " | 0x01" met un "1" au bit R/W......
    Le NoACK corespond a Ack0()...

  8. #48
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    La fonction de lecture devrait avoir cet ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Start; 
    Write(160); 
    Ack;  
    Write(address); 
    Ack;  
    Start; 
    Write(161); 
    Ack;  
    data=Read; 
    NoAck;
    Stop;

  9. #49
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Sub0
    D'après moi, ta fonction de lecture devrait ressembler à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Start; 
    Write(160); 
    Ack;  
    Write(address); 
    Ack;  
    Start; 
    Write(161); 
    Ack;  
    data=Read; 
    NoAck;
    Stop;
    Quelle est la difference entre Ack et Ack0?
    C bien moi qui recoit l'ACK , je dois pas acquitter, c le recepteur qui acquitte sauf pour le NoAck ou la c moi qui ne doity pas acquitter en mettant SDA_OUT a 1 pendant un clock? non?

  10. #50
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Déjà, le fait que tu utilises un stop avant le start...
    Un start suffit, et le stop n'est pas nécessaire. Ensuite:
    le NOACK est important aussi, il est différent de l'ACK...
    Lit le datasheet sur ce point.

  11. #51
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Attention, si tu adresses plusieurs composants I²C sur le même bus, il faut peut-être l'adresser à chaque commande!
    Autrement dit XXX dans l'octet de commande correspond peut-être à n° du composant... faut lire le datasheet, à+

  12. #52
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Sub0
    Attention, si tu adresses plusieurs composants I²C sur le même bus, il faut peut-être l'adresser à chaque commande!
    Autrement dit XXX dans l'octet de commande correspond peut-être à n° du composant... faut lire le datasheet, à+
    g 2 bus I2C........le pb ne se pause pas....

  13. #53
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Sub0
    Déjà, le fait que tu utilises un stop avant le start...
    Un start suffit, et le stop n'est pas nécessaire. Ensuite:
    le NOACK est important aussi, il est différent de l'ACK...
    Lit le datasheet sur ce point.

    LE stop g essaye de le rajouter parce que ca ne marchait pas.
    Le NoACK je t donné le code, il est pas juste?

  14. #54
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    LE stop g essaye de le rajouter parce que ca ne marchait pas.
    Ben enlève-le maintenant. Il faut suivre le protocol à la lettre!
    Le NoACK je t donné le code, il est pas juste?
    J'en sais trop rien...
    Il faudrait que je compare avec le code d'un de mes projets...
    Mais à mon avis, ton code doit-être juste.
    Essaye de faire des modifs au hasard au pire! Bon courage, à+

  15. #55
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Sub0
    La fonction de lecture devrait avoir cet ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Start; 
    Write(160); 
    Ack;  
    Write(address); 
    Ack;  
    Start; 
    Write(161); 
    Ack;  
    data=Read; 
    NoAck;
    Stop;

    Write(address) = write(0) : je lui demande qu'il m'envoie le mot a l'adresse 00 on est d'accord?

  16. #56
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    bonjour, Je reprend la programmation de mon eeprom apres 2mois d'abstinence, et je n'arrive toujours pas a regler mes problemes....Sub0 es tu encore la?
    Merci

  17. #57
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    Oui, je suis toujours là! J'ai trouvé du travail (webmaster), donc je suis moins dispo forcément...
    Bref, je croyais que ton problème était résolu depuis l'temps... Que se passe-t-il?

  18. #58
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Bah en fait je relis mon code que j'ai pas touche depuis 2 mois, et je comprends pas pourquoi j'arrive a ecrire dans cette eeprom mais je n'arrive pas a la lire.......un simple micro qui a 2 entrees sorties (SCL et SDA) reliées directement par bus i2c a l'eeprom.....dans la datasheet de l'eeprom y'a 3 modes de lecture, auaun ne fonctionne.....l'eeprom acquitte correctement les octets que je lui envoie mais apparement je n'arrive pas a recuperer ce qu'elle m'envoie enfin si elle me l'envoie bien.....

  19. #59
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Please help......

  20. #60
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Slt! Je vois 2 possibilités d'erreur:
    - Soit ton eprom n'est pas en mode lecture
    - Soit ton prog aquite mal la lecture en série
    L'aquitement n'est peut-être pas le même en lecture qu'en écriture.
    Il faut se référer à la méthode proposée dans le datasheet...
    Les fonctions de bases comme la reception et l'émission d'une donnée à l'eprom doivent être fonctionnelles.
    On peut tester ces fonctions avec une lecture / écriture binaire de l'eprom.

    Rappel:
    DataOut (du pc vers l'eprom)
    DataIn(de l'eprom vers le pc)
    Pour l'écriture de l'eprom, seul l'envoi de données du pc vers l'eprom est nécessaire (DataOut).
    Par contre, pour lire une donnée, l'eprom doit pouvoir envoyer la donnée vers le pc via DataIn.
    Sur le bus I²C, DataIn a la même ligne que DataOut, mais le pc possède une adresse différente de celle de DataOut pour y accéder.

    - programmer l'eprom en mode "envoi des données",
    - programmer l'adresse à lire,
    - cadencer l'emission de l'eprom avec la ligne CLock et lire DataIn au front montant ou descendant (voir datasheet).
    - au même moment, le pc doit attendre la reception de donnée venant de DataIn,
    - puis aquiter pour valider l'octet lu...

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. [PIC 16C84] Ajouter une eeprom externe i2c à un programme
    Par jacques8 dans le forum Autres architectures
    Réponses: 2
    Dernier message: 30/09/2005, 17h11
  2. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  3. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  4. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo