Hello
Your routine is correct, try this program
Hi
I wounder if you have not done a mistake in how you use the RTC, the DS has a "funny" way to handle numbers. They are BCD coded and can not be written as Decimal numbers straight. You say you write I2CWrite PORTC.2,PORTC.3,$D0,$00,[0, 15, 15, 5, 1, 10, 9, 10]. Please look at the datasheet Timekeeper registers. If you want to load 15 minutes in the DS you have to write it as 21DEC. Why? Becasue the low 4 bits are minutes and the higher 3 bits are 10 minutes so.... Low bits should be 5 (%0101) and then we need 1 ten-minutes thus getting %00010101
Minutes and Hours are kind of straight forward BCD but the Hours register you have to setup for 12pm or 24 hours function and on top of this use BDC codes.
You can not use almost any register from the DS without convering it from BCD code and you get 90 and the strange jumps becasue of this.
Thanx everyone for your responses.
This is my FIRST 1307 project (it just took me several years to get around to trying it out hehehe).
I knew i was close, just a little more fiddling with certain register values and correct bcd data-handling as you all suggested, and i'll be on track.
Thanx again for the friendly support
Marty.
Sorry guys, getting confused....
Can somebody PLEASE simply adjust "MY" few lines of code (up near top of thread) to show me EXACTLY what i should be writing/reading.
If i write decimal or hex i can't get the right figures.
Someone tells me i can't write in decimal, someone else says i can, and so on.....
If i remove the "#" in my SerOut line, i get NOTHING to come out.
What the ???????
![]()
Sure is.
But in your first example you did not write hex and then you only get 15 and not 21.
I would start by just writing 0 to all locations and from there start to read the DS once every second. I would do this to make sure I have a routine that can read and display the data in a correct way. When I am sure this is working I would set the DS to a specific time and date and test again.
You need the # in the serout function to convert the data in the variable to ASCII numbers. Without this you do not get nothing, you get a ASCII character that is difficult to detect but you do get something. Yes unless you send NUL
This is one way to use the DS, maybe not the best and most code efficient but it works. Please note that it is only working to 9hours 59min 59 sec because I have not implemented the "10-hour" bit from the Hours register. The equipment I am using will never be on for more than a few hours and I am using the DS as a timer and not as a real RTC. I reset the RTC to 0 at startup.Code:DS_CHECK: I2C_Adr_B=0 I2CREAD SDA,SCL,RTC,I2C_Adr_B,[Seconds,Minutes,Hours] t=Seconds &%00001111 Seconds.7=0 n=Seconds>>4 Seconds=(n*10)+t I2C_Adr_B=0 t=Minutes &%00001111 n=Minutes>>4 Minutes=(n*10)+t Hours=Hours &%00001111 System_Time=(Hours*3600)+(Minutes*60)+Seconds DS_COUNT=0 RETURN
Last edited by sinoteq; - 6th October 2009 at 08:12.
Although i'm NOW writing as hex data to keep things clear for me, i think my main problem is Reading/converting the 'read data' into correct decimal form.
getting closer ;-)
Marty.
Look at the DS1307 registers and format your data accordingly. The values you write should be packed BCD values wherever needed.
eg: To write 21 minutes, you need to write HEX 21 to the minutes register. Same for the other registers like hours and seconds. Only make sure to write to the bits needed by the registers.
I haven't used PBP to write a DS1307 yet, but have some C code that works with the IC. Let me know if you wish to look at it for inspiration![]()
This is for a DS1337C but it might give you an idea...
Routine to set the RTC:
To READ and send to terminal:Code:<font color="#0000FF"><b>SET_RTC</b></font>: <font color="#0000FF"><b>yr </b></font>= <font color="#800000"><b>$09 </b></font><font color="#0000FF"><b>mon </b></font>= <font color="#800000"><b>$03 </b></font><font color="#0000FF"><b>date </b></font>= <font color="#800000"><b>$07 </b></font><font color="#0000FF"><b>sec </b></font>= <font color="#800000"><b>$00 </b></font><font color="#0000FF"><b>mins </b></font>= <font color="#800000"><b>$28 </b></font><font color="#0000FF"><b>hr </b></font>= <font color="#800000"><b>$05 </b></font><font color="#FF0000"><b>I2CWRITE </b></font><font color="#0000FF"><b>DS_SDA</b></font>, <font color="#0000FF"><b>DS_SCL</b></font>, <font color="#0000FF"><b>RTC</b></font>, <font color="#0000FF"><b>SecReg</b></font>, [<font color="#0000FF"><b>sec</b></font>,<font color="#0000FF"><b>mins</b></font>,<font color="#0000FF"><b>hr</b></font>,<font color="#0000FF"><b>day</b></font>,<font color="#0000FF"><b>date</b></font>,<font color="#0000FF"><b>mon</b></font>,<font color="#0000FF"><b>yr</b></font>] <font color="#FF0000"><b>RETURN </b></font>
Code:<font color="#FF0000"><b>I2CREAD </b></font><font color="#0000FF"><b>DS_SDA</b></font>, <font color="#0000FF"><b>DS_SCL</b></font>, <font color="#0000FF"><b>RTC</b></font>, <font color="#0000FF"><b>SecReg</b></font>, [<font color="#0000FF"><b>sec</b></font>,<font color="#0000FF"><b>MINs</b></font>,<font color="#0000FF"><b>hr</b></font>,<font color="#0000FF"><b>day</b></font>,<font color="#0000FF"><b>date</b></font>,<font color="#0000FF"><b>mon</b></font>,<font color="#0000FF"><b>yr</b></font>] <font color="#FF0000"><b>PAUSE </b></font><font color="#800000"><b>100 </b></font><font color="#FF0000"><b>SEROUT2 </b></font><font color="#0000FF"><b>PORTC</b></font>.<font color="#800000"><b>6</b></font>, <font color="#800000"><b>16572</b></font>, [ <b>"TIME "</b>, <font color="#FF0000"><b>HEX2 </b></font><font color="#0000FF"><b>hr</b></font>, <b>":"</b>, <font color="#FF0000"><b>HEX2 </b></font><font color="#0000FF"><b>MINs</b></font>, <b>":"</b>,<font color="#FF0000"><b>HEX2 </b></font><font color="#0000FF"><b>sec</b></font>,<font color="#800000"><b>$d</b></font>, <font color="#800000"><b>$a</b></font>] <font color="#FF0000"><b>SEROUT2 </b></font><font color="#0000FF"><b>PORTC</b></font>.<font color="#800000"><b>6</b></font>, <font color="#800000"><b>16572</b></font>, [ <b>"DATE "</b>, <font color="#FF0000"><b>HEX2 </b></font><font color="#0000FF"><b>mon</b></font>,<b>"-"</b>,<font color="#FF0000"><b>HEX2 </b></font><font color="#0000FF"><b>date</b></font>,<b>"-"</b>,<font color="#FF0000"><b>HEX2 </b></font><font color="#0000FF"><b>yr</b></font>,<font color="#800000"><b>$d</b></font>, <font color="#800000"><b>$a</b></font>]
Dave
Always wear safety glasses while programming.
Bookmarks