Game of Life este un “joc” in care se porneste de la o configuratie initiala si se observa evolutia acesteia. Configuratia este alcatuita din celule vii si moarte. Cand spun vecin, ma refer la o celula vie aflata in vecinatatea alteia.
Schema bloc a proiectului:
KS0108 este controllerul care se afla in LCD si care interpreteaza comenzile trimise de ATmega16.
Produsul final:
La placuta initiala am mai adaugat:
In imaginea de mai jos este prezentat felul in care am conectat LCD-ul la pinii microprocesorului. LCD-ul din imagine nu este identic cu al meu, dar avea pinii asemanatori.
Lcd-ul l-am alimentat la 5V la pinii aflati pe placuta langa portul D al ATmega16.
Pt ca led-urile lcd-ului sa fie alimentate, trebuiau legate precum in imaginea de mai jos. Deoarece nu am avut o rezistenta de 16.5 Ω, am folosit 4 rezistente de 4.7 Ω inseriate.
Codul l-am scris folosind Programmer's Notepad, pe Windows 7, 32 biti.
Pt a interactiona cu KS0108, am folosit o biblioteca de pe net. Cand am vazut ca nu functiona, am incercat sa imi scriu propriile functii de afisare, dar nu am reusit sa fac sa apara nimic.
Pt partea de Game Of Life, pastrez doua matrici: in una am starea anterioara a jocului, iar in cealalta imi construiesc starea curenta. Pentru a ocupa cat mai putina memorie, fiecare bit dintr-un char reprezinta un punct pe lcd.
Creare fisier .hex: make
Stergere fisiere executabile: make clean
Descriere functii necesare jocului:
In while, verific cati vecini are fiecare celula si in functie de numar, determin noua ei stare (vie sau moarta). Apoi afisez matricea curenta, iar matricea curenta devine matricea veche.
LCD-ul are 20 pini, printre care:
Datele le-am pus pe PORTA, iar partea pt comenzi (RW, DI, CS, E) pe PORTC. Pt a putea folosi PORTC, am inteles ca trebuie dezactivat JTAG, ceea ce am si facut. Oricum, firele sunt legate la conectori, care pot fi mutati pe orice port. Doar trebuie actualizat in fisierul header noile porturi folosite.
Descriere functii afisare folosite:
Dispunerea punctelor pe LCD:
Am pornit de la: si am ajuns la:
Codul este scris, LCD-ul este alimentat, dar din pacate, nu am reusit sa afisez nici macar un punct.
Datorita acestui proiect si laboratorului, mi-am consolidat lucrul pe biti. De asemenea, acum incerc mai mereu cand scriu cod, sa folosesc cat mai putin spatiu. Mi-as dori sa reusesc sa il fac sa afiseze ceva, pentru a realiza apoi si lucruri mai complicate cu el.