Programmare atmel AVR

Buongiorno a tutti, sono nuovo del forum e questo è il mio primo post. Mi sono avvicinato da poco al mondo dei microcontrollori e di arduino.

Mi piacerebbe studiare la programmazione dei microcontrollori, in questo caso atmel AVR, e capirne a fondo il funzionamento (registri, interrupts, timers ecc). Pensavo quindi di tralasciare per un pò il linguaggio proprio di arduino a favore del semplice C utilizzato per questa famiglia di micro.
Arrivo quindi al dunque, è possibile utilizzare arduino UNO (tramite l'ottima guida di Menniti) e l'IDE annesso per programmare degli atmega utilizzando un linguaggio "classico" e non proprio di arduino?
Spero di essermi spiegato XD

Mi sembra di aver capito che degli ottimi libri su cui studiare siano i seguenti:

  • Barnett + Cox + O'Cull, "Embedded C Programming And The Atmel AVR", CDL Delmar
  • D. Gadre, "Programming and customizing the AVR microcontroller", Tab Books
  • J. Pardue, "C Programming for Microcontrollers", Smiley Micros
  • J. Morton, "AVR: An Introductory Course", Newnes

Se volessi restringere il campo ad uno solo voi quale mi consigliereste? Magari scartando il primo che è proprio fuori budget :astonished:

1 Like

Ciao , per i libri non so cosa consigliarti peró posso dirti che su arduino puoi caricare qualsiasi file hex ( compatibile con il suo micro ) e se é realizzato in modo corretto funzionerà , come nuovo linguaggio un poco più tecnico e complesso c'è il bascom avr ma ti consiglio di partire con il linguaggio dell'ide almeno per capire un poco la logica e poi passare ad altro , sper di esser stato utile ,
Ciao
Niko

Il linguaggio di Arduino deriva da Wiring, che a sua volta è un C con un insieme di funzioni specifiche per la gestione dell'HW del microcontrollore.
Puoi usare l'IDE per programmare in C "puro", se vuoi,manipolando le periferiche del micro tramite i suoi registri. Questi sono riportati nel datasheet del micro.

Se non vuoi usare l'IDE puoi usare altri editor, poi compilare il programma e fare infine l'upload dell'hex con un programmatore.

Ciao, la mia Guida ti permette di programmare il micro usando l'IDE e l'Arduino come programmatore ISP, ma inviando file che vengono comunque precompilati dall'IDE stessa; puoi creare file hex in qualsiasi modalità tu conosca (ma ovviamente compatibile con il mondo AVR) ed inviarli al micro tramite riga di comando AVRDUDE, usando tranquillamente la tecnica hardware ISP descritta nella Guida.
Non so a quanto ammonta il tuo Budget, ma prova a valutare l'acquisto di AVR Dragon, uno dei programmatori ufficiali ATMEL, costa intorno a 50 euro ma ha grandi potenzialità, inoltre ti permette il debug. Puoi approfondire la cosa sul sito ATMEL.
Io ce l'ho da almeno un paio di mesi ma da quando ho iniziato a fare una serie di progetti didattici l'ho dovuto mettere da parte, conto di riprenderlo in mano al più presto.

Grazie mille ragazzi.

leo72:
Puoi usare l'IDE per programmare in C "puro", se vuoi,manipolando le periferiche del micro tramite i suoi registri. Questi sono riportati nel datasheet del micro.

E' proprio quello che speravo di sentirmi dire :slight_smile:
Quindi, se ho capito bene, posso studiare su uno dei libri citati sopra dove viene trattata la programmazione degli AVR in C, seguire quei meravigliosi tutorial che sono presenti su avrfreaks.net ed infine utilizzare l' IDE di arduino per programmare. Poi se voglio programmare degli Atmega stand alone mi affido alla guida di Menniti. Giusto?

menniti:
[...] prova a valutare l'acquisto di AVR Dragon, uno dei programmatori ufficiali ATMEL, costa intorno a 50 euro ma ha grandi potenzialità, inoltre ti permette il debug. Puoi approfondire la cosa sul sito ATMEL.

Si l ho vista ma non sono molto informato, ci sono grandi differenze e vantaggi? Per ora, se posso farlo con arduino, penso che utilizzerò questa soluzione.

Se programmi AVR in C userai tanto i registri interni del AVr. Con Arduino questa "necessitá" non c'é. Usi delle librerie che lo fanno. Alla fine é piú semplice ma siccurmente piú limitante dal punto di vista delle velocitá di esecuzione e dal punto di vista della "cultura di programmazione" che Ti fai.
Ciao Uwe

uwefed:
Alla fine é piú semplice ma sicuramente piú limitante dal punto di vista delle velocitá di esecuzione e dal punto di vista della "cultura di programmazione" che Ti fai.

Esattamente Uwe, è proprio questo che intendevo... "no pain no gain"

biondo:
Quindi, se ho capito bene, posso studiare su uno dei libri citati sopra dove viene trattata la programmazione degli AVR in C, seguire quei meravigliosi tutorial che sono presenti su avrfreaks.net ed infine utilizzare l' IDE di arduino per programmare.

Tieni presente che usare l'IDE comporta un paio di problemi: hai un ambiente di sviluppo non proprio "professionale", se vedi c'è un'altra discussione in merito all'IDE, e le critiche sono molte; inoltre, Arduino, per essere così semplice, si porta dietro diverse funzioni preconfezionate che però appesantiscono il codice, per cui puoi trovarti centinaia di byte usati e non sai da chi. Se programmi un Atmega328, che ha 32 kB di flash, ciò potrebbe non essere un grosso problema, ma se usi un Attiny25, con 2 kB di flash, ciò potrebbe rappresentare un problema.

Poi se voglio programmare degli Atmega stand alone mi affido alla guida di Menniti. Giusto?

menniti:
[...] prova a valutare l'acquisto di AVR Dragon, uno dei programmatori ufficiali ATMEL, costa intorno a 50 euro ma ha grandi potenzialità, inoltre ti permette il debug. Puoi approfondire la cosa sul sito ATMEL.

Si l ho vista ma non sono molto informato, ci sono grandi differenze e vantaggi? Per ora, se posso farlo con arduino, penso che utilizzerò questa soluzione.
[/quote]
La cosa ha vantaggi e svantaggi: i programmatori Atmel possono accedere a funzionalità normalmente non disponibili usando l'Arduino e avrdude come software per la scrittura dei firmware; per contro, hai un ambiente di sviluppo, AvrStudio, che gira solo sotto Windows.

per contro?
Cioè in tutto ciò che dici di positivo sulla cosa consideri un grande difetto il fatto che l'ambiente di sviluppo giri sotto Windows? Leo, spero di aver capito male, io ben compendo la tua passione verso Linux e la tua totale avversione verso Windows, ma in un post in cui dai dei consigli a qualcuno, non puoi essere così assolutista. E se lui è uno che usa Windows come dovrebbe interpretare la cosa? Beati pinguini.... :smiley:

Invece sono anch'io un utente linux :grin:

leo72:
[...] per contro, hai un ambiente di sviluppo, AvrStudio, che gira solo sotto Windows.

Si effettivamente questo è un punto a sfavore, ma mi sembra che possa girare piuttosto bene anche sotto wine, o al massimo con una macchina virtuale.
Restringendo il campo a linux, esistono altre valide alternative a dragon + AVRstudio?

biondo:
Invece sono anch'io un utente linux :grin:

leo72:
[...] per contro, hai un ambiente di sviluppo, AvrStudio, che gira solo sotto Windows.

Si effettivamente questo è un punto a sfavore, ma mi sembra che possa girare piuttosto bene anche sotto wine, o al massimo con una macchina virtuale.
Restringendo il campo a linux, esistono altre valide alternative a dragon + AVRstudio?

Ah, ok, allora siete telepatici :smiley:
La risposta è no, per quanto ne so, in quanto ATMEL non la pensa come voi al momento... :grin:

Vorrei acquistare anche io AVR Dragon e provare AVR studio, ho visto che farnell ha il dragon disponibile, qualcuno ha mai fatto acquisti da loro ?

Se non ho capito male il dragon si può usare anche come emulatore, cioè posso emulare i vari micro atmel avr e fare delle prove su breadboard un pò come si fa con arduino ?

Ciao biondo, se vuoi partire nel modo classico, l'unica è avere una licenza d'uso di windows e installare Avr Studio. Tuttavia se normalmente tu usi GNU/Linux ci sono varie alternative che però non sono soluzioni pronte all'uso come Avr Studio.

Le alternative a cui mi riferisco sono quelle di sfuttare un'IDE generico tipo netbeas, eclipse, kdevelop, qtcreator, ecc.

Arduino IDE non ti permette di sviluppare nel modo consueto, quindi niente main(), niente variabili o funzioni dichiarate "static", solo variabili globali.

Sotto wine ho provato e ho lasciato perdere, non ho provato con una macchina virtuale prova e facci sapere.
Ciao.

menniti:
La risposta è no, per quanto ne so, in quanto ATMEL non la pensa come voi al momento... :grin:

Diamine ]:slight_smile:
Ma, mi sto un pò perdendo.
Se ad esempio compilo con avr-gcc, generaro il file .hex ed infine carico il file con avr-dude tramite "arduino ISP" o un programmatore dovrei riuscire a programmare il mio atmel con del "puro" C. Oppure con questo sistema ci sono delle limitazioni rispetto all utilizzo di AVRdragon + AVRstudio?

biondo:

menniti:
La risposta è no, per quanto ne so, in quanto ATMEL non la pensa come voi al momento... :grin:

Diamine ]:slight_smile:
Ma, mi sto un pò perdendo.
Se ad esempio compilo con avr-gcc, generaro il file .hex ed infine carico il file con avr-dude tramite "arduino ISP" o un programmatore dovrei riuscire a programmare il mio atmel con del "puro" C. Oppure con questo sistema ci sono delle limitazioni rispetto all utilizzo di AVRdragon + AVRstudio?

Che io sappia non ci sono particolari limitazioni; certamente con avdrdude+ArduinoISP puoi inviare file hex al micro; le uniche limitazioni sono le info che il mondo Arduino possiede sui microcontrollori AMEL, non tutti i modelli e famiglie sono presenti nel config di avrdude, in quel caso non puoi programmare mentre ovviamente il Dragon questi problemi non li ha.

Grazie mille a tutti, veramente molto disponibili.

MauroTec:
Le alternative a cui mi riferisco sono quelle di sfuttare un'IDE generico tipo netbeas, eclipse, kdevelop, qtcreator, ecc.

Mauro, tu utilizzi linux per programmare in modo classico? A me piacerebbe partire così, possibilmente sotto linux. Cosa mi consigli?

menniti:
Che io sappia non ci sono particolari limitazioni; certamente con avdrdude+ArduinoISP puoi inviare file hex al micro; le uniche limitazioni sono le info che il mondo Arduino possiede sui microcontrollori AMEL, non tutti i modelli e famiglie sono presenti nel config di avrdude, in quel caso non puoi programmare mentre ovviamente il Dragon questi problemi non li ha.

Capito, visto che sono alle prime armi questo non dovrebbe essere un problema, ho già molto da imparare anche solo sul mega328 XD

auro, tu utilizzi linux per programmare in modo classico? A me piacerebbe partire così, possibilmente sotto linux. Cosa mi consigli?

Si, conosco solo GNU/Linux, purtroppo non posso darti un consiglio che sia valido per te, in quanto a me le soluzioni netbeans, eclipse mi stavano strette ed ho faticato molto per raggiungere un modo operandis flessibile e stabile, pensa che ho anche sviluppato un IDE in C++, ma poi ho lasciato perdere perchè non avevo le competenze per realizzare un preprocessore C++, che mi serviva per evidenziare gli errori prima della vera compilazione e per altre cose.

Io sviluppo in C++ con Qt http://qt.nokia.com/products/ per obby e mi sono trovato bene con L'ide QtCreator e allora per me la soluzione più comoda è stata quella di fare in modo che QtCreator usasse il compilatore avr-gcc anziche gcc, non è detto che tu gradisca questa soluzione.

Purtroppo l'uso di QtCreator richiede la conoscenza di una parte del frammework Qt anche per questo non c'è una guida che spiega come fare con QtCreator. Io posso raggruppare tutte le modifiche in uno zip da scompattare in /home/nomeuser poi però ti arrangi tu.

Quindi il consiglio è prova varie soluzioni, es editor + plugin (kate, gedit ecc.) + builder tipo scons o script di shell, oppure prova netbeas, eclipse, kedevelop, ecc (ce ne sono altri ma non ricordo i nomi).

Se hai esperienze di programmazione e buona volonta possiamo sentirci in PM e provare la soluzione QtCreator, poi se a te funziona e la giudichi cosa buona la possiamo anche postare qui o fare una guida.

Ciao.

opss ho dimenticato di mettere due link a librerie generiche per AVR, rimedio subito.
http://webbot.org.uk/iPoint/1.page
http://www.makehackvoid.com/project/MHVLib

La prima non l'ho ancora usata (l'ho solo scaricata e non ho avuto il tempo per dargli una guardata)
La seconda la sto usando da tempo e funziona.

@Mike:
non sono assolutista, sono realista. Vedo che Atmel, nonostante sappia (perché lo sa senz'altro) che i suoi chip sono usati da molti hobbisti con Linux, si ostina a rilasciare il suo IDE tranne che per Windows. Ed è una cosa che non accetto, che per me è un grosso difetto e che ho sempre sostenuto.

leo72:
@Mike:
non sono assolutista, sono realista. Vedo che Atmel, nonostante sappia (perché lo sa senz'altro) che i suoi chip sono usati da molti hobbisti con Linux, si ostina a rilasciare il suo IDE tranne che per Windows. Ed è una cosa che non accetto, che per me è un grosso difetto e che ho sempre sostenuto.

Non volevo dire questo, perché concordo sul fatto che non si può ignorare un mondo come Linux. Ma col modo in cui tu hai espresso questo pensiero sembrava che tu dicessi che il problema è perché il programma esiste in Windows e NON perché esiste SOLO in Windows; cioè per me che uso Windows (non per scelta ma per abitudine ancestrale) il fatto che il programma funzioni in questo ambiente è positivo, allora tu non puoi sostenere il contrario anche per conto mio; ma ora ho capito quello che volevi dire realmente. :slight_smile:

menniti:
per me che uso Windows (non per scelta ma per abitudine ancestrale) il fatto che il programma funzioni in questo ambiente è positivo, allora tu non puoi sostenere il contrario anche per conto mio

Il fatto che tu goda ed io no dovrebbe far nascere in te la scintilla della lotta per l'ottenimento dei pari diritti anche da parte di chi non è fortunato come te :stuck_out_tongue:

ma ora ho capito quello che volevi dire realmente. :slight_smile:

Piuppilupettutti! :stuck_out_tongue_closed_eyes: