The parts:
Shure display 2416 only 20 dollar on Ebay !!
Home made RTC with Dallas IC !
The schematics:
RTC part !
All parts connected to the Arduino
And at last the first concept program!
/* HamKlok One uitleg sprite
* Sure 2416 display 24*16 leds
* pa0akv 2010
* -------------------------------------------
* Historie
* versie 0.0 15 november 2010
* -------------------------------------------
*/
// Eerst even de juiste bibliotheken ophalen
// Shure libraries
#include "MatrixDisplay.h"
#include "DisplayToolbox.h"
#include <WProgram.h>
// DS1307 libraries
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson
// Het display heeft nog wat aanvullende info nodig
// Easy to use function
#define setMaster(dispNum, CSPin) initDisplay(dispNum,CSPin,true)
#define setSlave(dispNum, CSPin) initDisplay(dispNum,CSPin,false)
#define Puls_1Hz 9
// We hebben maar 1 display! De bibliotheek kan er meer aansturen
// 1 = Number of displays
// Data = 10
// WR == 11
// False - we dont need a shadow buffer for this example. saves 50% memory!
// Initaliseer Shure display met juiste aansluitingen!
MatrixDisplay disp(4,11,10, false);
// Pass a copy of the display into the toolbox
DisplayToolbox toolbox(&disp);
// In totaal 3 groepen van 8 leds = 24
// De eerste is positie 0 de laatste = 23
// Twee groepen hoog dus rechts boven is 0
// Rechts onder is dan 15
uint8_t X_MAX = 23;
uint8_t Y_MAX = 15;
// geheugen ruimte voor sprites reserveren
uint8_t Fig0[7];
uint8_t Fig1[7];
uint8_t Fig2[7];
uint8_t Fig3[7];
uint8_t Fig4[7];
uint8_t Fig5[7];
uint8_t Fig6[7];
uint8_t Fig7[7];
uint8_t Fig8[7];
uint8_t Fig9[7];
uint8_t FigT[7];
uint8_t FigD[7];
// ruimte voor RTC registers maken
int rtc[7];
int sec;
int secr;
int secl;
int mins;
int minr;
int minl;
int hour;
int hourr;
int hourl;
void setup()
{
// Digital I/O eerst definieren
pinMode(Puls_1Hz,INPUT);
disp.setMaster(0,4);
// Klok deel inrichten !
/* Dit deel voor het gelijk zetten van de klok!
* Verwijder // om dit deel te activeren
* Voeg toe // om dit deel over te slaan
* Nodig zolang er geen gelijk zet functionaliteit
* aan het programma is toegevoegd !!
*/
//RTC.stop();
//RTC.set(DS1307_SEC,30); //set de seconden
//RTC.set(DS1307_MIN,14); //set dee minuten
//RTC.set(DS1307_HR,20); //set de uren
//RTC.set(DS1307_DOW,2); //set de dag van de week
//RTC.set(DS1307_DATE,16); //set de datum
//RTC.set(DS1307_MTH,11); //set de maand
//RTC.set(DS1307_YR,10); //set het jaar
//RTC.start();
Set_Square_Wave(0); // 1Hz pulsen on!
// Opbouwen van de sprite !
Fig0[0] = B01110;
Fig0[1] = B10001;
Fig0[2] = B10001;
Fig0[3] = B10001;
Fig0[4] = B10001;
Fig0[5] = B10001;
Fig0[6] = B01110;
Fig1[0] = B00110;
Fig1[1] = B00101;
Fig1[2] = B00100;
Fig1[3] = B00100;
Fig1[4] = B00100;
Fig1[5] = B00100;
Fig1[6] = B11111;
Fig2[0] = B01110;
Fig2[1] = B10001;
Fig2[2] = B10000;
Fig2[3] = B01100;
Fig2[4] = B00010;
Fig2[5] = B00001;
Fig2[6] = B11111;
Fig3[0] = B01110;
Fig3[1] = B10001;
Fig3[2] = B10000;
Fig3[3] = B01110;
Fig3[4] = B10000;
Fig3[5] = B10001;
Fig3[6] = B01110;
Fig4[0] = B00001;
Fig4[1] = B00001;
Fig4[2] = B01001;
Fig4[3] = B01001;
Fig4[4] = B11111;
Fig4[5] = B01000;
Fig4[6] = B01000;
Fig5[0] = B01111;
Fig5[1] = B00001;
Fig5[2] = B00001;
Fig5[3] = B01111;
Fig5[4] = B10000;
Fig5[5] = B10000;
Fig5[6] = B01111;
Fig6[0] = B01110;
Fig6[1] = B00001;
Fig6[2] = B00001;
Fig6[3] = B01111;
Fig6[4] = B10001;
Fig6[5] = B10001;
Fig6[6] = B01110;
Fig7[0] = B11111;
Fig7[1] = B10000;
Fig7[2] = B01000;
Fig7[3] = B00100;
Fig7[4] = B00010;
Fig7[5] = B00010;
Fig7[6] = B00010;
Fig8[0] = B01110;
Fig8[1] = B10001;
Fig8[2] = B10001;
Fig8[3] = B01110;
Fig8[4] = B10001;
Fig8[5] = B10001;
Fig8[6] = B01110;
Fig9[0] = B01110;
Fig9[1] = B10001;
Fig9[2] = B10001;
Fig9[3] = B11110;
Fig9[4] = B10000;
Fig9[5] = B10000;
Fig9[6] = B01110;
FigT[0] = B11111;
FigT[1] = B01110;
FigT[2] = B00100;
FigT[3] = B00000;
FigT[4] = B00000;
FigT[5] = B00000;
FigT[6] = B00000;
FigD[0] = B00000;
FigD[1] = B00000;
FigD[2] = B00000;
FigD[3] = B00000;
FigD[4] = B00100;
FigD[5] = B01110;
FigD[6] = B11111;
}
// Hier begint het eigenlijke programma !
void loop()
{
// start met de RTC
RTC.get(rtc,true);
// issoleer tientallen en eenheden
// van RTC minuten register
mins = rtc[1]; // tweede Kol in RTC array
if (mins > 9)
{
minl = mins/10;
minr = mins-(minl*10);
}
else
{
minr = mins;
minl = 0;
}
// issoleer tentallen en eenheden
// van RTC uren register
hour = rtc[2]; // derde Kol in RTC array
if (hour > 9)
{
hourl = hour/10;
hourr = hour-(hourl*10);
}
else
{
hourr = hour;
hourl = 0;
}
// minuten sprites plaatsen
Display(minr,19,1);
Display(minl,13,1);
// uren sprites plaatsen
Display(hourr,6,1);
Display(hourl,0,1);
// seconden tik !
if (digitalRead(Puls_1Hz) == HIGH)
{
toolbox.setPixel(11,3,1,true);
toolbox.setPixel(12,3,1,true);
toolbox.setPixel(11,4,0,true);
toolbox.setPixel(12,4,0,true);
}
else
{
toolbox.setPixel(11,3,0,true);
toolbox.setPixel(12,3,0,true);
toolbox.setPixel(11,4,1,true);
toolbox.setPixel(12,4,1,true);
}
// even wachten
delay(200);
}
// Hier eindigd het eigenlijke programma !
// En dan opnieuw beginnen !
/* Functie voor het opbouwen van de sprite
* deze functie wordt elke keer opgeroepen
* als we een cijfer op het display zetten
* opgave welke sprite SpriteIn
* en de plaats op het display 0,0 Xin,Yin
*/
void shiftIt(byte SpriteIn,int Xin,int Yin)
{
// Shift out 5 bits LSB first
boolean LedStatus;
// for each bit in SpriteIn test a bit
for (int i=0; i<5; i++)
{
// if the value of SpriteIn and (logical AND) a bitmask
// are true, set LedStatus to 1 (HIGH)
if ( SpriteIn & (1<<i) )
{
LedStatus = HIGH;
toolbox.setPixel(Xin+i, Yin, LedStatus, true);
}
else
{
LedStatus = LOW;
toolbox.setPixel(Xin+i, Yin, LedStatus, true);
}
}
}
/* Functie om nummer naar sprite te converteren
* en op Shure display te plaatsen
* Opgave te plaatsen cijfer Tvalue
* en plaats via kolom en rij
*/
void Display(int Tvalue,int Col,int Row)
{
switch (Tvalue)
{
case 0 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig0[i],Col,Row+i);
}
break;
case 1 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig1[i],Col,Row+i);
}
break;
case 2 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig2[i],Col,Row+i);
}
break;
case 3 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig3[i],Col,Row+i);
}
break;
case 4 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig4[i],Col,Row+i);
}
break;
case 5 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig5[i],Col,Row+i);
}
break;
case 6 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig6[i],Col,Row+i);
}
break;
case 7 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig7[i],Col,Row+i);
}
break;
case 8 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig8[i],Col,Row+i);
}
break;
case 9 :
for (int i = 0; i < 7; i ++)
{
shiftIt(Fig9[i],Col,Row+i);
}
break;
case 10 :
for (int i = 0; i < 7; i ++)
{
shiftIt(FigT[i],Col,Row+i);
}
break;
case 11 :
for (int i = 0; i < 7; i ++)
{
shiftIt(FigD[i],Col,Row+i);
}
break;
}
}
/* Functie om blokpuls van DS1307 te halen
* Adopted from........
* Set to 90 hex to get 1 Hz pulses !
*/
void Set_Square_Wave(int rate)
{
rate = rate + 144; // 144 = 0x90
Wire.beginTransmission(0x68); // write to control reg.
Wire.send(0x07); // reg adres 07
Wire.send(0x90);
Wire.endTransmission();
}
Feel free to use the code.
If your Dutch isn't that good send me a message and I will explain !
Next step will be , installing some switches to get the right start time/date
in the RTC registers !
Good Luck, Andre



Geen opmerkingen:
Een reactie posten