Programare ATtiny85 cu Arduino
Autor - Razvan Ionescu -01/06/2011-
ATtiny85 este un chip interesant, mai mic si mai ieftin decat obisnuitul ATmega328P. Printre altele are (extras de pe pagina oficiala):
The high-performance, low-power Atmel 8-bit AVR RISC-based microcontroller combines 8KB ISP flash memory, 512B EEPROM, 512-Byte SRAM, 6 general purpose I/O lines, 32 general purpose working registers, one 8-bit timer/counter with compare modes, one 8-bit high speed timer/counter, USI, internal and external Interrupts, 4-channel 10-bit A/D converter, programmable watchdog timer with internal oscillator, three software selectable power saving modes, and debugWIRE for on-chip debugging. The device achieves a throughput of 20 MIPS at 20 MHz and operates between 2.7-5.5 volts.
Poate fi programat cu Arduino
Am gasit un tutorial la HLT pentru programarea cu Arduino folosind un breadboard. Tutorialul este bun, dar omite sa precizeze un mic amanunt fara de care nu merge, cel putin pe Duemilanove… Pentru a evita auto-reset la Arduino trebuie sa procedam ca aici (o rezistenta de 120 ohm intre pinii Reset si 5V de pe Arduino)
Daca avem mai des nevoie sa scriem ATtiny85 putem face un “shield”. In schema de mai jos am pus si un LED pentru a verifica chipul dupa scriere.

O prima “tentativa de shield” arata cam asa (cu doua rezistente de 220 ohm puse in paralel in loc de cea de 120 si cu inca doua LED-uri si rezistentele de 1K aferente – ca semnale pentru ISP)

Tot ce mai ramne de facut este sa descarcam de la HLT arhiva zip cu placile pentru ATtiny45 si 85, sa o dezarhivam in folderul pe care-l avem la preferinte la Arduino in “Sketchbook location”, intr-un sub-folder “hardware” (daca nu-l avem, il facem).
Dupa ce incarcam pe placa Arduino, din exemple, sketch-ul ArduinoISP putem trece la programarea ATtiny85. Alegem placa ca mai jos:

Am modificat sketch-ul “Blink” din exemple pentru a utiliza in loc de pinul 13 pinul 3 si l-am incarcat. Putem ignora erorile… programul merge ![]()

USB Host pentru FEZ Panda
Autor - Razvan Ionescu -21/03/2011-
O veste buna pentru posesorii de FEZ Panda! In sfarsit cei de la GHI Electronics ne-au ascultat cererile si au adaugat suportul pentru USB host si la placile FEZ Panda si FEZ Mini, incepand cu firmware-ul versiunea 4.1.5.0.
Metoda este explicata aici: USB Host support is added on USBizi100 (FEZ Panda)
Ca o mentiune: i-am intrebat anul trecut de ce nu era permisa utilizarea ca host, iar raspunsul primit era ca s-a facut economie cu Panda
Valentine’s Day
Autor - Razvan Ionescu -14/02/2011-
FEZ Panda si LCD serial
Autor - Razvan Ionescu -28/11/2010-
Pentru un prim proiect cu FEZ Panda am ales comunicarea seriala cu un LCD.
Montajul este foarte simplu, am folosit doar FEZ Panda si un LCD serial conectat doar la GND, +5V si la pinul Di1 (COM1 Output).

Ruland cateva ore cu un acumulator de 170 mAh…
Din Visual C# 2010 Express alegem “New project”, apoi “Micro Framework” si “FEZ Panda application”.
Dupa generarea solutiei (proiectului) FEZ Panda Application1 deschidem
din Solution Explorer fisierul “Program.cs”.
Selectam si apoi stergem codul propus.
Inlocuim cu urmatorul cod:
using System;
using System.Threading;
using System.IO.Ports;
using System.Text;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.FEZ;
namespace FEZ_Panda_Application1
{
public class Program
{
public static void Main()
{
SerialPort UART = new SerialPort("COM1", 9600);
UART.Open();
while (true)
{
string comanda = "$CLEAR\n\r";
byte[] buffer = Encoding.UTF8.GetBytes(comanda);
UART.Write(buffer, 0, buffer.Length);
Thread.Sleep(500);
comanda = "$GO 1 1\n\r";
buffer = Encoding.UTF8.GetBytes(comanda);
UART.Write(buffer, 0, buffer.Length);
comanda = "$PRINT FEZ is easy\n\r";
buffer = Encoding.UTF8.GetBytes(comanda);
UART.Write(buffer, 0, buffer.Length);
Thread.Sleep(500);
comanda = "$GO 2 1\n\r";
buffer = Encoding.UTF8.GetBytes(comanda);
UART.Write(buffer, 0, buffer.Length);
comanda = "$PRINT Freakin' Easy!\n\r";
buffer = Encoding.UTF8.GetBytes(comanda);
UART.Write(buffer, 0, buffer.Length);
Thread.Sleep(1000);
}
}
}
}
Observam ca avem erori, din cauza ca nu am inclus inca referinta la SerialPort. Din Solution Explorer facem click dreapta pe “References” si alegem “Add Reference”. Alegem din tab-ul .NET componenta “Microsoft.SPOT.Hardware.SerialPort”. Daca totul a mers bine acum nu mai avem erorile
Salvam proiectul. Din meniu principal alegem “Project” si apoi “FEZ Panda Application1 Properties”. Din tab-ul “.NET Micro Framework” alegem Transport: “USB” si Device: “USBizi_USBizi” in loc de emulator.
Apasam tasta F5 si asteptam sa se faca scrierea.
Daca totul a mers bine pe ecranul LCD avem acum textul dorit
Observatie: daca nu se potrivesc comenzile LCD-ului serial pe care-l aveti va rog sa consultati documentatia aferenta modelului dvs.
Succes!
Lansare Arduino UNO
Autor - Razvan Ionescu -27/09/2010-
De ceva vreme pe site-ul Arduino eram anuntati ca “ni se pregateste ceva”. Asteptarea a luat sfarsit… iata noul Arduino UNO!

Specificatiile le gasim aici. Diferenta principala fata de restul de placi Arduino consta in faptul ca nu mai foloseste “FTDI USB to serial” ci un Atmega8 cu un firmware special pentru conectarea pe USB la calculator. Au fost schimbate si etichetele I/O de pe placa, in scopul usurarii identificarii functiilor lor.
Este anuntata si viitoarea aparitie a versiunii 1.0 (de unde si numele UNO) a mediului de programare Arduino.
Cei de la Adafruit i-au luat zilele trecute un lung interviu lui Tom Igoe despre aceasta noua aparitie in universul Arduino. Merita urmarit aici.
Cititor RFID 125KHz
Autor - Razvan Ionescu -23/06/2010-
Pentru cei interesati de proiecte gen securitate, control acces, pontaj sau similare, utilizand RFID, solutia bazata pe Arduino poate fi o alternativa avantajoasa atat din punctul de vedere al pretului, cat si al unei dezvoltari rapide si relativ simple.
Pentru acest tutorial avem nevoie de urmatoarele:
Arduino Duemilanove
Cititor RFID 125KHz
Cartela (tag) RFID 125KHz
Placa montaj fara lipituri (breadboard) (optional)
Cititorul RFID de mai sus are avantajul ca poate fi introdus intr-un soclu de 40 pini DIL si astfel poate fi utilizat cu usurinta in orice proiect, fara a mai fi nevoie de cabluri de conectare sau de breadboard.
Cea mai simpla metoda de a afla codul cartelei este de a utiliza biblioteca NewSoftSerial, disponibila gratuit aici. Fisierul zip se dezarhiveaza si se copiaza in folderul libraries al distributiei Arduino.
Din documentatia cititorului RFID aflam ca exista doua moduri de utilizare. Am ales pe cel de-al doilea, “TTL Interface RS232 Data output format”, pentru care conectarea se face astfel:
| RFID | Arduino |
| 1. Tx | D.P. 2 |
| 2. Rx | D.P. 3 |
| 3. | |
| 4. GND | GND |
| 5. +5V(DC) | +5V |
/*
Titlu: Citire cod RFID tag
Autor: [iard]
Data: 2010-06-22
*/
#include <NewSoftSerial.h>
#define rxPin 2
#define txPin 3
NewSoftSerial mySerial(rxPin, txPin);
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
}
void loop() {
if (mySerial.available()) {
Serial.print((char)mySerial.read());
}
}
Observatii:
1. programashul de mai sus tipareste la monitor cele 10 caractere ASCII ale codului si cele 2 caractere ale sumei de verificare.
2. avand in vedere ca e aproape ora 3 dimineata, algoritmul de generare si comparare checksum ramane pe alta data
Apelarea rutinelor scrise in limbaj de asamblare
Autor - Razvan Ionescu -10/06/2010-
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);
}





