Skip to content

Transformarea in Sanguino

1. Cuvant inainte

Ok, sa presupunem ca avem deja placa EvB 4.3 v4 impreuna cu un ATmega644P proaspat cumparat in care vrem sa inscriem bootloaderul Sanguino. Ceea ce este grozav, este ca avem pe placa un programator ISP. De fapt, este vorba de un conector „male” atasat la unii din pinii chip-ului FTDI care, impreuna cu un program de PC, poate programa ATmega-uri „virgine”. Voi descrie pas cu pas de ce software avem nevoie, si ce operatii trebuiesc efectuate. Cititi totul cu atentie pentru ca daca „blocati” microcontrollerul, nu este vina mea. Nota: Pagina a fost actualizata cu informatii furnizate de Florin.

Sanguino original proiectat de Zach Hoeken – placa noastra va folosi doar bootloader-ul, pinout-ul si adaptarea pentru Arduino IDE

2. Achizitionarea uneltelor necesare

Vom avea cateva pachete de descarcat de pe Internet :

  • Arduino IDE 0023 – Este mediul de programare pentru placi Arduino/Sanguino care permite compilarea si inscrierea programelor in microcontrollerul placii prin intermediul cablului USB;
  • Firmware-ul Sanguino – contine softul necesar integrarii in Arduino IDE – este nevoie sa descarcati si pachetul Wire pentru Arduino 0023 de la pagina asta;
  • Fisierul ATmegaBOOT_644P.hex – este bootloaderul propriuzis, care nu mai este inclus in ultima versiune a firmware-ului Sanguino;
  • Manualul utilizatorului – manualul placii EvB 4.3 v4 in format pdf de pe situl producatorului;
  • Schema electronica – sub forma de imagine png;
  • EVB ISP – soft-ul pentru inscrierea fisierelor .hex in microcontrollere vide sau care nu folosesc bootloader (il vom folosi sa inscriem bootloaderul);
  • Driver FTDI – driverul USB necesar pentru recunoasterea placii de catre PC.

Cam atat pentru inceput. Pe situl polonez veti mai gasi si o versiune mai veche de WinAVR, adaptata special pentru placa noastra, si ma refer la bibliotecile aditionale pentru perifericele existente pe placa. Dar nu va sfatuiesc sa o folositi pana nu capatati experienta cu Arduino IDE. De asemenea, producatorul ofera suport (numai in limba poloneza) si pentru programarea in BASCOM, un limbaj BASIC pentru programarea AVR-urilor. Haide sa expandam (dezarhivam) arhivele proaspat descarcate de la adresele de mai sus:

– Dezarhivam Arduino IDE (arduino-0023.zip) in directorul radacina al discului C:\ (eu folosesc Total Commander pentru managementul directoarelor, fisierelor si arhivelor monovolum) astfel ca vom avea urmatoarea cale:

C:\arduino-0023\

– Dezarhivam fisierul Sanguino-0023r2.zip in subdirectorul harware al directorului C;\arduino-0023, astfel ca vom avea calea:

C:\arduino-0023\hardware\Sanguino\

– Cream directorul evb-isp in radacina lui C:\ si dezarhivam inauntrul lui fisierul EvB-ISP.zip. Calea va arata asa:

C:\evb-isp\

Pana acum, totul este OK si avem tot ce ne trebuie pentru urmatorul pas:

3. Inscrierea bootloader-ului

Mare atentie la pasul asta! Inainte de toate si daca nu ati facut-o pana acum, inserati microcontrollerul ATmega644P in soclul de pe placa. Apoi, luati 4 fire din cele 10 cu care vine placa (eu am mai cumparat inca 10 dar daca puteti, cumparati mai multe, veti avea nevoie) si faceti conexiunile ca in imaginea urmatoare:

Faceti click pe imagine pentru marire

Apoi, conectati placa la portul USB al calculatorului. Daca nu ati instalat driverele FTDI, atunci este momentul sa o faceti. Fie va duceti pe situl oficial al FTDI, fie dezarhivati fisierul .zip luat de pe situl polonezilor si instalati driverele. Daca aveti un Windows licentiat, lasati-l sa caute pe Internet si sa si le instaleze singur.

Mergeti in directorul C:\evb-isp\ si executati fisierul avrdude-GUI.exe. Tot ceea ce trebuie sa faceti este afisat in imaginea de mai jos. In orice caz, necesita cateva explicatii.

Click pentru marire

Deci sa vorbim un pic despre fiecare camp (field) si buton din caseta de dialog de mai sus (cititorul ar trebui sa fie deja la curent cu denumirile elementelor unei interfete grafice: butoane, cutii de bifare, butoane radio, campuri de editare text, etichete, combo-box-uri, etc.):

  • campul [avrdude.exe File] – in acest camp trebuie sa selectati (apasati butonul din dreapta lui pentru cautare si selectie) fisierul avrdude.exe din calea C:\avr-isp\ . La prima executie a programului, acest camp este gol. El se completeaza automat apoi la fiecare relansare;
  • combobox-ul [Programmer] – trebuie sa selectati din lista aceeasi optiune ca in imaginea de mai sus (FT232R …);
  • combobox-ul [Port] – este vorba de selectarea portului serial alocat de Windows placii. In cazul meu este vorba de COM5 – selectati portul alocat placii voastre;
  • combobox-ul [Device] – selecteaza din lista microcontrollerul corespunzator: ATmega644P (m644p);
  • campul [Command line Option] – este diferit in documentatia originala dar trebuie sa fie ca in imagine pentru microcontrollerul nostru: -P ft0 -B 38400 ;
  • grupul de campuri si butoane [Fuse] – [hFuse] = DC, [lFuse] = FF, [eFuse] = FD . Apasa butonul [Write] din cadrul aceluiasi grup [Fuse], dupa ce ai completat corect campurile. Verifica pana esti sigur, o greseala ar duce la imposibilitatea de a mai programa microcontrollerul!
  • grupul de campuri si butoane [Flash] – la prima lansare a programului avrdude-GUI.exe, campul [Flash] este gol, asa ca trebuie selectat fisierul ATmegaBOOT_644P.hex (vedeti unde l-ati pus cand l-ati luat de pe net). Din momentul acesta, daca microcontrollerul este vid, apasati butonul [Write], daca microcontrollerul nu este vid, atunci apasati butonul [Erase – Write – Verify]. Inarmati-va cu rabdare pentru ca operatiunea de scriere dureaza.

Daca totul a decurs OK, aveti o clona de Sanguino functionala, felicitari! Inchideti programul de inscriere, scoateti cablul USB din PC si placa si scoateti cele patru fire de la conectorul ISP – scoateti-le de tot pentru ca vom folosi bootloaderul in exclusivitate. De acum incolo, pentru a uploada un program-schita veti folosi doar cablul USB.

4. Setarea mediului integrat Arduino IDE

.Pur si simplu lansati arduino.exe din directorul C:\arduino-0023, si din submeniul Tools\Board selectati optiunea Sanguino W/… ca in imagine:

Click pentru marire

Apoi trebuie sa selectati portul serial alocat placii din submeniul Tools/Serial Port . In felul acesta IDE-ul este capabil sa comunice cu placa si sa uploadeze schitele (in Arduino, programele sunt denumite schite).

5. Notarea pinilor (notatia Arduino)

Pentru programare si conectarea perifericelor este obligatoriu sa cunoastem notatia pinilor microcontrollerului. O buna referinta este desigur, situl Sanguino (http://sanguino.cc). Dar am facut efortul si am notat pinii placii EvB in conformitate cu Sanguino:

Click pentru marire

6. Compilarea si incarcarea programelor in microcontroller

6.1. Setarea placii – conexiuni

Avem o singura conexiune de efectuat pentru urmatorul exemplu (clipirea intermitenta a unui LED, asa zisul exemplu „Hello World!”). Alegeti unul din cele 10 fire de conexiune si conectati pinul Digital 13 (vedeti diagrama de mai sus) la unul din LED-urile de pe placa. Mentionez ca pinul cu notatia Digital 0 este folosit ca indicator LED de catre bootloader asa ca, daca doriti sa aveti un „feedback” vizual in momentul uploadarii de schite in microcontroller, conectati-l si pe acela la unul din LED-urile placii.

6.2 Incarcarea unei schite (program) pe placa

Lansati Arduino IDE, si din meniul principal File, alegeti in ordine suboptiunile Examples/1.Basics/Blink apoi apasa butonul Upload (cel cu sageata spre dreapta, de dedesubtul meniului principal) – trebuie sa aveti deja placa conectata la portul USB.

 /*
Created 1 June 2005
By David Cuartielles
based on an orginal by H. Barragan for the Wiring i/o board
*/

int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts
void setup()   {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
}

// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
digitalWrite(ledPin, LOW);   // set the LED on
delay(250);                  // wait for a quarter of a second
digitalWrite(ledPin, HIGH);    // set the LED off
delay(250);                  // wait for a quarter of a second
}

6.3 Rularea schitei (programului)

Odata programul incarcat, acesta porneste imediat. Daca placa este resetata, programul porneste dupa 5 secunde. Un exemplu aveti in filmul de mai jos:

6.4 Alte aplicatii (in afara subiectului de fata)

Au inceput sa apara pe internet tot mai multe aplicatii interesante ce folosesc aceasta placa si asta inseamna ca placa devine din ce in ce mai cunoscuta. Iata cateva luate de pe youtube:

7. Ce urmeaza? Pregatirea placii pentru viitoarele exemple

Dupa ce am facut inutilizabil un ATmega32 (cel original care venea cu placa), imi cam pierise cheful de AVR-uri. Dar nu-mi pica bine nici sa ma las pagubas. Dupa o vreme, am achizitionat ATmega644P si ca sa ma fortez sa invat lucruri noi (cal batran in buiestru nu prea mai merge), mi-am fixat doua obiective majore:

  1. Refacerea programului demonstrativ cu care venea ATmega32 (afisare ora curenta, temperatura, codurile de la o telecomanda in infrarosu) dar in limbaj Arduino;
  2. Proiectarea unui inregistrator (logger) pe cartela de memorie SD a valorilor unor senzori de pe placa.

Asa am reusit sa invat lucruri noi si sa mi se deschida apetitul pentru microcontrollere ATmega. Pentru parcurgerea pas cu pas a tutorialelor viitoare, trebuie sa pregatim placa intr-un anume fel:

7.1 Organizarea pinilor

Trebuie sa stabilim o conventie in acest sens, pentru o mai mare usurinta in realizarea exemplelor/tutorialelor ce vor urma (urmariti sidebar-ul din dreapta de la sectiunea Pagini). Trebuie sa ne hotaram care pini ii folosim si pentru ce, pentru care periferice. La fiecare exemplu voi prezenta un tabel cu conexiunile necesare (daca este cazul). Asadar,

  • [Digital 0] – acest pin liber este rezervat de bootloader pentru LED-ul de semnalizare (feedback). Acest LED clipeste cand un program este incarcat in microcontroller;
  • [Digital 8,9] – acesti pini sunt deja conectati fizic (cablaj imprimat pe placa) la portul serial al cip-ului FTDI pentru legatura „USB-to-serial”. Conexiunea USB este folosita pentru uploadarea de aplicatii noi dar poate fi folosita si in timpul rullarii aplicatiei pentru comunicatii seriale cu PC-ul;
  • [Digital 16,17] – acesti pini sunt conectati fizic la porturile I2C a perifericelor EEPROM si PCF8583 RTC. Nu pot fi folositi decat in conexiuni I2C cu alte periferice;
  • [Digital 2] – este un pin liber dar este alocat de mine (in cadrul tutorialelor) conexiunilor de tip „One Wire” folosite de catre unii senzori de temperatura ca DS18B20;
  • [Digital 3] – este un pin liber, dar este rezervat de biblioteca „Infrared Library” – daca nu intentionati sa proiectati aplicatii cu IR, atunci pinul poate fi folosit normal ca intrare/iesire (I/O = Input/Output) digitala;
  • [Digital 13] – este un pin liber dar din motive istorice, este asociat cu un LED, folosit in clasicul exemplu de programare „Hello world!” – puteti sa-l folositi ca I/O digitale;
  • [Digital 4,5,6,7] – sunt pini conectati fizic soclurilor SD-Card si ISP si sunt asociati portului SPI al microcontrollerului – pot fi folositi ca I/O digitale generale  doar daca nu folositi portul SPI si soclurile SD-Card si ISP sunt libere;
  • [Digital 22, 23, 24, 25, 26, 27] – sunt pini liberi dar sunt rezervati de mine display-ului LCD 16×2.

Legenda:

  •  „pin/pini liberi” = pini neconectati fizic la nici un periferic de pe placa;
  • pin/pini conectati fizic” = pini conectati fizic la periferice prin cablajul imprimat al placii.

7.2 Modul de utilizare a butoanelor de pe placa

Asa cum va puteti da seama urmarind schema electronica, cele 5 butoane de pe placa NU au rezistori Pull-Up. Au unul din contacte conectat la masa, celalalt fiind disponibil pentru conexiunea cu unul din pinii microcontrollerului. O solutie rapida este sa activam rezistorii interni Pull-Up din interiorul microcontrollerului pentru fiecare pin folosit ca intrare digitala si care este conectat la unul din butoanele de pe placa. Cum se face asta? In documentatia de pe situl http://arduino.cc gasim:

The analog pins also have pullup resistors, which work identically to pullup resistors on the digital pins. They are enabled by issuing a command such as

digitalWrite(A0, HIGH);  // set pullup on analog pin 0

while the pin is an input.

Textul original se refera la pini analogi dar acelasi procedeu se aplica in primul rand pinilor digitali. Iata un exemplu practic. Presupunem ca avem pinii digitali 18, 19 si 20 conectati la trei dintre butoanele de pe placa. Codul pe care trebuie sa-l scriem in functia setup() arata asa:

void setup(){
  //setare pini ca intrari digitale
  pinMode(18, INPUT);
  pinMode(19, INPUT);
  pinMode(20, INPUT);

  //activare rezistente pullup interne
  digitalWrite(18, HIGH);
  digitalWrite(19, HIGH);
  digitalWrite(20, HIGH);
}

7.3 Setarea placii in mod default (implicit)

Propun urmatoarele conexiuni „permanente” intre pinii microcontrollerului si perifericele de pe placa:

– [Digital 0] – conectat la unul din LED-urile de pe placa, la alegere, acesta fiind indicatorul nostru de bootload;

– [Digital 13] – conectat la unul din LED-urile de pe placa, la alegere, acesta fiind LED-ul folosit in primul tutorial Arduino, clipirea intemitenta a unui LED.

Acestea fiind zise, conectati placa la portul USB al calculatorului si incarcati prima schita (program) folosind meniul principal al Arduino IDE, File/Examples/1,Basics/Blink – clipirea intermitenta a LED-ului.

7.4 Instalarea bibliotecilor aditionale, necesare functionarii perifericelor placii

Avem nevoie de biblioteci aditionale pentru ferifericele de pe placa, biblioteci care nu se gasesc in pachetul original Arduino:

  • sdfatlib – biblioteca pentru sistem de fisiere FAT16 si FAT32, pentru ambele tipuri de SD-Card, standard si capacitate mare. Suporta doar denumiri scurte de fisiere, 8+3 caractere;
  • fat16lib – o varianta redusa a sdfatlib, doar pentru FAT16 – utila atunci cand spatiul liber de FLASH si RAM este redus;
  • IRremote – biblioteca pentru interfatarea telecomenzilor in infrarosu;
  • OneWire – biblioteca de baza pentru conexiune „un fir”, folosita pentru unele tipuri de senzori de temperatura;
  • DalasTemperature – biblioteca pentru senzorul de temperatura DS18B20 – depinde de existenta bibliotecii OneWire;
  • PCF8583 – biblioteca pentru ceasul in timp real de pe placa.

Pentru conveninenta, am inclus totul intr-o singura arhiva, sanguino_libraries.zip (click pentru descarcare) pe care o expandati in directorul

C:\arduino-0023\libraries\

Cam asta este tot, restul este abordat in cele cateva tutoriale. Totusi, acestea se adreseaza unui utilizator mediu, care este la curent atat cu limbajul si mediul de programare Arduino, si care are idee de microcontrollere. Practic, se adreseaza unui „utilizator” mediu de microcontrollere Microchip care vrea sa incerce si microcontrollere ATmega, dar in modul specific lui Arduino.

 7.5 Setari proiect, necesare in limbajele de programare de la mikoElektronika

Daca preferati sa continuati sa folositi bootloaderul Sanguino, dar vreti ca .hex-ul sa-l generati folosind un limbaj de programare de la mikroElektronika (mikroC, mikroPascal, mikroBasic), setarile proiectului trebuie sa arate ca in imaginea urmatoare:

Clic pe imagine pentru marire

Apoi, fisierul .hex generat se poate incarca in placa folosind programul Avrdude (pentru detalii privind parametrii din linia de comanda, ceva mai tarziu).

One Comment
  1. Va rog sa semnalati eventuale probleme cauzate de bibliotecile aditionale. Nu incercati sa folositi versiuni de Arduino IDE mai mari de 0023. Pana vor fi portate si testate toate bibliotecile existente pentru versiunea 1.x va ma trece timp. Versiunea 0023 este arhisuficienta.

Va rog, nu folositi limbaj de messenger. Multumesc!

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: