Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione Modalità Visualizzazione
Vecchio 05-07-2012, 12.18.32   #1
Registered User
 

Iscritto da: 06-05-2009
Messaggi: 55
Feedback: (0)
problema con PIC18F2685

Ciao a tutti,
ho un problema con il funzionamento di un pic, il 18F2685.
Per programmarlo utilizzo un PICKIT2 e il rispettivo software (v2.61).
Per scrivere il codice utilizzo MPLAB e HI-TECH PICC-18 per scrivere in C.
Con altri PIC non ho problemi quindi escludo errori di programmazione.

Il problema è questo:
usando il simulatore Proteus ISIS 7, il circuito/programma funziona perfettamente. E' un circuito che si occupa di far accendere/spegnere dei led collegati tramite registri 74HC595 alla pressione dei rispettivi pulsanti collegati tramite registri 74HC165.
Sulla pcb però il programma non da segni di vita. La pcb è stata testata e non ha errori, ha gli stessi collegamenti della simulazione. Inoltre cortocircuitando i pin del pic, è possibile accendere i led manualmente.
Ho provato anche a cancellare tutto il codice e programmarlo con un semplice loop che fa lampeggiare un led collegato direttamente al pic, senza registri di mezzo, ma nulla.
Ho pensato che l'errore potesse risiedere nella configurazione dei bit del pic. Li ho configurati nel codice in questo modo:

__CONFIG(1,XT);
__CONFIG(2,BORDIS & WDTDIS);
__CONFIG(4,DEBUGDIS & LVPEN & STVRDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,WRTEN);

Non ho bisogno di nessuna feature tranne del fatto che voglio utilizzare l'oscillatore esterno (a proposito, non sono riuscito a capire se va bene da 4MHZ per questo PIC). Utilizzo appunto un 4MHZ con i 2 condensatori relativi.

Secondo voi dove sta il problema?
Potrebbe essere un problema di alimentazione, ovvero non c'è abbastanza corrente per alimentare tutti i led + il pic? (ho notato che al tatto il regolatore 7805 e il relativo condensatore scaldano molto).
Dimitree Non in Linea   Rispondi Citando
Vecchio 05-07-2012, 15.45.54   #2
Credendo Vites
 
L'avatar di  SoldatoSemplice
 

Iscritto da: 17-11-2005
Locazione: Roma
Messaggi: 1,535
Feedback: (0)
Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Con altri PIC non ho problemi quindi escludo errori di programmazione.
Scusa ma per quale motivo ne sei così certo? Poco sotto dici che hai allestito una configurazione minimale di funzionamento, quindi a meno che uno dei pochi componenti che hai montato sia guasto, cosa che sicuramente puoi scoprire facilmente, il problema starà proprio nel software, cosa per cui sono propenso data anche la complessità della CPU che hai scelto.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Il problema è questo:
usando il simulatore Proteus ISIS 7, il circuito/programma funziona perfettamente.
Non dare fiducia cieca ai simulatori, nel tuo caso dal momento che l'hardware che usi ne è dotato, è più attendibile se usi l'MPLab simulator o, meglio ancora, il debugger dello stesso microcontrollore.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
E' un circuito che si occupa di far accendere/spegnere dei led collegati tramite registri 74HC595 alla pressione dei rispettivi pulsanti collegati tramite registri 74HC165.
Posta gentilmente uno schema di come hai fatto questi collegamenti, i semiconduttori che hai citato sono in pratica l'uno l'inverso dell'altro, ma entrambi hanno bisogno di un clock che generi opportunamente lo shift, quindi questo ti impedirebbe di leggere correttamente lo stato dei pulsanti, a meno di falsi positivi, oppure non ho capito come hai collegato il tutto, dunque, per favore posta uno schema.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Sulla pcb però il programma non da segni di vita. La pcb è stata testata e non ha errori,
Prendendo per buono che sul PCB non ci siano errori di montaggio o saldature, visto che per accendere un led ti puoi permettere di avere una configurazione minimale monta il tutto su breadboard o su una mille fori, così sarai certo di localizzare l'errore, magari prova anche a fare lo stesso schema su un PIC più modesto, così sapremo dove cercare.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Inoltre cortocircuitando i pin del pic, è possibile accendere i led manualmente.
Questo invece è sospetto, dettaglia meglio per favore.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Ho provato anche a cancellare tutto il codice e programmarlo con un semplice loop che fa lampeggiare un led collegato direttamente al pic,
Ottima idea, le configurazioni minimali sono infallibili per cercare gli errori, ma attaccare un led diretto al PIC non è una buona idea, mettici un blando transistor di mezzo.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
senza registri di mezzo, ma nulla.
Come è possibile che non hai usato i registri ma poco sopra dici che funziona?

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Ho pensato che l'errore potesse risiedere nella configurazione dei bit del pic. Li ho configurati nel codice in questo modo:

__CONFIG(1,XT);
__CONFIG(2,BORDIS & WDTDIS);
__CONFIG(4,DEBUGDIS & LVPEN & STVRDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,WRTEN);

Non ho bisogno di nessuna feature
Qui invece sbagli, la Configuration Word va SEMPRE dichiarata TUTTA e per intero, ed evita il menu a tendina, dichiarala esplicitamente nel codice, quindi estendi questa parte di codice e dichiarala per intero.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
tranne del fatto che voglio utilizzare l'oscillatore esterno (a proposito, non sono riuscito a capire se va bene da 4MHZ per questo PIC). Utilizzo appunto un 4MHZ con i 2 condensatori relativi.
Certo che va bene, le uniche limitazioni sono sul limite superiore nella frequenza, quindi direi che ti puoi permettere anche qualcosa di decisamente più performante di 4 Mhz.

Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
Secondo voi dove sta il problema?
Potrebbe essere un problema di alimentazione, ovvero non c'è abbastanza corrente per alimentare tutti i led + il pic? (ho notato che al tatto il regolatore 7805 e il relativo condensatore scaldano molto).
Quanti led sono? E soprattutto le loro specifiche tecniche?
__________________
Il tempo è il miglior maestro, purtroppo uccide tutti i suoi allievi.
SoldatoSemplice Non in Linea   Rispondi Citando
Vecchio 09-07-2012, 09.21.26   #3
Clokker Strissiante
 
L'avatar di  whitedavil
 

Iscritto da: 26-04-2005
Locazione: Bolzano
Messaggi: 2,293
Feedback: (1)
Avendo esperienza sia con il simulatore da te usato e con il PIC 18f4685 (fratello maggiore)
ti posso dire che il simulatore non va benissimo. Mi è già successo che con proteus tutto funziona, monti la breadboard e non succede nulla....

Posta il codice, per far partire quel micro ci ho smadonnato anche io, si tratta solo di disabilitare alcune periferiche che probabilmente non usi.

Non capisco perchè usi un micro con 96k di rom per accendere qualche led.......
__________________
Esistono solo 2 cose infinite: L'universo e la stupidità umana
whitedavil Non in Linea   Rispondi Citando
Vecchio 24-07-2012, 11.47.33   #4
Registered User
 

Iscritto da: 06-05-2009
Messaggi: 55
Feedback: (0)
ciao, scusate per il ritardo nella risposta..

per errori di programmazione intendevo errori nel programmatore, non intendevo errori di codice, in quanto quella è sicuramente la causa del problema..

ho escluso dalla pcb tutte le periferiche accessorie, ho semplicemente collegato un led+resistenza su RC5.. Se tolgo il pic dal socket e collego a 5V il pin dove andrebbe RC5, il led si accende.

ecco il codice:

Codice:
#include <htc.h>
#define _XTAL_FREQ 4000000
#define FOSC 4000000L

__CONFIG(1,XT);
__CONFIG(2,BORDIS & WDTDIS);
__CONFIG(4,DEBUGDIS & LVPEN & STVRDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,WRTEN);

main (void)
{
	ADCON1 = 0x0F;

	TRISA = 0b00000000;
	TRISB = 0b11001000;
	TRISC = 0b10000000;
	
	GIE = 1;		
	PEIE = 1;
	RCIE = 1;		
	RBIE = 1;		
	TMR0IE = 0;		

	TMR0ON = 1;
	T08BIT = 1;
	T0CS = 0; 
	PSA = 0; 
	T0PS2 = 0;
	T0PS1 = 0; 
	T0PS0 = 1; 
	TMR0 = 8;

	while(1)
	{
		RC5 = 1;
		delay(1000);
		RC5 = 0;
		delay(1000);
	}
}
la config word non è completa poichè non sono riuscito a configurarla completamente

ps. non uso un pic da 96k di rom solo per accendere qualche led..uso questo pic perchè questo ha 1024 di eeprom e io bisogno di quasi del 90% e non avevo spazio su pcb per aggiungere moduli aggiuntivi..quello dei led è solo un test

Ultima Modifica di Dimitree : 24-07-2012 12.08.20.
Dimitree Non in Linea   Rispondi Citando
Vecchio 26-07-2012, 10.55.32   #5
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 1,471
Feedback: (0)
Tutte quelle attivazioni di interrupt non usati potrebbero causarti dei problemi.
Non dovrebbe servire perché RC5 non è un analogico ma io metterei gli ingressi in digitale:
ADCON1=0b00001111
__________________
Camillo

Internet ti fa vedere tutto ma non ti fa toccare niente. (Camillo Ferrari)
Camillo Non in Linea   Rispondi Citando
Vecchio 26-07-2012, 13.56.05   #6
Registered User
 

Iscritto da: 06-05-2009
Messaggi: 55
Feedback: (0)
ti ringrazio, provo appena possibile.
in realtà però quegli interrupt verranno usati nel codice vero e proprio (subito dopo l'attivazione, al posto del while quindi)..devo quindi attivarli prima o poi..come posso risolvere quindi?
Dimitree Non in Linea   Rispondi Citando
Vecchio 30-07-2012, 10.09.22   #7
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 1,471
Feedback: (0)
Quote:
Originariamente inviato da Dimitree Visualizza Messaggio
ti ringrazio, provo appena possibile.
in realtà però quegli interrupt verranno usati nel codice vero e proprio (subito dopo l'attivazione, al posto del while quindi)..devo quindi attivarli prima o poi..come posso risolvere quindi?
Tienili diasattivati per queste prove (è sufficiente non attivare GIE), ma se li attivi devi mettere anche il loro ISR.
GIE va attivato per ultimo dopo tutti gli altri.
__________________
Camillo

Internet ti fa vedere tutto ma non ti fa toccare niente. (Camillo Ferrari)
Camillo Non in Linea   Rispondi Citando
Vecchio 02-08-2012, 15.18.18   #8
Registered User
 

Iscritto da: 06-05-2009
Messaggi: 55
Feedback: (0)
ho provato ad utilizzare un PIC16F876A al posto dell'altro pic..avendo stesso pinout.

Quote:
#include <htc.h>
#define _XTAL_FREQ 4000000
#define FOSC 4000000L

__CONFIG(0x2109);

main (void)
{
ADCON1 = 0x0F;

TRISA = 0b00000000;
TRISB = 0b11001000;
TRISC = 0b10000000;

PEIE = 1;
RCIE = 1;
RBIE = 1;
T0IE = 0;
GIE = 0;

T0CS = 0;
PSA = 0;
PS2 = 0;
PS1 = 0;
PS0 = 1;
TMR0 = 8;

while(1)
{
RC5 = 1;
for (int i=0; i<=100; i++) { __delay_ms(1); }
RC5 = 0;
for (int i=0; i<=100; i++) { __delay_ms(1); }
}
}
ecco il codice completo per questa prova.
Ora il led lampeggia, ma lampeggia quando gli pare: invece di 100ms, a volte sta acceso 1 secondo, a volte un attimo, a volte anche 10 secondi..
secondo voi è un problema di circuito?
non ho uno schema, ma ho semplicemente collegato i pin di alimentazione, il cristallo da 4mhz ai relativi pin (con i 2 condensatori), la resistenza su MCLR come al solito e il led su RC5 tramite una resistenza.

edit: ho notato che toccando il cristallo il led lampeggia molto più regolarmente e velocemente (anche se non a 100ms). potrebbe essere quindi un problema di cristallo? vado subito a procurarmene un altro

Ultima Modifica di Dimitree : 02-08-2012 15.32.08.
Dimitree Non in Linea   Rispondi Citando
Rispondi Per le vostre immagini su questo forum potete usare PcTunerUp!
Iscriviti gratuitamente alla nostra newsletter.


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori)
 
Strumenti Discussione
Modalità Visualizzazione

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +2. Attualmente sono le 18.37.43.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright © 2010 - Master New Media S.r.l. a socio unico - P.I. 02947530784. Tutti i diritti di proprietà letteraria e artistica sono riservati- Privacy
www.pctuner.net è testata telematica registrata presso il Tribunale di Torino, n. 39 del 07.05.2008, Editore Master New Media S.r.l.