Pcf 8583
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Pcf 8583



  1. #1
    jherve

    Pcf 8583


    ------

    Bonjour à tous
    je voudrais pour une application un peu speciale utiliser un Pcf 8583 avec un pic 16f 876
    Le pcf 8583 est une horloge I2c , avec gestion de l'alarme.
    Pour ma part je n'ai pas besoin de l'alarme , mais j'ai des problemes quand à la mise au point du programme. 3boutons me sont necessaires quand a la mise a l'heure de l'horloge
    voici ci dessous mon prog
    device = 16f876
    xtal = 4
    bootloader=on
    LCD_DTPIN =portb.4
    LCD_RSPIN =portb.3
    LCD_ENPIN= portb.2
    LCD_INTERFACE= 4
    LCD_LINE =2
    Lcd _Type=0
    DECLARE SDA_PIN PORTC.0
    DECLARE SCL_PIN PORTC.1
    '***variables***************** ****************************** *** ***************
    delayms 200 'stabilisation LCD
    cls
    dim bcd_to_bin 'variable utilisées
    dim low_bits
    dim high_bits
    dim pcf 'adresse du 8583
    Dim second as byte
    Dim minute as byte
    Dim hour as byte
    dim setup as byte
    symbol clkout=%10100000 'reception données
    symbol clkin=%10100001 'emission données
    Symbol button1 = portb.1
    Symbol button2 = portb.0
    Symbol button3 = portc.2
    pcf = 0
    setup = 0
    second = 0
    minute = 0
    hour = 0
    cls
    delayms 200

    C_upd:
    '***affichage***************** ***************
    busin %10100001,2,[second,minute,heure]
    pcf= 2:gosub read_time 'lecture secondes
    second=bcd_to_bin 'convertion binaire
    pcf= 3:gosub read_time 'lecture minute
    minute=bcd_to_bin 'convertion binaire
    pcf = 4:gosub read_time 'lecture heure
    hour=bcd_to_bin 'convertion binaire
    print at 1,5, dec2 hour,":",dec2 minute,":",dec2 second
    '*** depart
    if button1 = 0 then inc setup
    if setup = 1 then goto set_min
    if setup = 2 then goto set_hour
    if setup > 2 then
    print at 2,1," "
    setup = 0
    endif
    goto C_upd

    '***************************** ******************** ******************************
    set_min:
    print at 2,5,"Set Min "
    if button2 =0 then
    busin clkin,3,[bcd_to_bin]
    gosub conv_to_bin '
    inc bcd_to_bin
    if bcd_to_bin > 59 then bcd_to_bin = 0
    delayms 100
    gosub convert_to_bcd
    busout clkout,3,[bcd_to_bin]
    delayms 10
    endif
    goto c_upd
    '***************************** ******************** ******************************
    set_hour:
    print at 2,5,"Set Hour"
    if button2 =0 then
    busin clkin,4,[bcd_to_bin]
    gosub conv_to_bin
    inc bcd_to_bin
    if bcd_to_bin > 23 then bcd_to_bin = 0
    delayms 100
    gosub convert_to_bcd
    busout clkout,4,[bcd_to_bin]
    delayms 10
    endif
    goto c_upd
    '*** '***************************** ******************** ******************************

    read_time:
    busin clkin,pcf,[bcd_to_bin]
    gosub conv_to_bin
    return
    '***************************** ******************** ******************************

    conv_to_bin:
    select bcd_to_bin
    case 16 to 25
    bcd_to_bin=bcd_to_bin-6
    case 32 to 41
    bcd_to_bin=bcd_to_bin-12
    case 48 to 57
    bcd_to_bin=bcd_to_bin-18
    case 64 to 73
    bcd_to_bin=bcd_to_bin-24
    case 80 to 89
    bcd_to_bin=bcd_to_bin-30
    case 96 to 105
    bcd_to_bin=bcd_to_bin-36
    case 112 to 121
    bcd_to_bin=bcd_to_bin-42
    case 128 to 137
    bcd_to_bin=bcd_to_bin-48
    case 144 to 153
    bcd_to_bin=bcd_to_bin-54
    endselect
    return
    '***************************** ******************** ******************************
    low_bits=bcd_to_bin//10
    high_bits=bcd_to_bin/10
    bcd_to_bin=high_bits*16 'convertion msb ten BCD
    bcd_to_bin=bcd_to_bin+low_bits 'add BCD msb et lsb
    return

    Lors de la mise sous tension, l'afficheur m'indique
    08:08:08
    si j'appui sur le bouton 1 l'affichage s'efface et j'ai "set hou" mais peu visible (comme s'il etait effcé et affiché en permanence.
    l'action sur les autres bp n'ont pas d'effet
    l'horloge ne s'incremente pas alors que le Pcf à l'air de bien marcher, car j'ai le quartz qui oscille bien et des oscillations sur les broches Sda et clock
    Cela fait quelques jours que j'y suis dessus et je demande votre aide.
    Ce programme n'est pas entierement de mon cru, j'en ai pompé une partie dans un bouquin.
    merci à tous pour votre aide et a+

    -----

  2. #2
    invite03481543

    Re : Pcf 8583

    Salut,

    il me semble que les ports I2C sur le PIC16F876 sont sur les pattes C3 et C4 du port C, alors que dans ton prog l'I2C est affecté sur les pattes C0 et C1 du port C.

  3. #3
    jherve

    Re : Pcf 8583

    re
    Oui Hulk 26 tu as entierement raison, et c'est bien connecté sur C3 et C4
    c'est en recopiant le prog que j'ai commit cette double erreur ( je travaille sur un vieux Pc )de frappe
    Donc mon prob ne vient pas de là
    merci en tous les cas d'avoir vu cette erreur et de t'etre penché sur mon prob
    J'oubliai, je travaille sous Proton, et si j'ai bien des impulsions sur la ligne clock je ne suis pas certain de les avoir sur l'autre ligne, question de rapiditée?

  4. #4
    invite03481543

    Re : Pcf 8583

    Je vois pas dans ton programme les conditions de gestions du bus I2C, qui devraient en basic ressembler à ça:

    Send START condition
    Send SLAVE ADDRESS (Control Byte)
    Send high byte of Address
    Send low byte of Address
    Send value contained in X
    Send STOP condition

    Je ne suis pas familier du basic mais dans tout les langages on procède de la même manière.
    Si tu pouvais mettre le schéma que tu as utilisé ça pourrait aussi aider.
    @+

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

    Re : Pcf 8583

    re
    je ne peux t'envoyer le plan,mais il est fort simple
    un afficheur branché sur le port b, avec b4,5,6 7 pour les données, cette partie fonctionne sans probléme.
    3 boutons poussoirs reliés au +5volts avec resistance de rappel à la masse(B1, B2,C2)
    un pcf 8583 avec un quartz entre les pattes 1 et 2 condensateur de reglage entre 2 et 5v, alimentation en 3 et 8 , masse en 4
    sorties scl en 6 et sda en 5 et avec R de rappel =4.7K au 5v. C'est tout
    merci et a+

  7. #6
    Gérard

    Re : Pcf 8583

    Bonjour,
    Pour faire autrement, j'ai une routine d'IRQ Timer1 pour PIC (en asm) qui compte l'heure, le jour, le mois, tient compte des années bissextiles... mais sans PCF.
    Si tu es preneur, sonne 3x.
    Le reste du prog écrit pour Proton+.
    Gérard.

  8. #7
    jherve

    Re : Pcf 8583

    bonjour
    oui, Gerard je suis preneur,donne moi la procedure pour me le faire passer
    merci et a plus

  9. #8
    invite6ceed97c

    Re : Pcf 8583


  10. #9
    Gérard

    Re : Pcf 8583

    ;***************************** ****************************** **
    ; ROUTINE D'INTERRUPTION DU TIMER1
    ;***************************** ****************************** **

    IRQ_TMR1:
    asm
    bcf PIR1,TMR1IF ;flag irq TMR1 = 0
    movlf 10000000b,TMR1H ;rechargement TMR1 080h

    incf ram_inter,f
    cljne 25,ram_inter,RESTORER_CONTEXTE
    clrf ram_inter

    incf sec,f ;seconde + 1
    cljne 60,sec,RESTORER_CONTEXTE
    clrf sec

    incf mn,f
    cljne 60,mn,RESTORER_CONTEXTE
    clrf mn

    incf hr,f
    cljne 24,hr,RESTORER_CONTEXTE
    clrf hr
    incf J_Sem
    cljne 8,J_Sem,suite_irq
    movlf 1,J_Sem
    suite_irq:
    incf jour,f
    movf jour,w
    sublw 29 ;k - w --> w
    btfsc STATUS,Z ;saut si Z = 0 --> pas 29
    goto TEST_FEV ;test_fev --> w = 29
    btfsc STATUS,C ;saut si jour > 29
    goto RESTORER_CONTEXTE ;non --> jour < 29

    cljne 30,jour,TEST_31 ;saut si jour pas = 30
    cljne 2,mois,RESTORER_CONTEXTE ;test fev an biss
    goto INC_J_M ;fev an biss --> mois = 3
    TEST_FEV:
    clje 2,mois,BISSEXT
    goto RESTORER_CONTEXTE
    BISSEXT:
    btfss an,0 ;test des bit 0 et 1
    btfsc an,1 ;pour savoir si annee bissextile
    goto INC_J_M ;non
    goto RESTORER_CONTEXTE
    TEST_31:
    cljne 31,jour,TEST_MOIS_12
    clje 4,mois,INC_J_M
    clje 6,mois,INC_J_M
    clje 9,mois,INC_J_M
    clje 11,mois,INC_J_M
    goto RESTORER_CONTEXTE
    TEST_MOIS_12:
    clje 12,mois,AN_PLUS_1
    goto INC_J_M
    AN_PLUS_1:
    incf an,f
    movlf 1,mois
    movlf 1,jour
    goto RESTORER_CONTEXTE
    INC_J_M:
    movlf 1,jour
    incf mois,f

    endasm

    RESTORER_CONTEXTE:

    context restore

    Certaines macros (clje, cljne, movlf ...) n'existent pas chez Microchip, si tu veux le détail, pas de pb.
    Le Qz est un 3,2768MHz.
    Gérard.

  11. #10
    jherve

    Re : Pcf 8583

    bonjour
    oui gerard, svp, envoie moi les macros
    merci d'avance
    a+

  12. #11
    Gérard

    Re : Pcf 8583

    NOLIST

    ;bank0 pointe sur bank0 RAM
    ;bank1 pointe sur bank1 RAM
    ;bank2 pointe sur bank2 RAM
    ;bank3 pointe sur bank3 RAM

    ;movlf2 literal,reg0 ecrit "literal" dans "reg0" sur 2 octets
    ;movlf literal,reg0 ecrit "literal" dans "reg0"
    ;movff reg0,reg1 ecrit "reg0" dans "reg1"

    ;jb reg,bit,addr teste bit de reg et saut si = 1
    ;jnb reg,bit,addr

    ;jz addr teste Z de STATUS
    ;jnz addr

    ;jc addr teste C de STATUS
    ;jnc addr

    ;jfz reg,addr teste si f = 0 et saut si oui
    ;jfnz reg,addr teste si f = 0 et saut si non

    ;jfz2 reg,addr teste si f (sur 2 octets) = 0 et saut si oui
    ;jfnz2 reg,addr teste si f (sur 2 octets) = 0 et saut si non

    ;djnz reg,addr decremente reg et saut a addr si reg pas 0
    ;djnz2 reg,addr decremente reg (sur 2 octets) et saut si pas = 0

    ;cjne reg1,reg2,addr compare reg1 et reg2 et saut si pas egaux
    ;cje reg1,reg2,addr compare reg1 et eg2 et saut si egaux

    ;cjne2 reg1,reg2,addr compare reg1 et reg2 et saut si pas egaux (sur 2 octets)

    ;cljne literal,reg,addr compare literal et reg et saut si pas egaux
    ;clje literal,reg,addr compare literal et reg et saut si egaux

    asm

    ;***************************** ****************************** *************
    ; MACRO DE CHANGEMENT DE BANK
    ;***************************** ****************************** *************

    bank0 macro ; passer en banque0
    bcf STATUS,RP0
    bcf STATUS,RP1
    endm

    ;***************************** ****************************** *************

    bank1 macro ; passer en banque1
    bsf STATUS,RP0
    bcf STATUS,RP1
    endm

    ;***************************** ****************************** *************

    bank2 macro ; passer en banque2
    bcf STATUS,RP0
    bsf STATUS,RP1
    endm

    ;***************************** ****************************** *************

    bank3 macro ; passer en banque3
    bsf STATUS,RP0
    bsf STATUS,RP1
    endm

    ;***************************** ****************************** *************

    movlf2 macro literal,reg0
    movlw literal/256
    movwf reg0 + 1
    movlw literal % 256
    movwf reg0
    endm

    ;***************************** ****************************** *************

    movlf macro literal,reg0
    movlw literal
    movwf reg0
    endm

    ;***************************** ****************************** *************

    movff macro reg0,reg1
    movf reg0,w
    movwf reg1
    endm

    ;***************************** ****************************** *************

    movff2 macro reg0,reg1,reg2,reg3
    movff reg0,reg2
    movff reg1,reg3
    endm

    ;***************************** ****************************** *************

    jb macro reg0,bit,addr
    btfsc reg0,bit
    goto addr
    endm

    ;***************************** ****************************** *************

    jnb macro reg0,bit,addr
    btfss reg0,bit
    goto addr
    endm

    ;***************************** ****************************** *************

    jz macro addr
    btfsc 3,2
    goto addr
    endm

    ;***************************** ****************************** *************

    jnz macro addr
    btfss 3,2
    goto addr
    endm

    ;***************************** ****************************** *************

    jc macro addr
    btfsc 3,0
    goto addr
    endm

    ;***************************** ****************************** *************

    jnc macro addr
    btfss 3,0
    goto addr
    endm

    ;***************************** ****************************** *************

    jfz macro reg0,addr
    movf reg0,w
    btfsc 3,2
    goto addr
    endm

    ;***************************** ****************************** *************

    jfnz macro reg0,addr
    movf reg0,w
    btfss 3,2
    goto addr
    endm

    ;***************************** ****************************** *************

    jfz2 macro reg0,addr
    local fin
    movf reg0,w
    addwf reg0+1,w
    btfsc 3,2 ;status,z
    btfsc 3,0 ;status,c
    goto fin
    goto addr
    fin
    endm

    ;***************************** ****************************** *************

    jfnz2 macro reg0,addr
    movf reg0,w
    addwf reg0+1,w
    btfsc 3,2
    btfsc 3,0
    goto addr
    endm

    ;***************************** ****************************** *************

    djnz macro reg0,addr
    decfsz reg0,f
    goto addr

    endm

    ;***************************** ****************************** *************

    djnz2 macro reg0,addr
    movf reg0,w
    btfsc 3,2
    decf reg0+1,f
    decf reg0,f
    movf reg0,w
    addwf reg0+1,w
    btfsc 3,2
    btfsc 3,0
    goto addr
    endm

    ;***************************** ****************************** *************

    cjne macro reg1,reg2,addr
    movf reg1,w
    subwf reg2,w
    btfss 3,2
    goto addr
    endm

    ;***************************** ****************************** *************

    cje macro reg1,reg2,addr
    movf reg1,w
    subwf reg2,w
    btfsc 3,2
    goto addr
    endm

    ;***************************** ****************************** *************

    cjne2 macro reg1,reg2,addr
    local fin
    movf reg1,w
    subwf reg2,w
    btfss 3,2 ;z = 1 ? --> reg1 = reg2
    goto fin
    movf reg1+1,w
    subwf reg2+1,w
    btfsc 3,2
    goto addr
    fin
    endm

    ;***************************** ****************************** *************

    cljne macro literal,reg0,addr
    movlw literal
    subwf reg0,w
    btfss 3,2 ;status,Z
    goto addr
    endm

    ;***************************** ****************************** *************

    clje macro literal,reg0,addr
    movlw literal
    subwf reg0,w
    btfsc 3,2
    goto addr
    endm

    endasm

    ;***************************** ****************************** *************

    LIST

    Bonne lecture,
    Gérard.

Discussions similaires

  1. pcf 8583 utilisation
    Par jherve dans le forum Électronique
    Réponses: 1
    Dernier message: 25/10/2006, 22h30
  2. pCF 8583 ET PIC 16f 876
    Par jherve dans le forum Électronique
    Réponses: 5
    Dernier message: 15/09/2006, 08h50
  3. Whirlpool 8583
    Par invite2ce979e1 dans le forum Dépannage
    Réponses: 0
    Dernier message: 28/08/2006, 16h02
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...