duminică, 10 februarie 2013

Pinguino 18F4550 v01

English:
I have an old development home made board with an PIC18F4550. I decided to modify it to be used in combination with Pinguino, Below you can see what became in the end. Here is how it looked before the surgery :) - old dev board
 *************************************

Oarecum invidios pe cei ce se jucau cu Arduino de atata amar de vreme, ma gandeam cum ar fi un Arduino insa bazat pe microcontrolerele de la Microchip - din astea am, am programator, cu ele sunt obisnuit, nu vreau sa trec la Atmel.

Pe de alta parte din ce se vorbeste era evident ca trebuia modernizat cumva Arduino:
  • suportul USB nativ al cipurilor din ziua de azi nu e prezent la Arduino (doar cu cipuri FTDI)
  • puterea de calcul / memoria marita si pretul dispozitivelor de azi sunt peste ceea ce ofera Arduino. 

O comunitate puternica care a creeat aplicatii care mai de care mai utile ori mai traznite, faptul ca de la artisit la programatori profesionisti - toti au lucrat cu Arduino datorita usurintei in programare - acestea sunt lucruri pe care Arduino le va detine ca un record de neegalat. Cel putin nu asa rapid.

Iata ca in cele din urma a aparut si Arduino pentru Microchip - se numeste Pinguino si aici gasiti pagina proiectului: Pinguino. Dupa cum veti vedea acolo, sunt mai multe microcontrolere Microchip incluse in acest proiect.

De interes pentru mine a fost PIC18F4550, un microcontroler cu capsula DIP40, adica are picioare, sigur, nu merge cu ele :), dar este mai usor de lucrat acasa de catre amatori. Microcontrolere de azi sunt in majoritate componente pentru tehnologia SMT (tehnica montarii pe suprafata).

Acum ceva vreme am inceput un scurt serial despre cum sa ii dai drumul la un microcontroler PIC18F4550: cum faci o placa "de dezvoltare" pe care experimentezi, apoi cum programezi samd - vezi aici. Cum placa mea avea PIC18F4550 si portul USB scos deja afara, m-am gandit sa o modific astfel incat sa pot incerca Pinguino.

Ca si hardware, a trebuit sa adaug conectori pieptene de 2,54 mm 2 rinduri de o parte si de alta a cipului. In acest fel am acoperit toti cei 28 de PINi pe care Pinguino ii utilizeaza (atentie: nu este vorba de pini fizici, asa se numesc: PIN0 corecpunde la pinul fizic 33).

Am mai adaugat un LED rosu (anti deochi) la pinul fizic 6 al cipului.

Iata schema utilizata:


Schema de principiu pentru Pinguino 4550


Pe de alta parte, am pastrat ce aveam deja pe placa (mi-a usurat munca): LCD 16 x 2, MAX232 + conector serial, interfata ICSP de programare, alimentarea cu 7805, cele 3 butoane, cele 3 LEDuri si rotary encoderul (comutator rotativ?!). Ideea e fost ca la final sa utilizez jumperi intre 2 pini adiacenti din conectorul pieptene, de aceea am legat corespunzaotr:
  • 6 semnale de la LCD 16x2 la portul RB2..RB7 (sau PIN..PIN7) 
  • 3 LEDuri la RC0, RD0, RD1 (PIN10, PIN21, PIN22)
  • 3 butoane la RD2, RD3, RD4 (PIN23, PIN24, PIN25)
  • rotary encoderul la RD5, RD6 (PIN26, PIN27), butonul acestuia la RD7 (PIN28)
  • MAX232 este la RC6, RC7 (PIN8, PIN9). 
Portul USB va fi de acum incolo port USB, adica pinii respectivi nu se pot utiliza la altceva. Mai raman pini analog / digitali respectiv PWM / digitali (2).

Cum functioneaza Pinguino?

In primul rind trebuie un micronctroler din lista de pe site, in cazul meu un PIC18F4550. Microcontrolerul se va programa cu un firmware special, bootloader. Aici apare o problema gen oul sau gaina, dar se rezolva usor: adica iti trebuie un programator pt prima placa, apoi totul se poate repeta.
Bootloaderul functioneaza in felul urmator:
  • la pornirea microncontrolerului, monitorizeaza portul USB (se presupune ca microcontrolerul este conectat prin cablu la portul USB al unui computer cu Linux / Windows etc) 
  • daca pe portul USB se transmite ceva in primele 3 secunde de la pornire, atunci microntrolerul incepe sa scrie acea informatie / program in memoria sa 
  • dupa ce termina de scris, se da un restart si dupa ce trec cele 3 secunde, in cazul in care nu vine nimic pe portul USB, micronctrolerul incepe sa execute ceea ce tocmai s-a scris. 
Este foarte convenabil sa ai un bootloader USB caci nu mai ai nevoie de programator (doar pt prima placa) sau de sursa de alimentare (pentru aplicatii cu consum redus de energie). Bootloaderul pe care eu l-am instalat este bootloaderV2.12_PIC18Fx550.hex, din anumite motive bootloaderV3.00_PIC18Fx550.hex nu a mers. (bootloaderele se gasesc in directorul de instalare, de exemplu: C:\PinguinoX.3\extra\bootloaders\8bit\ )

Acum pe partea cu computerul: ai nevoie de un driver si de un mediu in care sa poti scrie programelele pentru Pinguino (IDE). Eu am instalat libusb ca driver si Pinguino X.3 ca si IDE.

Pinguino 4550 este instalat corect ca si device hardware



Pinguino IDE


Imi place ce a iesit si cum functioneaza, am verificat ca toate butoanele, pinii PWM, LEDurile si LCDul 16x2 sunt functionale. Mai ramane interfata seriala, rotary encoderul si pinii analog / digitali.






Ideea cu jumperi este buna, poti folosi de asemenea si fire care sa iti conecteze ce PIN vrei cu un dispozitiv anume - te scapa de lipit fire.

LEDul de la pinul fizic 6 este stins la inceput pentru cateva secunde, apoi ramane aprins, din acel moment incepe sa se execute codul incarcat.

4 comentarii:

  1. "LEDul de la pinul fizic 6 este stins la inceput pentru cateva secunde, apoi ramane aprins, din acel moment incepe sa se execute codul incarcat. "

    Intotdeauna am avut discutii cu Jean-Pierre Mandon pe tema asta :) . Din punctul meu de vedere, este mai de folos sa am semnalizata perioada cat timp bootloaderul are controlul microcontrollerului pentru ca oricum, stiu cand incepe aplicatia. Si apoi, este foarte posibil ca acel LED sa-l folosesc pentru cu totul altceva si implicit, functia pentru care a fost proiectat dispare. Insa nu am reusit sa-l conving sa-i schimbe functia.

    RăspundețiȘtergere
    Răspunsuri
    1. Si eu ma gandeam ca ar fi faina optiunea sa folosesti acel pin ca si LED pt bootloader sau in aplicatia ta ca un pin normal. Totusi nu m-am dumurit la alte aspecte, spre exemplu am facut un fel de "stress test" - am incarcat acelasi soft de cateva ori pe placa si dupa a 5-6a oara, lucruri nu mai merg ca la inceput, desi am incarcat acelasi soft :)

      Ștergere
  2. Inca un lucru pentru care am facut lobby, a fost trecerea la compilatorul Microchip, Mplab C18, care in varianta free ofera o optimizare cu mult peste SDCC. Si apoi venea cu o biblioteca completa, o multime de bootloadere functionale si suport inclusiv pentru Linux. Nici aici nu am avut succes in a-l convinge pe Jean-Pierre.

    Daca nu ai o tinta clara, definita, risti sa duci tot proiectul in obscuritate. Eu ca profesor, as pregati studentii pentru experienta dura din industrie antrenandu-i direct pe compilatorul de la Microchip. Daca duci pe mai departe proiectul Pinguino doar de dragul proiectului, atunci viitorul nu este prea stralucit.

    RăspundețiȘtergere
    Răspunsuri
    1. Eu nu sunt atat de avansat, incerc sa fac multe lucruri si nu am timp sa excelez in vre-un domeniu, dar nu ma deranjeaza. De asta mi-ar face placere sa fie un grup de actiune din romani pe aceasta tema, aici la Poli Timisoara (Facultatea de Electronica si Telecom.) sunt oameni tineri care incearca sa faca ceva pozitiv. Totusi, daca ar fi un efort concertat (vezi RaspberryPi - poate nu de asemenea anvergura), s-ar produce schimbarile. Pe de alta parte cred ca trebuie oferita informatie in limba romana, eu sunt dicpus la colaborare, oricat as putea ajuta.

      Ștergere