Se afișează postările cu eticheta avr. Afișați toate postările
Se afișează postările cu eticheta avr. Afișați toate postările

luni, 4 noiembrie 2013

A doua saptamana de curs

A inceput a doua saptamana din cursul online gratuit "Comprendre les Microcontrôleurs", organizat pe Coursera de Scoala Politehnica Federala din Lausanne. Organizatorii au adaugat subtitrari in engleza pentru cei care nu se descurca foarte bine cu limba franceza... Pana in data de 12 noiembrie va mai puteti inscrie la curs si puteti trimite rezolvarile temelor fara nicio penalizare la punctaj ;)

Subiectele abordate in prima saptamana au fost:
Rappels d'électricité
Un peu d'électronique
Bases de logique
Systèmes combinatoires
Systèmes séquentiels
Représentation binaire

Saptamana aceasta ne apucam de treaba cu Arduino si/sau MSP430 Launchpad :) Subiectele celei de-a doua saptamani sunt:
Architecture d'un Microcontrôleur
Qu'est-ce qu'un microcontrôleur?
Quel Microcontrôleur choisir?
Programmation en C/Arduino
Programmes simples

vineri, 10 februarie 2012

Tutoriale interesante

Am gasit o pagina cu tutoriale foarte bine realizate, cu video, text si cod sursa.
Microcontroller Tutorial Made for the Beginner
Tutorialele sunt despre ATmega32 si programarea cu WinAVR.
If you are a beginner, looking to gain knowledge of microcontrollers, you may find that this tutorial series is a perfect match. This tutorial investigates various uses and features of the popular AVR Atmega32 microcontroller. The tutorial shows real programs being written and explained with circuit development. Basic and intermediate programming concepts and uses are also provided along the way. Through the many examples, you can be an expert in embedded systems in no-time.

luni, 24 ianuarie 2011

AVR - Adaptor ISP 6 pini pentru breadboard - continuare

Pentru breadboard am facut adaptorul de aici. Problema a aparut cand am avut nevoie sa programez "in system" cateva montaje care nu aveau conectorul standard cu 6 pini si nu am vrut sa tot scot chipurile de pe ele, sa le programez si sa le pun la loc...
Am folosit un soclu DIP de 28 de pini, dupa cum se vede in imaginile de mai jos.







Soclul trebuie aliniat cu grija peste pinii chipului aflat in circuit, astfel incat sa stea cat mai fix si pinii lui sa fie in contact cu pinii chipului.

marți, 23 noiembrie 2010

Interfata seriala

Cautand prin diverse lucruri pe care le pastrez de multi ani de zile "just in case", am gasit un mouse pe serial ;-)
Cablul de conectare este perfect pentru orice microcontroler cu interfata UART si PC cu port serial. Merge pus pe breadboard la orice montaj cu un microcontroler, in scopul comunicarii pe serial cu PC-ul.
Lista de componente necesare adaptorului pentru breadboard de mai jos: cablul, doua barete de pini a cate 4 pini fiecare, un soclu DIP16, un MAX232, 4 condensatori electrolitici de 10uF, o placa stripboard (veroboard).









Cateva pagini interesante:
http://www.arcelect.com/rs232.htm
http://www.beyondlogic.org/serial/serial.htm
http://extremeelectronics.co.in/avr-tutorials/using-the-usart-of-avr-microcontrollers-reading-and-writing-data/
http://www.captain.at/electronic-atmega16-serial-port.php
http://www.swharden.com/blog/2009-05-14-simple-case-avrpc-serial-communication-via-max232/
http://www.8051projects.net/serial-communication/introduction.php

miercuri, 17 noiembrie 2010

Adaptor MicroSD Card "de criza"

Adaptorul poate fi folosit impreuna cu orice tip de microcontroler care "cunoaste" SPI (Serial Peripheral Interface).
De obicei, la achizitionarea unui card MicroSD, primim un adaptor SD Card. Am vazut mai multe exemple de adaptoare pe care s-a lipit direct bareta de pini, dar nu mi s-au parut prea rezistente in cazul utilizarii pe breadboard, de aceea m-am gandit sa folosesc o bucata de stripboard pe care am prins cu banda izolatoare adaptorul, apoi am facut lipiturile.

Edit (20101118): am adaugat in comentariu cateva linkuri interesante
Edit (20101204): o implementare mult mai eleganta (pentru Arduino, 4 postari, schema, imagini, program) gasiti pe blogul Arduinoos


Schema de mai sus: "TOSHIBA SD Card Specification"







Dezavantajul fata de un adaptor comercial este ca nu sesizeaza prezenta cardului.

Mentiunea obisnuita: mai merge "slefuit" un pic ;-)

marți, 9 noiembrie 2010

AVR - Adaptor ISP 6 pini pentru breadboard

Programatorul AVR pe USB de la Pololu pe care-l folosesc are un conector IDC 6 pini standard. Pentru breadboard este mai usor de utilizat o bareta de 6 pini (tata). Am facut un mic montaj pe o bucatica de stripboard, pe care am pus si butonul de reset si rezistenta de 10K, pentru a simplifica montajele de pe breadboard.
Ca de obicei, mai intai am facut montajul, apoi, dupa ce am vazut ca nu se vede bine in imagini, am facut si o "schema"...

Mai merge slefuit un pic, dupa cum se poate vedea mai jos ;-)



luni, 28 iunie 2010

DS1307 RTC - ceas timp real

DS1307 RTC - ceas de timp real

Am nevoie pentru un proiect de un ceas de timp real (real time clock). Cel mai accesibil a fost DS 1307+


Schema de conectare la Arduino, realizata cu Fritzing, arata cam asa:

Deocamdata l-am pus pe breadboard, urmeaza sa-l trec pe o placuta de circuit:



#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

int rtc[7];

void setup()
{
Serial.begin(9600);
/*
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,05);
RTC.set(DS1307_HR,10);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,28);
RTC.set(DS1307_MTH,6);
RTC.set(DS1307_YR,10);
RTC.start();
*/
}

void loop()
{
RTC.get(rtc,true);

Serial.print(rtc[4]);
Serial.print("-");
Serial.print(rtc[5]);
Serial.print("-");
Serial.print(rtc[6]);
Serial.print(" ");
switch(rtc[3]) {
case 1:
Serial.print("Duminica ");
break;
case 2:
Serial.print("Luni ");
break;
case 3:
Serial.print("Marti ");
break;
case 4:
Serial.print("Miercuri ");
break;
case 5:
Serial.print("Joi ");
break;
case 6:
Serial.print("Vineri ");
break;
case 7:
Serial.print("Sambata ");
break;
default:
break;
}
Serial.print(rtc[2]);
Serial.print(":");
Serial.print(rtc[1]);
Serial.print(":");
Serial.print(rtc[0]);
Serial.println();

delay(1000);
}


Pentru setare initiala data si ora se scot comentariile din setup().
Biblioteca DS1307 se gaseste aici si se copiaza, ca de obicei, in folderul libraries al kitului Arduino.

Componentele necesare pot fi gasite, de exemplu, aici:
RTC
Quartz
Suport baterie

Update - 1 iulie 2010 : am facut montajul pe o bucatica de stripboard si nu a mai pierdut nici macar o secunda in 24 de ore ;-) intarzierea era de la faptul ca se misca cristalul...

marți, 22 iunie 2010

Schema pentru Arduino "de criza"

Daca tot au trecut vreo doua luni de cand am facut montajul (si de cand il folosesc aproape zilnic) m-am gandit ca ar fi cazul sa desenez si schema lui ;-)

Neavand niciun fel de experienta in materie de CAD, cu atat mai putin in ceea ce priveste schemele electronice, am incercat mai multe programe: Eagle, TinyCAD, KiCAD etc.

Pana la urma m-am oprit la ExpressSCH, parte dintr-un program gratuit numit ExpressPCB.
Cred ca este cel mai usor de folosit, deoarece in doua ore si ceva am reusit sa fac schema de mai jos, chiar daca nu mai lucrasem cu astfel de programe...



Sper ca nu am facut prea multe greseli, daca cineva incearca sa reproduca montajul dupa aceasta schema ar face bine sa verifice de doua ori ;-)

Cateva observatii:
1. daca chipul nu este programat cu bootloader trebuie folosit un programator ISP
2. daca punem bootloader se poate utiliza cu un cablu serial realizat asa cum l-am descris aici; inainte de programarea in acest mod trebuie apasat butonul Reset cam 3-4 secunde (incercati diverse variante pana reusiti...)
3. la montajul din imagine am folosit terminale bloc (cu suruburi), dar pentru reducerea costului merge sa utilizati orice fel de conectori (bareta etc.)
4. realizarea pe placa de circuit nu e chiar la nivel profesional (hmm, hmm, hmm) ca sa zic asa ;-)



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

vineri, 12 martie 2010

AVRSH - un shell pentru Arduino / AVR

De ceva timp ma tenta sa incerc AVRSH, un "shell" gen UNIX pentru AVR-uri. Asa ca in loc de "Hello, world!"-ul microcontrolerelor (pornit-oprit un LED) m-am decis sa fac acest lucru "in timp real" :)

Am descarcat de pe site-ul Open Content-based AVR Battle Droid (care promite sa devina foarte interesant) AVR Shell si AVR Terminal.

AVR Shell se dezarhiveaza, se deschide proiectul cu Programmers Notepad din WinAVR, se compileaza si se trimite mai apoi pe Arduino. Aici a intervenit singura problema... eliminata simplu printr-un fisier de comenzi plasat in acelasi folder unde se gaseste si fisierul "avrsh.hex".

Continutul fisierului de comenzi:
D:\arduino-0018\hardware/tools/avr/bin/avrdude -CD:\arduino-0018\hardware/tools/avr/etc/avrdude.conf -patmega328p -cstk500v1 -P\\.\COM20 -b57600 -D -Uflash:w:avrsh.hex:i
Observatii:
  • softul pentru Arduino se afla la mine pe discul D: (daca s-ar afla pe C, in comanda de mai sus se inlocuiesc cele doua aparitii ale lui D:\ cu C:\)
  • portul folosit la mine este COM20 (se modifica in comanda de mai sus cu portul pe care il utilizati la Arduino IDE)
  • comanda ocupa in fisier o singura linie, aici este afisata pe mai multe
Dupa rularea cu succes a fisierului de comenzi se poate deschide AVR Terminal. Se alege Baud rate 57600 si portul COM de mai sus, apoi se apasa "Connect to AVR" si gata!

Suntem "logati" la AVR ca root, dupa cum se observa si din imagine...

Si acum, marea realizare: aprindem si stingem LED-ul de pe placa, conectat la PB5

Tastam comenzile (evident, fara ghilimele):

"set pin PB5 output"
Raspunsul trebuie sa fie: "Set PB5 for output"

"set pin PB5 high"
Raspunsul trebuie sa fie: "Set PB5 for high"

LED-ul este acum aprins... ne verificam acuitatea vizuala :D
"read pin PB5"
Daca totul a mers OK raspunsul este "Pin: PB5 is HIGH"

Acum putem sa-l stingem...
"set pin PB5 low"
Raspunsul trebuie sa fie: "Set PB5 for low"

In documentatia de la instructables gasim si alte comenzi, care de care mai interesante... inclusiv cum sa punem parola pentru root, in situatia putin probabila ca am avea nevoie sa nu se logheze la microcontroler persoane neautorizate :D

Arduino in Romania

De doua zile sunt fericitul posesor al unui Arduino Duemilanove!

TURUGA este singurul distribuitor autorizat al platformei Arduino in Romania, asa ca l-am comandat de acolo si pot spune ca sunt chiar foarte multumit :)
Era si mai bine daca se putea evita trimiterea din Bucuresti tot in Bucuresti exclusiv prin firma de curierat, dar pana la urma e bine si asa, macar am scapat de saptamanile de transport international, drumurile pana la vama etc.

Specificatii placa:
MicrocontrollerATmega168
Operating Voltage5V
Input Voltage (recommended)7-12V
Input Voltage (limits)6-20V
Digital I/O Pins14 (of which 6 provide PWM output)
Analog Input Pins6
DC Current per I/O Pin40 mA
DC Current for 3.3V Pin50 mA
Flash Memory16 KB (ATmega168) or 32 KB (ATmega328) of which 2 KB used by bootloader
SRAM1 KB (ATmega168) or 2 KB (ATmega328)
EEPROM512 bytes (ATmega168) or 1 KB (ATmega328)
Clock Speed16 MHz

Versiunea pe care o aduc ei in Romania este cea cu ATmega328.