luni, 31 mai 2010

Bootloader optimizat pentru Arduino

Cei care prefera sa foloseasca bootloader-ul standard de pe placile Arduino stiu ca acesta ocupa destul de mult. Un bootloader optimizat, care ne lasa mai mult spatiu pentru programe, gasim aici: Optiboot. Pentru instalarea bootloader-ului avem nevoie de un programator ISP sau de inca o placa Arduino.

Allows larger sketches. Optiboot is a quarter of the size of the default bootloader, freeing 1.5k of extra space.
Makes your sketches upload faster. Optiboot operates at higher baud rates and has improved programming logic.
Adaboot performance improvements. Optiboot runs your sketches sooner.
Compatible with 168 and 328 Arduinos including Lilypad, Pro, Nano



Cu optiboot v3


Cu bootloader-ul standard

In cazul unei placi cu 168 realizam o economie de 1KB, adica 6.25% mai mult spatiu pentru programe!





In cazul unei placi cu 328 realizam o economie de 1.5KB, adica 4.69% mai mult spatiu pentru programe!

Diverse probleme la instalare am vazut pe blogul de unde am aflat si eu de acest bootloader: Hack a Day. Eu l-am programat pe ISP si sub Windows si a mers din prima :)

miercuri, 26 mai 2010

Proiectare si simulare Arduino

Proiectare si simulare Arduino
Doua programe interesante si utile pentru posesorii de Arduino (si nu numai)

In afara de kit-ul oficial de dezvoltare Arduino mai avem nevoie si de un program de CAD cat mai simplu de utilizat, care sa contina biblioteci pentru cele mai uzuale componente electronice si, de preferat, sa fie free sau open source. Un astfel de program este Fritzing!


Exemplu - breadboard


Exemplu - schematic


Exemplu PCB

Acum, dupa ce am terminat partea de proiectare si dezvoltarea programului, nu ne mai ramane decat sa incercam totul pe un simulator. Pe acesta il gasim aici: Virtual Breadboard

Cerinte sistem:
1) Latest version of DirectX
2) .Net 2.0 Redistributable
3) J# 2.0 Redistributable


VBB - design


VBB - simulator

marți, 11 mai 2010

Convertor USB la Serial "de criza" pentru Arduino

Convertor USB la Serial "de criza" pentru Arduino (si nu numai...)


Am modificat un pic placa din postarea anterioara pentru a putea comunica serial cu un calculator care dispune doar de port USB.

In acest scop sunt necesare urmatoarele:
1. Cablu de date Nokia tip DKU-5 sau CA-42. Important este sa aiba mufa de USB mai lunga si/sau mai groasa decat normal, sau o cutiuta mica si neagra la mijlocul cablului ;-)
2. Trei rezistente (1K, 10K, 15K)
3. Cutter, banda izolatoare, multimetru

Ideea de baza este ca aceste tipuri de cabluri contin deja un Prolific 2303 si un MAX232. Pretul de achizitie variaza intre 9-10 RON la importatori si cca. 15-20 RON la diversi comercianti, care vor fi fericiti sa scape de ele... Cred ca de ocazie, de la cineva care a avut un Nokia mai vechi, se poate obtine mult mai ieftin :D

Un tutorial pe larg gasiti la uC Hobby
Pinout-ul pentru aceste cabluri il gasiti aici.

Procedura:
1. Se verifica prezenta circuitelor in cablu.
Se introduce cablul in mufa USB a calculatorului. In Linux (Kernel 2.4.31 sau mai nou) exista deja drivere. La Windows va cere driverele. Daca nu le-ati primit pe CD impreuna cu cablul se pot descarca de aici: PL-2303 USB to Serial Bridge (H, HX, X) Installshield Driver Setup Program
Dupa instalare ar trebui sa gasim in Control Panel un port COM cu numele "Prolific".
2. Se scoate cablul din calculator si se taie in partea dinspre conectorul pentru telefon, NU CEL USB, lasand cca. 10 cm de cablu pentru identificarea firelor.

3. Se identifica cu multimetrul 3 fire (Rx, Tx si GND) conform tutorialului din linkul de mai sus sau conform pinout-ului. Ne intereseaza firele care duc la pinii 6, 7 si 8 din imagine.
Optional se testeaza corectitudinea ca loopback (legand intre ele Rx si Tx) cu ajutorul programului Hyperterminal sau asemanantor.

4. Se conecteaza Rx cablu la Tx controller prin rezistenta de 10K.
5. Se conecteaza Tx cablu la Rx controller prin rezistenta de 1K.
6. Se conecteaza GND cablu la GND placa prin rezistenta de 15-22K.

Avertisment: verificati, verificati, verificati!!!

vineri, 7 mai 2010

Arduino "de criza" si dimensiunea sketch-urilor

Dupa ce am terminat placa de mai jos, potrivita perioadei actuale "de criza" (cost total cca. 20 RON) am incercat sa vad cat ocupa din memoria limitata (doar 8KB) acelasi program compilat cu mai multe medii de dezvoltare.
Pe placa este un ATmega8, frecventa externa 16MHz, fara bootloader (am folosit pentru programare un Pololu USB programmer, achizitionat de aici, dar merge la fel de bine si cu vechiul meu programator pe port paralel ;-)



int ledPin = 13;

void setup() {
pinMode(ledPin, OUTPUT);
}

void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, LOW); // set the LED off
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, HIGH); // set the LED on
delay(1500); // wait for 1.5 seconds
digitalWrite(ledPin, LOW); // set the LED off
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, HIGH); // set the LED on
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, LOW); // set the LED off
delay(1500); // wait for 1.5 seconds
}


Restul de programe sunt cam la fel, fara niciun fel de optimizare :D

Rezultate:
Arduino - 782 bytes
BASCOM - 252 bytes
WinAVR - 206 bytes

Urmeaza sa mai incerc in assembler si cu alte medii de dezvoltare pentru care am gasit versiuni demo (IAR C, FastAVR, CodeVision, AVRco, MikroC, MikroPascal, MikroBasic etc.)

Edit: Assembler - 188 bytes (cu cate o rutina pentru 0.5 si una pentru 1.5 secunde... cred ca iesea mai mic daca o apelam de 3 ori pe cea de 0.5)

Edit: IAR Embedded Workbench (programul scris in C din WinAVR transformat pentru IAR) - 158 bytes
Hmmm... se pare ca rutinele mele in limbaj de asamblare aveau nevoie de optimizare...
;-)


In concluzie incepe sa-mi placa din ce in ce mai mult IAR Embedded Workbench, mai ales ca au fost singurii dintre cei la care m-am inregistrat care mi-au trimis email sa afle cum imi place programul si ce intrebari si sugestii am :D