User Tools

Site Tools


lab:2015:epicclock

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?

  • Este ușor de configurat pentru acest task
  • Există deja stivă de protocoale
    • inclusiv suport pentru NTP
  • Pentru a comanda hardware specializat se pot folosi GPIO-uri într-o aplicație userspace

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

lab/2015/epicclock.txt · Last modified: 2017/01/16 09:39 by Dan Dragomir