Domanda [GUIDA] Perchè Arduino è amato?

Beduino

Utente Gold
20 Novembre 2017
566
20
173
219
Ultima modifica:
Arduino, perché tutti lo adorano?
In questo topic vorrei spiegare perchè Arduino è amato enormemente nel mondo e per far questo vi mostrerò un esempio di codice di due progetti (ed uno pseudocodice).
Il progetto è il classico "Hello World" dei micro, anche chiamato "Blinking Led".
Nota importante è che si va a creare solo un segnale di comando per il circuito di pilotaggio del led, in genere si evita di pilotare qualcosa direttamente a causa della scarsa corrente in output.
Tuttavia il codice non cambia, dovete solo considerare che quello che andiamo a pilotare sia un BJT.

Pseudocodice di quello che si vuole fare:

Codice:
Start;               // questo comando serve a scegliere i parametri principali della board
Output_choice;       // scelgo prima su carta il pin di output e poi lo dico all'unità
In loop: {           // loop infinito
    status_change;   // creo il segnale che mi interessa, nel mio caso una onda quadra
    wait_1_second;   // aspetto 1 secondo prima di cambiare l'uscita
}

Classico progetto di un micro-controller

Cosa interessante è sapere che la Micro-Controller Unit (MCU) ha la possibilità di farti scegliere il clock da usare, possiamo dargli un clock esterno o clock interno (alcune volte più di uno).
In questo progetto, non si cambiano le impostazioni di default e quindi è selezionato un clock interno.

C:
#include <MCU_BOARD.h>  //qui si deve mettere la board usata in questo specifico progetto

// inizio configurazione
#pragma config Watch_dog = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config Register_Protection  = OFF // Dobbiamo disabilitare la protezione dei registri in scrittura
// fine configurazione

void delay(int num);

void main()
{
    DDRT = 0x80; // qui sto dicendo di usare il pin 8 della porta T come uscita
    PTT = 0x80;  // qui sto dicendo di inizializzare il pin 8 a 1, scelgo ad esempio una board -> 1 = "0 logico",
  while(1) // loop infinito
  {
    PTT_PTT7 ^= 1;  // qualcosa exor ad 1 significa che l'uscita è negata, molti scrivono "qualcosa != qualcosa"
      delay(1000);  //aspetta
    _Watch_Dog;     // forse la parte più strana, lui ha il compito di trovare i problemi durante l'uso
  }
}
void delay (int num){  // funzione per creare un delay da 1 ms
  volatile unsigned short p;
    while (num > 0)  {
      p= 100;
      while (p > 0){
        p = p - 1 ;
      }
      num = num -1 ;
    }
}

Come potete vedere, il codice non è di facile lettura ed è, anzi, piuttosto incomprensibile in alcuni punti. Qui la porta T del mio MCU è stata pensata ad 8 uscite, da cui deriva un registro ad 8 bit. Per scrivere nel registro si deve, a mano, pensare in binario e inserire il corretto bit nel corretto posto. Se ad esempio fosse stato il 7° bit, avrei dovuto scrivere:
Codice:
// codice
DDRT = 0x40;  // Data Direction Register of port T
PTT = 0x40;     // PorT T data register
//codice

Arduino, help! Esempio di progetto

Proviamo adesso a parlare nel mondo di arduino. Colleghiamo quindi il nostro led al pin numero.. facciamo pin digitale 8?
C:
const int led = 8; // usato dal team di arduino
// #define led 8      // preferito da me

void setup() {
  pinMode(led, OUTPUT); // hey led 8, sei un output
}

void loop() {     // hey, il loop infinito di prima!
  digitalWrite(led, HIGH);   // accenditi, led!
  delay(1000);              // aspetta 1 secondo
  digitalWrite(led, LOW);    // spengiti
  delay(10000);              // aspetta 1 secondo
}

Spiegazioni

Nel progetto del MCU ho volutamente evitato un if per fare il controllo se la mia onda quadra era allo 0 logico o 1 logico perché inutile, posso tranquillamente negare o con un not (inverter) o con una porta exor con un ingresso fisso ad 1 (diventa un inverter).

Conclusioni

Senza ombre di dubbio, un progetto con arduino è di una semplicità di molto superiore a quella di un MCU. Questo è il codice per far accendere un solo led, considerate che creare una PWM o gestire un interrupt è molto più difficoltoso su un MCU (in futuro magari porto esempi di interrupt su arduino.. wait, what is an interrupt?).
Vi siete accorti che nel progetto di arduino ho scritto "delay(10000)"? Prima regola nel mondo dell'elettronica.. non fidatevi mai, andate a caccia dell'errore. Se ho fatto altri errori (probabilità = 1).. guys,it's Saturday for everyone.. scrivetemelo nei commenti e correggo subito.
Ci sono invece alcune cose che con arduino diventato complicate.. parlo ad esempio della gestione del clock, rimpiazzarlo o modificarlo a piacimento. Nella maggior parte dei casi (e dei progetti), questa board rappresenta però la semplicità più assoluta.
Messaggio unito automaticamente:

Volevo fare un libro/corso interamente gratuito ed open sull'elettronica, è un progetto a tempo perso fatto durante i weekend. La prima lezione è disponibile a:
https://steemit.com/ita/@bjtcoin/it...ori-semplificazioni-della-teoria-e-legge-base

Spero di poter creare delle mini guide precise e dettagliate sia su inforge sia su steemit, a presto!
Ovviamente di tutto quello che dirò citerò le fonti, ma in partenza tutto quello che finora ho detto è la base.

P.S.
ho paura che su inforge le mie guide vadano perse dopo un tot tempo, in quanto con il passare del tempo andranno a finire sotto le discussioni normali di altri utenti.. ecco perchè anche su steemit. Spero in futuro di rendere disponibile un libro sull'elettronica che parta dallo 0 e arrivi fino all'elettronica "difficile" (passando per sbugiardare quel ladro francese di Thevenin, onore a te Hermann Ludwig Ferdinand von Helmholtz).
 
Bella guida io prima utilizzavo il pic e programmavo in asm, dovevi prima preparare il circuito base per il microcontroller poi dovevi avere sempre a portata di mano il datasheet per verificare i registri e le proprietà delle porte insomma tutta un altra storia rispetto ad arduino, si potrebbe aprire una sezione apposta per arduino e microcontroller
 
Bella guida io prima utilizzavo il pic e programmavo in asm, dovevi prima preparare il circuito base per il microcontroller poi dovevi avere sempre a portata di mano il datasheet per verificare i registri e le proprietà delle porte insomma tutta un altra storia rispetto ad arduino, si potrebbe aprire una sezione apposta per arduino e microcontroller

l'ho chiesto e potremmo aprirla appena creiamo qualche guida. Ho anche visto che il pwm è trattato ma per raspberry pi, cercherò di portarlo anche per arduino!
 
  • Mi piace
Reazioni: insidehackers