Poi l' esempio chiaro lo si vede in DS00735A-page 23.
C'è solo da dire che per ogni operazione si tiene conto della posizione del byte da inviare e gli eventuali flag di errore trasmissione.
Anno nuovo, forum nuovo.
Mi sa che lascio.
angelole
postato il: 16.09.2018, alle ore 14:29
Ho fatto è rifatto come consigli tu .... ma niente. È più complicato di quanto pensassi. Ho peraltro seguito pedissequamente un documento ufficiale della microchip senza alcun valido risultato... Non so più cosa fare... peraltro in rete c'e' tanta roba sbagliata o incompleta ...
picmicro675
postato il: 16.09.2018, alle ore 20:57
Intanto ti rimetto l' estratto redatto della AN735
http://www.grix.it//UserFiles/picmicro675/File/TransitFiles/… Si potrebbe cominciare ad estrapolare le routines di gestione i2c master. Basta riferirsi alle chiamate
La conversione in macro, mi sembra elaborata, dato che si determina un lavoro tramite interrupt.
Qui di seguito hai il codice di Proton Basic
Symbol ADD_DS1307_PICRX %11010001
Symbol ADD_DS1307_PICTX %11010000
ADCON0 = 0
ADCON1 = 7
TRISA = 0
TRISB = %00001111
TRISC = %00011000
TRISD = %00011000
TRISE = 0
Dim DS1307_Array[8] As Byte
Dim RTC_Second As DS1307_Array#0 ' Second (0..59)
Dim RTC_Minute As DS1307_Array#1 ' Minute (0..59)
Dim RTC_Hour As DS1307_Array#2 ' Hour (0..11 or 0..23)
Dim RTC_DayOfWeek As DS1307_Array#3 ' Day of the week (1..7)
Dim RTC_Day As DS1307_Array#4 ' Date (0..31)
Dim RTC_Month As DS1307_Array#5 ' Month (1..12)
Dim RTC_Year As DS1307_Array#6 ' Year (0..99)
HBusIn ADD_DS1307_PICRX, [Str DS1307_Array]
In pratica la dichiarazione dell' array permette di prendere tutti i dati del DS1307 e suddividerli.
Con un po di tempo vedo di estrapolare il sorgente dell' assembly. Ci sono delle chiamate a delle routine che ormai hanno perso i nomi delle variabili, quindi allunga l' elaborazione....
Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675
postato il: 17.09.2018, alle ore 02:15
Dunque... Redatto il risultato in assembler del sorgente basic e verificato che si compila.
;PROCESSOR 16F877A
RADIX DEC
INCLUDE "P16F877A.INC"
ERRORLEVEL -302
__CONFIG 0x3D39
Dovrebbe caricare il risultato della lettura in DS1307_Array e successive 7 locazioni. Attenzione ai salti di pagina.
Per la scrittura, basta poco, facendo all' incirca quello che fa in fondo, ma con il busout. Ma in un certo frangente, lo farei fare al basic e quindi redarre il risultato.
Comunque le routine fanno il suo lavoro e ho provato col simulatore, qualcosa di più elaborato. Questa però non l' ho ancora provata. Ma mi intendo che le funzioni sono quelle normalmente impiegate nel proton basic e ben collaudate.
Da notare l' ultima parte (commentata) che penso sia meno convulsa di far i calcoli per incrementare il puntatore.
Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675
postato il: 17.09.2018, alle ore 02:19
Ah! dimenticavo che quella routine dovrebbe riciclare al punto di chiamata HBUSIN.
Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675
postato il: 17.09.2018, alle ore 02:22
Ah! dimenticavo (ancora) che la dimostrazione legge dal DS1307, sebbene ho messo
TEST to send a string to DS1307
Anno nuovo, forum nuovo.
Mi sa che lascio.
angelole
postato il: 19.09.2018, alle ore 17:17
Non vedo il settaggio dei registri nell'assembler del sorgente basic ... perchè?
angelole
postato il: 19.09.2018, alle ore 17:24
Questo è l'ultimo codice... ma niente, oltre al bit start non vedo nulla sull'analizzatore...
PROCESSOR 16F877A
RADIX DEC
INCLUDE "P16F877A.INC"
ERRORLEVEL -302
__CONFIG 0x3D39 ;_CP_OFF _DEBUG_OFF _WRT_ENABLE_OFF
; _CPD_OFF _LVP_OFF _BODEN_OFF _PWRTE_OFF _WDT_OFF _XT_OSC
CBLOCK 30H
Dly0
Dly1
Timer1 ; contatore per DelayP
Timer2 ; " "
Timer3 ; " "
DispTemp ; contenitore temporaneo per calcoli routine display
DispCnt
TabTemp
Varie ; subroutine bip
F20
Temp
ADD_DS1307_PICRX ; indirizzo nel caso in cui il up legga i dati dall'orologio
ADD_DS1307_PICTX ; indirizzo nel caso in cui il up scriva i dati sull'orologio
ENDC
;***************************************************************
; PROGRAMMA PRINCIPALE
;***************************************************************
Start
org 0x00
;***************************************************************
; Inizializzazione sistema e variabili
;***************************************************************
Inizializzazione
clrf PORTA ; port A = 0
clrf PORTB ; port B = 0
clrf PORTC ; port C = 0
clrf PORTD ; port D = 0
;-------------------
BANKSEL ADCON0
movlw 00000000b
movwf ADCON0
BANKSEL ADCON1
movlw 00000111b
movwf ADCON1
;--------------------------------------------------------------------------------------------------
; 0=uscita 1=ingresso
;--------------------------------------------------------------------------------------------------
Ho seguito pedissequamente le info di questo documento microchip:
ww1.microchip.com/downloads/en/DeviceDoc/i2c.pdf
anche se riferito ad una eeprom... pur tuttavia i concetti base sono sempre gli stessi.
Riesco a copilare ma, all'atto pratico, dopo lo start non invia alcun dato!
picmicro675
postato il: 19.09.2018, alle ore 19:21
Ci sono le possibilità di usare il debug. Quello hardware (se hai il pickit3 o ICD3) oppure tramite simulatore. Quello compreso in MPLAB (alquanto rustico da usare) oppure quello che uso io.
Ora provo a vedere i sorgente e se si trova il problema.
Comunque mi pare di capire che vuoi fare un orologio con interfaccia LCD, che si trovano a bizzeffe in rete, basta prenderne uno e caricare il codice. Per il tuo micro comunque ho visto 2 o 3 progetti, ma difficile che siano scritti in assembly.
Non ho capito quale possa essere il problema delle routines che ho postato nell' articolo sopra. Se lo scopo è di ottenere un tale orologio, potrebbe essere anche una soluzione usare il proton basic, che per quel micro è in versione FREE (niente da pagare). Del quale poi si arriva anche a scrivere per l' orologio che intenti fare. Se però è uno studio di scuola allora devi capire bene come gira il complessivo.
Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito