da UNO a DUE

ciao,
sono indeciso circa l'acquisto di A. DUE; cosa cambia a livello di programmazione rispetto alla UNO?
se copio e incollo codice scritto per la UNO sulla DUE, funziona così com'è? (tralasciando eventuali cambi di numerazone dei PIN o LED interni)

grazie

A parte la forma che riprende l'Arduino MEGA, la UNO e la DUE sono due schede totalmente diverse.
Devi cambiare IDE: La DUE è supportato solo dall'IDE 1.5.x di cui l'ultimo è la versione 1.5.7.
Devi cambiare la componentistica: la tensione di lavoro della DUE e di 3.3V e non funziona con i componenti a 5V (non è 5V tolerant) quindi devi procurarti dei traslatori di livello o componentistica aggiuntiva. Non puoi collegare i led direttamente. L'uscita fornisce al massimo 3 o 9 mA mentre la UNO ne fornisce 40.
Se usi librerie terze non è detto che funzionino con la DUE. La UNO monta un microcontrollore ATmel AVR, mentre la due ha un ATmel SAM. Tutti i riferimenti ai registri interni non vanno.
La DUE non ha la EEPROM quindi devi trovare un'altro modo per salvare le configurazioni.

Se vuoi realizzarti un Arduino in Stand-alone o un clone con la UNO, anzi con l'ATmega328, puoi. Con la DUE è molto più complicato.

Al momento non mi viene altro, ma comunque sono sicuro di dimenticare qualcosa.

Naturalmente ci sono anche tanti lati positivi.

ok, ma a parte la differenza di tensione, corrente, ecc, per intenderci, se io copio codice del genere, funziona così com'è?

const int switchPin = 2;    // switch input
const int switchPin2 = 7;    // switch input
int potentiometerPin = 0;
int value = 0;
  const int motor1Pin = 3;    // H-bridge leg 1 (pin 2, 1A)
  const int motor2Pin = 4;    // H-bridge leg 2 (pin 7, 2A)
  const int enablePin = 9;    // H-bridge enable pin
  int led = 13;

  void setup() {
    Serial.begin(9600); // inizializzazione porta seriale
    pinMode(switchPin, INPUT);
    pinMode(switchPin2, INPUT);
    pinMode(motor1Pin, OUTPUT);
    pinMode(motor2Pin, OUTPUT);
    pinMode(enablePin, OUTPUT);
    pinMode(led, OUTPUT);       }
  
  void loop() {
    value = analogRead(potentiometerPin); // leggo valore potenziometro
    Serial.println(value); // scrivo il valore sulla seriale come debugging
    
      if (digitalRead(switchPin) == HIGH && digitalRead(switchPin2) == LOW) {
         if(value>200) {
             analogWrite(enablePin,255); //da 70 a 255
             digitalWrite(motor1Pin, LOW);   // set leg 1 of the H-bridge low
             digitalWrite(motor2Pin, HIGH);  // set leg 2 of the H-bridge high
             digitalWrite(led, HIGH); }  // turn the LED on (HIGH is the voltage level)     
         else {
            digitalWrite(motor1Pin, LOW);  // set leg 1 of the H-bridge high
            digitalWrite(motor2Pin, LOW);   // set leg 2 of the H-bridge low
            digitalWrite(led, LOW); }
      }

ovvero, la definizione dei PIN, delle variabili, le funzioni interne (digitalWrite, analogWrite, Serial.println) rimangono le stesse? rimangono così immediate e comprensibili come piace a me?

Si. Se usi l'IDE per programmare la DUE (la versione 1.5.7) le funzioni di Arduino rimangono esattamente le stesse.
Internamente il codice cambia, ma il nome della funzione, i parametri i pin sono gli stessi.

Se vuoi provare, scarica la versione zip della 1.5.7
--> http://arduino.cc/en/Main/Software#toc3
Estraila ed esegui arduino.exe
Copia il tuo codice e prima di fare la verifica seleziona come board Arduino 2, una delle due. E' indifferente al momento.
Se invece hai la scheda devi selezionarla in base a quale micro usb colleghi. (programming port o native port)

ok grazie, ora provo.

sto a fare la tesi e per il controllo di 2 motori DC di cui 1 con encoder (saranno poi 4 motori, di cui 3 con encoder) mi chiedono l'uso della STM32F4 Discovery; per ora ho fatto il controllo dei due motori con la A. UNO, ma il prof. vuole qualcosa di più "professionale".
ho provato ad approcciarmi con la STM ma è da mettersi le mani nei capelli dalla complessità (rispecchiata alla UNO).
Se A. DUE mantiene la stessa immediatezza della UNO, con una maggiore potenza di calcolo, maggior clock, 32bit sarebbe perfetta.

Il SAM dell'Arduino DUE ha la gestione nativa degli encoder. Purtroppo non esiste nessuna libreria che gestisce ancora quell'aspetto del micro.

Pano:
Se A. DUE mantiene la stessa immediatezza della UNO, con una maggiore potenza di calcolo, maggior clock, 32bit sarebbe perfetta.

Ha ragione il tuo professore, la DUE non va bene per gestire dei motori in modo serio, usa un dsPIC33 di tipo MC oppure l'STM32, la discovery è perfetta come scheda e puoi gestire fino a quattro motori dotati di encoder.

Mi intrometto solo per ripetere l'ennesima volta che ...

  1. Arduino DUE è molto poco supportato e pochissime librerie di terze parti sono state convertite per funzionarci.

  2. Molti pochi shield sono fatti per funzionare su Arduino DUE.

  3. La scheda funziona esclusivamente a 3.3V e molti dei suoi pin sono in grado di dare un decimo della corrente (max 3 mA) dei pin degli altri Arduino (max 40 mA). I rimanenti comunque non danno più di 15 mA.

  4. E' sicuramente un processore molto più complesso da utilizzare. Basta guardare le oltre 1400 pagine di cui è composto il datasheet

  5. Difficilmente vedrà ulteriori sviluppi dato che ... ora c'è da dedicarsi alle nuove schede.

Insomma ... salvo tu non abbia esigenze veramente particolari e l'esperienza per utilizzare tale scheda, se è solo per una questione di numero di pin o di memoria ... usa Arduino Mega 2560 ... avrai tutto il supporto di cui puoi avere bisogno e la totale compatibilità con la maggior parte degli shield.

Se invece il problema è la potenza di calcolo ... dai retta ad Astro ... passa ad altra piattaforma :wink:

Guglielmo

Poi non é detto che il driver motori che usi funzioni in modo affidabile con i 3,3V che da la DUE come uscita. È da valutare.
Ciao Uwe

gpb01:
Mi intrometto solo per ripetere l'ennesima volta che ...

  1. Arduino DUE è molto poco supportato e pochissime librerie di terze parti sono state convertite per funzionarci.
  2. Molti pochi shield sono fatti per funzionare su Arduino DUE.
  3. La scheda funziona esclusivamente a 3.3V e molti dei suoi pin sono in grado di dare un decimo della corrente (max 3 mA) dei pin degli altri Arduino (max 40 mA). I rimanenti comunque non danno più di 15 mA.
  4. E' sicuramente un processore molto più complesso da utilizzare. Basta guardare le oltre 1400 pagine di cui è composto il datasheet
  5. Difficilmente vedrà ulteriori sviluppi dato che ... ora c'è da dedicarsi alle nuove schede.

Insomma ... salvo tu non abbia esigenze veramente particolari e l'esperienza per utilizzare tale scheda, se è solo per una questione di numero di pin o di memoria ... usa Arduino Mega 2560 ... avrai tutto il supporto di cui puoi avere bisogno e la totale compatibilità con la maggior parte degli shield.

Se invece il problema è la potenza di calcolo ... dai retta ad Astro ... passa ad altra piattaforma :wink:

Guglielmo

questo fatto del poco supporto non lo sapevo, pensavo che, essendo della famiglia, avesse lo stesso supporto e community delle altre.
la Mega2560 che consigli è ancora una board con processore a 8bit e 16MHz; il fatto di volere passare a A DUE era per una questione di scheda Arduino più vicina di tutte (in termini di processore) alla STM.
grazie a tutti dei consigli, tenterò di lavorare con la STM allora.

Se hai bisogno di supporto con la STM puoi fare le tue domande qui --> [OT] PIC, 8051, MCU e CPU varie - Bar Sport - Arduino Forum
Qualcuno ti risponderà. :roll_eyes: