miercuri, 22 aprilie 2009

Primii pasi in programare

Proiectul incepe sa ia contur. Am realizat un sistem de detectie a coliziunii si de schimbare a directiei bilei in functie de coliziune(deocamdata functioneaza doar pentru linii orizontale si verticale).
Am folosit lcd-ul pentru debugging printand pe el valori a diferite variabile ce ma interesau.

Pentru a face programul cat mai eficient (folosirea unei memorii de date mai mici, timpi mai mici de executie) am ales sa nu folosesc variabile cu virgula(floating point). Am ales o valoare de normare egala cu 180(ce am ales-o dupa mai multe calcule ce au luat in consideratie dimensiunea lcdului) ce va reperezenta dimensiunea 1. Daca as avea o variabila int cu valoarea 630 ea ar reprezenta numarul 3,5(630/180). Pot calcula astfel cu o precizie de 0,0056 (1/180).

Original Video - More videos at TinyPic

joi, 16 aprilie 2009

It is alive!!


Saptamana trecuta am cumparat de la Comet un lcd grafic 160x80.
Dupa o noapte de debugging am reusit sa fac lcd-ul sa functioneze cu ajutorul codului scris deIvan Sergeev http://www.frozeneskimo.com/samsunglcd/avr-lc7981-v1/ (lc7981.c si lc8981.h)(multumesc Ivan!).

Lcd-ul l-am testat pe un breadboard(de fapt sunt 3 unite) pe care am pus un microcontroller atmega324p.



Mai pe larg:
Toata noaptea am incercat sa fac un debuger ce ruleaza pas cu pas codul programului (cate o instructiune atunci cand apas pe un buton) pentru a vedea unde anume intervine ceva neprevazut, fara insa sa reusesc sa depistez unde era hiba.
Hiba era chiar la mine.. Pe la 3:30 dimineata cand vroiam sa ma culc am zis sa refac conexiunile dintre uC si lcd.. Surpriza, lcd-ul mergea, codul pe care-l credeam de vina si pe care incercam sa-l "repar" n-avea nimic, eu si numai eu eram de vina. Desi initial verificasem toate firele cu test de conectivitate se pare ca atunci cand am mutat "platforma" langa calculator sa incarc codul un fir nu mai facea contact.
Am invatat de aici cat de important e sa verific conexiunile de fiecare data cand nu merge ceva inainte de a da vina pe cod. :)

duminică, 22 martie 2009

Descriere hardware

Starea placutei:



Schema cu ceea ce am facut pana acum:

Implementare

Tema pe care am ales-o pentru proiect este: jocul cu bilă în labirint, sensibil la înclinare.

Vom folosi un accelerometru cu 2 axe, cu ajutorul caruia vom masura inclinarea. Accelerometrul va fi conectat la convertorul analog digital al microcontrollerului.
Accelerometrul are cate o iesire pentru fiecare axa, iar tensiunile de la iesirile acestuia sunt dependente de inclinarea pe axale respective. Astfel cu ajutorul microcontrollerului vom putea calcula inclinarea placutei.
Stiind inclinarea placutei putem sa aflam ce acceleratie ar trebui sa aiba bila pe axele X si Y.
Ca interfata cu utilizatorul vom folosi un lcd cu mod grafic si unul sau mai multe butoane pentru functionalitate(reset etc).
Functiile microcontrollerului vor fi:
- sa afle inclinarea placutei prin intermediul accelerometrului
- sa calculeze deplasarea bilei si viteza ei la intervale mici de timp dt si sa detecteze coliziunea cu obstacolele labirintului
- sa afiseze pe lcd labirintul si bila