SAM3X8E problema uscite

Buonasera a tutti, da qualche giorno mi sono stati consegnati dei prototipi di scheda basata su microcontrollore SAM3X8E (lo stesso di Arduino Due).
Buona parte dello schema l'ho ripreso esattamente così com'era dagli schemi ufficiali Arduino, eccetto ovviamente le parti che non interessavano il mio progetto, servendo in modo opportuno le varie tensioni a 3.3V.

Una volta alimentati e collegati tramite JTAG ad un Atmel ICE, tramite il quale dovrei programmarle, tutto è stato riconosciuto in maniera giusta, cioè Atmel Studio 7, tramite la sezione "Tool - Device Programming" riesce a riconoscere il dispositivo, a indicarmene la firma digitale, e a programmarlo con un file binario con successo.

Fin qua tutto bene, ora sorgono i problemi.
Ho notato, dopo aver programmato la scheda, che il comportamento non era quello voluto, nonostante abbia caricato un semplice sketch che dovrebbe chiudere dei relè tramite un ULN2003AN.
A questo punto, tramite un multimetro, ho misurato le tensioni sui tutti i pin, anche quelli che non ho utilizzato nello sketch e i pin ETH, e tutte quante risultano in stato HIGH (circa 3,23v) senza apparente motivo.

Ora, premettendo che è la prima scheda prototipo che io abbia mai fatto, non so se bisogna eseguire qualche altra operazione, se sto usando male io il tool di Atmel Studio 7 o se mi sono perso io qualcosa nell'elettronica della scheda.

Avendo 3 schede, ho notato che tutte e 3 fanno la stessa identica cosa;
Vengono riconosciute dal tool di Atmel Studio ma non si comportano come descritto nello sketch.

Aggiungo, inoltre, che lo sketch l'ho creato con l'IDE di Arduino (versione 1.8.16, non l'IDE 2.0), esportato in binario e caricato tramite il tool di Atmel Studio 7 tramite JTAG e Atmel ICE.

Per essere sicuro che il programmatore rispondesse in maniera corretta, ho eseguito dei test senza alimentare il microcontrollore ricevendo come risultato un errore, quindi immagino che il microcontrollore sia collegato bene.

Spero di essermi spiegato al meglio e ringrazio in anticipo per la vostra attenzione.

E' difficile dire qualcosa senza vedere lo schema e il programma che hai caricato! :slight_smile:

Prima di tutto ti ringrazio per la risposta.
Ho fatto qualche screenshot dello schematico e qualche foto riguardo il mio progetto.

Schematico generale della scheda MCU:

Inquadratura parte connessioni JTAG:

Inquadratura parte connessione ERASE:

Inquadratura parte alimentazione:

Inquadratura parte oscillatori:

Foto scheda MCU:

foto scheda MCU montata sulla scheda madre:

Comunque la cosa più "inquietante" è che tutte le uscite (comprese le ETH, Rx, Tx, SDA, SCL ecc. ecc.) sono perennemente HIGH e misurano circa 3.23V a scheda MCU scollegata dalla scheda madre.

Ho notato inoltre che, una volta alimentata la scheda madre, quando inserisco la MCU board si accendono tutti i relè per un istante e, successivamente, solo le uscite collegate all' ULN2003AN vanno in stato LOW (circa 0.35V).

Allego qua lo sketch e le foto dei passaggi che ho effettuato per caricare il microcontrollore con Atmel ICE collegato via JTAG.

Sketch:

void setup() {
  pinMode(49, OUTPUT);    //relè 1
  pinMode(50, OUTPUT);    //relè 2
  pinMode(51, OUTPUT);    //relè 3
  pinMode(43, OUTPUT);    //relè 4
  pinMode(42, OUTPUT);    //relè 5
  pinMode(13, OUTPUT);    //relè 6
}

void loop() {
  digitalWrite(49, HIGH);
  delay(1000);
  digitalWrite(49, LOW);
  
  digitalWrite(50, HIGH);
  delay(1000);
  digitalWrite(50, LOW);
  
  digitalWrite(51, HIGH);
  delay(1000);
  digitalWrite(51, LOW);
  
  digitalWrite(43, HIGH);
  delay(1000);
  digitalWrite(43, LOW);

  digitalWrite(42, HIGH);
  delay(1000);
  digitalWrite(42, LOW);

  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
}

Passaggi per caricare lo sketch sulla MCU:

Step 1:

Step 2:

Step 3:

Step 4:

Nonostante Atmel Studio mi riconosca la MCU ATSAM3X8E,ne riconosca le memorie e la firma digitale e carichi con successo il file .BIN dentro alla MCU, sulla scheda non si accende alcun relè.

Preciso che l'integrato ULN2003AN è montato correttamente, infatti bypassando la MCU e collegando la 3V3 agli ingressi del ULN2003AN i relè si accendono tutti perfettamente.
Tengo anche a precisare che l'alimentazione è fornita nel modo opportuno utilizzando appositi integrati abbassatori e stabilizzatori.

Ringrazio ancora per la tua attenzione e spero che il materiale che ho caricato basti a capire la situazione.

Forse i pin non utilizzati sono impostati come ingressi con resistenze pull-up?

Non ho inserito alcuna resistenza di pull-up, ne sulla scheda madre, ne sulla scheda MCU.
Sono uscite dirette esattamente come sulla scheda di Arduino due.
Inoltre, sto misurando ora i pin della MCU ATSAM3X8E tramite un multimetro e mi sono accorto che sembrano esserci tensioni "fantasma" su tutti pin, come se i pin interni dell microcontrollore non fossero collegati da nessuna parte.

Ho misurato anche la tensione sul battery holder della scheda madre, privo di batteria, ed anche li misuro tensioni di 3.23V nonostante che, come da schematico (inquadratura parte alimentazione), il D2 sia stato appositamente messo per evitare proprio questo. Cercando di collegare il battery holder ad una scheda Arduino due come carico, tramite 3V3 e GND, noto che questa tensione non genera alcuna corrente e il multimetro misura una tensione pressochè nulla.
Ringrazio ancora per la tua attenzione.

RISOLTO!!!
Il problema per cui la MCU ATSAM3X8E non eseguiva il codice era legato al fatto che ancora non era stata programmata nel modo corretto.
A quanto pare, se la MCU è nuova di fabbrica e non è ancora stata programmata, molto probabilmente, per un fattore di test/debugging, i pin risultano tutti a HIGH con correnti di uscita pressochè nulle.

Quindi l'elettronica negli schemi che ho allegato precedentemente è corretta.

Per programmare correttamente la MCU tramite Atmel Studio 7, interfaccia JTAG ed il programmatore Atmel ICE, bisogna, una volta aperta la finestra di programmazione da " Tools - Device Programming - Interface settings":

Assicurarsi di aver scelto come Tool: il programmatore Atmel-ICE e NON simulator;
Successivamente scegliere il dispositivo corretto, nel mio caso ATSAM3X8E e selezionare l'interfaccia JTAG.
A questo punto applichiamo le impostazioni e, se l'elettronica è configurata correttamente e il programmatore Atmel-ICE riconosce la MCU, dovrebbero apparire la firma del dispositivo e il voltaggio dello stesso.

NOTA BENE: la MCU deve essere alimentata correttamente quando si cerca di leggerne le proprietà tramite Atmel-ICE, altrimenti non sarà possibile riconoscerla.

Una volta che la MCU è stata riconosciuta, bisogna impostare i registri I/O tramite la sezione "GPNVM Bits" selezionando come "GPNVMBITS.BOOT_MODE" l'opzione "Boot from flash".
Il "Register Value" dovrebbe cambiare da 0x000000000 a 0x000000002.
Quindi possiamo programmare i registri della MCU.

Infine, per flashare il nostro sketch nella MCU, dobbiamo tornare alla sezione "Memories", selezionare il file in formato BIN dalla directory nella quale è stato esportato da Arduino IDE e Programmarlo dentro la MCU.

A questo punto dovreste vedere il vostro sketch funzionare sulla vostra MCU.

NOTA BENE: Questi sono i passaggi che ho seguito io per far funzionare il mio circuito custom basato su MCU ATSAM3X8E. Su internet purtroppo non sono riuscito a trovare niente a riguardo. Questi passaggi sono frutto di tre nottate passate su Atmel Studio :exploding_head: :joy:.
Mi auguro che questa guida possa aiutare qualcuno.
Ringrazio comunque Datman per l'attenzione!!

Colgo l'occasione per scusarmi per aver postato un problema software nella sezione hardware :sweat_smile: ma ero convinto che il problema fosse legato alla mia scheda custom.

Che non l'avevi programmato non l'avevi detto! Dicevi di averlo caricato!...
I pin dell'ATmega328p sono normalmente impostati come ingressi prima che si avvii il programma con i pinMode nel setup e nel tuo caso, a quanto pare, anche con le resistenze di pull-up.

In pratica la MCU era stata programmata ma non erano stati settati in modo opportuno i registri I/O, di conseguenza la MCU non poteva operare sui pin. Da quanto ho capito, la funzione pinMode funziona solo se i registri I/O sono stati precedentemente settati, altrimenti non funziona.
Purtroppo le MCU ATSAM non funzionano proprio come le AVR, che ho programmato con successo tramite ICSP diverse volte, senza dover modificare alcun registro.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.