Sorted...
I'm gonna give up tonight....
I had the LEDs set to confirm the switches were working, and it must of been taking the port low enough to register as an input.... turning these off and it is now stable !
Sorted...
I'm gonna give up tonight....
I had the LEDs set to confirm the switches were working, and it must of been taking the port low enough to register as an input.... turning these off and it is now stable !
Maybe I spoke too soon...
I can now run through the set up, however setting it up for 10:45PM on 22nd March 2010, however pressing RA5 the display states "Memorised" but then displays the current time and date as : 4:46 AM Sat 28 Apr 2018![]()
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.
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
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 ?
Well I compiled and loaded this example
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: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
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 !
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.
Bookmarks