Programmare arduino direttamente in C

Ciao a tutti, vorrei approfondire la programmazione di arduino o meglio degli atmega/attiny senza passare per l'ambiente arduino.
Ho fatto delle ricerche ma non ho trovato molto materiale in merito.
Da dove potrei partire?
Grazie.

Stefano

Da Atmel Studio 7 :wink:

Guglielmo

Da un qualunque testo che parla della programmazione in C, ovviamente poi dovrai approfondire la programmazione C specifica per gli AVR, non tanto per la parte di codice che si occupa della logica del programma, quella è identica sia che lavori su una mcu che su un pc, ma quella che interagisce con l'hardware dove tocca interagire direttamente con i vari registri delle periferiche.
Come sempre un ottimo punto di partenza è la documentazione delle avr libc, incluse con il compilatore avr gcc, e magari passare ad un ambiente di lavoro migliore del IDE di Arduino, p.e. Atmel Studio.

Vi ringrazio entrambe per i consigli.

@gpb01: Proverò a vedere Atmel Studio
@astrobeed: Per la programmazione in C non ho problemi, programmo in C ormai da 30 anni. Quello che volevo sapere è dove trovare informazioni per capire come gestire i pin in ingresso uscita degli atmel senza passare per pinMode e digitalRead/Write.

Ho visto da più parti che l'approccio diretto ha prestazioni nettamente migliori rispetto al passaggio tramite l'ambiente arduino ide, cosa che per quello che devo fare onestamente mi interessa in maniera limitata.
Quello che invece mi può interessare di più è un eventuale abbassamento dei consumi, perchè deduco che prestazioni migliori voglia anche dire meno cicli cpu e quindi consumi inferiori.

Stefano

stefanoxjx:
... Quello che invece mi può interessare di più è un eventuale abbassamento dei consumi, perchè deduco che prestazioni migliori voglia anche dire meno cicli cpu e quindi consumi inferiori.

NO perché salvo tu non metta la MCU in sleep, comunque gira alla massa velocità e quindi il consumo è lo stesso ...
... quello che è vero che molte cose puoi farle più velocemente e poi, come detto, se non c'è altro da fare, mettere in sleep la MCU (cosa che comunque si fa anche nell'ambiente Arduino usando quanto si trova nella AVR libc).

Guglielmo

Guglielmo, mi hai demolito :frowning:
Quindi a questo punto non ho nessuna convenienza a cercare di evitare l'ambiente arduino ide.
Andrei solo ad incasinarmi per niente.
Almeno nel mio caso.

Stefano

Se lo scopo è la diminuzione dei consumi ...

  1. devi farti la tua schedian togliendo tutto il superfluo o, soluzione più semplice, usare un Arduino Pro Mini a 3.3V tagliando via il LED (... così è veramente ridotto all'osso).

  2. studiarsi bene, in AVR libc, sia la <avr/power.h> che la <avr/sleep.h> e, naturalmente, la <avr/wdt.h> ... da usare per il risveglio dallo sleep profondo :wink:

Guglielmo

Se hai bisogno di settare molto velocemente i pin degli AVR, parliamo di solo 128 ns contro i 2-3 us tipici della digitalwrite, puoi usare le macro sbi e cbi, ti allego un pezzo di codice come esempio.

// macro per accesso diretto ai bit
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

sbi(PORTB, 0); // setta il bit zero del PORTB (pin 8 di Arduino)
cbi(PORTB, 0); // resetta il bit zero del PORTB (pin 8 di Arduino)

Perfetto, mi sto proprio scaricando AVR Studio per fare un po' di prove.

@stefano, cerca nel forum baremetal, ne avevamo parlato un pò di programmazione a basso livello.
Puoi anche cercare in internet fast IO arduino, esempio: LINK
ed in italiano LINK da uno degli admin che ha scritto anche un ottimo libro su Arduino con argomenti anche a basso livello.

stefanoxjx:
Guglielmo, mi hai demolito :frowning:
Quindi a questo punto non ho nessuna convenienza a cercare di evitare l'ambiente arduino ide.
Andrei solo ad incasinarmi per niente.
Almeno nel mio caso.

Stefano

Puoi fare delle cose direttamente sui registri e percui essere piú veloce, piú libero o che riesci a fare delle cose non previste nel ambiente Arduino. Per questo non é necessario non usare la IDE di Arduino. La IDE semplifica molte cose per chi incomincia a programmare ma puó essere anche non usato le funzioni del Arduino ma accedere ai registri del Controller direttamente oppure far eseguire anche parti in assembler.

Ciao Uwe

@nid69ita: questo è il punto di partenza che chiedevo
@uwe: vorrei comunque sostituire l'ide arduino perchè come ambiente di sviluppo non lo trovo comodissimo

L'IDE di Arduino è molto semplice da usare, perfetto per chi è alle prime armi, però è molto limitato come possibilità di editing, è poco più del text editor di Windows.
Volendo è possibile usare un editor esterno al posto del suo editor, basta usare l'apposita opzione nelle preferenze, in questo modo si usa l'IDE solo per compilare e caricare il software su Arduino, questa è la soluzione che uso io quando devo creare software specifico per Arduino.
Utilizzando un editor esterno, specifico per uso programmazione, le cose vanno molto meglio e si riesce a lavorare decentemente senza bisogno di installare Atmel Studio, ovviamente parliamo di programmazione specifica per Arduino, se vuoi lavorare con gli AVR sfruttandone tutta la potenza, quindi in C puro, meglio evitare il C++, allora il passaggio a Atmel Studio è un must.
Ovviamente non esiste solo Atmel Studio come ambiente di lavoro per gli AVR, però tutti gli altri sono a pagamento, costano tanto, mentre Atmel Studio è free ed è fatto bene, oltre ad essere il tool ufficiale, almeno fino a che non esce MPLABX AVR. :slight_smile:

astrobeed:
... oltre ad essere il tool ufficiale, almeno fino a che non esce MPLABX AVR. :slight_smile:

... che sto sempre aspettando con ansia ;D ... almeno avrò un unico ambiente Microchip/Atmel !!!

Guglielmo

Non lo dire a me, sono stufo di usare due ambienti distinti per gli AVR e i PIC, io non uso i PCI32, preferisco gli STM32, però per gli 8 bit uso più i pic che gli AVR, se non altro perché ho un enorme parco software sviluppato nel corso degli anni che mi fa da base per le nuove applicazioni, ma anche i dsPIC che sono un'ottima via di mezzo tra le mcu 32 bit e quelle ad 8 bit.
MPLABX AVR dovrebbe arrivare in beta, per tutti, prima di fine anno, attualmente so che è disponibile solo in alpha per i beta tester accreditati.
Non escludo che poi arriveranno rapidamente dei plugin anche per MPLABX AVR dedicati ad Arduino, in fin dei è costruito utilizzando Netbeans, ambiente open source, e non ci sono particolari problemi per realizzare plugin aggiuntivi.

gpb01:

  1. devi farti la tua schedian togliendo tutto il superfluo o, soluzione più semplice, usare un Arduino Pro Mini a 3.3V tagliando via il LED (... così è veramente ridotto all'osso).

Devi tagliare anche la pista che proviene dal piccolo LDO. Provato di persona, se non la tagli non raggiungi i consumi minimi previsti.
Com'è Visual Studio Code con il plugin di Arduino? L'ho installato ma ancora non provato.

Il problema non si pone perchè non userò un arduino, ma un attiny e quindi la schedina la farò su misura.

Consiglio questo libro --> https://www.amazon.it/Make-Programming-Learning-Software-Hardware/dp/1449355781/

Stò guardando anche io la programmazione a basso livello in C per atmel 328, per capire cosa fa il core Arduinico sotto il cofano. Per il pwm trovato questa pagina nel playground molto ben fatta, secondo me: