- Messaggi: 29
- Ringraziamenti ricevuti 0
×
MSP430, Microcontrollori 16 bit Ultra Low Power
Programmare gli MSP430 saldati sulla PCB
4 Anni 6 Mesi fa - 4 Anni 6 Mesi fa #1
da Blu
Programmare gli MSP430 saldati sulla PCB è stato creato da Blu
Ciao a tutti,
scrivo questo post per parlare di un aspetto che è comune un po’ a tutti i microcontrollori: la possibilità di essere programmati DOPO essere stati saldati sulla PCB (magari, per aggiornare il firmware).
Chiaramente, affronto l’argomento nell’ottica degli MSP430 (gli unici che conosco), che tipicamente avranno bisogno di 4 pin per la programmazione: VCC, VSS, RESET e TEST.
Sulla prossima PCB che mi farò realizzare vorrei impiegare una soluzione per rendere più semplice la ri-programmazione del microcontrollore; la espongo qui di seguito, precisando il fatto che sono solo un appassionato di microcontrollori, non un esperto, quindi potrei scrivere qualche bestialità.
Un’altra precisazione: tutto il discorso che andrò a fare parte dal presupposto che la soluzione proposta andrà ad essere implementata su una PCB a 2 strati, con lo strato inferiore adibito a piano di massa. Ma non ci dovrebbero essere problemi ad implementarla su una PCB monofaccia (fatte le dovute variazioni).
Per poter programmare più facilmente un microcontrollore già saldato sulla PCB ho pensato di ricorrere ai connettori IDC: it.wikipedia.org/wiki/Connettore_IDC
In particolare, userò un maschio IDC a 8 poli (2 file da 4) saldato alla PCB, un cavo a nastro con entrambi i terminali femmina IDC, ed un connettore femmina IDC sempre a 8 poli in grado di “ponticellare” il connettore maschio.
Il principio di funzionamento è quello visibile nello schema qui sotto.
Sulla sinistra c’è il microcontrollore, al centro il connettore maschio IDC saldato alla PCB, e a destra la batteria.
A titolo di esempio, ho voluto scegliere, come microcontrollore, l’MSP430FR4133, perché è quello che conto di usare in futuro, ma in linea teorica credo che questa soluzione potrebbe essere impiegata con moltissimi MSP430, cambiando solo i valori di C3, C4 e forse R1.
Allora: C1 e C2 sono i condensatori di disaccoppiamento (rispettivamente 100 nF e 10 μF), R1 è il resistore di pullup del pin di reset (47 kΩ), e C3 + C4 sono i condensatori di pulldown sempre del pin di reset (ne parlo tra poco).
Durante il normale funzionamento, nel connettore maschio IDC (quello saldato alla PCB, e raffigurato nel disegno) è inserito un connettore femmina IDC, la cui unica funzione è quella di realizzare un collegamento tra le due file di contatti elettrici del connettore maschio; quindi, con riferimento all’immagine qui sopra, serve a connettere tra loro i 4 terminali elettrici gialli di sinistra del connettore IDC ai 4 di destra.
In questa condizione:
Il polo negativo della batteria è connesso al terminale indicato dalla freccia rossa nell’immagine. Tale terminale è direttamente collegato al piano di massa posto sul retro della PCB, e dovrebbe quindi fungere da centro di massa (ma non vorrei dire sciocchezze).
Il polo positivo della batteria va ad alimentare il microcontrollore.
Il pin di reset ha il resistore di pullup da 47 kΩ, e grazie alla somma delle capacitanze di C3 e C4 (che sono disposti in parallelo) ha anche la necessaria capacitanza di pulldown (10nF, per l’MSP430FR4133).
Quando invece voglio programmare il microcontrollore, rimuovo dal connettore IDC maschio la relativa femmina, ed al suo posto inserisco il terminale IDC femmina di un cavo a nastro che porta il segnale dal programmatore.
IMPORTANTE: questo cavo IDC porterà il segnale SOLTANTO ai 4 terminali di sinistra del connettore IDC maschio saldato alla PCB (quelli connessi al microcontrollore): i 4 terminali di destra (quelli verso la batteria) saranno del tutto scollegati.
Come dicevo, questo cavo a nastro sarà connesso al programmatore: in particolare, vorrei usare, come programmatore, la scheda di sviluppo MSP-EXP430FR4133, che monta esattamente lo stesso microcontrollore che conto di usare anch’io. Ciò che conto di fare è quindi collegare il cavo a nastro ai pin VSS, VCC, RESET e TEST di tale scheda di sviluppo, ovviamente “lato programmatore”.
In questa condizione:
La batteria che normalmente alimenta i componenti montati sulla PCB è completamente scollegata da tutto; l’alimentazione del microcontrollore proviene dalla LaunchPad.
C4 è ora scollegato dal pin di reset del microcontrollore.
Il pin di reset è ora connesso alla LaunchPad, e continua ad avere il resistore di pullup, ma ha solo 1 condensatore di pulldown: C3. Il suo valore non supererà gli 1,1 nF, perché tale è il massimo valore capacitivo che tale condensatore può avere in fase di programmazione.
Come dicevo, questa soluzione potrebbe essere impiegata con molti microcontrollori: basta fare attenzione al valore dei componenti che fanno parte dello schema. Ad esempio, per l’ MSP430G2553 (il primo microcontrollore che ho imparato a programmare), il valore di R1 è identico (47 kΩ), ma quello di C3 è differente: infatti, in fase di programmazione, il condensatore di pulldown del pin di reset non può superare i 2,2 nF. Modificando il valore di tale condensatore, occorrerà inevitabilmente modificare il valore anche di C4.
Se la soluzione che ho esposto qui sopra è valida, la vorrei impiegare ogni qual volta andrò a farmi realizzare una PCB, in modo da poter “rimettere le mani” sul firmware del microcontrollore ogni volta che ne avrò bisogno.
Si tratta di una soluzione corretta? Ha dei limiti? Ad esempio, può essere usata se si conta di usare anche l’ADC10 del microcontrollore, oppure si avrebbero dei valori del tutto sballati?
scrivo questo post per parlare di un aspetto che è comune un po’ a tutti i microcontrollori: la possibilità di essere programmati DOPO essere stati saldati sulla PCB (magari, per aggiornare il firmware).
Chiaramente, affronto l’argomento nell’ottica degli MSP430 (gli unici che conosco), che tipicamente avranno bisogno di 4 pin per la programmazione: VCC, VSS, RESET e TEST.
Sulla prossima PCB che mi farò realizzare vorrei impiegare una soluzione per rendere più semplice la ri-programmazione del microcontrollore; la espongo qui di seguito, precisando il fatto che sono solo un appassionato di microcontrollori, non un esperto, quindi potrei scrivere qualche bestialità.
Un’altra precisazione: tutto il discorso che andrò a fare parte dal presupposto che la soluzione proposta andrà ad essere implementata su una PCB a 2 strati, con lo strato inferiore adibito a piano di massa. Ma non ci dovrebbero essere problemi ad implementarla su una PCB monofaccia (fatte le dovute variazioni).
Per poter programmare più facilmente un microcontrollore già saldato sulla PCB ho pensato di ricorrere ai connettori IDC: it.wikipedia.org/wiki/Connettore_IDC
In particolare, userò un maschio IDC a 8 poli (2 file da 4) saldato alla PCB, un cavo a nastro con entrambi i terminali femmina IDC, ed un connettore femmina IDC sempre a 8 poli in grado di “ponticellare” il connettore maschio.
Il principio di funzionamento è quello visibile nello schema qui sotto.
Sulla sinistra c’è il microcontrollore, al centro il connettore maschio IDC saldato alla PCB, e a destra la batteria.
A titolo di esempio, ho voluto scegliere, come microcontrollore, l’MSP430FR4133, perché è quello che conto di usare in futuro, ma in linea teorica credo che questa soluzione potrebbe essere impiegata con moltissimi MSP430, cambiando solo i valori di C3, C4 e forse R1.
Allora: C1 e C2 sono i condensatori di disaccoppiamento (rispettivamente 100 nF e 10 μF), R1 è il resistore di pullup del pin di reset (47 kΩ), e C3 + C4 sono i condensatori di pulldown sempre del pin di reset (ne parlo tra poco).
Durante il normale funzionamento, nel connettore maschio IDC (quello saldato alla PCB, e raffigurato nel disegno) è inserito un connettore femmina IDC, la cui unica funzione è quella di realizzare un collegamento tra le due file di contatti elettrici del connettore maschio; quindi, con riferimento all’immagine qui sopra, serve a connettere tra loro i 4 terminali elettrici gialli di sinistra del connettore IDC ai 4 di destra.
In questa condizione:
Il polo negativo della batteria è connesso al terminale indicato dalla freccia rossa nell’immagine. Tale terminale è direttamente collegato al piano di massa posto sul retro della PCB, e dovrebbe quindi fungere da centro di massa (ma non vorrei dire sciocchezze).
Il polo positivo della batteria va ad alimentare il microcontrollore.
Il pin di reset ha il resistore di pullup da 47 kΩ, e grazie alla somma delle capacitanze di C3 e C4 (che sono disposti in parallelo) ha anche la necessaria capacitanza di pulldown (10nF, per l’MSP430FR4133).
Quando invece voglio programmare il microcontrollore, rimuovo dal connettore IDC maschio la relativa femmina, ed al suo posto inserisco il terminale IDC femmina di un cavo a nastro che porta il segnale dal programmatore.
IMPORTANTE: questo cavo IDC porterà il segnale SOLTANTO ai 4 terminali di sinistra del connettore IDC maschio saldato alla PCB (quelli connessi al microcontrollore): i 4 terminali di destra (quelli verso la batteria) saranno del tutto scollegati.
Come dicevo, questo cavo a nastro sarà connesso al programmatore: in particolare, vorrei usare, come programmatore, la scheda di sviluppo MSP-EXP430FR4133, che monta esattamente lo stesso microcontrollore che conto di usare anch’io. Ciò che conto di fare è quindi collegare il cavo a nastro ai pin VSS, VCC, RESET e TEST di tale scheda di sviluppo, ovviamente “lato programmatore”.
In questa condizione:
La batteria che normalmente alimenta i componenti montati sulla PCB è completamente scollegata da tutto; l’alimentazione del microcontrollore proviene dalla LaunchPad.
C4 è ora scollegato dal pin di reset del microcontrollore.
Il pin di reset è ora connesso alla LaunchPad, e continua ad avere il resistore di pullup, ma ha solo 1 condensatore di pulldown: C3. Il suo valore non supererà gli 1,1 nF, perché tale è il massimo valore capacitivo che tale condensatore può avere in fase di programmazione.
Come dicevo, questa soluzione potrebbe essere impiegata con molti microcontrollori: basta fare attenzione al valore dei componenti che fanno parte dello schema. Ad esempio, per l’ MSP430G2553 (il primo microcontrollore che ho imparato a programmare), il valore di R1 è identico (47 kΩ), ma quello di C3 è differente: infatti, in fase di programmazione, il condensatore di pulldown del pin di reset non può superare i 2,2 nF. Modificando il valore di tale condensatore, occorrerà inevitabilmente modificare il valore anche di C4.
Se la soluzione che ho esposto qui sopra è valida, la vorrei impiegare ogni qual volta andrò a farmi realizzare una PCB, in modo da poter “rimettere le mani” sul firmware del microcontrollore ogni volta che ne avrò bisogno.
Si tratta di una soluzione corretta? Ha dei limiti? Ad esempio, può essere usata se si conta di usare anche l’ADC10 del microcontrollore, oppure si avrebbero dei valori del tutto sballati?
Ultima Modifica 4 Anni 6 Mesi fa da Blu.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Blu
- Autore della discussione
- Junior Member
Riduci
Di più
4 Anni 5 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Programmare gli MSP430 saldati sulla PCB
Salve Blue,
grazie della descrizione dettagliata.
In generale direi che va bene. Unico inconveniente che vedo è che devi dedicare un connettore relativamente grande e creare un ponticello ad hoc.
Il programmatore ha l'opzione per alimentazione dalla scheda o meno, per cui potresti usare anche tale opzione e avere sempre la batteria collegata. Questo ti permette di avere un connettore più semplice. Il ragionamento/note sulla capacità sulle linee rimane valido.
L'MSP430FR4133 ha anche un bootloader UART già programmato, per cui potresti anche usare tale canale per programmare schede già in "servizio". Usando adattatori bluetooth UART potresti in futuro anche avere aggiornamenti del Firmware via radio. Basterebbe mettere sul PCB un adattatore USB-bluetooth.
Questa sarebbero altre alternative ma quella di usare un programmatore è sicuramente valida e veloce.
Saluti,
Mauro
grazie della descrizione dettagliata.
In generale direi che va bene. Unico inconveniente che vedo è che devi dedicare un connettore relativamente grande e creare un ponticello ad hoc.
Il programmatore ha l'opzione per alimentazione dalla scheda o meno, per cui potresti usare anche tale opzione e avere sempre la batteria collegata. Questo ti permette di avere un connettore più semplice. Il ragionamento/note sulla capacità sulle linee rimane valido.
L'MSP430FR4133 ha anche un bootloader UART già programmato, per cui potresti anche usare tale canale per programmare schede già in "servizio". Usando adattatori bluetooth UART potresti in futuro anche avere aggiornamenti del Firmware via radio. Basterebbe mettere sul PCB un adattatore USB-bluetooth.
Questa sarebbero altre alternative ma quella di usare un programmatore è sicuramente valida e veloce.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
4 Anni 5 Mesi fa #3
da Blu
Risposta da Blu al topic Programmare gli MSP430 saldati sulla PCB
Salve Mauro, e grazie per la risposta.
Nella tua risposta hai accennato al bootloader UART; l’ho letto nel datasheet dell’MSP430FR4133 e nella relativa User’s Guide, ma devo ammettere che non ho capito molto (sono un principiante); so che si tratta di un aspetto che dovrò approfondire, ma per il momento ho deciso (vigliaccamente ) di rimandare.
Dalla tua risposta ho capito che il sistema che ho proposto non è concettualmente avverso ad un uso “analogico”: mi basterà rispettare le normali accortezze che avrei comunque osservato anche in un qualsiasi altro progetto analogico.
Ricordo che, quando avevo cominciato ad usare l’MSP430G2553, avevo tentato di programmarne uno collegandolo solo ai pin RESET e TEST della sua LaunchPad, ma lasciandolo collegato ad un LDO da 2,5V per l’alimentazione; se non ricordo male, non c’ero riuscito (o ricordo male?).
Tornando all’MSP430FR4133; con la sua LaunchPad (MSP-EXP430FR4133) si può programmare un microcontrollore impiegando solo i pin RESET e TEST, senza collegare anche quelli dell’alimentazione? Obiettivamente, sarebbe una bella comodità. Oppure è un’operazione possibile solo con il programmatore MSP-FET?
Nella tua risposta hai accennato al bootloader UART; l’ho letto nel datasheet dell’MSP430FR4133 e nella relativa User’s Guide, ma devo ammettere che non ho capito molto (sono un principiante); so che si tratta di un aspetto che dovrò approfondire, ma per il momento ho deciso (vigliaccamente ) di rimandare.
Dalla tua risposta ho capito che il sistema che ho proposto non è concettualmente avverso ad un uso “analogico”: mi basterà rispettare le normali accortezze che avrei comunque osservato anche in un qualsiasi altro progetto analogico.
Ricordo che, quando avevo cominciato ad usare l’MSP430G2553, avevo tentato di programmarne uno collegandolo solo ai pin RESET e TEST della sua LaunchPad, ma lasciandolo collegato ad un LDO da 2,5V per l’alimentazione; se non ricordo male, non c’ero riuscito (o ricordo male?).
Tornando all’MSP430FR4133; con la sua LaunchPad (MSP-EXP430FR4133) si può programmare un microcontrollore impiegando solo i pin RESET e TEST, senza collegare anche quelli dell’alimentazione? Obiettivamente, sarebbe una bella comodità. Oppure è un’operazione possibile solo con il programmatore MSP-FET?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Blu
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 29
- Ringraziamenti ricevuti 0
4 Anni 5 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Programmare gli MSP430 saldati sulla PCB
Dimenticavo una cosa, se fai uso di una batteria la cui tensione varia, non usare per l'ADC Vref = Vcc ma usa un altro valore del reference integrato. In questo modo hai un valore di riferimento costante. Vref= Vcc ha senso se alimenti la MCU per mezzo di un LDO.
Relativamente ai pin di programmazione RESET e TEST, devi sempre avere GND e Vcc collegati alla MCU.
Anche se fai uso del programmatore MSP-FET. Il programmatore MSP-FET permette di alimentare l'MSP430 da programmare o usare un'alimentazione esterna per l'MSP430, il quale deve comunque essere alimentato.
Questo dipende dal fatto che la fase di programmazione richiede comunque che il modulo Flash o nel tuo caso FRAM, sia alimentato. Inoltre anche la circuiteria di programmazione deve essere alimentata, per cui devi sempre avere Vcc e GND.
GND deve poi essere in comune con il programmatore che deve fornire l'alimentazione o meno.
Se il programmatore non fornisce l'alimentazione, deve comunque essere collegato a Vcc dell'MSP430, in maniera da usare tale tensione per i traslatori di livello logico interni, e usare (durante la programmazione) gli stessi livelli di tensione usati per Vcc dell'MSP430.
Saluti,
Mauro
Relativamente ai pin di programmazione RESET e TEST, devi sempre avere GND e Vcc collegati alla MCU.
Anche se fai uso del programmatore MSP-FET. Il programmatore MSP-FET permette di alimentare l'MSP430 da programmare o usare un'alimentazione esterna per l'MSP430, il quale deve comunque essere alimentato.
Questo dipende dal fatto che la fase di programmazione richiede comunque che il modulo Flash o nel tuo caso FRAM, sia alimentato. Inoltre anche la circuiteria di programmazione deve essere alimentata, per cui devi sempre avere Vcc e GND.
GND deve poi essere in comune con il programmatore che deve fornire l'alimentazione o meno.
Se il programmatore non fornisce l'alimentazione, deve comunque essere collegato a Vcc dell'MSP430, in maniera da usare tale tensione per i traslatori di livello logico interni, e usare (durante la programmazione) gli stessi livelli di tensione usati per Vcc dell'MSP430.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
4 Anni 5 Mesi fa #5
da Blu
Grazie ancora per i tuoi preziosi consigli.
Risposta da Blu al topic Programmare gli MSP430 saldati sulla PCB
Questa mi ha un po' spiazzato; pensavo di potermi tranquillamente avvalere di VCC come Vref per l'ADC quando alimentavo il microcontrollore con una normalissima batteria a bottone da 3V al litio. Per dirla tutta, pensavo che il fatto di non avvalermi di un LDO (in questo progetto) avrebbe proprio avuto, come conseguenza, quella di avere delle letture ADC più “stabili”, perché non condizionate dal rumore prodotto dall’ LDO (seppur basso). Presumo che il tuo ragionamento si fondi sul fatto che, nel momento in cui si applica un carico ad una batteria, la tensione inevitabilmente scende: è così?Dimenticavo una cosa, se fai uso di una batteria la cui tensione varia, non usare per l'ADC Vref = Vcc ma usa un altro valore del reference integrato. In questo modo hai un valore di riferimento costante. Vref= Vcc ha senso se alimenti la MCU per mezzo di un LDO.
Grazie ancora per i tuoi preziosi consigli.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Blu
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 29
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.