Jump to content
PLC Forum


Sign in to follow this  
ic910

Rtc Con M41T00/ Ds1307 Problema Visualizzazione E Impostazione

Recommended Posts

ic910

Salve a tutti stò cerando di implementare ad un mio progetto un riferimento temporale. Ho cercato inizialmente di utilizzare come RTC un M41T00 compatibile con il DS1307 .

Con M41T00 sono riuscito a far visualizzare sul diplay sia i minuti e secondi ,tutti e 2 avanzano senza problemi e si incrementano.

Il problema si è presentato con le ore i giorni il mese e l'anno i quali vengono visualizzati in maniera errata.

Inoltre un ulteriore problema e l'impostazione iniziale del RTC che non riesco a eseguire .

Attualmente ho anche a disposizione un modulo con RTC ds 1307 potrei abbandonare anche M41t00 e passare al DS1307.

Sotto vi posto il listato compilato tramite porton ide speriamo di risolvere insieme la problematica Grazie.

Device = 16F877
Xtal 4
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_ON, BODEN_OFF, PWRTE_ON, WDT_OFF, XT_OSC

TRISD=0

TRISC= %10111000

Declare LCD_Interface 8
Declare LCD_DTPin PORTD.0 'collegamento diplay a 8 bit tutta la porta d
Declare LCD_RSPin PORTC.0
Declare LCD_RWPin PORTC.1
Declare LCD_ENPin PORTC.2
Declare LCD_Lines 2
PORTC.1=0

Declare SDA_Pin PORTC.4
Declare SCL_Pin PORTC.3
Declare Slow_Bus 0 'rallenta la velocità del bus quando si utilizzano quanzi superiori a 4 Mhz
Declare bus_scl On 'elimina la necessità di mettere una pull-up sull scl
Declare Hbus_Bitrate 100 ' velocità standard 100 Khz


Dim GP_Loop As Byte 'serve per contare il bit della variabile
Dim Convert As Byte ' valore convertito da BCD a BIN o BIN a BCD
Dim Temp_Convert As Byte ' Temp_Converter variabile per bcd - bin routines



Dim RTC [8] As Byte 'dichiarazione array

Dim secondi As RTC#0
Dim minuti As RTC#1
Dim ore As RTC#2
Dim day As RTC#3 'giorni della settimana da 1-7
Dim giorno_mese As RTC#4 'giorni del mese da 1-31
Dim mese As RTC#5
Dim anno As RTC#6
Dim control As RTC#7 'registro di control




Symbol trasmissione = %11010000 'come si può notare l'ultimo bit a destra è 0 significa scrivi su RTC
Symbol ricezione = %11010001 'come si può notare l'ultimo bit a destra è 1 significa leggi dal RTC

secondi=%00000000 'corrisponde a decimale 0
minuti=%00000100 'corrisponde a decimale 4
ore=%00000111 'corrisponde a decimale 7
day=%00000110 ' corisponde a decimale 6 indica Sabato
giorno_mese =%00001110 'corrisponde a decimale 14
mese=%00000010 'corrisponde a deciamle 2 indica febbraio
anno=%00001111 'corrisponde a numero deciamle 15 indica 2015
control=%00000000 'registro di controllo


For GP_Loop = 0 To 7 'tramite questo ciclo di For faccio convertire tutti gli 8 indici dell array
Convert = RTC[GP_Loop]
GoSub BIN_BCD
RTC[GP_Loop] = Convert
Next GP_Loop
GoSub Scrittura_RTC

GoTo main

'*******************************************************************************************
aggiornamento:


GoSub Lettura_RTC 'lettura RTC

For GP_Loop = 0 To 7 'ciclo for da 0 a 7 per associare i gli 8 BCD letti alla variabile convert
Convert = RTC[GP_Loop] 'uguaglia le 8 array una per una a alla variabile convert per poi mandarle in conversione
GoSub BCD_BIN 'manda alla routine di conversione dal BCD al binario
RTC[GP_Loop] = Convert '
Next GP_Loop
Return


'************************************************************************************************************************
Lettura_RTC:

HBStart
HBusIn ricezione,0, [str RTC]
HBStop
Return
'***********************************************************************************************************************
Scrittura_RTC:
HBStart
HBusOut trasmissione,0,[str RTC]
HBStop
Return
'***************************************************************************************************************************


main:

GoSub aggiornamento

'ore= ore & %00111111 'ho fatto questo and per escludere il bit 6 e 7 del registro 2 potevano darmi problemi sulla visualizzazione

Print $fe, 1, Dec2 giorno_mese, "/", Dec2 mese , "/" , Dec2 anno, '$fe,1 è equivalente a cls vedere pag 326 del manuale proton
Print At 2,1, " ", Dec2 ore, ":", Dec2 minuti, ":", Dec2 secondi 'Hex2 comando per visualizzare in esa solo 2 cifre

DelayMS 500 ' Ritardo di 500 mS
GoTo main '

'******************************************************************************************************************************
BCD_BIN:

Temp_Convert = Convert & $F0
Swapf Temp_Convert , 1
Temp_Convert = Temp_Convert * 10
Convert = Convert & $0F
Convert = Convert + Temp_Convert

'prende in considerazione (digit alto ) perchè $F0 equivale in binario a 11110000
'di conseguenza facendo AND passera solo il digit alto perchè nella logica AND 1 1 =1
'avendo gli 0 sul digit basso del $F0 non passeranno
'l'Alto nibble BCD maschera il basso nibble poi bit per bit si
'metterà in Low nibble (basso digit)
'fare Temp_Convert = Temp_Convert * 10, hte 10 di cifre
'posizionare il Basso cifra convertito nella Bassa nibble mascherando con un bit per bit e
'Il risultato della somma dei due è il valore binario della bcd orignal il risultato della
'conversione è in Convert

Return
'********************************************************************************************************************************
BIN_BCD:

Temp_Convert = Convert//10
Convert = Convert / 10
Swapf Convert,1
Convert = Convert ^ Temp_Convert

'// effettua la divisione fornendo il resto
'il primo Convert è un valore in binario
'Entra con il valore in Convert, ritorno è anche in Convert
'Temp_Convert ha il resto della divisione per 10 nel nibble basso
'Convert ha il valore intero della divisione per 10 nel nibble basso
'Scambiare i nibbles alto e basso di Temp_Convert e risultato inviarlo al nuovo Temp_Convert
'Bitwise XOR i due risultati per formare il valore BCD


Return

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...