Pages: [1] 2 3   Go Down
Author Topic: Orologio RTC 7 segment 4 digit  (Read 2257 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve,
vorrei costruire un orologio con un display 7 segment e il DS1307... poi vorrei aggiungerci funzioni ma quello verrà dopo
Fino ad ora sono riuscito a far funzionare il display da solo con la libreria SevSeg e ho provato ad inserire anche un int al posto del valore ma non riesco a farlo comunicare con lo sketch di esempioTime...
Code:
//Simple number displayer

#include "SevSeg.h"

//Create an instance of the object.
SevSeg sevseg;
int time = 1820; //Example number

void setup() {
  //I am using a common anode display, with the digit pins connected
  //from 2-5 and the segment pins connected from 6-13
  sevseg.Begin(0,2,3,4,5,6,7,8,9,10,11,12,13);
  
}

void loop() {
  sevseg.PrintOutput(); //Produce an output on the display
  sevseg.NewNum(time,2); //Number to be displayed, the second argument is the , place
  
}

Qualcuno potrebbe aiutarmi? smiley

PS: in futuro vorrei pilotare il display con il 74HC595 e questa libreria però non ce l'ho ancora e non voglio aspettare il prossimo ordine per averlo... intanto ho un 74HC164 solo che non ho trovato nulla di analogo...

edit by mod:
di 4 link che hai messo, non ce n'era uno corretto... bisogna controllare i messaggi prima di pubblicarli
  smiley-razz
« Last Edit: July 02, 2013, 03:04:10 pm by leo72 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La libreria Time di per sé è imprecisa. Senza hardware esterno o senza mezzi per poter aggiornare l'orario dipende dall'imprecisione del risonatore ceramico, molto elevata.
Parti subito prevedendo un RTC esterno per non dover poi buttar via mezzo codice.

Se cerchi in rete ci sono una MAREA di esempi di orologi fatti con i display a 7 segmenti. Cerca e troverai quello che fa per te.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì sì come ho scritto il rtc è previsto e intendevo lo sketch che lo includeva
ho cercato tutto il giorno ma non ho trovato nulla che utilizzasse il mio hardware o come voglio io...

Potresti aiutarmi?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ricapitoliamo.
Di che HW disponi al momento? Non quello che vuoi acquistare, ma quello che hai ora in mano.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Arduino UNO
7-Segment Display
Real Time Clock Module
74HC164
Questo è il materiale che ho al momento.. Grazie in anticipo smiley
« Last Edit: July 02, 2013, 06:02:42 pm by leo72 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il display già lo piloti senza problemi.
L'RTC si aggancia ai pin A4 e A5 (oppure SDA/SCL se hai una UNO R3) e su internet trovi tanti esempi di codice e librerie. Io uso quella di Adafruit:
https://github.com/adafruit/RTClib

Una volta connesso, non devi fare altro che chiedere all'RTC l'ora e visualizzarlo sul display come già stai facendo.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Una volta connesso, non devi fare altro che chiedere all'RTC l'ora e visualizzarlo sul display come già stai facendo.
Mi mancava appunto questo passaggio... non riesco a prendere il valore hh.mm e darlo al display  smiley-roll
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai cercato "ds1307 arduino" su internet? No, perché altrimenti non facevi la domanda: 172.000 risultati.
Devi dare alimentazione a quel modulo con VCC e GND presi dai pin di Arduino, poi collegare SDA e SCL ai pin che ti ho detto. Per usare la libreria non devi fare altro che leggere:
http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit
A questo punto interroghi l'RTC, prendi ora e minuti e poi li passi alla libreria SevSeg che stai usando.

Di più veramente non posso, mica posso farti io il codice, eh!  smiley-wink
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho già fatto tutto ciò, l'unico passaggio che mi manca è prendere il valore dall'RTC e darlo al display...
Non so come si fa! Non conosco abbastanza il codice... ho chiesto solo un aiuto eh smiley-neutral
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Maxidvd, hai letto il link che ti ho passato?
Lì c'è tutta la spiegazione di come collegare un RTC, c'è il codice da usare e c'è spiegato come usarlo.

Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Letta già prima, provati gli esempi e funziona tutto fino a che è nel monitor seriale... ma non so come prendere le ore e i minuti, farci un numero a 4 cifre e darlo al display.
Ripeto mi manca quella linea di codice per passare da uno all'altro
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 480
Posts: 12286
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai detto che non ti funziona l'esempio che hai postato, cioè non riesci a visualizzare nulla sul display nemmeno con quell'esempio banale? prova a cambiare nome alla variabile "time", che non stia andando in conflitto software con il linguaggio o con la libreria dell'RTC
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nono, il display e il RTC funzionano da soli ma non so che valori prendere dal RTC e in che modo metterli nell'int "time" per farli andare assieme
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 480
Posts: 12286
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

nel link che ti ha passato leo è spiegato come prelevare le ore ed i minuti dall'RTC, una volta che hai questi valori li devi assegnare alla variabile time, facendo attenzione ai tipi, dov'è la difficoltà?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho provato a caricare questo prendendo da bildr e da quello postato ieri ma non va.. cioè si vedono delle cifre appena visibili e sbagliate
Code:
#include "Wire.h"
#define DS1307_ADDRESS 0x68
#include "SevSeg.h"

SevSeg sevseg;

void setup(){
  Wire.begin();
  sevseg.Begin(0,1,2,3,4,5,6,7,8,9,10,11,12);
}


void loop() {
  printDate();
  
}

byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);

  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());
  int time = hour + minute;

  sevseg.PrintOutput();
  sevseg.NewNum(time,2);

}


« Last Edit: July 03, 2013, 08:25:11 am by maxidvd » Logged

Pages: [1] 2 3   Go Up
Jump to: