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

luni, 19 aprilie 2010

Mesaje de eroare - sunet si lumina

Mesajele de eroare sonore gen coduri BIOS (sau Morse) sunt deosebit de utile in anumite situatii.
Utilizand doar un pin (eventual inca unul pentru avertizare prin LED rosu) ne putem configura propriile mesaje.

int ledRosu = 12; // se poate elimina daca nu dorim avertizare vizuala
int buzzer = 11;

void setup()
{
pinMode(ledRosu, OUTPUT); // se poate elimina daca nu dorim avertizare vizuala
pinMode(buzzer, OUTPUT);
}

void loop()
{
digitalWrite(ledRosu, HIGH); // se poate elimina daca nu dorim avertizare vizuala
// mesaj de eroare sonor gen morse sau BIOS: Punct Linie Punct Linie
eroareScurt(); eroareLung(); eroareScurt(); eroareLung();
digitalWrite(ledRosu, LOW); // se poate elimina daca nu dorim avertizare vizuala
delay(3000);
}

void eroareScurt()
{
for (int i = 0; i < 1000; i++)
{
digitalWrite(buzzer, HIGH); delayMicroseconds(100);
digitalWrite(buzzer, LOW); delayMicroseconds(100);
}
delay(500);
}

void eroareLung()
{
for (int i = 0; i < 3000; i++)
{
digitalWrite(buzzer, HIGH); delayMicroseconds(100);
digitalWrite(buzzer, LOW); delayMicroseconds(100);
}
delay(500);
}

Programul se poate transforma usor in biblioteca, pentru a fi inclus in codul propriu.
LED-ul rosu din program sta aprins tot timpul cat buzzer-ul transmite mesajul de eroare.

vineri, 16 aprilie 2010

De unde ne luam echipamentele

Romania (fara taxe vamale, taxe postale relativ mici)
Turuga
Electronista
RoboTop (predare direct in Politehnica, Bucuresti, cost 5 ron? )

Europa (fara taxe vamale, taxe postale variabile, in functie de transportator, cam de 5-10 euro)
Jee Labs
TinkerSoup (transport de la 7.50 euro)
E-Lioness
HW Kitchen (7.20 euro) Multe lucruri interesante, de la Seedstudio, inclusiv un osciloscop portabil foarte ieftin
Futura Elettronica (doar in Italia?... de vazut...)
Watterott (intre 0.00 kg si 30.00 kg = 10,00 EUR)
BricoGeek
Nuelectronics (pare cel mai convenabil pentru cantitati mici, gen 2-3 placi... 2 GBP pentru primul produs, cate 1 GBP pentru fiecare produs in plus in pachet)
Libelium (exista Savings Packs, mai convenabile)
E-Robotix (diverse, nu au Arduino)
WingShield (producator shield extindere)
Oomlout (up to 100g = 1.70 GBP)
Floris.CC (transport > 5 euro, cotatie pret prin email)
Robotev (preturi cam ca pe la noi; Bulgaria, doar trecem Dunarea si le-am si luat din Sofia :)

Asia (preturi mici, taxe vamale, TVA, transport relativ redus, uneori chiar ZERO)
Pe ebay se gasesc destule produse ieftine, cu transport inclus in Romania, in special de la: DFRobot (producator diverse, site in binecunoscuta limba chineza... produsele au numele in engleza...)

Seeedstudio Destule chestii interesante, unele se gasesc in Europa la HWKitchen

SUA si Canada
Ramane de vazut daca merita taxele...