Salve a tutti,
oggi, parlando con un prof di elettronica, siamo arrivati all'argomento arduino e microcontrollori in generale, e mi ha fatto vedere qualche programma realizzato in c ed in assembly per arduino.
Qualcuno sa se esiste una guida ben fatta che spieghi un po' come programmare arduino con linguaggio c (preferibilmente) o in assembly ?
Beh ... puoi cominciare con QUESTO e puoi scaricarti QUESTO libro (... tranquillo, è un sito legale, purché per esclusivo uso PERSONALE).
Comunque, se cerchi su Amazon, ne trovi parecchi
Guglielmo
Intendi fare a meno del Wiring? è importante avere ottime basi di C e di algoritmica in generale se si vuole fare a meno del Wiring. A quel punto il passo è puramente di abitudine, su microcontrollori la manipolazione avviene bit a bit direttamente sui registri. Bisogna far riferimento al datasheet del microcontrollore che si vuole programmare, Arduino UNO è equipaggiato con ATmega328P.
Oramai l'assembly è linguaggio poco utilizzato anche in questo campo data l'architettura RISC di questi microcontrollori che rende l'uso di questo linguaggio ancora più complicato e di difficile gestione. L'assembly si usa invece inline nel C per i passaggi piu ostici dove la traduzione da C al linguaggio macchina del compilatore non ci soddisfa a pieno.
Si intendo provare ad evitare il wiring (scusate se sono stato poco chiaro). Non sono sicuro di essere in grado di programmare un microcontrollore con assembly o c ma tanto vale provare. Avresti qualche guida da consigliarmi?
Se vuoi programmare il Atmega328 in C, nel senso non utilizzare l' ambiente Arduino vuol dire conoscere molto bene il microcontroller perché i setaggi/imostazioni di partenza li devi fare Tu.
Assembler é ancora peggo.
Ciao Uwe
tutto quello che ho detto rimane valido, sottolineo basarsi sul datasheet del microcontrollore, spiega praticamente tutto del micro(tutto quello che serve per poterlo gestire), da anche informazioni generiche sull'intero mondo AVR e qualche stralcio di codice di esempio contenuti nelle librerie AVR.
Se vuoi programmare in C in ambiente AVR almeno un datasheet generico va letto tutto, quello del 328P può essere una buona scelta(600 pagine di divertimento mozzafiato, la Rowling gli fa un baffo).
Non sono 600 ma 448 pagine Una lettura per le lunghe notti buie invernali.
Ciao Uwe
uwefed:
Non sono 600 ma 448 pagine Una lettura per le lunghe notti buie invernali.
... no, no, per quelle c'è il datasheet del SAM3X8E ARM Cortex-M3, quello montato su Arduino DUE ... 1450 pagine di sana lettura
Guglielmo
uwefed:
Non sono 600 ma 448 pagine Una lettura per le lunghe notti buie invernali.
Ciao Uwe
Mi permetto di contestare, il datasheet del 328P ha ben 660 pagine di divertimento mozzafiato!!!
Il database lincato sulla descrizione del Genuino UNO é questo Empowering Innovation | Microchip Technology che oggi da errore perché documento non esistente sul server atmel. Questo aveva 448 Pagine (ne avevo fatto una copia)
La versione che si trova tramite sito Atmel
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf é di 660 Pagine.
Questo probabilmente perché hanno fatto una nuova versione e Genuino non si é ancora accorto.
Ciao UWe
uwefed:
Questo probabilmente perché hanno fatto una nuova versione ...
Atmel aggiorna piuttosto frequentemente i suoi datasheet ... e spesso gli cambia anche posizione, per cui i link vanno tutti a farsi friggere
Fare sempre riferimento alla data a pie' di pagina
Guglielmo
Si in fatti si è già beccata piu volte le mie maledizioni visto che i miei datasheet sono sempre pieni di note e con i loro aggiornamenti perdo sempre tutto!!!! Per questo motivo sono fermo a circa 3 rev fa.
Veramente Arduino non si programma in Wiring!
Arduino in realtà è un semplicissimo framework scritto e compilato in C per essere usato in CPP, linguaggio che viene usato per i propri firmware.
È anche una bufala che oggigiorno non si programma più in Assembly, io direi l'esatto contrario!
L'essere RISC poi non complica, anzi spesso semplifica.
Il datasheet da circa 600 pagine si può ridurre in una ventina, 2 pagine di comandi 2/3 per la memoria e le restanti per i vari flags.
Il resto è solo roba per hardwaristi.
vbextreme:
Veramente Arduino non si programma in Wiring!
Arduino in realtà è un semplicissimo framework scritto e compilato in C per essere usato in CPP, linguaggio che viene usato per i propri firmware.
Guarda che wiring è il nome del framework, arriva da qui, ovviamente non è un linguaggio
vbextreme:
Il datasheet da circa 600 pagine si può ridurre in una ventina, 2 pagine di comandi 2/3 per la memoria e le restanti per i vari flags.
Il resto è solo roba per hardwaristi.
Aha...
Se non usi Arduino ma vuoi usare una funzione tipo millis() come fai a scriverla se non sai come funzionano i timer, quali bit settare in quale registro e quali valori mettere in altri registri.
Devi leggerti la maggior parte del Datasheet per sapere che impostazioni e sattaggi iniziali deve fare da te perché non lo fa in automatico l' IDE di Arduino.
Ok puoi vedere come lo fa Arduino e copiarlo....
Ciao Uwe
vbextreme:
È anche una bufala che oggigiorno non si programma più in Assembly, io direi l'esatto contrario!
L'essere RISC poi non complica, anzi spesso semplifica.
Prova a leggere in giro le motivazioni che hanno favorito la proliferazione del RISC.
Ovviamente abbandonare wiring e Arduino core vuol dire rifarsi completamente da 0 le librerie o procurarsene alcune fatte da altri, sperando che abbiano fatto un buon lavoro.
@Astro, dai messaggi di @RobertoBochet sembrava che Arduino si programmassi in wiring e non i C/C++, ho voluto solo precisare quali linguaggi si usano e cosa è Wiring o meglio Arduino, dato che l'header principale di solito ricalca il nome del framework e in questo caso è "Arduino.h"
@uwefed, i flags sono nelle restanti 15 pagine, approssimative, che ho detto.
Il mio datasheet conta pag.650 come ultima, ma da pagina 303 partono le caratteristiche elettriche salvo eccezione per pagina da 622 a 627 dove vi risiede il sommario dei registri e dei comandi. Ma le pagine dei registri normalmente non serve quindi bastano le due pagine dei comandi assembly e teoricamente pure queste due per un programmatore C servono a ben poco se non in casi sporadici.
Quindi se si vuole programmare in C bastano le pagine che spiegano i vari flags a cosa servono.
Poi ovvio che piu lo conosci a memoria e meglio ci lavori.
@RobertoBochet, conosco bene i RISC, ho un libro da circa 1000 pagine che ne parla ed il mio PC è appunto un RISC!
In teoria per essere un vero RISC le istruzioni dovrebbero durare solo un clock e per quelle istruzioni che non possono il RISC dovrebbe eseguire nel frattempo le istruzioni sucessive. Ecco perchè in alcuni veri chip RISC trovi degli nop dopo alcune istruzioni di salto o di lettura dalla memoria, ed è per lo stesso motivo che si dice che i RISC sono difficili da programmare, dato però che l'AVR non ricade in questa cerchia rimane semplice programmarlo proprio come se fosse un CISC.
A parte queste sciocchezze le piccole mcu si programmano in Assembly e a volte in C( che spesso è per di piu solo un suo dialetto), questo lo dice un amico professore che lavora in tale ambito da decenni e che forma formatori.....penso lo possa anche confermare @Astro.
vbextreme:
penso lo possa anche confermare @Astro.
Assolutamente si, le piccole mcu, parliamo di roba con pochissima ram/flash che costa meno di 1 E, spesso meno di 50 cent, si programma quasi esclusivamente in assembly.
Inoltre l'assembly si usa anche sulle mcu più dotate, p.e. l'Atmega 328, integrato all'interno del C per le routine time critical, un ottimo esempio la libreria neopixel di Adafruit che al 90% è assembly in quanto tocca rispettare delle ben precise temporizzazioni e far scorrere notevoli quantità di dati in perfetto sincrono, impossibile farlo esclusivamente in C.