RTC - code not working - Mel's example


Closed Thread
Results 1 to 19 of 19

Hybrid View

  1. #1
    Join Date
    Jul 2003
    Posts
    2,358


    Did you find this post helpful? Yes | No

    Default

    If I have time in the next day or two I'll revisit this... but I'd have thought if there was a problem someone would have mentioned it in the eight years it's been around.

    Despite the fact it's incorrect - is the Time incrementing?

    Looks to me like the Data to/from the RTC is corrupt.

    You got correct pull-up's on the CLK and Data lines to the RTC?

    Download a fresh source copy and recompile... you may have changed something accidentally without noticing.

  2. #2
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    Mel, thank for replying.

    Yes the clock runs fine. The module has the pull ups fitted


    I'll try your suggestion when I get home from work in a couple of hours. Maybe I did edit something I shouldn't have, but AFAIK the only changes were to portB for the LCD and port A for the switches

  3. #3
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Melanie View Post

    Download a fresh source copy and recompile... you may have changed something accidentally without noticing.
    Mel,

    I've downloaded a fresh copy of the code from http://www.melabs.com/resources/samp...ted/MN1307.txt

    The only things I've changed are making PORTA all input, PORTB output, the LCD to work on PORTB and the config setting s so it compiles on an 16F877A. - all the code that handles the setup of the clock is unchanged. I have all LEDS turned off so there is nothing else connected to either the RTC lines or switch inputs. RA4,5 and 6 are tied high via pull-up resistors, with switch's to gnd when pressed.

    Code compiles and loads into PIC. time is shown on line 1 Hrs:min:sec, a date is shown on line two (which was the date set using a very basic example found on the web that simply writes values in a "string" to the device eg I2CWRITE SDA,SCL,$D0,$00,[$00,$00,$19,$7,$14,$2,$10,$90] )

    All seems as it should, however pressing RA5 the display changes to "SET MODE :" with the 12 / 24 HR constantly over-writing itself. Pressing RA4, 5 or 6 has no effect, and if left doesn't auto switch back to display the clock.

    Code attached

    Any ideas ?
    Attached Files Attached Files

  4. #4
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    Well I compiled and loaded this example

    Code:
    @   __config _HS_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
    
    DEFINE  OSC 20
    CLEAR
    
    ;----[LCD definitions]------------------------------------------------------
    DEFINE LCD_DREG  PORTB          ' LCD Data port
    DEFINE LCD_DBIT  0              ' starting Data bit (0 or 4)
    DEFINE LCD_EREG  PORTB          ' LCD Enable port
    DEFINE LCD_EBIT  5              '     Enable bit  (on EasyPIC 5 LCD)
    DEFINE LCD_RSREG PORTB          ' LCD Register Select port
    DEFINE LCD_RSBIT 4              '     Register Select bit   (on EasyPIC 5 LCD)
    DEFINE LCD_BITS  4              ' LCD bus size (4 or 8 bits)
    DEFINE LCD_LINES 4              ' number of lines on LCD
    DEFINE LCD_COMMANDUS 2000       ' Command delay time in us 
    DEFINE LCD_DATAUS 50            ' Data delay time in us 
    
    'RTC pins on 877a
    SDA	Var	PORTC.4
    SCL	Var	PORTC.3
    
    ' Allocate variables
    RTCYear	Var	Byte
    RTCMonth Var Byte
    RTCDate	Var	Byte
    RTCDay	Var	Byte
    RTCHour	Var	Byte
    RTCMin	Var	Byte
    RTCSec	Var	Byte
    RTCCtrl Var	Byte
    
    TRISC= %11111111
    ;DB0 var byte[8]
    CMCON = %00000111                   ' Comparators = off
    
    ' Initialize LCD
    LCDOUT $FE,1:FLAGS=0:PAUSE 250:LCDOUT $FE,1:PAUSE 250 
    
    ' Set initial time 
    	RTCYear = $10
    	RTCMonth = $03
    	RTCDate = $23
    	RTCDay = $02
    	RTCHour = $19
    	RTCMin = $35
    	RTCSec = 0
    	RTCCtrl = 0
    	
    Gosub set		' Set the time
    
    Goto mainloop		' Skip over subroutines
    
    
    ' Subroutine to write time to RTC
    set:
    	I2CWrite SDA,SCL,$D0,$00,[RTCSec,RTCMin,RTCHour,RTCDay,RTCDate,RTCMonth,RTCYear,RTCCtrl]
    	Return
    
    ' Subroutine to read time from RTC
    gettime:
    	I2CRead SDA,SCL,$D0,$00,[RTCSec,RTCMin,RTCHour,RTCDay,RTCDate,RTCMonth,RTCYear,RTCCtrl]
    	Return
    
    mainloop:
    	Gosub gettime		' Read the time from the RTC
    
            ' Display time on LCD
    	Lcdout $fe, 1,hex2 RTCDate, "/",hex2 RTCMonth, "/" , hex2 RTCYear,_
    		"  ", hex2 RTCHour, ":", hex2 RTCMin, ":", hex2 RTCSec
    
    	Pause 500		
    
    	Goto mainloop
    The correct date and time as per code was shown on the LCD. I then recompiled the melrtc.pbp code and this time I was able to run through the set up menu, and kept the date (today's date) and after the "memorise" was displayed the following was displayed:

    2:59:01 AM
    Wed 25 sep 2013

    I have no idea what's screwing the code up, and as you said, given the age of the file, would of though that this would of been discussed years ago !

  5. #5
    Join Date
    Nov 2005
    Posts
    51


    Did you find this post helpful? Yes | No

    Default

    Malc I brought one of those for my easy-pic spent hours and over severals day's thinking it was my code. Which I knew it did work in another project, At the time I was unsure about the code but when I loaded the hex file into my running project everything worked ok. so this led me to the RTC moudle (the one shown in the picture), So I built the curcuit on vero board and that worked percfet, There was one connection I never used, So in the end atfer waisting days hunting I just threw it in the bin and could not be botherd to send it back. I did look at but not found nothing

    Have you tried your own simple circuit ?
    Last edited by chuck; - 23rd March 2010 at 22:35.

  6. #6
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    Thanks for the reply Chuck,

    To be honest I've not tried breadboarding the chip like you suggest. I'll try that tomorrow and see if it makes any difference. Are you suggesting that there is a flaw with the EasyPIC5 board or just the RTC2 board... If the latter, why does it seem to work with other examples that write once to the module and then read the time back from that point... IMO it seems as if the code is doing strange things. I noticed that if I press the increment button it doesn't decrease by one unit, it seems to jump. Maybe the value on the LCD isn't the actual value that the counter is. EG, the hour displayed on the LCD hasn't refreshed to show the value the code has been set to by the button..

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


    Did you find this post helpful? Yes | No

    Default

    Malc,

    In the modified version of Melanie's code, you have ...

    Code:
    IncButton var PORTA.6	' Press to Increment Button
    The 16F877A doesn't have a PORTA.6, and to the program it probably looks like the button is always pressed.
    <br>
    DT

  8. #8
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    How did I miss that ! (embarrassed smile goes here !)

    I'll re-compile tonight after work and see what happens

Members who have read this thread : 0

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