atmega standalone e programmazione tramite 2009

Ciao ragazzi, ho bisogno di alcune delucidazioni riguardo alla possibilità di usare l’atmega in standalone.
Il mio prototipo attualmente è formato da un arduino 2009 collegato a:

display lcd
4 pulsanti
un piccolo servo

Ora, il problema nasce dal dover passare da prototipo ad applicazione vera e propria. Praticamente il display con i 4 pulsanti, più led, resistenze e condensatori vari, devono essere posti su una board a distanza di qualche metro rispetto ad arduino, che fa da centralina. Di conseguenza, ho pensato che sarebbe meglio gestire il tutto con l’arduino principale + una board con atmega standalone che gestisca display+pulsanti e comunichi con la centralina via i2c. Per cui, non vorrei sbagliarmi, ma basterebbero 4 cavetti, quindi ad esempio:

5V + GND + 2 cavetti per i2c

mentre se dovessi mantenere le cose così, i cavetti sarebbero molti, tutta la gestione del display (11 pin + retroilluminazione e contrasto) + alimentazione + pin dei pulsanti ecc., insomma non sarebbe facilmente gestibile e sarebbe parecchio incasinata.

So che è possibile programmare il chip direttamente dalla mia 2009 (togliendo l’atmega esistente) e usando una breadboard. Ora, per l’uso che devo farne, secondo voi, ho bisogno anche di oscillatore e condensatori vari o posso usare gli 8MHz interni senza aggiungere altri componenti nella breadboard oltre al chip?

L’ Atmega dovrei comprarlo già con il bootloader caricato?

Grazie e scusate se sono domande banali, ho visto che ci sono numerose guide, vorrei solo un punto di vista specifico sul mio progetto.
G

Ciao, non è necessario comprarlo già con il bootloader, se ti scarichi la guida di Menniti http://www.michelemenniti.it/VHD/Elettronica/GPAT_v3.pdf puoi programmarlo direttamente usando il tuo Arduino 2009 come programmatore .

Ciao.

hai due strade: 1 - compri un 328P con bootloader precaricato, lo monti su Arduino e gli mandi lo sketch, ma in questo caso deve lavorare per forza a 16MHz, in quanto i fuses sono pre-programmati per lavorare on board 2 - compri un 328P vergine e usi Arduino come programmatore ISP, in questo caso puoi settarlo con clock interno a 8 o anche a 1MHz, inoltre puoi non caricarci il bootloader perché non ti serve più. Dai un'occhiata alla mia Guida

@ Freddy65 mi hai anticipato, lascio lo stesso per l'info aggiuntiva...

Nel primo caso, a 16MHz, basta metterlo al posto del chip del 2009, programmarlo tramite l'IDE e poi "estrarlo" e metterlo su una board dedicata insieme ai componenti necessari per farlo andare a 16MHz giusto? Dove posso trovare lo schema per collegare i condensatori e l'oscillatore quando, una volta programmato il chip, lo devo mettere su una board dedicata? Grazie

G

GWolf, se appartieni alla categoria di quelli che non si prendono nemmeno la briga di leggere ciò che gli viene consigliato il mio modesto apporto finisce qui.
Sulla Guida c’è tutto ciò che ti serve, per l’una o per l’altra soluzione, sfogliala almeno, prima di continuare a fare domande.

scusa non avevo visto il link, mi ero limitato a leggere superficialmente, ho solo una domanda riguardante l'alimentazione, se io fornisco dalla centralina 5V e GND posso poi gestire tranquillamente tutto il circuito dove ho il chip o ho bisogno di qualche componente particolare? Considera che l'arduino è alimentato via seriale Grazie Ciao G

In che senso "via seriale"? Intendi dire che prende l'alimentazione tramite l'USB? Non c'è problema, allo stand-alone devi mandare 5V e GND, ricordati di aggiungere un C da 0,1µF molto vicino ai pin Vcc e AVcc (che unirai) ed un C elettrolitico da 10 a 47µF nel punto in cui arriva l'alimentazione, in parallelo ad essa. Chiaro che se l'assorbimento di Arduino+stand-alone supera i 250mA devi badare di avere una porta USB in grado di erogare 500mA, se poi il consumo è ancora maggiore devi ricorrere ad un'alimentazione esterna, che diverrebbe comune per Arduino e per lo stand-alone.

Si, intendevo dire tramite la porta USB. Per quanto riguarda la questione corrente assorbita, considera che solo il display lcd per la retro ha bisogno di 150mA (uso un transitor per gestirla) e che per quanto riguarda l'arduino ho un piccolo motore che, leggendo il datasheet, ha bisogno di circa 150mA, dovrei essere oltre i 250mA quindi. Però, se non sbaglio, il mio macbook pro riesce a erogare 500mA; infatti il prototipo su un solo arduino funziona tranquillamente. Con due chip di quanto la corrente rispetto a quella che assorbe attualmente il prototipo con un solo chip?

il chip in sé assorbe pochissima roba, il problema è cosa gli colleghi, comunque io con quelle correnti non lo alimenterei mai dall'USB, specialmente se deve lavorare parecchio; ti basta un buon alimentatore esterno, BEN stabilizzato, da 1A, lo infili nella presa jack japan di Arduino ed escludi automaticamente l'USB, e stai tranquillo a vita.

Vedo 2 problemi, sottovalutati.

1) attenzione agli Atmega328 a 8 MHz con funzioni "particolari". Controlla prima che la libreria Servo sia capace di operare con quel clock. Essendo una libreria scritta per l'Arduino, non è detto che il suo autore ne abbia previsto una frequenza differente di lavoro. Se volete un esempio "shock", il PWM*, che è una funzione integrata nel core dell'Arduino, NON funziona con frequenze diverse dai 16 MHz perché gli autori non si sono presi la briga di pensare ad un suo utilizzo su un micro non montato sull'Arduino.

2) attenzione ai metri di distanza. Se comunichi con I2C potresti avere problemi se la distanza è notevole: l'I2C è un bus nato per distanze nell'ordine dei cm o al max qualche decina di cm, non per i metri.

EDIT *: mi riferisco al PWM gestito tramite analogWrite.

Ciao e grazie dell'intervento. Per quanto riguarda la frequenza preferisco mantenere i 16MHz integrando quindi i vari componenti esterni al chip sulla scheda dove monterò il tutto, per cui non dovrei avere problemi, in quanto i test del prototipo sono sulla stessa frequenza di clock. Meglio, come suggerisci tu d'altronde, lasciar perdere gli 8MHz. Per l'i2c hai ragione, infatti avevo pensato di spostare la centralina a circa 40cm dalla board (può bastare?) e poi collegare la centralina al pc con una prolunga USB di 2 m circa. Considera che deve per forza essere collegato al pc, non solo per l'alimentazione ma per comunicare con esso, quindi l'usb è indispensabile e li posso andare su lunghezze maggiori. Può andare? Grazie

Ciao G

L'usb teoricamente funziona anche a 10mt, per cui l'idea di prolungare l'usb invece dell'I2C è buona. Il fatto che devi usare il collegamento USB non significa che non puoi usare un alimentatore esterno, se necessario; in questo caso il collegamento dati viene comunque mantenuto ma almeno non mandi sotto sforzo il controller usb rischiando di romperlo; ripeto, fatti bene i conti con i consumi, un alimentatore esterno di ottima qualità costa 10-12 euro, non penso che un malaugurato guasto al MAC ti costi così poco....

Si hai ragione. Il fatto è che ad esempio, la retroilluminazione viene mantenuta per qualche secondo e solo quando si preme un tasto, per cui non è sempre attiva, stessa cosa per il servo, fa una rotazione e poi si ferma, per cui sono assorbimenti di corrente momentanei (qualche secondo). Ora, rileggendo le specifiche del portatile, leggo che eroga fino a 500mA quindi in teoria, dovrei starci tranquillamente. Il fatto che sono assorbimenti momentanei può influire come considerazione o potrei non farcela comunque? Il problema dell'alimentazione sarebbe una questione di spazio, per via della posizione della presa avrei qualche problema a collegarlo, per questo cerco di capire se posso farne a meno, altrimenti l'avrei messo e buonanotte.

I 500 mA sono il massimo erogabile da una porta USB. Una curiosità: ma terresti il portatile acceso 24 ore al giorno per alimentare l'apparecchio?

Non dovrebbe stare acceso per tutto il giorno, in media per quasi mezza giornata, il fatto è che ha bisogno di comunicare con il computer, non è solo una questione di alimentazione. Tra l'altro ho previsto anche l'accesso remoto via SSH in modo che anche dall'esterno sia possibile comunicare con il chip. Inoltre in caso di mancanza di corrente elettrica continuerebbe a funzionare dato che è un portatile. Insomma pensavo fosse la scelta migliore per via del fatto che: 1. Usa la batteria interna del portatile 2. Alla fine il computer sta comunque acceso durante la giornata (non durante la notte) 3. E' fondamentale la comunicazione (in questo caso via seriale)

C'è qualcosa di errato in questo ragionamento (soprattutto in termini energetici, non sono molto esperto in questo) Grazie

Ciao G

La commutazione tra alimentazione esterna ed interna NON è meccanica bensì elettronica, questo dovrebbe garantirti che se va via la tensione di rete ed il pc opera a batterie o sotto gruppo di continuità, Arduino continuerebbe ad essere alimentato.

quindi alimentandolo tramite portatile sono al sicuro da eventuali problemi alla rete.. e con il fatto che mi servono aumenti di corrente per piccoli intervalli di tempo starei a posto con i consumi?

Sì, ma sempre se stiamo parlando della stessa cosa. Diamo per scontato che il tuo portatile eroghi fino a 500mA, se il tuo circuito assorbe in tutto 350mA, l'ideale sarebbe mettere un alimentatore esterno e avere poi la garanzia che il portatile farà la sua parte in caso di mancanza della tensione elettrica.

500 mA. Se stai sotto sei a posto, se stai sopra no. L'unico dubbio mio è il servo: anche se lo accendi per brevi periodi, va visto il consumo sullo spunto per muoversi, non il consumo in movimento. Controlla bene i dati, se tutto è a posto non ci sono problemi.

Da datasheet. Max current draw 140 +/- 50 mA when operating in no load conditions 15 mA when in static state