Il PIC continua a reimpostarsi: vedo effetti collaterali dall'uso della breadboard?


11

Sto usando PIC18F4680 e sto riscontrando problemi nell'esecuzione da una sorgente di clock esterna 40 MHz o cristallo 10 MHz in modalità HSPLL. L'uso del cristallo a 10 MHz in modalità HS sembra andare bene e anche il cristallo a 5 MHz in modalità HSPLL funziona bene.

Quello che succede è che il PIC si avvia, funziona per alcuni secondi, quindi si spegne per un po 'e ricomincia. Il periodo totale del ciclo è di circa 5 secondi, a partire dal quale il PIC funziona smette di funzionare all'inizio del secondo secondo.

Ho anche notato che a volte quando aggiungo un condensatore abbastanza grande scaricato al bus di alimentazione della breadboard, il PIC funzionerà bene. Il punto interessante è che questo accade solo se aggiungo il condensatore mentre il PIC è già in esecuzione. Se accendo la breadboard con il condensatore o posiziono un condensatore che non è stato completamente scaricato, il problema rimane.

Ho letto su alcuni siti che problemi simili al mio possono verificarsi a causa di un maggiore consumo di energia del PIC su frequenza più alta e tensione di funzionamento più bassa più alta. In questi casi, se ci sono alcune cadute di tensione sull'alimentatore, è più probabile che raggiungano la tensione operativa più bassa del PIC su quella frequenza, quindi è una buona idea avere condensatori aggiuntivi sulla breadboard per risolvere quel problema. Dato che a pieno carico a 40 MHz, l'intero circuito utilizza circa 64 mA, la mia prima idea è stata quella di mettere alcuni condensatori al tantalio sperando che fossero abbastanza grandi e con un ESR abbastanza basso da risolvere il problema. Uno non ha aiutato e il secondo non ha aiutato neanche. Quindi ho aggiunto un 100 μ F10 μF100 μFcondensatore di alluminio e questo non ha aiutato neanche. Quindi ho aggiunto un condensatore in alluminio senza alcun effetto. Alla fine, ho aggiunto un condensatore elettrolitico in alluminio da 1 mF e quindi per la prima volta il circuito ha funzionato bene fino a quando non è stato spento e acceso. Dovrei anche notare che a scopo di test sto usando Vcc di 5,5 V che è la tensione nominale più alta per questo microcontrollore. Questo dovrebbe lasciarmi un po 'di spazio fino a 4,2 V, che è la tensione di funzionamento più bassa a 40 MHz470 μF

Successivamente, ho letto che a volte le uscite fluttuanti possono causare problemi, quindi ho inserito alcuni resistori pull-down da su tutti i pin non utilizzati e questo non ha aiutato neanche. Dopo di che ho letto che a volte potrebbero esserci problemi se gli ingressi dell'oscillatore sono fluttuanti, quindi ho provato a collegarli a GND usando alcuni resistori da 10 M Ω e questo non ha aiutato.10 kΩ10 MΩ

A causa della lunghezza del filo che va dall'uscita dell'oscillatore all'ingresso dell'oscillatore sul PIC, mi aspettavo problemi con esso, ma non mi aspettavo problemi con il cristallo da 10 MHz che è molto vicino ai pin dell'oscillatore sul PIC. Anche con il cristallo, mi aspetterei problemi anche in modalità HS, se il problema fosse la distorsione del segnale dell'oscillatore dovuta alla breadboard, ma in modalità HS, il PIC funziona bene.

Normalmente uso 33 condensatori pF per i cristalli, ma ho provato anche con 15 pF e non sono riuscito a rilevare alcun cambiamento.

Devo anche notare che questo PIC ha un monitor di clock a prova di guasto e una commutazione dell'oscillatore interno / esterno. Ho provato ad abilitarli entrambi, sperando che almeno confermassero che il problema è con l'oscillatore, ma non aiutano il problema. Non c'è differenza se sono accesi o spenti.

Ho anche disabilitato a scopo di test timer watchdog, reset brown-out e reset stack over / underflow. Penso di aver disattivato tutte le fonti di ripristino per questo chip. Inoltre, il programma è in un ciclo infinito, quindi non sta finendo.

Il PCF8583 non ha alcun problema e continua a funzionare correttamente anche quando PIC si sta ripristinando, ma d'altra parte ha una tensione minima molto più bassa.

Sfortunatamente, non ho un oscilloscopio, ma ho fatto alcuni test con una scheda audio (frequenza di campionamento di 96 kHz) e ho notato che quando l'RTC è acceso, c'è un rumore di 25 Hz sulla linea di alimentazione. Il programma che sto usando riporta circa 300 mV da picco a picco, ma non so quanto fidarmi e non so se sarebbe abbastanza per causare problemi al PIC. Quando tutto è spento, il rumore è di circa 100 mV picco-picco, quindi dovrebbe andare bene.

Nel caso in cui aiuti, ecco l'immagine della breadboard stessa: (tasto destro-> vedi immagine per dimensioni intere) inserisci qui la descrizione dell'immagine

Qualcuno ha idea di cosa sta succedendo qui?

Alla fine, ho potuto semplicemente eseguire il PIC a 20 MHz, ma se avessi bisogno di più potenza di elaborazione, mi piacerebbe essere in grado di eseguirlo a 40 MHz.

AGGIORNARE

Ho posizionato un altro regolatore sulla breadboard stessa e il rumore raccolto dalla scheda audio ora è molto più basso (circa 50 mV da picco a picco), ma non ha influenzato il problema principale.


1
Hmm, stavo per suggerire WDT e brown-out, ma hai disabilitato quelli. Sai che ci sono delle errata con il brownout per quel PIC? Non ho mai provato a eseguire un PIC così veloce su una breadboard. Usiamo sempre il 18F4580 con oscillatore da 10 MHz e HSPLL. Funzionano bene.
Rocketmagnet,

2
Dimentica la breadboard (non li uso mai) e usa un PCB adeguato, ti farà risparmiare un sacco di tempo.
Leon Heller,

3
@Leon Heller Potrebbe risparmiare molto tempo, ma in questo momento, il PCB è più costoso del mio tempo, soprattutto perché non ho nemmeno un elenco di tutti i componenti principali che userò.
AndrejaKo

1
@AndrejKo Sembra uno di quei problemi che mi fa venire voglia di rannicchiarmi in una palla e piangere. Sei sicuro che il tuo tempo valga così poco? Realizzerei semplicemente il PCB - di solito è anche molto divertente!
AngryEE,

1
@AndrejaKo: se non ti dispiace aspettare una settimana circa, ho avuto un grande successo con questo ordine PCB di gruppo: dorkbotpdx.org/wiki/pcb_order . Se non si vuole fare il proprio, cioè
Chris Laplante

Risposte:


12

Questo è un consiglio piuttosto vecchio, e non so se sarà rilevante per il tuo micro, ma circa 4 anni fa ho realizzato un progetto con un PIC18F che ha riscontrato strani reset spuri. Dopo aver letto il rapporto e riprogrammato la mia memoria, ecco cosa sembra averlo risolto:

Il Low Voltage Programming Enablebit di configurazione è abilitato? Il tuo PGMpin è acceso PORTB? In tal caso, potresti voler considerare di disabilitare entrambi Low Voltage Programming Enablee gli Port B A/D Enableingressi digitali al ripristino. Secondo il mio vecchio rapporto, ciò che stava accadendo era che rimanevamo PORTBfluttuanti mentre erano ingressi analogici e attivavamo il PGMpin. Guardando indietro non so se questa diagnosi fosse corretta, ma alla fine abbiamo finito con successo quel progetto, quindi potrebbe valere la pena tentare.


Interessante! Solo pochi minuti fa, ho notato che avere il programmatore collegato ha influenzato il problema e ora questa risposta. Ho disabilitato la porta BA / D e LVP e finora funziona benissimo. Potrebbe essere una sorta di strana interazione sul pin PGM.
AndrejaKo

@AndrejaKo, sembra molto familiare da quello che ho vissuto. Spero che rimanga stabile ... l'hardware complicato può essere estremamente frustrante quando stai cercando di fare qualcosa: S
Jon L

1
Bene, ha funzionato bene per 21 minuti e 30 secondi. Spero rimanga in questo modo. Lo lascerò correre per tutta la notte e vedere se si ripristina.
AndrejaKo

Grande! Sono contento che abbia risolto il problema.
Abdullah Kahraman,

1
Fatta la mia giornata fratello, ho trascorso un'intera giornata cercando di capire perché sulla terra il mio PIC 16F887 si ripristinava ogni pochi msec. È stata impostata la bassa tensione nel circuito prog e il pin PGM mobile stava rilevando il rumore innescando il reset. +1 rappresentante per te
Gianluca Ghettini,

7

Con una configurazione come questa sarà quasi impossibile per noi dire esattamente cosa non va. Ciò che possiamo dire, tuttavia, è ciò che è sbagliato. Ci sono molte cose che non vanno, o almeno non così bene come fa freddo. Ognuna di queste cose potrebbe essere la vera fonte del tuo problema, ma potrebbe anche richiedere la combinazione di problemi che quando sommati equivalgono al problema che stai vedendo.

L'unico vero modo per eseguire il debug è risolvere tutto ciò che sai essere sbagliato, indipendentemente dal fatto che si tratti della pistola fumante o meno. Alla fine il problema verrà risolto in un modo o nell'altro.

Quando un MCU come questo non funziona correttamente, devi quasi sempre concentrarti sulle basi: Potenza, Orologio e Ripristino. Con una breadboard, tutti e tre sono sospetti!

Il sospetto numero 1 per me è l'orologio a 40 MHz. 40 MHz è abbastanza veloce da passare sopra un filo fluttuante nell'aria. È anche veloce inserirsi in una breadboard, in cui il "sistema di distribuzione del segnale" non è progettato per le alte velocità. Se questo fosse un PCB, ti direi di assicurarti che l'impedenza di traccia sia coerente e di terminare correttamente i tuoi segnali. Sfortunatamente non puoi davvero farlo su una breadboard. La cosa migliore che posso dirti è di mantenere i fili più corti possibile-- e poi renderli ancora più corti! Utilizzare un o-scope sul segnale di clock, sondato direttamente sul pin PIC, con il conduttore GND della sonda anche direttamente sul pin GND più vicino sul PIC. Questo ti dirà molto sul tuo orologio.

(Prova a prendere in prestito un O-scope se puoi. Sarà difficile eseguire il debug delle cose senza uno.)

Il sospetto n. 2 è il potere. Anche la potenza è un grosso problema con le breadboard, poiché l'induttanza e la resistenza del filo sono relativamente alte. Anche in questo caso, mantenere i fili corti. Noto anche che non hai alcun tappo di disaccoppiamento sull'oscillatore a 40 MHz. Per l'OSC andrei in parallelo con uno 0,1 uF e qualcosa di più grande (da 4,7 uF a 100 uF). Il PIC potrebbe anche usare qualcosa di più grande in parallelo con i tappi da 0,1 uF. Normalmente i tappi più grandi non sarebbero necessari, ma nulla è normale con una breadboard.

Il sospetto n. 3 viene ripristinato. Non ci hai fornito informazioni sul segnale di ripristino e direi che è il più basso di quello che sospetto, ma dovresti comunque verificarlo. Metti un o-scope su di esso e guarda cosa sta succedendo. Potresti essere in grado di utilizzare semplicemente un voltmetro. Se la tensione sul pin di ripristino è vicina al livello di soglia, è necessario correggerlo.

Ora, andiamo oltre le cose che hai provato:

Hai fatto molti esperimenti con il posizionamento delle protezioni sulle linee elettriche, con pochi o risultati confusi. Questa è una di quelle volte in cui devi solo mettere dei tappi lì e non preoccuparti se stanno facendo qualcosa di positivo o no. Potrebbe essere che il tuo potere sia rumoroso, ma è solo una delle molte cose che causano il problema. Aggiungi tappi più grandi in parallelo con i tappi 0,1 uF sul PIC. Aggiungi tappi all'oscillatore a 40 MHz. Assicurarsi che i cavi siano più corti possibile. Quindi passa alla prossima cosa.

Le protezioni extra sull'alimentazione sono una di quelle cose che difficilmente possono causare problemi. Ecco perché puoi metterne un po 'e non preoccuparti troppo di loro. Soprattutto con 10-100 tappi uF.

Successivamente, una volta che tutto funziona, puoi rimuovere questi tappi uno alla volta e vedere se il problema ritorna. Se non ritorna, i tappi non erano il problema. Ma per ora è necessario rimuovere questo come un potenziale problema, ma aggiungendo tappi.

Sebbene i pin flottanti possano essere un problema, raramente sono un problema abbastanza grande da causare l'arresto anomalo di un MCU. Vale la pena risolvere, poiché causa altri problemi, ma è molto improbabile che qui sia il problema. Nota: un modo semplice per impedire che il pin inutilizzato fluttui è impostarli come output! Alto o basso, non importa. Ma se il PIC sta guidando quei pin, allora non possono galleggiare.


2
Una buona risposta Tutti quei lunghi fili disordinati mi hanno fatto pensare che cercare di farlo funzionare su una brutta breadboard non valesse la pena e il tempo della sofferenza.
Rocketmagnet,

Bella lista! Riporterò i risultati quando lo esaminerò.
AndrejaKo

4

Non hai menzionato il pin PGM (a volte chiamato LVP). Questo deve essere legato basso o LVP disabilitato nei byte conifig.

Sei sicuro che questo PIC possa ricevere direttamente 40 MHz? Alcuni possono raggiungere solo 40 MHz tramite il PLL interno. Non ho controllato il foglio dati ma dovresti. Anche in questo caso, non mi aspetto che 40 MHz su una breadboard si comportino bene. Penso che dovresti essere in grado di far funzionare il PIC con un cristallo da 10 MHz e il PLL interno 4x se stai attento con la breadboard e metti i cappucci di bypass nei punti giusti.

Questo tipo di domanda viene posta regolarmente. Invece di ripetere tutti i problemi tipici, consultare /electronics//a/29620/4512 .


Sembra che abbiamo due risposte corrette qui :)
Abdullah Kahraman,

2

Devo essere d'accordo con David. Ci sono così tanti fili lunghi e 40 MHz su una breadboard sono abbastanza ottimisti. Non posso credere che il tuo tempo valga davvero così poco che non puoi permetterti di realizzare un prototipo di PCB . Queste cose costano solo circa £ 30 da PCB Train . Sono sicuro che ci sarà qualcuno vicino a te in grado di fornire simili.

Perché non farlo. Progettare un PCB che abbia PIC, oscillatore e regolatore come componenti SMD, quindi un intero carico di strisce di scheda perf. In questo modo è ancora possibile eseguire la prototipazione, ma assicurarsi che il PIC sia felice.

Scheda prototipo PC perf


2
Ah, adoro il 3D di Altium! A proposito, £ 30 possono essere alti per uno studente :) È meglio usare una scheda perf o meglio, un PCB fatto in casa.
Abdullah Kahraman,

1
Dovrei riuscire a creare un PCB fatto in casa, proverò sicuramente con questa idea.
AndrejaKo

2
@AndrejaKo - Fantastico. Dacci un segno di spunta quindi :) - O anche solo inserire due file di pin strip, in modo da poterlo collegare a una breadboard.
Rocketmagnet,

1

se si dispone di un generatore F variabile esterno, prendere in considerazione l'utilizzo di questo per testare il layout / chip per problemi. e trova la F esterna che causa un guasto. Ricorda che i cavi di terra estesi fungono da antenna per il rumore incrociato.


0

sonda sembra che tu abbia bisogno di una sonda logica, dvm o ambito ... http://search.digikey.com/us/en/products/DP%2052/BKDP52-ND/227492

Posiziona il cappuccio sul chip clock V + / gnd e considera una coppia intrecciata per 40MHZ se lontano. Pic xtal ha input e output .. controlla il livello DC dell'uscita invertita = v / 2? .. Pic si scalda? ha ..

Suggerisco la modalità Xtal PLL 10MHz @ 40MHz per evitare problemi di layout.

"La modalità HSPLL utilizza l'oscillatore della modalità HS per frequenze fino a 10 MHz. Un PLL quindi moltiplica la frequenza di uscita dell'oscillatore per 4 per produrre una frequenza di clock interna fino a 40 MHz. Il PLL è disponibile solo per l'oscillatore a cristallo quando il FOSC3: i bit di configurazione FOSC0 sono programmati per la modalità HSPLL (= 0110). "


In realtà ho provato ad usare il cristallo HSPLL e 10 MHz, ma in modalità HSPLL mostra gli stessi risultati dell'oscillatore. Funziona bene in modalità HS.
AndrejaKo

Inoltre, il PIC non si scalda durante l'uso, per quanto posso vedere.
AndrejaKo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.