Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Piccolo problema con PIC e led a segmenti

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 21 nov 2009, 19:55

Ciao a tutti

una volta tanto non mi presento in preda alla nera disperazione ma con un problemino piccolo piccolo:
sto realizzando un contatore, con un PIC, 2 display a segmenti e qualche interruttore.
I display vengono pilotati direttamente dalle porte del PIC (per ovvi motivi preferisco spostare le complicazioni al software che dannarmi con integrati, ecc..). i display sono a catodo comune, quindi ho messo i relativi pin a + e tramite il PIC mando a 1 quando voglio spegnere il segmento e 0 quando lo voglio accendere.
Fin qui nessun problema, riesco tranquillamente a pilotare tutti e due i display usando le porte B e C da 0 a 7.
L'unica cosa che non riesco a fare è tenere tutti i segmenti di un display spenti! se mando a 1 tutte le porte il PIC si resetta, e già qui non capisco bene perché....
Ho provato ad aggirare l'ostacolo collegando i catodi comuni a 2 porte "A", mandandoli 0 quando volevo spegnere tutti i relativi segmenti, ma, non so come mai, mi funziona solo una porta per volta.
Allego il codice:

Codice: Seleziona tutto
program contatore

main:

    trisc = 0
     trisb = 0
     trisa= 0

     porta.3=1
     porta.2=1

     portc = %11111001
     delay_ms(200)
     portc = %10100100      '2
     delay_ms(200)        'Attende 1 sec
     portc = %10110000       '3
     delay_ms(200)        'Attende 1 sec

     porta.3=0
     porta.2=0
     delay_ms(200)        'Attende 1 sec
     porta.3=1
     porta.2=1

     portc = %10011001      '4
     delay_ms(200)        'Attende 1 sec
     portc = %10010010      '5
     delay_ms(200)        'Attende 1 sec
     portc = %10000010      '6
     delay_ms(200)        'Attende 1 sec

     porta.3=0
     porta.2=0
     delay_ms(200)        'Attende 1 sec
     porta.3=1
     porta.2=1


     portc = %11111000      '7
     delay_ms(200)        'Attende 1 sec
     portc = %10000000      '8
     delay_ms(200)        'Attende 1 sec
     portc = %10010000      '9
     delay_ms(200)        'Attende 1 sec
     portc = %11000000      '0
     delay_ms(200)        'Attende 1 sec

     porta.3=0
     porta.2=0
     delay_ms(200)        'Attende 1 sec
     porta.3=1
     porta.2=1


goto main
     
end.


nell'esempio la porta A3 è collegata al catodo di 1 display, la A2 all'altro.
lo spegnimento funziona solo sulla 2. Ho provato anche a cambiare le porte e funziona sempre solo la seconda!
La prima né si accende né si spegne!

qualche suggerimento?
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

0
voti

[2] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 22 nov 2009, 20:52

dopo una vita di prove ho fatto mezzo passo avanti e mezzo indietro.
Ho deciso di sacrificare i puntini del display ed usare RC7 e RB7 per pilotare il catodo comune.
Ora lo spegnimento (mandando tutto a zero) funziona, ma ho un altro problema.
La RB0 (e solo quella) mi resta sempre ad ALTO! ho preso un PIC identico, ho caricato il firmware e la RB0 resta sempre a BASSO.
:shock: :shock:
se la faccio lampeggiare da sola funziona:
Codice: Seleziona tutto
sub procedure testporte()
     portB = %11111110
     delay_ms(500)
     portB = %00000000
     delay_ms(500)
     portB = %11111110
     delay_ms(500)
     portB = %00000000
     delay_ms(500)
     portB = %11111110
     delay_ms(500)
     portB = %00000000
     delay_ms(500)
     portB = %11111110
     delay_ms(500)
     portB = %00000000
     delay_ms(500)
     portB = %11111110
     delay_ms(500)
     portB = %00000000
     delay_ms(500)
end sub

ma quando la uso per comporre il numero insieme alle altre è sempre accesa:
Codice: Seleziona tutto
     portB = %11111001      '1
     delay_ms(1000)
     portB = %10100100      '2
     delay_ms(1000)        'Attende 1 sec
     portB = %10110000       '3
     delay_ms(1000)        'Attende 1 sec

lo stesso identico codice, sulla porta C funziona perfettamente.
ho provato anche ad invertire i displayma funzionano correttamente.
Help!!
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

0
voti

[3] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtentePaolino » 23 nov 2009, 9:36

Alexart ha scritto:...L'unica cosa che non riesco a fare è tenere tutti i segmenti di un display spenti! se mando a 1 tutte le porte il PIC si resetta, e già qui non capisco bene perché....
qualche suggerimento?

Come hai connesso il PIC ai display? Hai interposto delle resistenze di limitazione di corrente? Non dici a quale PIC hai collegato i display, pertanto io suppongo si tratti di PIC16F876A. In questo caso, leggendo il datasheet vedo che:

Maximum output current sunk by any I/O pin...................................................25 mA
Maximum output current sourced by any I/O pin ...............................................25 mA
Maximum current sunk by PORTA, PORTB and PORTE (combined) (Note 3).................200 mA
Maximum current sourced by PORTA, PORTB and PORTE (combined) (Note 3)..............200 mA
Maximum current sunk by PORTC and PORTD (combined) (Note 3) ..........................200 mA
Maximum current sourced by PORTC and PORTD (combined) (Note 3) ......................200 mA


Questo mi fa pensare che superi la massima corrente disponibile che, per ciascun pin delle porte è di 25mA e quella combinata non deve superare i 200mA. Se i display fossero accesi con una tecnica di multiplexing, forse te la puoi cavare meglio. Altro consiglio: prova a interporre tra il PIC e il display il driver CD4511, che altro non è che un driver per diplay 7 segmenti che accetta come ingresso 4 bit solamente.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[4] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 23 nov 2009, 11:40

hi hi...vedi (pm) che ci stavo arrivando? La strada era quella, percorsa però in maniera un po' barcollante....
perdonami la testardaggine, ma non voglio usare un integrato come driver...voglio fare tutto via software! Non c'è un motivo specifico, è solo una mia fissazione!
il PIC è un 16f876a ed i (2!) display sono a catodo comune. Al momento sia gli anodi che i catodi sono collegati in diretta ad una porta ciascuno (....)
andando per tentativi (cambiando porte, modificando il codice, ecc...) sono arrivato a comporre correttamente tutte le cifre, inclusa un'animazione iniziale di rotazioni varie, e dato un numero di 2 cifre a separarlo e mandare la cifra delle decine e quella delle unità. Ho ancora qualche problemino "misto": talvolta il display delle decine dal 2 in poi non si accende, qualche reset improvviso, segmenti ballerini, ecc....troppa corrente gli frigge il cervello?
pensavo di mettere 2 resistenze da 220 ohm su ciascun catodo e vedere come va, se migliora magari metto un potenziometro epr vedere a quale valore si accendono decentemente e nel programma tutto funziona.
E' l'approccio corretto?

mi viene anche il dubbio che avere usato 2 porte per pilotare i catodi abbia aumentato di brutto la corrente all'interno del PIC, ma è stata una scelta obbligata, dato che se mettevo a * il catodo per spegnere tutto dovevo mettere a + anche tutti i segmenti, ed il PIC si resettava. O forse con la resistenza dovrebbe sparire anche questo reset?

Thanks!
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

0
voti

[5] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 23 nov 2009, 13:25

poco fa ho sbagliato "sintassi": il display è ad "anodo" comune, non catodo!

ho fatto qualche conto con un calcolatore online: considerando che il PIC esce a 5v e che il led assorbe 20ma a 2V dovrei mettere su ogni catodo una resistenza da 150ohm. provo!

domanda: è lo stesso se metto una resistenza da 150*7 ohm sul catodo?
provo a rispondermi da solo: no perché quando accendo solo pochi segmenti la tensione scenderebbe troppo....
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

0
voti

[6] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtentePaolino » 23 nov 2009, 14:35

Sì, Alexart. Metti un resistore per ciascun catodo (quindi sette resistori a display + una per il punto, totale 8 resistori). Un solo resistore di valore pari a 1k, come hai giustamente fatto notare, porterebbe ad una eccessiva riduzione di corrente e a una bassissima luce emessa.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[7] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 23 nov 2009, 22:45

Aggiornamento serale: il "prototipo" procede molto bene!
ho messo una resistenza da 150ohm su tutti i catodi, e gli anodi direttamente a + (non più collegati ad una porta).
mi sembra che tutto funzioni correttamente, compreso lo "spegnimento" mandando tutti i catodi a 1 senza più i fastidiosi reset.
L'unico "problemino", facilmente aggirabile è che la porta RB0 non funziona, stranamente su tutti e due i PIC...
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

0
voti

[8] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtentePaolino » 23 nov 2009, 23:05

Alexart ha scritto:L'unico "problemino", facilmente aggirabile è che la porta RB0 non funziona, stranamente su tutti e due i PIC...

Hai configurato correttamente TRISB? Se sì, non è che hai brasato la porta quando ci facevi passare molta corrente?

CIao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[9] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 24 nov 2009, 2:40

ho provato i due PIC in un minicircutio che faceva lampeggiar un led su tutte le porte B: in uno non andava, nell'altro si, ma ho l'impressione che anche l'altro abbia qualcosa di brasato. tanto le porte non mancano e nel sorgente ho usato i symbol all'inio, così le posso cambiare rapidamente. prossimo passo: interruttore per il contatore, scrittura sulla eeprom e soprattuto...tutto saldto sulla millefori! sperem....
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

0
voti

[10] Re: Piccolo problema con PIC e led a segmenti

Messaggioda Foto UtenteAlexart » 25 nov 2009, 3:01

FUNZIONAAAAAA!!!! :D :D :D :D :D

Immagine
Avatar utente
Foto UtenteAlexart
50 2 4
Expert
Expert
 
Messaggi: 218
Iscritto il: 2 gen 2007, 11:27

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti