Berlin Clock

Eccolo! Finalmente ho trovato il tempo di completarlo.
Non sono molto bravo nei lavori strettamente "manuali" ma ho fatto ciò che le mie possibilità (e il tempo) mi hanno concesso.


Uno sguardo sotto il "vestito"...

E un breve video...

STUPENDO! XD XD

Complimenti!!

Bellissimo,immagino che imparare ai bambini come leggere quest'orologio sia un tantino piu complicato di quello tradizionale :slight_smile:

Dalubarrrrr!!!

complimentoni! è uno spettacolo! molto ordinata l'elettronica soprattutto! :smiley:

niente, ora mi hai smosso! stasera pubblico le foto del mio binary. l'ho finito, manca solo caricare la parte di codice per i pulsanti, ma già funziona che è un piacere!

:wink:

Grazie a tutti per i complimenti.
Posso assicurare che se fosse dipeso da me, mi sarei accontentato solo di vederlo funzionare su breadboard, unicamente per la soddisfazione di sapere che le soluzioni hardware e software da me elaborate erano funzionanti. Ma qualcuno (anzi "qualcuna") che mi sta vicino ha insistito particolarmente per la sua realizzazione e cosi...è diventato realtà.

Per questo orologio ho dovuto progettare ben 5 PCB (+1 minuscola 1000 fori) di cui uno doppia faccia, la "centralina" che si vede in foto. Ha un buzzer per le segnalazioni acustiche (come ad esempio il beep 'O clock) e una fotoresistenza che adatta automaticamente e "gradatamente" (con un effetto "fading" implementato in software) la luminosità del tabellone a quella ambientale.

Non parliamo poi della costruzione "meccanica"....innumerevoli listelli di legno da 24 x 4 tagliati con la pazienza di Giobbe (non ho strumenti idonei)...ma come ho già detto non sono bravo in queste cose, di certo una qualsiasi persona al mio posto avrebbe fatto certamente meglio. Ma mi accontento di vederlo funzionare esattamente per come l'ho pensato e progettato.

Per chi fosse interessato a qualche dettaglio implementativo, scriverò un paio di post che riguarderanno l'aspetto sia della soluzione "software" che di quella "hardware".

Madwriter:
Bellissimo,immagino che imparare ai bambini come leggere quest'orologio sia un tantino piu complicato di quello tradizionale :slight_smile:

Guarda, è preso ad esempio proprio per fini didattici ai bambini. E' chiamato, infatti, anche l'orologio "della teoria degli insiemi".

Ormai, ogni volta che vedo un tuo Topic col titolo di un progetto mi aspetti fuochi d'artificio. Anche questa volta non mi hai deluso, ANZI!!!!! SUPERLATIVO e non ti buttare troppo a terra che con la sega ci sai fare :smiley: XD

Ti faccio anche io i complimenti,bel lavoro :)..........però ,scusa se te lo chiedo ma sono curioso di sapere, come si legge?

@dalubar:
mi sembra che però tu abbia sbagliato a leggere l'ora. Se non ho capito male, tu all'inizio del filmato dici che sono le 4:32 ma in realtà dovrebbero essere le 14:32. E' giusto? :wink:

complimenti per il lavoro, io avrei messo tutto in un cartone :slight_smile:

Testato:
complimenti per il lavoro, io avrei messo tutto in un cartone :slight_smile:

ROTFL :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Belloooooooooooooooooooooooooooooooooooooooooooooooo ^millemila :smiley:

Testato:
complimenti per il lavoro, io avrei messo tutto in un cartone :slight_smile:

Che poi, se le nixie si scaldano di brutto non è che al posto del cartone una mattina ti alzi e trovi il carbone ? :stuck_out_tongue_closed_eyes:

Grazie Mike :slight_smile:
Menny per me sei campione imbattuto di doppi sensi (in-)volontari :smiley: :smiley:

leo72:
@dalubar:
mi sembra che però tu abbia sbagliato a leggere l'ora. Se non ho capito male, tu all'inizio del filmato dici che sono le 4:32 ma in realtà dovrebbero essere le 14:32. E' giusto? :wink:

Si è giusto...erano davvero le 14:32 e io ero appena tornato a casa "cotto" dal caldo, ovvero ero abbastanza rincxxx XD

tonid:
Ti faccio anche io i complimenti,bel lavoro :)..........però ,scusa se te lo chiedo ma sono curioso di sapere, come si legge?

Detta in breve:
le prime due righe in alto (rosse) mostrano l’ora corrente, mentre le ultime due (gialle) mostrano i minuti.
Ogni casella della prima riga vale "5", invece nella seconda riga vale "1" (nel sistema decimale sarebbero le "decine" e le "unità", mentre qui sono le "cinquine" e le "unità" :slight_smile: ). Quindi nel caso del video, dato che ci sono 2 caselle accese nella prima riga e 4 nella seconda, si calcola:
(25) + (41) = 14

La stessa cosa identica vale per la terza e quarta riga. Nella terza ci sono 11 caselle perchè 11*5 = 55 minuti, che sommate ai 4 minuti della quarta casella fanno 55+4=59. E difatti al minuto successivo si torna a 0 (righe spente) e si incrementa di un'ora.
Comunque assicuro che dopo qualche giorno ci si fa così l'abitudine che si guarda praticamente a colpo d'occhio. :wink:

leo72:

Testato:
complimenti per il lavoro, io avrei messo tutto in un cartone :slight_smile:

ROTFL :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Ti dirò che mentre preparavo il contenitore ti ho pensato...e ho considerato anch'io una bella scatola di cartone...solo che l'orologio pesa un po' e non avrebbe retto :slight_smile:

Giusto per dare anche un, seppur modesto, valore "didattico" al progetto esporrò, per chi ne fosse interessato alcuni dettagli implementativi.

****N°1 - La conversione decimale/pentale
Convertire un numero decimale in base 5 è semplice, occorrono due semplici operazioni. Per avere la cifra più significativa basta trovare la parte intera della divisione per 5, mentre per la meno significativa basta trovare il resto dell’identica operazione.
Ad esempio per convertire il numero decimale 17 in pentale basta eseguire:

(int)17/5 = 3; 17%5 = 2

Quindi: 17 decimale = 32 pentale
Ancora, la conversione del numero 52:

(int)52/5 = 10 (A in esadecimale); 52%5 = 2

Quindi: 52 decimale = A2 pentale
Utilizzo il formato esadecimale in quanto farò uso di un valore di tipo byte (8 bit) per contenere il risultato della conversione.

La funzione di conversione dec2pent(byte val) prende in ingresso un valore decimale – che potrà essere il valore relativo alle ore o secondi da convertire – e restituisce un byte.
Tale byte è da considerare nel seguente modo:
(byte) HHHHLLLL
Dove:
HHHH : n°di led da accendere come parte della prima cifra del numero pentale (corrisponde alla prima delle due righe di codifica del numero)
LLLL : n°di led da accendere come parte della seconda cifra del numero pentale (corrisponde alla seconda delle due righe di codifica del numero)

Ad esempio, considerando le righe del tabellone etichettate dall'alto verso il basso, con le lettere "A", "B", "C" e "D" ("A" e "B" segnano le ORE, "C" e "D" segnano i minuti), allora se poniamo HH=18 si ha che

conv2pent(HH) = 33

significa:

  • accendere 3 led riga "A"
  • accendere 3 led riga "B"
    oppure se poniamo MM=34 si ha che

conv2pent(MM) = 64

significa:

  • accendere 6 led riga "C"
  • accendere 4 led riga "D"
    ancora, se poniamo, ad esempio, MM=59 si ha che

conv2pent(MM) = B4

(in esadecimale) significa:

  • accendere B led (cioè 11) riga "C"
  • accendere 4 led riga "D"

Ecco il codice della funzione (più a dirsi che a farsi :slight_smile: ):

byte dec2pent(byte val) {
  byte pent = 0x00;
  pent = (val / 5) << 4;
  pent |= val % 5;
  return pent;
}

****N°2 - La codifica delle caselle del tabellone

Siccome è più facile a vedersi che a dirsi vi sparo la mia personale interpretazione della faccenda:

L'immagine mostra la relazione tra ogni singola casella del tabellone e i bit di alcune locazioni di memoria. Si stabilisce, per convenzione, che una casella accesa sia codificata con un “1”, mentre una casella spenta con “0”. Si stabilisce, inoltre che la codifica venga fatta leggendo le caselle del tabellone da sinistra verso destra e dall’alto verso il basso, mentre i bit dell’informazione saranno salvati in memoria dal bit meno significativo in poi, ovvero da destra verso sinistra (per facilitare l'invio verso gli shift registers).
I 24 bit, corrispondenti alle 24 caselle, saranno inseriti in due locazioni di memoria denominate PORT_AB e PORT_CD, rispettivamente di tipo byte (8bit) e unsigned int (16 bit). In questo modo le prime due righe del tabellone (4+4=8 caselle) saranno codificate in PORT_AB, mentre le restanti 15 caselle in PORT_CD. Il 16° bit di quest’ultima locazione si presta a fagiolo per codificare il “punto” scandisci secondi.

Semplice no? :wink:

Amo programmare questi chippini perché ti costringono ad usare un sacco di soluzioni carine per risparmiare risorse XD

leo72:
Amo programmare questi chippini perché ti costringono ad usare un sacco di soluzioni carine per risparmiare risorse XD

Esatto...per non parlare che così mi sento molto più "realizzato" come programmatore. Nessun bit può essere sprecato quando la memoria è una risorsa limitata. E questo ti costringe a pensare diversamente.

Testato:
complimenti per il lavoro, io avrei messo tutto in un cartone :slight_smile:

sei unico XD XD XD

dalubar:

[quote author=Michele Menniti link=topic=111056.msg834551#msg834551 date=1340302977]
Ormai, ogni volta che vedo un tuo Topic col titolo di un progetto mi aspetti fuochi d'artificio. Anche questa volta non mi hai deluso, ANZI!!!!! SUPERLATIVO e non ti buttare troppo a terra che con la sega ci sai fare :smiley: XD

Grazie Mike :slight_smile:
Menny per me sei campione imbattuto di doppi sensi (in-)volontari :smiley: :smiley:
[/quote]
no, perché? io non ho fatto niente è proprio l'attrezzo che si usa muovendolo nei due sensi, altrimenti non funziona, e tu non saresti riuscito a compiere i voleri della tua metà, hai detto tutto tu, io ho solo rimarcato che ci sai fare :stuck_out_tongue:

Spammiamoooo.... è tanto tempo che...... non lo facciamooooo......