Go Down

Topic: Informazioni riguardo Arduino uno ? (Read 1 time) previous topic - next topic

StudenteDubbioso

Jun 28, 2013, 10:56 pm Last Edit: Jun 28, 2013, 10:58 pm by StudenteDubbioso Reason: 1
Ero indeciso riguardo alla sezione dove postare questo 3d, in caso questa non sia quella adatta mi scuso..

Ho un Arduino uno e mi è stato chiesto:

1) Quante righe posso avere al massimo nel programma?
2) In una riga quanti caratteri posso avere al massimo?

Sono due domande che mi sono state fatte e a cui  ho risposto con una scena muta. Non mi ero mai posto il problema sapendo che comunque non avrei mai raggiunto i limiti imposti da Arduino. Di seguito metto le caratteristiche principali di Arduino Uno:

Microcontroller   ATmega328
Operating Voltage   5V
Input Voltage (recommended)   7-12V
Input Voltage (limits)   6-20V
Digital I/O Pins   14 (of which 6 provide PWM output)
Analog Input Pins   6
DC Current per I/O Pin   40 mA
DC Current for 3.3V Pin   50 mA
Flash Memory   32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM   2 KB (ATmega328)
EEPROM   1 KB (ATmega328)
Clock Speed   16 MHz

Per sapere quante righe posso avere mi devo riferire alla Flash Memory giusto? avendo 32kb e considerando un carattere per riga, quante righe posso avere al massimo? In altre parole quanto memoria occupa un carattere ??
E riguardo al numero massimo di caratteri in una riga? Come faccio a saperlo? D:

Se ho chiesto delle cavolate ( come al mio solito ) chiedo scusa ma credo che coloro che hanno già avuto a che fare con i miei 3d si siano resi conto che sono un'impedito >.< Grazie in anticipo! [ Spero in qualche risposta entro domani sera se possibile ]

Ah scusate, ne approfitto per chiedere un altro chiarimento. I pin digitali che danno una PWM forniscono un segnale a zero se li metto bassi e un segnale alternato 0-5 se messi alti con un determinato dutycicle? Se si, come imposto il Dutycicle?

yoshi93

Purtroppo la memoria programma non dice tutto riguardo il numero massimo di istruzioni di un programma visto che al momento non so di quanti bit siano composte le singole istruzioni in assembly avr. Sui pic le istruzioni sono da 14 bit ciascuna quindi supponendo che anche gli avr seguano questa dimensione:

memoria totale: 32KB=32*1024 byte=262144bit
istruzioni max (in assembly): 262144/14=18724 circa

Ovviamente questo conto è sbagliato e probabilmente mi sono sfuggite altre cose (visto che non conosco a fondo gli AtMega) però credo che le istruzioni assembly siano abbastanza per quasi tutti gli scopi a cui è adibito un processore ad 8 bit. Conta poi che le istruzioni in C++ che usi sono tradotte in macro in assembly percui a tutti gli effetti è difficile fare questo conto senza considerare poi l'influenza delle varie librerie.
Il metodo più comodo è farsi dire dall'IDE la dimensione del sorgente e vedere se lo carica senza problemi.

Per la seconda domanda guarda AnalogWrite nel reference ufficiale.

uwefed

Il numero massimo di righe e numero massimo di caratteri per righe sono piú una limitazione dell'editore del IDE che del microcontroller. Il numero di caratteri usati per uno sketch dipende tanto da che nomi si danno alle variabili e alle funzioni ( "num" o "variabile_numero_che_tiene_il_conteggio_dei_pezzi_passati" ). Anche dei commenti esaustivi aumentano la grandezza del codice sorgente del Sketch ma non finiscono nel codice macchina che verrá trasmesso al Arduino.

La dimensione del codice macchina dipende molto dalle funzioni usate. Certe funzioni usano una libreria e percui il codice aumenta tanto anche solo se la usi 1 volta. Poi ci sono tecniche e trucchetti di scrivere lo sketch che aumentano / diminuiscono la memoria occupata. Il compilatore (a secondo dell'impostazione che con il IDE di Arduino é fissa) ottimizza il codice. Ci sono impostazioni per avere un codice compatto e altri per averlo veloce ecc.

Tutte due sono domande teoriche come se Ti chiedono in quanto tempo ci metti con una macchina che va 300 all ora per arrivare da casa Tua al lato oposto o in centro cittá. Il tempo dipende dal traffico e dai limiti di velocitá e non dalla velocitá massima del auto. Ci sono momenti dove in bici / a piedi sei più veloce.

PWM:
I pin PWM possono essere usati come pin uscita normali e percui avere ca 0V e ca 5V oppure in modalitá PWM una tensione 0V-5V alternata normalmenta a 490 / 980 Hz (dipende dal pin perché usa timer diversi). In modalitá entrata hanno un impedenza alta (minimo 5MOhm) oppure una resistenza tra 20 e 50 kOhm a +5V se attivata la resistenza Pullup interna.

Ciao Uwe

leo72

@yoshi:
sugli Atmel la flash è gestita in word (2 byte) per cui al max potresti avere 32 kB/2 = 16 kB di dati salvati in memoria.
Quest dati non sono ovviamente tutte istruzioni perché potrebbero essere anche indirizzi per salti, valori per confronti ecc..

@StudenteDubbioso:
come ti ha detto Uwe, sono domande pertinenti più l'IDE che l'Arduino.
Non tutto quello che è in uno sketch viene poi trasferito così com'è in Flash. Una riga può contenere diverse istruzioni, oppure nessuna.
Non c'è una regola certa per cui ogni tot righe di sorgente hai tot byte di firmware

Go Up