Connecting the PICAXE to the Ds1307 Real Time Clock
by Lewis Loflin
This program does pretty much the same as my Arduino Ds1307 clock program does. It demonstrates the use of code and how to connect hardware. The program allows the user to input the time from the PICAXE terminal after Sw1 is pressed. For a detailed explanation of the Ds1307 see the following :
This is a module I constructed to combine an EEPROM and the Ds1307 RTC. One could just connect only the Ds1307 section by itself. Be sure to connect the 1 Hz out pin to C.0 on the PICAXE.
These 4.7k pullup resistors must be connected as shown between the module in Fig. 2 and the PICAXE.
; Use a Ds1307 RTC #picaxe 18m2 ; type chip used symbol Sw1 = pinC.5 ; use pinX.X for input symbol LED1 = C.7 symbol LED2 = C.6 symbol val = b13 ; if needed symbol temp = b14 symbol oneHZ = pinC.0 ; connect to Ds1307 1 Hz out symbol seconds = b0 symbol mins = b1 symbol hour = b2 symbol day = b3 symbol date = b4 symbol month = b5 symbol year = b7 symbol control = b8 hi2csetup i2cmaster, %11010000, i2cslow, i2cbyte ; Ds1307 setup main: if Sw1 = 0 then set_clock if oneHz = 0 then goto main ; wait here for a HIGH from 1 Hz hi2cin 0,(seconds,mins,hour,day,date,month,year) ; ASCII code 48 -> 57 is 0 -> 9 so add/subtract 48 ; order is sec - min - hours - day - month - year ; could also use bcdtoaschii (p. 35) but this illustrates the process. sertxd("The time is: ") ; print hours val = hour / 16 + 48 ; shift high nibble 4 places right change to ASCII sertxd(val) val = hour & %000001111 + 48 ; mask high nibble change lower nibble to ASCII sertxd(val, ":") ; print minutes val = mins /16 + 48 ; shift high nibble 4 places right change to ASCII sertxd(val) val = mins & %00001111 + 48 ; mask high nibble change lower nibble to ASCII sertxd(val, ":") ; print seconds val = seconds / 16 + 48 ; shift high nibble 4 places right change to ASCII sertxd(val) val = seconds & %00001111 + 48 ; mask high nibble change lower nibble to ASCII sertxd(val, 13, 10) ; LF - CR pause 600 goto main set_clock: ; input time to Ds1307 ; use programming cable HIGH LED1 sertxd("Input time HH:MM: ") disconnect ; must use to input string from programming cable. for bptr = 28 to 38 ; serrxd ,@bptr sertxd(@bptr) ; echo input if @bptr = 10 then EXIT ; break loop on LF-CR next bptr reconnect ; reactivate programming cable. sertxd(13,10) ; LF-CR ; translate 4 ASCII to two digits of BCD ; doesn't seem to work with @bptr peek 28,val temp = val - 48 * 16 & %00110000 ; upper nibble hour if temp > 0x20 then gosub zero_temp peek 29,val val = val - 48 & %00001111 ; lower nibble hour if val > 0x09 then gosub add6 hour = temp | val ;skip 30 peek 31,val temp = val - 48 * 16 & %11110000 if temp > 0x50 then gosub zero_temp peek 32,val val = val - 48 & %00001111 if val > 0x09 then gosub add6 mins = temp | val let seconds = $00; 00 Note all BCD format ;let mins = $41; 59 Note all BCD format ;let hour = $10; 11 Note all BCD format let day = $05; Note all BCD format let date = $21; 25 Note all BCD format let month = $12; 12 Note all BCD format let year = $11; 03 Note all BCD format let control = %00010000 ; Enable output at 1Hz hi2cout 0,(seconds,mins,hour,day,date,month,year,control) pause 1000 LOW LED1 goto main zero_temp: temp = 0 return add6: val = val + 6 return
Picaxe Micro-controller Projects!
The PICAXE series of micro-controllers rank as the easiest and most cost effective way to use Microchip processors. I wanted an easier and less expensive way to introduce my students to the "PIC" micro-controller. Here I hope to get those starting out past poorly written literature and lack of simple working code examples.
Other Main Sections of this Website
If using this material on another site, please provide a link back to my site.