Salve,devo rivolgermi a questo forum perche' a causa di qualche problema del sitema e' impossibile iscriversi al forum di Fishino.
Possiedo un Fishino UNO,e non so dove trovare le istruzioni per la programmazione dell'orologio interno RTC (quello con la batteria tampone).
Qualcuno puo' darmi qualche indicazione ?
Secondo me ti devi studiare gli schemi, scaricarti tutte le librerie e tutti gli esempi che trovi sul sito di Fishino e gaurdarteli bene ...
Guglielmo
Vedo che usa un classico RTC con DS1307
Quindi qualsiasi libreria per detto chip va bene
... sicuramente per il RTC è vero, ma per il ESP, ad esempio, NON è vero, usa un firmware modificato e ci vogliono le sue librerie ed i suoi comandi (mi pare su SPI) ...
Guglielmo
Il guaio e' che i creatori di Fishino non si sono presi la briga di fornire un reference paragonabile a quello che si trova sul sito di Arduino.
Mah ... veramente io vedo che c'è una sezione dedicata alla documentazione QUI dove si può scaricare un .pdf di ben 156 pagine con TUTTA la documentazione ...
Guglielmo
Infatti nel Pdf c'e' un sacco di roba,ma riguarda i collegamenti wifi,non ho trovato niente riguardo all'RTC
Beh, perchè, come ti è stato già detto, è un modulo stadard (DS1307) per cui si trovano tonnellate di documentazione nonchè di librerie per cui ... credo che Massimo (il progettista di Fishino) non abbia giustamente perso tempo a documentare un tale chip, didicandosi a documentare le cose che invece sono specifiche di quella scheda (come il moduli WiFi con il firmware personalizzato) ...
Dallo schema presente sul sito di Fishino:
Guglielmo
Ho trovato tra le librerie della IDE arduino la Artron DS1338 che sembra funzonare.
Pero' nell'esempio accluso :
#include <Arduino.h>
#include "Wire.h"
#include "Artron_DS1338.h"
Artron_DS1338 rtc;
void setup() {
Serial.begin(115200);
Wire.begin(); // Setup I2C to work
rtc.begin(); // Enable DS1338 clock run
if (!rtc.set(22, 18, 0, 17, 11, 2021)) { // Set Datetime to DS1338
Serial.println("RTC set datetime fail"); // Print error if set fail
}
}
void loop() {
int hour, minute, second, mday, month, year = 0;
if (rtc.get(&hour, &minute, &second, &mday, &month, &year)) { // Get Datetime from DS1338 then put to variable
Serial.printf("Datetime: %d:%02d:%02d %d/%d/%d\n", // Print datetime to Serial Monitor
hour, minute, second,
mday, month, year
);
} else {
Serial.println("RTC get datetime fail"); // Print error if read fail
}
delay(1000);
}
c'e' un "Serial.printf" che il compilatore non riconosce,e da errore.
Inoltre a dire il vero non conosco il significato di quei %... dentro la parentesi.
Qualcuno puo' illuminarmi ?
Ma perchè vai a cercare librerie strane ? ? ? ... DEVI cercare librerie per il DS1307 che è il chip che hai tu e NON librerie fatte per altri chip che, anche se in parte funzionano, magari NON offrono tutte le possibilità specifiche dello specifico chip. Nel "Library Manager" di Arduino IDE, metti come voce nel campo di ricerca DS1307 e sceglie quelle che sono espressamente fatte per quel chip.
Oltretuttto ne hai scelta una che usa il metodo sprintf() che, la classe Serial di Arduino UNO, NON implementa e NON puoi usare e quindi, ovviamente, ti da errori di compilazione.
Guglielmo
P.S.: Per la sintassi di sprintf() e funzioni simili che servono a formattare una stringa usando più elementi, guarda QUI
Spiego questa mia frase ...
... molti chip RTC con bus I2C hanno una serie di registri che si trova, per tutti, agli stessi indirizzi, ma poi possono avere altri registri che sono invece specifici dello specifico chip, quindi ... usare una libreria non fatta per il chip che si sta usando può portare ad avere a disposizione meno possibilità di quelle che il chip offre o, peggio, possibilità che il chip in realà non offre con le ovvie conseguenze.
Per questo, dato che normalmente per tutti gli RTC più comuni, si trovano le specifiche librerie di Arduino, è bene usare SEMPRE quelle fatte per il chip che si sta usando e non quelle di altri chip.
Guglielmo
Se si vuole usare la sprintf() o la printf(), non strettamente come metodo della classe Serial di Arduino, si possono usare le varie funzioni che si trovano in <stdio.h> che fa parte di AVR libc, libreria SEMPRE automaticamente inclusa dall'IDE quando si usano MCU AVR.
Dato che, come detto, la AVR libc, è sempre disponibile con le MCU AVR (ma parecchi moduli sono implementati in tutte le altre architetture), ne consiglio un attento studio dato che dentro c'è di tutto e di più per risolvere la maggior parte dei problemi che si incontrano.
Guglielmo
Avete ragione ovviamente.
Pero' in questo caso l'orologio funziona ugualmente,e usando un semplice Serial.print() riesco a vsualizzare ore,minuti ecc.
Ovviamente cerchero una libreria piu adatta.
Pero' mi sembra che quei simboli %d ecc si usino anche con Arduino uno,o sbaglio ?
Vedi mio post #12 ... poco sopra
Guglielmo
Vedi mio post #11 poco sopra
Guglielmo
Ho notato una cosa : quando,con la scheda in funzione ,attivo ripetutamente il monitor seriale col comando sotto "strumenti",oppure col tasto in alto a destra,si direbbe che a volte la scheda si resetta,e l'orologio riparte dal valore inserito nella sezione setup dello sketch,mentre a volte continua il conteggio.
Come dovrebbe essere ?
Ricordo che sto usando un Fishino uno
Tutti gli Arduino AVR ( ed immagino anche Fishino) sono dotati di un bootloader che parte sempre per primo al riavvio della MCU.
Ora, per permettere il caricamento dei programmi da IDE, le schede sono fatte in modo che, all'apertura della seriale (quando viene alzato il segnale DTR) viene generato un reset hardware.
Al reset la MCU riparte e comincia dal bootloader che guarda se c'è da caricare un nuovo programma ... se non c'è nulla da caricare, ma è una semplice apertura della porta seriale, passa il controllo al programma che era stato caricato in precedenza e via. Se invece si accorge che l'IDE vuole caricare un nuovo programma allora inizia il colloquio con il software di caricamneto e sovrascrive il vecchio con il nuovo.
Quindi, SI, è normale che all'apertura della seriale, ci sia un reset della MCU ed il programma riparta da capo.
Guglielmo
Un' ultima curiosita : sotto "gestione librerie" della IDE di Arduino,battendo RTC ci sono molte librerie
create da vari autori.
Quelle dedicate al chip DS1307 dovrebbero essere TUTTE compatibili ?
Perche'nella gamma Arduino diverse schede lo montano.
In questi casi e' fissato uno standard per gli indirizzi ecc ,o magari se ne occupa il compilatore una volta impostato sulla scheda relativa,per garantire la compatibilita ?
Il fishino uno per esempio dovrebbe essere equivalente all'Arduino uno.
Ogni chip RTC ha un suo indirizzo I2C specifico ... I DS1307, ad esempio, usano tutti il 0x68 ... è fissato da produttore e non può essere cambiato.
Attenzione perché, salvo trucchi appositi (mux I2C e altri tucchetti discutibili) due chip con lo stesso indirizzo I2C NON possono coesistere sullo stesso bus.
Guglielmo
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.