Il punto sugli attiny85 e famiglia

Siccome il micro in oggetto e' molto interessante, siccome avrei un progetto in mente, si riesce a "sviluppare" qualcosa che possa finire in megatopic?

Velatamente, ma serve proprio il bootloader?

speedyant:
Velatamente, ma serve proprio il bootloader?

Assolutamente NO ... anzi ... è solo uno spreco di memoria flash (che è già poca ... 8KB) !

Guglielmo

Mi sembra un'ottima idea.

Direi che si potrebbe strutturare come segue:

Qualcosa di indicativo, aggiornato e riassuntivo in apertura:

  • link alle schede di Alberto sugli attiny
  • link da incollare per scaricare i file aggiornati delle boards

Poi
Schema per montaggio ed alimentazione, con indicazioni sulle correnti erogabili e come sfruttarle
I vari programmatori, dal piccolo tinyUSB a quelli più elaborati, come programmarlo
Una raccolta delle librerie dedicate
Qualche nozione avanzata per sfruttare sleep e low power ed i fuse
Indicazioni di buone prassi per consumare meno memoria possibile

x iscrizione

paulus1969:

  • link alle schede di Alberto sugli attiny
  • link da incollare per scaricare i file aggiornati delle boards
  1. Cominciamo con i pinout di Alberto (pighixxx) …
    … nel momento in cui scrivo questo post (… e già da svariate settimane), il sito principale (.com) è giù per manutenzione, ma fortunatamente c’è il sito di backup (.net) per cui, facendo riferimento a quest’ultimo, la scheda con il pinout degli ATtiny si trova QUI. Quando il sito primario sarà di nuovo operativo dovrebbe bastare sostituire il .net con il .com

  2. Proseguiamo con il link al .json da inserire nell’apposito campo delle impostazioni (preferences) del IDE di di Arduino ovvero in “Additional Boards Manager URLs”:

http://drazzy.com/package_drazzy.com_index.json

link che punta ai core ATtiny di Spence Konde e che sono attualmente i più aggiornati e quindi quelli da usare.

Queste sono le basi di partenza oltre, naturalmente, agli immancabili datasheet … ATtiny84 ed ATtiny85 che … vanno studiati ! :smiling_imp:

Guglielmo

P.S.: Dimenticavo una cosa … per lavorare bene, munirsi di un programmatore ISP SERIO, NON “monnezze” da 2€ o accrocchi fatti con Arduino as ISP. :smiling_imp:

Questo un esempio di blink con sleep:

/*
 
Ultra Low Power Led Flasher
with AtTiny85 @ 1Mhz
by Luca Soltoggio
06/01/2014
 
http://www.arduinoelettronica.com
 
*/
 
#include <avr/sleep.h>
#include <avr/wdt.h>
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
int pinLed = 4;
volatile boolean f_wdt = 1;
 
void setup(){
pinMode(pinLed,OUTPUT);
setup_watchdog(8); // approximately 4 seconds sleep
}
 
void loop(){
if (f_wdt==1) {  // wait for timed out watchdog / flag is set when a watchdog timeout occurs
f_wdt=0;       // reset flag
 
digitalWrite(pinLed,HIGH);  // let led blink
delay(30);
digitalWrite(pinLed,LOW);
 
pinMode(pinLed,INPUT); // set all used port to intput to save power
system_sleep();
pinMode(pinLed,OUTPUT); // set all ports into state before sleep
}
}
 
// set system into the sleep state
// system wakes up when wtchdog is timed out
void system_sleep() {
cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF
 
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable();
 
sleep_mode();                        // System sleeps here
 
sleep_disable();                     // System continues execution here when watchdog timed out
sbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter ON
}
 
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
void setup_watchdog(int ii) {
 
byte bb;
int ww;
if (ii > 9 ) ii=9;
bb=ii & 7;
if (ii > 7) bb|= (1<<5);
bb|= (1<<WDCE);
ww=bb;
 
MCUSR &= ~(1<<WDRF);
// start timed sequence
WDTCR |= (1<<WDCE) | (1<<WDE);
// set new watchdog timeout value
WDTCR = bb;
WDTCR |= _BV(WDIE);
}
 
// Watchdog Interrupt Service / is executed when watchdog timed out
ISR(WDT_vect) {
f_wdt=1;  // set global flag
}

fonte

... diciamo che usando BENE la AVRlibc quel codice si scrive meglio e molto più leggibile, comunque, se ti funziona ... ::slight_smile:

Guglielmo

Sulla questione "programmatori seri", quali sono quelli supportati dall'ide 1.8.5?

speedyant:
Sulla questione "programmatori seri", quali sono quelli supportati dall'ide 1.8.5?

Uno che era comodissimo, ma che Atmel/Microchip ha discontinuato, era/è il AVRISP mkII ... in compenso, ad un buon prezzo, sia su Amazon che su eBay, si trovano dei cloni :slight_smile:

Clone piuttosto serio del AVRISP mkII, che Astrobeed consigliava sempre, è quello della Olimex ... presonalmente NON l'ho mai usato, ma qui sul forum se ne è sempre parlato bene. Da provare ...

A seguire c'è sicuramente AVR Dragon che, utilizzando l'ambiente di sviluppo nativo (Atmel Studio, prossimamente sostituito da MPLAB X) fa anche da debugger. Costa un po' di più del AVRISP mkII, ma è decisamente superiore e ... fa anche da programmatore HV.

Infine c'è il top della gamma Atmel ICE, che fa di tutto e di più, ma, essendo uno strumento professionale, costa ... anche se ... li vale tutti.

Certo, per usarli solo dall'IDE di Arduino ... sono piuttosto sprecati e tanto vale prendere un clone del AVRISP mkII, pensando però magari di voler, in un futuro, passare ad un ambiente di sviluppo nativo, allora diventano un ottimo acquisto :slight_smile:

Guglielmo

P.S.: Tutto questo in generale, non solo relativamente agli ATtiny ...

Oh ... faccio comunque notare che per il 99% delle volte che devo programmare un ATtiny85, uso un Atmel AVRISP mkII in accoppiata con questa semplicissima board, "fatta in casa" su una millefori, che va bene sia per ATmega328P che per ATtiny a 8 pin:


... funziona che è una bellezza e NON ha mai sbagliato un colpo :grin: :grin: :grin:

Guglielmo

gpb01:
… AVRISP mkII …

Se qualcuno vuole andare di autocostruzione, tempo fa avevo disegnato una mia personale versione del “coso” in oggetto … usava proprio il firmware della Olimex (che all’epoca era distribuito come aggiornamento, ora non so … e’ un po che non ci traffico piu, ed e’ finito in fondo a chissa’ quale scatolone … mi sa che dopo questo thread, saro’ costretto ad andare a fare qualche scavo archeologico per cercarlo di nuovo :D), anche se avevo aggiunto qualcosa … l’avevo disegnato in modo da farlo stare in una di quelle scatoline di plastica che vendono come “SC700” … se pensate che ne valga la pena, fatene quello che volete :wink:

avrispmk2-clone.zip (132 KB)

Bello, grazie Etem !!! :slight_smile:

Al link Olimex che ho messo più su, si trovano ancora i link sia ai firmware (a secondo che si usi avrdude o Atmel Studio) sia il SW necessario per caricare detti FW :wink:

Guglielmo

Ah be allora vi faccio vedere anche la mia :smiley:

doppiozero:
Ah be allora vi faccio vedere anche la mia :smiley:

... quella me la ricordavo, un bel lavoro ! :slight_smile:

Guglielmo

Guglielmo: approfitto della tua superiore conoscenza del mondo Atmel per un paio di domande al volo ...

Ho spesso letto in vari articoli sull'uso di un'interfaccia JTAG al posto della ICSP anche per gli Atmel, ha qualche senso, a parte per l'uso di "debug" dei dispositivi che lo supportano ? ... (presumo comunque che gli AtTiny non lo supportino, giusto ?)

Oltre a quello, ci sono vari schemi in giro, tutti piu o meno corretti (e piu o meno sbagliati, ne ho trovato perfino uno con i led senza resistenze, e non era neppure il peggiore :smiley: :smiley: :D), e tutti usano un chip FTDI o un suo clone come convertitore USB-RS232 per far comunicare il PC con un'Atmega16 o un'altra MCU simile, mi chiedevo perche' nessuno abbia mai usato l'AT90USB162 dell'AVRISP anche per le JTAG, considerando che ha il supporto interno USB e ci si leverebbe di torno uno dei due chip ... oppure l'AT90 non e' adatto a realizzare una JTAG per qualche altra ragione ? ... ho provato a confrontare i due datasheet, ma di differenze cosi grosse non mi sembra di vederne, a parte la flash piu piccola ...

Disegnare anche da zero un circuito non sembra cosi difficile, almeno per la parte hardware ... anche se poi, non avendo io sufficente competenza software, magari sbaglio a crederlo fattibile perche' il problema e' proprio da quel lato ?

Se si usa un vero programmatore ... è indifferente usare una modalità rispetto all'altra ... forse, ma è da quantificare, la programmazione JTAG è leggermente più veloce di qulla via ISP.

Lo scopo del JTAG e quello di permettere il "debug" (... creare breakpoint, esaminare la memoria, i registri, ecc.), se devi solo programmare ... non andare ad impazzire ed usa il ISP.

Mai usato/configurato il JTAG su ATtiny85 ... ma facendo una rapida ricerca su Google ... sembra che sia possibile ... ::slight_smile:

Guglielmo

Edit: Prova a guardare QUI :wink:

Cioe', si e' costruito il JTAG usando un Tiny85 ... ed io che pensavo che non l'avessero fatto con gli AT90 perche' la MCU non aveva risorse sufficenti :smiley:

Il progetto che avevo in mente sarebbe un "lumino votivo" o una bomboniera con led tremolanti.

speedyant:
Il progetto che avevo in mente sarebbe un "lumino votivo" o una bomboniera con led tremolanti.

... usando più LED si riescono a fare cose molto realistiche.

Guarda ad esempio QUESTA lampada che simula una torcia :smiley:

Potresti usare delle piccole strip di APA102, molto semplici da utilizzare e che NON richiedono le tempistiche dei WS2812 (NeoPixel) :wink:

Guglielmo

Guglielmo: mi era capitato un video di esempio per il pilotaggio degli APA ... dove il tipo inseriva le sequenze di bit a mano, con dei pulsanti ... e commutavano lo stesso ... altro che non richiedere temporizzazioni critiche, non ne richiedono per nulla, apparentemente ... :smiley:

EDIT:

gpb01:
...
Guarda ad esempio QUESTA lampada che simula una torcia :smiley:
...

La versione ipertecnologica delle vecchie "fiamme" al neon ... :smiley: