sâmbătă, 9 august 2014

Despre Pinguino


Zvarcolindu-ma de caldura m-am apucat sa hoinaresc hai-hui pe plaiurile internetului, ca de obicei fara un scop precis. Din-ntruna in alta am dat peste un proiect (evident open source) care incearca sa pastreze simplitatea lui Arduino utilizand insa un microcontroller de tip PIC : PINGUINO. 

De ce l-au numit asa ? Probabil dezvoltatorii sunt mari iubitori de Linux sau poate este o iornie fina la adresa celor care se perpelesc la 40 de grade Celsius facandu-i astfel  sa viseze catre meleaguri mai racoroase.  

Din cate am vazut, proiectul este inceput de cativa ani insa, desi (cel putin din punctul meu de vedere) prezinta potential, nu a facut prea mare valva.  In esenta se pot utiliza uC-le PIC din seria 18F cu conditia sa aiba suficenta memorie ROM pentru a putea incarca bootloader-ul (7KB !!!!!!) dar si un modul USB integrat hardware. Pe pagina oficiala se gasesc detalii despre uC suportate si schemele de realizare practica a placutelor de dezvoltare. 

M-am hotarat sa realizez si eu un "PINGUINO" in configuratia PIC 18F4550 cu cristal de 20MHz, concluziile fiindu-va prezentate in ele ce urmeaza. 

Plecand de la schema electronica propusa de producatori am realizat un cablaj imprimat pe care am plantat componentele.



Schema electronica originala propusa de producatori


Pentru inceput...

Initial cand am vazut schema am fost foarte incantat pentru ca am intuit faptul ca atat pentru programare cat si pentru comunicatia cu PC-ul se utilizeaza direct conexiunea USB. Adio programatoare externe oricare ar fi ele: FTDI, convertoare TTL, PICKIT 2 sau 3 etc. Dar ca de obicei exista un "dar", pe care il voi discuta ceva mai tarziu. Deocamdata toate sunt bune si frumoase.

Revenind la schema, nimic nu pare complicat: nu este decat minim-minmorum-ul necesar pentru a se putea utiliza uC-ul. In fine, poate doar RUN LED necesita ceva explicatii. In esenta este un fel de PIN 13 al lui Arduino care permite testarea placii fara a utiliza componente externe dar are si rolul de a semnaliza daca uC-ul este modul bootloader sau in modul de executie a programului scris de utilizator. Ce???? 

Da. Aici incepe prima parte a lui "dar". Dupa ce se realizeaza montajul si dupa ce se "arde" in uC bootloader-ul butonul de reset nu mai este ceea ce a fost la inceput:  un simplu buton de reset ci este unealta prin care se schimba starea uC-ului din modul de executie a programului in modul bootloader. O data apasat butonul (presupunand ca in uC se afla incarcat un program, altul decat bootloader-ul) programul utilizatorului se sterge putandu-se astfel incarca un nou program. Nu incercati sa incarcati un alt program daca uC-ul nu este modul bootloader pentru ca IDE-ul nu il va detecta. De ce asa ?? Nu stiu, dar probabil exista un scop bine intemeiat pentru care dezvoltatorii au facut chestia asta. Singura cale de a reseta uC-ul este aceea de a intrerupe alimentarea, deci un comutator fie pe masa fie pe "plus".  Revenind la RUN LED acesta pulseaza foarte repede in modul bootloader facand astfel semnalizarea posibila. Problema este ca in modul de rulare a programului scris de utilizator RUN LED se aprinde numai daca PIN 6 este pus la masa. Asadar comanda digitalWrite(USERLED, HIGH) este echivalenta cu stingerea ledului iar digitalWrite(USERLED, LOW) este echivalenta cu aprinderea ledului. De ce ?? Nu stiu. 

Cablajul...

Am realizat doua cablaje: primul dupa schema originala, executat si testat, si al doilea cu RUN LED -ul conecat cu anodul la PIN 6 pentru a preintampina problema descrisa mai sus. 

1. Schema originala - RUN LED cu catodul la PIN 6.

Scheama realizata dupa indicatiile dezvoltatorilor


Plasarea componentelor



2. Schema modificata - RUN LED cu anodul la PIN 6.


Schema modificata RUNLED cu anod la PIN6

Plasarea componentelor varianta 2

Se observa clar modul ca pentru a putea inghesui montajul intr-un spatiu cat mai  mic este necesar sa se monteze uC pe un soclu pentru ca rezistentele (R1,R2,R3) si condensatoarele (C1 si C4) SA poata fi montate sub el. Cablajele in format pdf le puteti descarca de aici.

Instalarea...

Aici incepe cea de-a doua parte a lui "dar". Pentru a putea utiliza ceea ce am realizat mai sus trebuie instalate doua drivere: primul dintre ele reprezinta driverul pentru modul de bootloader si practic face posibila transfrarea codului din PC in PIC iar cel de-al doilea este necesar atunci cand se doreste realizarea unei comunicatii seriale cu PC-ul (dupa ce a fost incarcat codul utilizatorului). Cel de-al doilea driver este utilizat de PC numai atunci cand utilizatorul a scris un cod care utilizeaza libraria CDC (Communication Device Class). Este un driver pus la dispozitie de Microchip si  realizeaza un port COM virtual pentru a se putea realiza comunicatia seriala. Pentru a nu trece prin chinurile instalarii o sa descriu aici procedura de instalare in cativa pasi simpli.
  1. Scrieti un cod care utilizeaza libraria CDC, poate fi chiar unul din cele doua exemple.
  2. Treceti Pinguino in modul bootloader apasand butonul de reset.
  3. Uploadati codul in PIC. Atentie!!!!! In IDE trebuie sa alegeti placa si botloader-ul corespunzator.
  4. Windows-ul fericit va detecta un nou device. Apoi nefericit va zice ca nu are drivere pentru el.
  5. Deschideti device manager-ul si veti vedea acolo un device numit PINGUINO cu un semn de exclamare galben.
  6. Downloadati driverul de aici.
  7. Instalati driverul in Windows 95 style :-) . 
  8. Click dreapta pe PINGUINO alegeti properties, update driver, browse my computer, let me pick, ports (com & lpt), click next, click have disk, alegeti folderul in care ati dezarhivat driverul. Windows-ul il va instala nu inainte de a va atentiona ca... bla bla bla. 

Pentru a putea trimite si primi date (la fel ca ) la Arduino va recomad din tot sufletul sa utilizati Putty.
Este gratis si functioneaza perfect. Si aici va vand un pont: dupa ce il configurati pentru modul serial pentru a
fi vizualizate datele trimise din consola este bine sa se bifeze in sectiunea Terminal Local eccho - Force on
si  Local line editing - Force on.

Utilizarea ...

Mediul de programare este destul de prietenos si se doreste a fi o clona a celui utilizat de Arduino. Si aici 
gasim o multitudine librarii unele pentru device-uri altele pentru utilizarea mai usoara a modulelor interne ale
PIC-ului (timere, intreruperi, PWM etc.).  Ca si la Arduino exista cele doua functii obligatorii void setup()
si void loop()  partea frumoasa, zic eu, este ca in setup se pot seta parametrii uC-ului in doua moduri.
Primul mod este "Arduino Style" iar cel de-al doilea este tipc pentru PIC utilizand registrii interni ai acestuia.
De fapt aceasta facilitate poate fi utilizata oriunde in program facand din PINGUINO o unealta mult mai 
versatila decat Arduino.

Incheiere...

Personal cred voi petrece ceva timp jucandu-ma cu PINGUINO testanad diverse programe. Nu este atat
de prietenos ca Arduino dar prezinta posibilitati de utilizare destul de interesante pe care daca timpul imi va
permite as dori sa le exploatez.
Iaca si ceva poze cu motajul realizat de mine:

PARTEA PLANTATA

TRASEE SI LIPITURI







Niciun comentariu:

Trimiteți un comentariu