|
Real Time
Clok con DS1307 e bus I2C(iic)
Progetto realizzato con la DemoBoard V1, di
seguito trovate lo schema di collegamento.
La batteria non è strettamente necessaria per
eseguire delle prove dato che viene utilizzata solo in mancanza di
alimentazione.
Sorgenti PIC C e .hex

Il timer DS1307 utilizza il
bus "I2C" per la comunicazione dei dati con frequenza massima di 100 KHz (SCL)
per cui il consiglio è di leggere un tutorial su questo bus per capire
meglio quello che si sta facendo.
Nella tabella seguente sono visibili i registi a
8 bit che andremo a leggere o scrivere.
| addres reg. |
registro |
| 00h |
secondi |
| 01h |
minuti |
| 02h |
ore |
| 03h |
giorno(lun:dom) |
| 04h |
data giorno |
| 05h |
mese |
| 06h |
anno |
| 07h |
control |
Il
registro "control" , in questo progetto non utilizzato , serve per attivare
l'uscita SQW e impostarrne la frequenza.
Ci
sono inoltre 56 byte di ram tamponata libera ( dall'indirizzo 08h al 3Fh) su
cui possiamo leggere e scrivere qualsiasi cosa.
I dati sono in formato BCD per cui i primi 4 bit
(lsb) rappresenteranno le unità mentre i restanti 4 le decine (msb).
ES. 0001 0010 = ( 1 * 10 ) + 2
= 12
|
SCRITTURA MASTER ---> RTC |
| NOTE |
COMANDO |
DIREZIONE |
SUB pic c |
| |
START |
-------> |
iic_start() |
| 11010000
= address , write bit |
SLAVE ADDRESS+ write bit |
-------> |
iic_write(char value) |
| |
ACK |
<------- |
bit iic_r_ack() |
| n=indirizzo |
DATA ADDRESS n |
-------> |
iic_write(char value) |
| |
ACK |
<------- |
bit iic_r_ack() |
| dato all'indirizzo n |
DATA n |
-------> |
iic_write(char value) |
| |
ACK |
<------- |
bit iic_r_ack() |
| |
ACK |
<------- |
bit iic_r_ack() |
| |
STOP |
-------> |
iic_stop() |
|