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 ;-)



joi, 10 iunie 2010

Arduino si Assembler

Apelarea rutinelor scrise in limbaj de asamblare
Din mai multe motive poate fi necesar sa folosim rutine scrise in limbaj de asamblare. De exemplu: lipsa spatiului, viteza, siguranta sau, pur si simplu, faptul ca dispunem deja de ele si nu vrem sa le rescriem ;-)
Exista doua feluri in care putem utiliza in sketch-urile Arduino limbajul de asamblare:
1. Inline, asa cum e documentat in AVR GCC Inline Assembler Cookbook, cu o sintaxa destul de complexa
sau
2. Incepand cu versiunea 0018 se pot utiliza programe scrise in intregime in assembler. Dupa cautari fara succes pe forumul Arduino si diverse incercari, am ajuns la urmatoarea varianta:
- in folderul libraries din kitul Arduino facem un nou folder, cu un nume gen "UtileASM"
- in acest folder facem un fisier header, gen "UtileASM.h"

extern "C" {
void Incrementeaza(void);
}

- tot in acest folder salvam fisierul cu programul in limbaj de asamblare, gen "UtileASM.S" atentie la extensia care trebuie scrisa cu majuscula ".S" si nu ".s"

#include <avr/io.h>
.extern un_numar
.global Incrementeaza
Incrementeaza:
push r16
lds r16, un_numar
inc r16
sts un_numar, r16
pop r16
ret

- sketch-ul va contine ceva gen:

/*
Titlu: Demonstratie Arduino si Assembler
Autor: [iard]
Data: 2010-06-09
*/

#include <UtileASM.h>

volatile int un_numar; // variabila in RAM, nu intr-un registru
extern void Incrementeaza(void);

void setup() {
Serial.begin(9600);
}

void loop() {
un_numar = 7; // valoare initiala
Serial.print("Numarul initial = " );
Serial.println(un_numar);
Incrementeaza(); // apelul subrutinei assembler
Serial.print("Numarul incrementat = " );
Serial.println(un_numar);
delay(1000);
}

O fitzuica pentru Arduino

Pentru cine este la inceput de drum cu Arduino (si are si o imprimanta buna...) am gasit o "fitzuica" (cheat sheet) la The Mechatronics Guy.
Contine intr-o singura pagina, pe scurt, toate informatiile necesare unui incepator. Ma gandesc ca ar fi o treaba buna daca cei care produc/comercializeaza placile ar da si aceasta foaie, mai ales ca nu am prea vazut Arduino care sa vina cu vreun manual...



Observatie: Nu are rost sa descarcati imaginea de pe blogul meu (e prea mica), mergeti pe site-ul de mai sus si o gasiti acolo la rezolutie foarte buna, atat ca imagine cat si ca PDF sau VSD (pentru Visio).

joi, 3 iunie 2010

De unde ne luam echipamentele - episodul 2

Revin cu un update interesant la lista de magazine de unde ne putem procura "jucariile" favorite.

A aparut un nou magazin on-line RoboFun plin ochi cu placi, senzori si tot ce ne mai trebuie.
Preturile sunt chiar mai mici fata de ce se mai gaseste pe la noi. Ce inseamna si concurenta asta... treaba buna :)

Un exemplu: Arduino DUEMILANOVE
RoboFun 110 lei
Electronista 120 lei
Turuga 122 lei
RoboTop 125 lei

In plus, daca suntem din Bucuresti, putem sa le luam direct de la ei, de pe undeva pe langa Piata Unirii, asa ca am scapat de distractia cu curieratul sau posta, care pe mine cel putin ma cam deranjeaza.

Au si un blog cu tutoriale interesante Tehnorama pe care l-am adaugat deja in postarea cu blogurile.

In concluzie, cum s-ar zice, "the more the merrier". Acum jumatate de an nu gaseai Arduino pe nicaieri, in prezent sunt patru firme (de care stiu eu, poate mai sunt si altii) care le aduc!