Répondre à la discussion
Affichage des résultats 1 à 30 sur 30

réaliser une balance electronique avec le 5460a et pic16f877



  1. #1
    redtronic

    réaliser une balance electronique avec le 5460a et pic16f877

    salut,
    je veux réaliser une balance electronique avec un capteur à appui de 120Kg en utilisent le circuit 5460a et un pic16f877. le problem c'est que je sais pas comment communiquer avec ce composant! ésqu'il existe un driver sur CCS? merci d'avance

    -----


  2. Publicité
  3. #2
    RISC

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Salut,

    Pourrais-tu donner la référence complète de ton capteur et son fabricant ? lien sur sa datasheet ?

    a+

  4. #3
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    salut,
    y'a pas de reference sur le capteur, il ya juste le schema de branchement, et au stylo c'est marquer 120Kg. le capteur a 4 fils, 2input et 2 output.
    et j'ai le circuit 5460a sur une plaque de récupération d'une balance electronique.
    merci.

  5. #4
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    je vais demander la référence a celui qui m'as vendu le capteur.
    a+

  6. #5
    vede

    Cool Re : réaliser une balance electronique avec le 5460a et pic16f877

    Citation Envoyé par redtronic Voir le message
    salut,
    y'a pas de reference sur le capteur, il ya juste le schema de branchement, et au stylo c'est marquer 120Kg. le capteur a 4 fils, 2input et 2 output.
    et j'ai le circuit 5460a sur une plaque de récupération d'une balance electronique.
    merci.
    salut,

    il y a des chances qu'en sortie de ce capteur
    il y ait une tension plus ou moins proportionnelle
    au poids...

    et en entrée, du 3,3V, ou 5V... ou plus...

    moi je commencerais par quelques tests...
    avec une pile et un multimétre...

    vede
    ;O]

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

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    salut vede,
    tu peux me donner les étapes à suivre afin de faire ce test, ou bien un schéma.
    merci.

  9. Publicité
  10. #7
    vede

    Cool Re : réaliser une balance electronique avec le 5460a et pic16f877

    Citation Envoyé par redtronic Voir le message
    salut vede,
    tu peux me donner les étapes à suivre afin de faire ce test, ou bien un schéma.
    merci.
    re ;O]

    je commencerais sans pile,
    à tester la résistance avec un multimètre,
    entre les 2 sorties,
    et en appuyant +/- fort sur le capteur...

    voir si "ça bouge" de ce "côté" (résistance)...

    puis...
    avec une pile 3,3V "en entrée"... 3,3 pour commencer...
    je testerais le voltage entre les sorties...
    et en appuyant +/- fort sur le capteur...

    vede
    ;O]

  11. #8
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Re,
    oui c'est sur que ça va bouger, car le principe et un pont de winston, ce que je veux savoir est comment interfacer et étalonner le composant 5460a (convertisseur A/N 24bits) avec un pic.

  12. #9
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    salut,
    j'ai la datasheet du CS5460a, et maintenant je sais comment le brancher aver un pic. Moi ce que je veux est de lire la valeur en 24bits du poid mesurer par le capteur a appui de 120kg.
    J'ai réccupérer une carte d'une bascule electronique, les entrées VIN+ et VIN- sont branchées à la masse, le capteur utilise IIN+ et IIN- seulement!! le quartz est un 4.096MHz. VA+ et VA- sont branchées aussi sur les deux entrées du capteur et a l'alimentation du capteur.

    voici le code que j'ai trouver sur le net:

    Here is the code:

    sbit CS5460ADin = P1^5; // CS4560A serial data in
    sbit CS5460ADout = P1^6; // CS4560A serial data out
    sbit CS5460AClk = P1^7; // CS4560A serial clock


    //CS5460A register addresses
    #define CS5460A_REG_CONFIG 0x00
    #define CS5460A_REG_AIN1_OFFSET 0x02
    #define CS5460A_REG_AIN1_GAIN 0x04
    #define CS5460A_REG_AIN2_OFFSET 0x06
    #define CS5460A_REG_AIN2_GAIN 0x08
    #define CS5460A_REG_CYCLE 0x0A
    #define CS5460A_REG_PULSE 0x0C
    #define CS5460A_REG_CURRENT 0x0E
    #define CS5460A_REG_VOLT 0x12
    #define CS5460A_REG_POWER 0x14
    #define CS5460A_REG_ENERGY 0x16
    #define CS5460A_REG_IRMS 0x18
    #define CS5460A_REG_VRMS 0x1A
    #define CS5460A_REG_TBC 0x1C
    #define CS5460A_REG_PWR_OFFSET 0x1E
    #define CS5460A_REG_STATUS 0x20
    #define CS5460A_REG_IACOFFSET 0x22
    #define CS5460A_REG_VACOFFSET 0x24
    #define CS5460A_REG_MASK 0x34
    #define CS5460A_REG_CONTROL 0x38

    //CS5460A commands
    #define CONVERT_CONTINOUS 0xE8
    #define CONVERT_ONCE 0xE0
    #define CS5460A_SYNC0 0xFE
    #define CS5460A_SYNC1 0xFF
    #define POWER_UP_HALT 0xA0
    #define CAL_AIN1_DC_GAIN 0xCA
    #define CAL_AIN1_DC_OFFSET 0xC9
    #define CAL_AIN2_DC_GAIN 0xD2
    #define CAL_AIN2_DC_OFFSET 0xD1
    #define CS5460A_WRITE 0x40
    #define CS5460A_READ 0x3E

    //config data
    #define CLOCK_DIVIDER 0x00000004
    #define AIN1_GAIN_10 0x00000000
    #define AIN1_GAIN_50 0x00010000
    #define SOFT_RESET 0x00000080
    #define MASK_NO_INTERRUPTS 0x00000000
    #define STATUS_CLR_CRDY 0x00100000
    #define STATUS_CLR_DRDY 0x00800000
    #define STATUS_CLR_ALL 0x00FFFFFF
    #define CONTROL_DEFAULT 0x00000000
    #define CURRENT_GAIN_DEFAULT 0x00100000
    #define VOLT_GAIN_DEFAULT 0x00100000
    #define COMPUTATION_CYCLE 0x00000FA0
    #define TIME_BASE 0x00800000


    //============================== ============================== ===============
    bit CS5460AReadDRDYBit(void)
    {
    bit ReadyBit;
    Byte4 xdata StatusRegister;
    StatusRegister=CS5460ARead24Bi ts(CS5460A_REG_STATUS);
    if(StatusRegister & 0x00800000){ReadyBit=1;}else{R eadyBit=0;}//get DRDY bit
    return(ReadyBit);
    }
    //============================== ============================== ===============
    bit CS5460AReadCRDYBit(void)
    {
    bit ReadyBit;
    Byte4 xdata StatusRegister;
    StatusRegister=CS5460ARead24Bi ts(CS5460A_REG_STATUS);
    if(StatusRegister & 0x00100000){ReadyBit=1;}else{R eadyBit=0;}//get CRDY bit
    return(ReadyBit);
    }
    //============================== ============================== ===============
    void CS5460AResetConfigure(void)
    {
    CS5460AReset();
    CS5460AWrite24Bits((CLOCK_DIVI DER |AIN1_GAIN_10),CS5460A_REG_CON FIG);//Ain1
    CS5460AWrite24Bits(CONTROL_DEF AULT,CS5460A_REG_CONTROL);//write default
    CS5460AWrite24Bits(STATUS_CLR_ ALL,CS5460A_REG_STATUS);//clear all status
    CS5460AWrite24Bits(MASK_NO_INT ERRUPTS,CS5460A_REG_MASK);//no interrupts
    //gain is 10, clock divider is 4
    CS5460AWrite24Bits(CURRENT_GAI N_DEFAULT,CS5460A_REG_AIN1_GAI N);//Ain1 gain
    CS5460AWrite24Bits(VOLT_GAIN_D EFAULT,CS5460A_REG_AIN2_GAIN);//Ain2 gain
    CS5460AWrite24Bits(COMPUTATION _CYCLE,CS5460A_REG_CYCLE);//rms cycle
    CS5460AWrite24Bits(TIME_BASE,C S5460A_REG_TBC);//default time base
    CS5460AWriteCommand(CONVERT_CO NTINOUS);//start conversions
    return;
    }
    //============================== ============================== ===============
    void CS5460AReset(void)
    {
    Byte xdata BitCounter;
    //Cirrus Logic data sheet page 43
    for(BitCounter=0;BitCounter<3; BitCounter++)//send 3 SYNC1 bytes
    {
    CS5460AWriteCommand(CS5460A_SY NC1);
    }
    CS5460AWriteCommand(CS5460A_SY NC0);//send 1 SYNC0 byte
    CS5460AWrite24Bits(SOFT_RESET, CS5460A_REG_CONFIG);//issue soft reset
    return;
    }
    //============================== ============================== ===============
    void CS5460AWriteCommand(Byte Command)
    {
    Byte xdata WriteByte;
    Byte xdata BitCounter;
    WriteByte=Command;
    for(BitCounter=0;BitCounter<8; BitCounter++)
    {
    if(WriteByte & 0x80){CS5460ADin=1;}else{CS546 0ADin=0;}
    CS5460APulseClock();WriteByte= WriteByte<<1;
    }
    return;
    }
    //============================== ============================== ===============
    void CS5460AWrite24Bits(Byte4 RegisterData, Byte AdcRegisterAddress)
    {
    Byte xdata BitCounter;
    Byte xdata WriteByte;
    Byte4 xdata WriteLong;
    WriteLong=RegisterData;
    WriteByte=(CS5460A_WRITE | AdcRegisterAddress);//write command with reg address
    for(BitCounter=0;BitCounter<8; BitCounter++)//send command
    {
    if(WriteByte & 0x80){CS5460ADin=1;}else{CS546 0ADin=0;}
    CS5460APulseClock();
    WriteByte=WriteByte<<1;
    }
    for(BitCounter=0;BitCounter<24 ;BitCounter++)//write 24 bits
    {
    if(WriteLong & 0x00800000){CS5460ADin=1;}else {CS5460ADin=0;}
    CS5460APulseClock();
    WriteLong=WriteLong<<1;
    }
    return;
    }
    //============================== ============================== ===============
    Byte4 CS5460ARead24Bits(Byte AdcRegisterAddress)
    {
    Byte xdata BitCounter=0;
    //send read command with register address
    Byte xdata WriteByte=CS5460A_READ & AdcRegisterAddress;
    Byte4 xdata Data24Bits=0;
    Byte4 xdata ThreeSync0=0x00FEFEFE;
    CS5460ADout=1;//pull up port pin for a read
    for(BitCounter=0;BitCounter<8; BitCounter++)
    {
    if(WriteByte & 0x80){CS5460ADin=1;}else{CS546 0ADin=0;}
    CS5460APulseClock();
    WriteByte=WriteByte<<1;
    }
    for(BitCounter=0;BitCounter<24 ;BitCounter++)//read 24 bits
    {
    if(ThreeSync0 & 0x00800000){CS5460ADin=1;}else {CS5460ADin=0;}//SYNC0 command on SDI
    CS5460APulseClock();
    ThreeSync0=ThreeSync0<<1;
    if(CS5460ADout){Data24Bits=((D ata24Bits<<1)| 0x1);}//get msb and other bits
    else{Data24Bits=Data24Bits<<1; }
    }
    return(Data24Bits>>1 & 0x00FFFFFF);
    }
    //============================== ============================== ===============
    void CS5460APulseClock(void){CS5460 AClk=1;CS5460AClk=0;return;}
    //============================== ============================== ===============
    // MAIN Routine
    //============================== ============================== ===============
    void main (void)
    {
    CS5460AClk=0;
    CS5460AResetConfigure();
    Delay10MilliSec(100);
    if(CS5460AReadCRDYBit()){Va=1; }
    Gain=CS5460ARead24Bits(CS5460A _REG_VOLT);//dummy read
    //============================== ============================== ===============
    while(1)
    {
    if(CS5460AReadCRDYBit())
    {
    //CS5460AWrite24Bits(STATUS_CLR_ DRDY,CS5460A_REG_STATUS);//clear DRDY
    //Test=CS5460ARead24Bits(CS5460A _REG_IRMS);
    Test=CS5460ARead24Bits(CS5460A _REG_CURRENT);
    Volt=CS5460ARead24Bits(CS5460A _REG_VOLT);
    CS5460AWrite24Bits(STATUS_CLR_ CRDY,CS5460A_REG_STATUS);//clear CRDY
    }
    }//end of while
    }//end of main
    //============================== ============================== ===============
    //end of main
    //============================== ============================== ===============

    merci

  13. #10
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    salut,
    je sais pas comment exploiter ce composant!! voir le programme précédent.
    merci

  14. #11
    Qristoff

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour,
    c'est pas le CS5460 qu'il faut étalonner mais le systéme complet !
    Il faut déja faire une première acquisition à vide (c'est la tare) puis une seconde acquisition en charge. Déduire la première de la seconde et multiplier par le gain du pont de wheastone (et non pas winston !) suivant la tension utilisée.
    Tout existe, il suffit de le trouver...!

  15. #12
    vede

    Cool Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour,

    tu as une idée de la précision engendrée par les 24bits?
    et le CI paraît utiliser un protocole de communication...
    pour envoyer les 24bits de la conversion...
    je dirais staïle SPI à vue de "gros nez"...

    vede
    ;O]

  16. Publicité
  17. #13
    redtronic

    Smile Re : réaliser une balance electronique avec le 5460a et pic16f877

    salut,

    Qristoff:
    désolé, effectivement c'est wheastone et non pas winston , j'ai pas encore branché mon CS5460a avec le pic, esque je dois activer le pull-up du port_B? et pour l'étalonage du système, quel registre du CS5460a qu'il faut lire afin d'afficher la valeure du courant actuel de notre pont?

    vede:
    oui ce composant est utilisé dans les balances electroniques de précision, il utlise un protocole SPI (Serial Peripheral Interface) pour communiquer avec le monde exterieur, sa précision et de 24bits.

    a+

  18. #14
    Qristoff

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour,
    ce n'est pas un courant que tu va lire mais une tension ! celle entre les deux branches du pont.
    Il faut utiliser d'abord la commande register R/W (page 21) pour accéder au registre I_instantané (#00111) ou I_rms (#01011).
    Tout existe, il suffit de le trouver...!

  19. #15
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour Qristoff,
    page 21 sur la datasheet du CS5460a?
    pourquoi sur la plaque que j'ai récupérer les entrées VIN+ et VIN- sont mis à la masse? et les deux branches du pont sont branchées sur IIN+ et IIN-??

  20. #16
    Qristoff

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Oui page 21 de la DS du CS5460A.

    Parce que ce circuit est initialement prévu pour mesurer une puissance en mesurant simultanément la tension (Vin) et une tension "image" du courant (Iin). Dans ton application, on a juste besoin d'une entrée, ils ont choisi Iin probablement pour son gain plus important.
    Tout existe, il suffit de le trouver...!

  21. #17
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour Qristoff,
    que dois-je faire pour commencer les test? sachant que le pont est alimenter par un HT7550-1http://pdf1.alldatasheet.com/datashe.../HT7550-1.html, et que Vref-in est branchée sur ce HT7550-1 a travers une résistance.
    merci.
    Redtronic

  22. #18
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877


    ...la tension (Vin) et une tension "image" du courant (Iin). ...
    c'est quoi unt tension "image"? c'est une valeure de référence?
    Redtronic

  23. Publicité
  24. #19
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    salut,
    comment je dois configurer les registres du cs5460a dans mon cas?
    merci.
    Redtronic

  25. #20
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    voir ce lien ca peut etre utile!!
    http://www.embeddedrelated.com/group.../show/1601.php
    a+
    Redtronic

  26. #21
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour,
    j'attend toujours de l'aide,
    merci.
    Redtronic

  27. #22
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    bonjour
    Redtronic

  28. #23
    vede

    Cool Re : réaliser une balance electronique avec le 5460a et pic16f877

    bonjour


    rien


    ps : on avait pas parlé de SPI???
    tu en es où niveau codage...
    (autre que le copier/coller présenté précédemment)...

    et t'as commencé à lire la datasheet du cs5460a?
    et les spécs du SPI? sur quoi tu "buttes"?

  29. #24
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour vede,
    pour être clair, j'ai rien fait pour le moment, je veux des conseils avant de commencer mon projet, j'ai vu un peu la datasheet, mais j'ai besoin de quelqu'un pour me montrer le chemin et je suis pret pour commencer.
    merci.
    Redtronic

  30. Publicité
  31. #25
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Rebonjour,
    à l'aide d'un multimètres, j'ai pu lire les valeures des résistances de mon capteur a appui, voir le schéma.
    merci.
    Fichiers attachés Fichiers attachés
    Redtronic

  32. #26
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    j'ai mesurer d'abord entre les deux points (out-) et (out+) et la valeure lue est (350 Ω), resistance //
    => R=(r*r)/r+r
    => (700*700)/(700+700)=350 Ω
    => r=700 Ω.
    dans notre pont:
    r=r1+r2=r3+r4=700 Ω
    => r1=r2=r3=r4=350 Ω.

    aprés, j'ai mesurer entre les deux points (input+) et (input-) et la valeure lue est (400 Ω)
    => R+(2*Rexc)=400 Ω "Rexc = R excitation du pont"
    => 350 + (2*Rexc) = 400 Ω
    =>2*Rexc= 50 Ω
    => Rexc = 25 Ω

    merci.
    Redtronic

  33. #27
    Tropique

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    redtronic,

    j'ai validé ton zip, mais pour de simples images comme celles-là, essaye de les mettre en gif, c'est plus facile et plus agréable pour tout le monde, et ça ne prend pas plus de place.
    Merci
    Pas de complexes: je suis comme toi. Juste mieux.

  34. #28
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    Bonjour Tropique,
    désolé, je suis au boulot et j'ai pas mon pc. Merci d'avoir accepter mon schéma.
    bon courage.
    Redtronic

  35. #29
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877

    voir message #25 merci
    Redtronic

  36. #30
    redtronic

    Re : réaliser une balance electronique avec le 5460a et pic16f877


    merci
    Redtronic

Sur le même thème :

Discussions similaires

  1. comment realiser une carte electronique
    Par ayed dans le forum Électronique
    Réponses: 9
    Dernier message: 10/12/2009, 17h07
  2. comment realiser une carte electronique?
    Par electron9999 dans le forum Électronique
    Réponses: 5
    Dernier message: 17/11/2009, 07h35
  3. Balance éléctronique
    Par chevchenko2005 dans le forum Physique
    Réponses: 2
    Dernier message: 23/10/2008, 23h30
  4. TPE balance électronique
    Par diegode dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 12/01/2008, 14h22
  5. Problème avec une balance
    Par Père Occide dans le forum Dépannage
    Réponses: 1
    Dernier message: 14/02/2005, 22h21