#$%@^ ds 1307


Closed Thread
Results 1 to 5 of 5

Thread: #$%@^ ds 1307

  1. #1

    Default #$%@^ ds 1307

    Hi all

    I am working with a DS1307, everything is great except for the AM/PM bit (bit 5 of the Hours Register). It seems to me that the bit should alternate from 1 to 0 (or vice-versa) when the time changes from 12:59:59 to 1:00:00.

    I need to monitor the bit in case power is lost before midnite or noon, and restored later, when the AM-PM would change. Everything else works, I'm running in 12 hr mode, and when time goes from 12:59:59 to 1:00:00 as it should, the AM/PM bit does not change.

    If I set AM initially, it stays that way. If I set PM initially, it stays that way. Never changes

    What's up?

    Ken

  2. #2
    Join Date
    Mar 2008
    Location
    Gerogetown, Texas
    Posts
    94


    Did you find this post helpful? Yes | No

    Default Re: #$%@^ ds 1307

    Not sure how you are monitoring the AM/PM bit but, here is how I detect am and pm
    Code:
    if   rtchour.5 = 1 then
    @ printstr2 37,1, "PM"   
    else
    @ printstr2 37,1, "AM" 
    endif
    rtchour is the byte from the rtc clock. the fifth bit is AM/PM, ignore the print stuff


    Dave

  3. #3


    Did you find this post helpful? Yes | No

    Default Re: #$%@^ ds 1307

    Thanks Dave:

    That's basically what I am doing. I have attached the stripped out part of the program to show exactly what I am doing. It is fairly well commented, and works fine except that the am / pm bit does not change


    [code]
    '************************************************* ****************
    ' PIC IS AN 18F2520 RUNNING AT 32 MHZ ON IT'S INTERNAL OSCILLATOR
    '************************************************* *****************
    ' THE INTERRUPT WILL BE USED AS PART OF THE FINAL PROGRAM SO IS INCLUDED
    '************************************************* **********************
    INCLUDE "alldigital.pbp"
    INCLUDE "DT_INTS-18.bas" ; Base Interrupt System
    INCLUDE "ReEnterPBP-18.bas" ; Include if using PBP interrupts
    INCLUDE "modedefs.bas"
    OSCCON = $70
    OSCTUNE.6 = 1
    DEFINE OSC 32
    TRISA = %00001000
    TRISB = %00000001
    TRISC = %00000000

    PB1 VAR PORTA.3
    LED1 VAR PORTB.3 'ONLY USED TO VERIFY INTERRUPT IS WORKING

    LED2 VAR PORTB.2 ' USED TO TEST THE AM PM BIT FOR 1 OR 0


    ICSPDAT VAR PORTB.7
    ICSPCLK VAR PORTB.6
    Tx var PORTC.6 ' FOR SERIAL LCD
    SCLpin var PORTA.7 ' 1302 CLOCK PIN
    SDApin var PORTA.6 ' 1302 DATA PIN
    SQWpin var PORTB.0
    SS VAR BYTE
    HH VAR Byte ' Hours 1-12
    MM VAR ByTE ' Minutes 0-59

    AM_PM VAR BYTE 'AM OR PM BIT SET
    '*************************************
    '**********************************
    CounterA var byte
    CounterB var byte


    D0 VAR BYTE
    D1 VAR BYTE
    D2 VAR BYTE
    D3 VAR BYTE
    D4 VAR BYTE

    D4=$90

    PAUSE 1000 ' LET THE LCD STABALIZE



    ASM
    INT_LIST macro ; IntSource, Label, Type, ResetFlag?
    INT_Handler INT_INT, _CLKINT, PBP, yes
    endm
    INT_CREATE ; Creates the interrupt processor
    ENDASM
    '***************'********************************* ************************
    @ INT_ENABLE INT_INT


    if pb1=0 then goto SETUP 'BUTTON HELD DOWN AT POWER-UP TO GO TO SETUP

    ' LOOP HERE AFTER INITIAL SETUP, READ AND DISPLAY TIMER VALES
    HERE:
    I2CREAD SDAPin,SCLPin,$D0,$00,[SS,MM,HH,D0,D1,D2,D3,D4]

    ' THIS DOES NOT WORK - - BIT 5 DOES NOT CHANGE
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    IF HH.5=1 THEN LED2=1
    IF HH.5=0 THEN LED2=0
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    '************************************************* ****************
    ' THIS IS TO MONITOR THE RTC BITS 0 TO 7 VIA A SERIAL LCD BACKPACH

    SEROUT2 Tx,84,[254,192,BIN8 HH]

    ' BIT 5 DOES NOT CHANGE ON THE TRANSITION FROM 12:59:50 TO 1:00:00

    '************************************************* ******************

    ' CONVERT THE BCD VALUE BACK TO DECIMAL

    cOUNTERb = SS
    GOSUB bcd2DEC
    ss = CounterB

    cOUNTERb = MM
    GOSUB bcd2DEC
    MM = CounterB

    cOUNTERb = hh
    GOSUB bcd2DEC
    hh = CounterB

    SEROUT2 Tx,84,[254,128,#HH,58,#MM,58,#SS," "]

    goto here

    SETUP:
    ' START TIMES ARE ARBITRARY - - WILL BE SET VIA PUSHBUTTON LATER
    ' THE TIMES WERE CHOSEN TO ALLOW A QUICK TRANSITION FROM 12 TO 1 ON THE LOCK

    CounterA = 12 'STARTING HOURS
    Gosub ConvertBCD
    hh=CounterB ' Save the Hours Value
    '************************************************* *******************
    '************************************************* ******************
    ' THIS IS USED TO SET THE CLOCK FOR 12 HR, START AT AM
    HH = HH|%01000000 'NEED TO SET 12 HR AND AM
    ' DOES NOT MATTER IF AM OR PM IS PRESET HERE
    '************************************************* ****************
    '************************************************* *****************

    CounterA = 59 'STARTING MINUTES
    Gosub ConvertBCD
    MM=CounterB ' Save the Minutes Value

    CounterA=50 'STARTING SECONDS
    gosub ConvertBCD
    ss = CounterB

    'WRITE TO THE 1307
    I2CWRITE SDApin,SCLpin,$D0,$00,[ss,mm,hh,00,D1,D2,00,D4]

    ' WAIT TILL PUSHBUTTON RELEASE
    while pb1=0
    wend
    goto here

    '----------------------------------------
    ' INTERRUPT HANDLER 1 SEC INTERRUPT ON PORT B.0
    '---------------------------------------
    CLKINT:
    TOGGLE LED1 ' FOR TEST OF INTERRUPT ONLY - REMOVE LATER

    @ INT_RETURN

    ' CONVERT THE DECIMAL VALUE TO BCD
    ConvertBCD:
    CounterB=CounterA DIG 1
    CounterB=CounterB<<4
    CounterB=CounterB+CounterA DIG 0
    Return
    ' CONVERT THE BCD VALUE TO DECIMAL
    BCD2dec:
    CounterB = ((CounterB >> 4)*10) + (CounterB & %1111)
    return

    END

    [code]

  4. #4


    Did you find this post helpful? Yes | No

    Default Works now

    PROBLEM SOLVED ? MAYBE

    After trying everything in the book, I decided to set the starting time to 11:59:50.

    When the time clicked over to 12:00:00, the bit changed ! !

    It consistently changes on the transition from 11:59:59 to 12

    That does not seem normal - but at least it works -
    Did I miss something thinking that Am (or PM) changed from 11 to 12 vs 12 to 1 ?
    Probably just my ignorance of the universal timekeeping protocol

    Has anyone else tested this?

    Ken

  5. #5
    Join Date
    Mar 2008
    Location
    Gerogetown, Texas
    Posts
    94


    Did you find this post helpful? Yes | No

    Default Re: #$%@^ ds 1307

    It is working correctly, AM/PM changes at 12:00

    Dave

Members who have read this thread : 2

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