Pcf 8583


Closed Thread
Results 1 to 6 of 6

Thread: Pcf 8583

  1. #1
    Join Date
    Nov 2003
    Location
    Sao Paulo - Brazil
    Posts
    92

    Question Pcf 8583

    Hi Friends,

    I´m trying to use the Phillips PCF 8583 in my project.

    But, after some tests, I discovered a strange problem.

    After 59 minutes and 59 seconds, instead of going to 01:00:00 the RTC goes to 81:00:00

    And, when I decode the data to calculate the elapsed time in seconds, I got a completely wrong result.

    I have never noticed that problem before because I had never used this RTC as a chronometer as I´m doing now.

    I´m sending a small code I wrote to test the RTC.

    The pin A0 of 8583 is grounded.

    Have ever you seen this problem ?

    Thank you


    Sérgio Pinheiro



    ===================== Test Code ================
    Define LCD_DREG PORTA
    Define LCD_DBIT 0
    Define LCD_RSREG PORTB
    Define LCD_RSBIT 4
    Define LCD_EREG PORTB
    Define LCD_EBIT 5


    SDA var PORTB.1 ' I2C data pin
    SCL var PORTB.2 ' I2C clock pin
    H var byte
    M var Byte
    S var Byte

    Pause 500
    I2CWrite SDA,SCL, %10100001,2,[0,0,0]
    pause 100

    LOOP:

    I2CRead SDA, SCL, %10100001,2,[S,M,H]
    pause 100
    lcdout $FE, 2, Hex2(h),":",Hex2(M),":",Hex2(S)

    goto LOOP

    END

  2. #2
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Hi Sérgio,

    Bit 7 of the hour register indicates if the device is in 12 or 24 hour mode. Also Bit 6 is the am/pm indicator, if in 12hour mode. They should be masked out to display a valid hour reading.

    H = H & %00111111 ' Mask out hour mode flags

    Of course, that doesn't explain why it changes all of the sudden. It should power up in the 24 hour mode, bit7=0. Here's a couple things to think about.

    The CONTROL byte of the I2CREAD command should always have a 0 in the lowest bit. Yours is set to 1. So, instead of %10100001, it should be 10100000. PBP automaticaly sets that bit depending on whether it's a read or a write, but in the manual, it states that this bit "should be kept clear"

    The PCF8583 is a 100khz device. If your OSC speed is greater than 8mhz you may need to use DEFINE I2C_SLOW 1

    HTH,
       Darrel

  3. #3
    gzorzi's Avatar
    gzorzi Guest


    Did you find this post helpful? Yes | No

    Default

    I use this routine and work
    S var byte
    M var byte
    H var byte

    symbol SCL = portc.3
    symbol SDA = portd.0

    DecimaleSec var byte
    DecimaleMin var byte
    DecimaleOra var byte
    S1 var byte
    S2 var byte
    M1 var byte
    M2 var byte
    H1 var byte
    H2 var byte

    I2CREAD SDA,SCL,%10100001,2,[S]

    I2CREAD SDA,SCL,%10100001,3,[M]

    I2CREAD SDA,SCL,%10100001,4,[H]

    You must convert BCD format

    DecimaleSec = ((S >> 4) * 10) + (S & $0f)
    S1 = DecimaleSec dig 1
    S2 = DecimaleSec dig 0

    DecimaleMin = ((M >> 4) * 10) + (M & $0f)
    M1 = DecimaleMin dig 1
    M2 = DecimaleMin dig 0

    DecimaleOra = ((H >> 4) * 10) + (H & $0f)
    H1 = DecimaleOra dig 1
    H2 = DecimaleOra dig 0


    LCDOUT dec(H1),dec(H2),":",dec(M1),dec(M2),":",Dec(S1),de c(S2)

  4. #4
    Join Date
    Nov 2003
    Location
    Sao Paulo - Brazil
    Posts
    92


    Did you find this post helpful? Yes | No

    Smile

    Hi friends,

    After the changes suggested by Darrel, the RTC is working fine.
    It´s strange the fact of the RTC start working in 12 hour mode.

    I have already used this RTC before and I had never had problem before.
    But now it´s fixed !

    Thanks Darrel e Gzorzi for your answers !

    regards

    Sérgio Pinheiro

  5. #5
    lupuccio's Avatar
    lupuccio Guest


    Did you find this post helpful? Yes | No

    Unhappy pcf8583

    Please.... i'm new and i'd like to know how to set time in pcf8583 which command i need to use ?

    busin %10100001,0,2,[hour,min,sec] 'for read ecc
    but for change time and rewrite in 8583 ?

  6. #6
    Join Date
    Feb 2006
    Posts
    4


    Did you find this post helpful? Yes | No

    Wink Help from Brazil

    Hi, my name's Francisco Fambrini, and my code to adjust PCF8583 writed at Melabs PicBasicPRO Compiler (target:PIC 16F877) is above.

    Please, visit my website: www.fdai.net
    '************************************************* ***************
    ' PCF 8583 APREDENDO_1.0
    ' programa para testar o chip PCF8583
    ' na placa do Distribuidor de Energia
    ' 26/Fev/2006
    '************************************************* ***************
    define OSC 20
    DEFINE ADC_BITS 10
    define ADC_CLOCK 1
    DEFINE LCD_DREG PORTD
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTD
    DEFINE LCD_RSBIT 2
    DEFINE LCD_EREG PORTD
    DEFINE LCD_EBIT 3
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 2
    symbol SCL = PORTC.3 ' I2C clock
    symbol SDA = PORTC.5 ' I2C data
    symbol UP = PORTA.4
    SYMBOL DOWN = PORTA.3
    SYMBOL ENTER = PORTA.2
    SYMBOL SEL = PORTA.1
    ;*******************************************
    ; Configuração do PIC
    ;*******************************************
    TRISA=%00111111
    TRISB=%00000000
    TRISC=%00100000
    TRISD=%00000000
    ADCON1 = $0E 'Configura somente RA0 como entrada de AD
    '******************************************
    PORTB=%00000000
    PORTC=%00000000
    PORTD=%00000000
    '*****************************************
    '------------------------
    ' VARIAVEIS DO PROGRAMA
    HOUR VAR BYTE
    MINUTE VAR BYTE
    DAY VAR BYTE
    MONTHY VAR BYTE
    YEAR VAR BYTE
    S VAR BYTE
    M VAR BYTE
    H VAR BYTE
    D var byte
    Mn var byte
    Y var byte
    TEMPO VAR WORD
    '-----------------------
    lcdout $fe,1 'limpa o display
    Pause 500
    lcdout "PCF8583 Aprender"
    Lcdout $fe,$c0
    LCDOUT "FDAI Eletronica"
    Pause 1500
    lcdout $fe,1 'limpa o display
    Pause 100

    Main:
    I2CREAD SDA,SCL,%10100001,2,[S]
    I2CREAD SDA,SCL,%10100001,3,[M]
    I2CREAD SDA,SCL,%10100001,4,[H]
    I2CREAD SDA,SCL,%10100001,5,[D]
    I2CREAD SDA,SCL,%10100001,6,[Mn]
    I2CREAD SDA,SCL,%10100001,7,[Y]

    IF PORTA.1=0 THEN GOSUB ACERTAR

    lcdout $fe,1 'Limpa o LCD
    lcdout $fe,2 'cursor n primeira posição
    lcdout "Hora: ", hex(H),":", hex2(M),":", hex2(S)
    lcdout $fe,$c0 'segunda linha do display
    lcdout "Data: ", hex2(D),".", hex2(Mn),".20",hex2(Y)

    IF PORTA.1=0 THEN GOSUB ACERTAR

    Pause 500
    goto Main 'VOLTA PARA O LOOP PRINCIPAL

    '************************************************* *****************
    ' Rotina de ajuste do relogio RTC
    ACERTAR:
    lcdout $fe,1
    Lcdout "Acertar hora"
    Pause 1000
    TEMPO = 1000
    'Verifica se algum botao de ajuste foi pressionado:
    '------------------------
    VER_BOTOES:

    IF TEMPO =0 THEN
    GOSUB GRAVAR_HORARIO
    RETURN
    ENDIF


    tempo = tempo -1
    ' Checa se algum botao de ajuste de h/min foi pressionado
    If PORTA.3 = 0 Then decmin
    If PORTA.4 = 0 Then incmin ' Last 2 buttons set minute
    If PORTA.1 = 0 Then dechr
    If PORTA.2 = 0 Then inchr ' First 2 buttons set hour
    pause 50
    Goto VER_BOTOES

    '*************************************************
    ' Increment minutes
    incmin: minute = minute + 1
    If minute >= 60 Then
    minute = 0
    Endif
    Goto debounce

    ' Increment hours
    inchr: hour = hour + 1
    If hour >= 24 Then
    hour = 0
    Endif
    Goto debounce

    ' Decrement minutes
    decmin: minute = minute - 1
    If minute >= 60 Then
    minute = 59
    Endif
    Goto debounce

    ' Decrement hours
    dechr: hour = hour - 1
    If hour >= 24 Then
    hour = 23
    Endif
    goto debounce
    '************************************
    'essa é uma parte da rotina de acerto do relogio
    debounce: 'atualiza o relogio na tela na hora do acerto do relogio
    pause 200
    tempo= 90
    lcdout $fe,1
    Lcdout $fe,2
    Lcdout "Acerte Horario:"
    lcdout $fe,$c0
    Lcdout dec2 hour, ":", dec2 minute, ":00"
    goto VER_BOTOES
    '************************************

    '*************************************
    GRAVAR_HORARIO:
    'Converte para Hexadecimal
    DAY = 26
    MONTHY = 4
    YEAR=06

    M = MINUTE/10*16 + MINUTE//10
    H= hour/10*16 + hour//10
    D= DAY/10*16 + DAY//10

    Mn= MONTHY/10*16 + MONTHY//10
    Y = YEAR/10*16 + YEAR//10

    I2cwrite SDA,SCL,%10100001,2,[0]
    I2Cwrite SDA,SCL,%10100001,3,[M]
    I2Cwrite SDA,SCL,%10100001,4,[H]
    I2CWRITE SDA,SCL,%10100001,5,[D]
    I2CWRITE SDA,SCL,%10100001,6,[Mn]
    I2CWRITE SDA,SCL,%10100001,7,[Y]
    RETURN
    '************************************
    End

Similar Threads

  1. Philips PCF 8591
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 9th August 2016, 02:24
  2. real time clock - PCF8583
    By maria in forum mel PIC BASIC Pro
    Replies: 14
    Last Post: - 15th April 2010, 15:41
  3. Problem to read a PCF 8574
    By Darklakebridge7 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th February 2007, 21:56
  4. 8583 rtc date problem
    By crazyhellos in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 19th February 2007, 15:28

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts