Table of Contents

Aplicație Practică Sistem Embedded: Epic Clock

Introducere

Epic clock este un ceas digital de apx 3m x 0.5m pus pe perete în ED218. Se dorește ca acest ceas digital să își poată lua ora/data exactă direct de pe Internet.

De ce este Linux potrivit pentru acest proiect?

De ce?

Pentru că lucrurile se învăța mai bine atunci când te și distrezi. În acest laborator veți aplica cunoștințele pe care vi le-ați însușit la laboratorul anterior pentru a comanda ceasul gigantic din ED218 aka Epic Clock.

Cum funcționează

Fiecare “cifră” din ceas este un digit 7-segment de tip anod comun iar fiecare segment este format din 10 LED-uri high-brightness legate în serie. Cele șapte segmente de la fiecare digit sunt denumite și legate ca în figura de mai jos:

Pentru că nu avem suficiente semnale de comandă pentru 7 x 6 = 42 de segmente, fiecare digit în parte are semnalul lui de enable (EN1..EN6) iar afișarea se face prin ciclarea rapidă prin toți digiții. Aprinderea punctelor despărțitoare se face tot alternativ, o dată la 3 digiți.

Punctele despărțitoare ore:minute și minute:secunde au fiecare semnalele lor de comandă EN_H:M, respectiv EN_M:S, ca în figura de mai jos:

Pinout-ul pentru semnalele de comandă de pe RaspberryPi este dat în schelet.

Exerciții

  1. Scrieți un modul de kernel care să afișeze cifre pe Epic Clock.
    • (4p) Afișați cifre pe ceas.
    • (3p) Afișați toți digiții primiți prin interfața de device driver.
    • (1.5p) Scrieți o aplicație userspace (script sau cod c) care să afișeze ora folosind driver-ul.
    • (1.5p) Modificați aplicația userspace să afișeze ora și data folosind driver-ul. Data și ora se vor afișa alternând (ex 2 secunde ora, 2 secunde data).
    • (1p) Afisați orice text doriți pe ceas.

Structura digits conține segmentele necesare pentru toate cifrele:

int digits[10][8] =
{
	{1,1,1,1,1,1,0},	//0
	{0,1,1,0,0,0,0},	//1
	{1,1,0,1,1,0,1},	//2
	{1,1,1,1,0,0,1},	//3
	{0,1,1,0,0,1,1},	//4
	{1,0,1,1,0,1,1},	//5
	{1,0,1,1,1,1,1},	//6
	{1,1,1,0,0,0,0},	//7
	{1,1,1,1,1,1,1},	//8
	{1,1,1,1,0,1,1},	//9
};
 

Resurse