miercuri, 20 mai 2009

Schema electrica (finala)

Bill Of Materials

QTY PART-REFS VALUE
--- --------- -----
Resistors
---------
4 R1-R4 330

Capacitors
----------
2 C8,C9 1nF

Integrated Circuits
-------------------
1 U1 ATMEGA324P
1 U3 AD581

Diodes
------
1 D2 1N914

Miscellaneous
-------------
1 J1 CONN-D25M
1 LCD1 LM3229
4 RB1-RB4 330
1 RR 10k
4 RV1-RV4 POT

miercuri, 6 mai 2009

Optimizari

Am facut niste simulari ale programului folosing simulatorul din avr studio pentru a vedea viteza de executie. Iata ce am obtinut:



















Tipul rutineiTimpul de executie
desenare cerc46ms
desenare linie57ms
verificare coliziune1 ms
O parcurgere completa a
rutinei(pentru un labiritnt
cu un numar mic de linii)
210ms

Timpul de desenare variaza in functie de dimensiunea obiectelor desenate. Se poate vedea ca rutinele de desenare sunt cele mai lente(si mai exact partea de scriere pe lcd). Astfel pentru programul simulat(dar si testat pe lcd) aveam aproximativ doar 5FPS, ceea ce ducea la o afisare in trepte a miscarii dar si la scaderea preciziei sistemului de coliziune.
Solutia pe care am gasit-o a fost desenarea labirintului doar la inceput si nu la fiecare frame. Astfel timpul de executie s-a imbunatatit dramatic. Insa in acest caz apare o problema: se mai intampla ca bila sa se suprapuna cu pixeli din labirint si la actualizarea imaginii(la stergerea bilei pentru desenarea ei la pozitia urmatoare) se sterg si pixeli din labirint. Acest bug il voi rezolva pe viitor.

O alta optimizare a fost modul de desenare a bilei. Initial dupa cum se poate vedea in poza, la capetele superioare si inferioare bilei ii lipseau niste pixeli, iar pentru dimensiuni mai mici ale bilei aceasta semana cu o acolada.


Acum insa bila este desenata aproape complet:






Original Video - More videos at TinyPic

luni, 4 mai 2009

Cu un pas mai aproape

Am rescris algoritmul de detectie a coliziunii si de reactie astfel incat merge pentru orice tip de linie(nu numai orizontala sau verticala).
Algoritmul propriu-zis l-am conceput intr-un timp destul de scurt deoarece nu este foarte complicat si se bazeaza pe alegbra vectoriala. Ceea ce a durat foarte mult a fost (din nou) debugingul deoarece se pare ca avr-gcc are un bug(sau poate asa ar trebui sa functiuneze):

- daca avem 2 variabile de tip int a si b si variabila c de tip long, atunci executand instructiunea c=a*b; vom obtine in c rezultatul de tip int si nu de tip long al inmultirii si nu scapam de posibile overflowuri.
Intre timp cred se pare ca s-a ars si microcontrollerul(cert este ca nu mai merge programat) si l-am inlocuit cu alt atmega324p (multumesc danut pt uC:) )