swRTC

no, non ci stiamo capendo. il cristallo, va messo su 2 pin particolari dell'atmega, ovvero del microchip, che poi ci pensa da solo ad alimentare e utilizzare il cristallo (settaggio dei giusti fuse, e adattamento delle funzioni basate sul tempo sono il motivo per cui devi usare il boot-loader per la giusta frequenza)
L'arduino mega è una board che possiede già un oscillatore o cristallo a 16MHz sulla sceda (credo siano tutte a 16MHz), il massimo che puoi fare è dissaldare il cristallo/oscillatore già presente sulla scheda e sostituirlo con uno più preciso.

ps. ma questa libreria funziona sull'arduino mega?

edit: preceduto da brain :slight_smile:

Testato:
scusa essere digitale ma ho capito che non hai capito :slight_smile:

troppo buono :frowning:

Testato:
questa libreria serve per usare arduino come orologio sw. Quindi non devi aggiungere nulla al tuo arduino, il quarzo e' quello gia' presente su arduino

ok, ma leggendo il thread mi era parso di capire che si poteva migliorare la precisione, utilizzando un cristallo.
Giusto?

lesto:
no, non ci stiamo capendo. il cristallo, va messo su 2 pin particolari dell'atmega, ovvero del microchip, che poi ci pensa da solo ad alimentare e utilizzare il cristallo (settaggio dei giusti fuse, e adattamento delle funzioni basate sul tempo sono il motivo per cui devi usare il boot-loader per la giusta frequenza)
L'arduino mega è una board che possiede già un oscillatore o cristallo a 16MHz sulla sceda (credo siano tutte a 16MHz), il massimo che puoi fare è dissaldare il cristallo/oscillatore già presente sulla scheda e sostituirlo con uno più preciso.

neanche per sogno!

lesto:
ps. ma questa libreria funziona sull'arduino mega?
edit: preceduto da brain :slight_smile:

mi pare di aver letto in questo thread, di un test sul 2560 ...

Bòni :wink:

Allora, credo che essere_digitale abbia una scheda Arduino MEGA. Su questo non ci sono dubbi. E' ovvio che non si possa dissaldare il microcontrollore, perché poi si butterebbe via micro e scheda $) Anche su questo non ci sono dubbi.

Quando leggi che per aumentare la precisione della libreria va usato un cristallo esterno è ovvio che ci riferisce a situazioni in cui si implementa un circuito con un Atmega in standalone (parola per indicare il micro ed i componenti minimi necessari al suo funzionamento). Se si parla di Atmega328, il micro dell'Arduino UNO/2009, la cosa è facile perché il micro è in formato DIP quindi facilmente gestibile Un chip come l'Atmega2560 non puoi piazzarlo su una millefori né la sua saldatura è alla portata di tutti. Credo che a meno che tu non riesca a procurarti una breakout board, ossia una schedina con il solo Atmega2560 montato sopra, come questa:
http://jkdevices.com/index.php?route=product/product&product_id=49
non puoi aggiungere ad una scheda Arduino MEGA un cristallo.

Ah, per la cronaca, la swRTC supporta i seguenti micro:
-Attiny25/45/85
-Attiny24/44/84
-Atmega8
-Atmega48/88/168/328
-Atmega644/1284
-Atmega640/1280/1281/2560/2561

leo72:
Bòni :wink:

Allora, credo che essere_digitale abbia una scheda Arduino MEGA. Su questo non ci sono dubbi. E' ovvio che non si possa dissaldare il microcontrollore, perché poi si butterebbe via micro e scheda $) Anche su questo non ci sono dubbi.

Quando leggi che per aumentare la precisione della libreria va usato un cristallo esterno è ovvio che ci riferisce a situazioni in cui si implementa un circuito con un Atmega in standalone (parola per indicare il micro ed i componenti minimi necessari al suo funzionamento). Se si parla di Atmega328, il micro dell'Arduino UNO/2009, la cosa è facile perché il micro è in formato DIP quindi facilmente gestibile Un chip come l'Atmega2560 non puoi piazzarlo su una millefori né la sua saldatura è alla portata di tutti. Credo che a meno che tu non riesca a procurarti una breakout board, ossia una schedina con il solo Atmega2560 montato sopra, come questa:
http://jkdevices.com/index.php?route=product/product&product_id=49
non puoi aggiungere ad una scheda Arduino MEGA un cristallo.

finalmente è tutto chiaro :. :. :.

leo72:
Ah, per la cronaca, la swRTC supporta i seguenti micro:
-Attiny25/45/85
-Attiny24/44/84
-Atmega8
-Atmega48/88/168/328
-Atmega644/1284
-Atmega640/1280/1281/2560/2561

la provo. grazie ancora.

leo72:
Allora, credo che essere_digitale abbia una scheda Arduino MEGA. Su questo non ci sono dubbi. E' ovvio che non si possa dissaldare il microcontrollore, perché poi si butterebbe via micro e scheda $) Anche su questo non ci sono dubbi.

non dissaldare il micro, ma il cristallo/oscillatore.
Ma dubito comunque che abbia una reale utilità, salvo mettere un cristallo 16MHz con la stessa precisione di uno a 32kHz

lesto:
non dissaldare il micro, ma il cristallo/oscillatore.
Ma dubito comunque che abbia una reale utilità, salvo mettere un cristallo 16MHz con la stessa precisione di uno a 32kHz

Con questa opzione poi si è costretti ad usare l'oscillatore interno a 8 MHz, ed il software Arduino non è progettato per tale frequenza per cui poi bisognerebbe iniziare a modificare un sacco di cose per far funzionare tutta la baracca. Ergo: non conviene assolutamente.

essere_digitale:

leo72:
Ah, per la cronaca, la swRTC supporta i seguenti micro:
-Attiny25/45/85
-Attiny24/44/84
-Atmega8
-Atmega48/88/168/328
-Atmega644/1284
-Atmega640/1280/1281/2560/2561

la provo. grazie ancora.

Mi ero dimenticato: Attiny2313

leo72:

lesto:
non dissaldare il micro, ma il cristallo/oscillatore.
Ma dubito comunque che abbia una reale utilità, salvo mettere un cristallo 16MHz con la stessa precisione di uno a 32kHz

Con questa opzione poi si è costretti ad usare l'oscillatore interno a 8 MHz, ed il software Arduino non è progettato per tale frequenza per cui poi bisognerebbe iniziare a modificare un sacco di cose per far funzionare tutta la baracca. Ergo: non conviene assolutamente.

scusa ma con un cristallo 16MHz ad altissima precisione cosa cambia tanto da dover usare quello interno a 8MHz? mi sa che non hai letto bene l'intervento :slight_smile:

Sì, scusa. Ho sbagliato ad intendere l'ultimo tuo punto. Avevo letto di mettere il 32 kHz al posto del 16 MHz.

So che vado fuori argomento, ho provato ad usare swrtc
ma vorei utilizzare un DS1307 come RTC in modo di tenere l'ora anche in caso di black out.
nel caso perdessi la precisione e quindi il reale valore della variabile tempo c'è la possibilità di aggiornarla mediante pc senza ricaricare lo sketch.

Segui l'altra discussione in cui si parla di aggiornare la swRTC da PC. Il problema è identico.
Oppure metti un piccolo display tipo un 16x2 e permetti all'utente di modificare l'orario, la vedo più semplice e meno impedente: con la soluzione del PC sei costretto a collegare il tuo dispositivo al computer.

Ciao Leo
Ho già inserito un display con cui visualizzo l'ora.
tu intendi di inserine nello sketch un menù tramite il quale andare a impostare l'ora e magari altri parametri ?

tiusalessio:
tu intendi di inserine nello sketch un menù tramite il quale andare a impostare l'ora e magari altri parametri ?

Esatto :wink:

Penso che dovro studiare un'pò per fare un menù perchè ancora non ho mai provato a farne uno.
c'è qualche consiglio per un metodo semplice da seguire per fare un menù

Parti per gradi.
Creati un menu con 2 sole opzioni, una di tua scelta, esempio "Visualizza ora" e l'altra "Uscita".
Gestisci 2 pulsantini. Con il primo richiami il menu e fai le scelte, con l'altro scorri le voci. Allenati a far apparire il menu ed a scorrere fra le 2 opzioni, facendo visualizzare l'ora oppure uscendo dal menu a seconda dell'opzione scelta. Poi pian piano aggiungi le voci. Comunque se la cosa diventa difficile, apri un thread apposito, qui si va OT.

Grazie Leo.
questa sera ci provo.
Un consiglio e poi chiudo, secondo te una tastiera a 4 pulanti se è sufficente per comandare qualsiasi menù la cerco su internet e la prendo.

In teoria ne bastano 2: uno per aprire il menu e selezionare le scelte, l'altro per scorrere fra le opzioni. In caso di richieste all'utente, uno assume il valore di "Sì", l'altro "No". Poi se ti va di prendere la tastierina, fai pure.

Salve a tutti, mi chiamo Fabio e mi sono avvicinato da poco ad Arduino.
Il mio progetto è un cronometro e sino a qui non c'è nulla di nuovo vedendo che ce ne sono di tutti i colori con Arduino.
Io stò provando con Arduino Uno a fare un cronometro con i centesimi di secondo utilizzando la SwRtc.
Ho modificato leggermente la libreria (con soli due if in piu' e due variabili una per centesimi e una per i decimi) e quindi da programma ho aggiunto un if nel loop che controlli quando i centesimi sono = a 0 per farmi suonare un buzzer una volta al secondo.
Il problema è che una volta che metto il suono una volta al secondo il timer sembra che contiuni a funzionare bene ma sulla seriale si notano dei problemi che si verificano anche ascoltando il buzzer, o meglio:
per alcuni instanti funziona tutto e una volta al secondo il buzzer suona, poi succede che per alcuni secondi non suona piu' e altre volte che faccia anche due o tre "suonate" consecutive.
Lo so benissimo che con un software rtc non potrò mai esser preciso ma al momento per imparare volevo fare il primo programma così per poi implementarlo con diverse altre cose.
Il progetto in realtà è abbastanza complesso e sinceramente non so nemmeno se Arduino sia in grado di sopportarlo per questioni di memoria e forse potenza.
Sono un neofita di questo mondo e potrei anche sbagliarmi, anzi se qualcuno vuole contribuire a farmi capire un pochino il motivo di questo strano comportamento gliene sarei grato.
Vorrei approfittarne per ringraziare colui che ha fatto la SWRTC, davvero un bel lavoro.
Lasciandola standar e con il swrtctest il mio arduino uno sbaglia di 391 sec al giorno........ Per fortuna che c'è il setDeltaT :slight_smile:
Di seguito il codice che ho messo nel loop:

void loop() {
    Serial.print(rtc.getHours(), DEC);
    Serial.print(":");
    Serial.print(rtc.getMinutes(), DEC);
    Serial.print(":");
    Serial.print(rtc.getSeconds(), DEC);
    Serial.print(".");
    Serial.println(rtc.getCentesimi(), DEC);
    second_lap();
        
}

void second_lap(){
     cent = rtc.getCentesimi();
     if (cent == 1){
         flag1 = 0; 
         }
     if ((cent == 0) && (flag1 == 0)){
       buzz(buzPin, 4000, 90);
       flag1 = 1;
    }
}

La swRTC, come descritto nel readme allegato, utilizza un timer interno al microcontrollore. Tale timer dipende dal tipo di micro su cui gira. Nel caso dell'Atmega328 usa il timer 2.
Ora, analizzando la libreria Tone, mi pare di capire che usi anch'essa il timer 2. Se è così, è scontato che vadano in conflitto. Prova ad aprire la Tone ed a cambiare il timer predefinito, dovrebbe essere il blocco di codice tra le righe 88-111 nel file Tone.c contenuto in /hardware/arduino/cores/arduino. Metti ad esempio il timer 1.