Vai al contenuto
PLC Forum


Orologio A Display - sette segmenti... e vai!!!


aleda5859

Messaggi consigliati

Come avrete potuto notare dall'ultimo mio post.. (son venute fuori 3 pagine!!!dovremmo esserne orgogliosi no?)

sto iniziando a programmare pic...

Mentre approfondisco la mie conoscenze in materia vorrei avvantaggiarmi partendo con la realizzazione di ciò per cui poi il pic mi servirebbe..

vorrei pilotare 4 display a 7 segmenti e farne un orologio... tipo hh,mm

Suggerimenti?

ringrazio in anticipo!

Link al commento
Condividi su altri siti


  • Risposte 157
  • Created
  • Ultima risposta

Top Posters In This Topic

  • aleda5859

    82

  • bit

    38

  • dlgcom

    13

  • Claudio F

    11

Top Posters In This Topic

Suggerimenti per pilotare i display a 7 segmenti?

Per pilotarne 4 potresti usare un integrato MM5450, lo piloti serialemente e ha 34 uscite per comando led, quindi adatte per display a led.

Oppure se hai tante linee libere da usare, (per 4 display te ne servono 11) potresti implementare via software un pilotaggio in multiplexing.

Dipende da cosa vuoi fare, dal costo che vuoi avere, dalla complessità del tuo software, dalle tue capacità di programmazione, ecc...

Ciao!

Link al commento
Condividi su altri siti

Giorgio Demurtas

e se volessi pilotare 6 cifre a 7 segmenti e due barre di led con 15-20 led l'una?

con il 16F84 posso leggere temperature?

per daniele:

io userei un 555 per generare un clock di 1s e poi un integrato contattore con reset a 60 per i min e a 24 per le ore.

non sò però dopo quanto tempo questo "orologio" andrà fuori tempo.

ciao

Giorgio

Link al commento
Condividi su altri siti

Quali sono le mie capacità di programmazione? conosco abbastanza bene VB.6 e qualcosa del .NET ma molto poco dell'assembler... :(:(

L'idea era questa... l'orologio dovrebbe contare 4 display a sette segmenti... hh:mm ore e minuti.

Per controllarli avevo pensato:

Collego dei combinatori ad altrettanti cd74190 che poi dovrò collegare a decodifiche(cd4511) per azionare i display...

I collegamenti ai display (a,b,c,d,e,f,g) saranno in parallelo con uno (probabilmente 2 perchè vorrei utilizzare i 16f84) Pic.

Per il primo display,imposterei un clock fisso di un minuto..per il cd74190 che poi quando torna a zero dovrebbe dare un impulso per far aumentare di +1 il successivo display.Controllando le uscite con il Pic una volta che i due display segnano hh:59 farei scattare +1 per le ore o azzerare i due..

Stesso ragionemento per le ore...

può funzionare?

Link al commento
Condividi su altri siti

se non uso decodifiche necessito di 7uscite per ogni display...(una per segmento) e come faccio con 4 display?

Io ho 13 I/O...ma per impostare l'ora sull'orologio ho bisogno anche dei combinatori...(4 entrate del pic +1 piedino da collegare a Vcc)

4 combinatori = 8 entrate del pic da utilizzare per controllare il numero

...non me ne restano molte per poterlo variare e mandarle ad una decodifica...( in formato 12 ore avrei bisogno di 2 uscite per h1,4per h2;3per m1,4per m2 ...perchè alcune resterebbero sempre a massa..)

come posso con il solo pic a fare tutto il lavoro?

ringrazio per le risposte precedenti!!!!!!1

Link al commento
Condividi su altri siti

Il grande vantaggio del pic che tutti i pin sono come entrata e uscita.

Quindi si possono cambiare anche durante il funzionamento.

Io userei le uscite dei 7 segmenti in entrate per i pulsanti per modificare l'orario .

quindi avrai 7 pin per uscite display

4 di queste uscite , trasformarle in entrate , per i pulsanti.

4 uscite per collegare gli strobe dei cd 4511

Evenualmente ti rimangono 2 bit che puoi usare per far lampeggiare i display durante la programmazione dell'ora.

Si puo' fare tutto con un solo PIC.

Saluti

Link al commento
Condividi su altri siti

ok...quindi ricapitolando potrei connettere le uscite per display alli stessi piedini a cui connetto i combinatori...perfetto...

Ma perchè dici che me ne servirebbero 7 per i display?(4+4+3+2 =13..stecchiti ;) )

dite che sarà l'ungo e complicato il programma da scrivere?

C'è un istruzione (magari tramite decodifche o altri integrati..) per cui dal pic possa comandare : aggingi +1 numero che c'è sul display e quindi visualizzalo...?

Link al commento
Condividi su altri siti

Per decidere su quale display devo scrivere devo collegare singolarmente i diversi anodi..o catodi ( a seconda del tipo di display scelto A/K comune)... ma selezionando così ogni volta un display da illuminare mi trovo costretto a far ripetere l'operazione migliaia di volte al secondo perchè siano visibili display che non lampeggino..

Avrei quindi bisogno di un clock per il minutaggio ed uno per l'illuminazione e la decisione dei numeri... dico bene?

in effetti il problema è che non conosco completamente le istruzioni dell'assembler...dovessi farlo in VB.6 non ci metterei molto... ;)

proverò a buttar giù qualcosa e poi posterò... :-)

grazie ancora per le pronte risposte!

Link al commento
Condividi su altri siti

No non serve ,

Se usi i cd4511 devi solo mandare il dato in BCD e mandare un impulso di strobe , sul display rimarra il numero fisso fino al prossimo strobe .

Quindi devi solo aggiornare il dato BCD 4 olte per cambiare i 4 numeri sui display.

Quello che dici tu ( multiplex ) serve se non vuoi usare elettronica esterna , allora devi fare un ciclo abbastanza rapido per non vedere lampeggiare i led .

Per questo che usando i 4511 il programma sara piu' semplice.

In internet trovi il data sheet del 4511 , vedrai che e' semplice da usare .

saluti

Link al commento
Condividi su altri siti

Vuoi una soluzione veramente elegante?

Si può fare tutto con un solo integrato (il PIC16F84), 4 transistor di bassa potenza e 7 resistenze, oltre naturalmente ai 4 display e il quarzo per il pic. E ti lascio 7 ingressi per pulsanti vari (set minuto, set ora, ecc...) e la funzione lampeggio per i due led centrali.

Il software si complicherà un pochino, ma sarebbe una buona occasione per imparare ad usare le varie funzioni dei micro e sperimentare la potenza di elaborazione che hanno.

Se vuoi ti posso dare una mano.

Ciao!

Link al commento
Condividi su altri siti

Giorgio Demurtas

ciao bit, mi sembra che ti stia dimenticando le 4 uscite per mandare il numero in codice BCD.

oppure non ho capito cosa proponi.(vuoi multiplexare i display giusto?)

ciao

Link al commento
Condividi su altri siti

Niente integrati esterni al pic, decodifico via software.

Certo che multiplexo i display....

Per la precisione:

7 linee per comandare i segmenti di tutti i display o altri led

5 linee per comandare i transistor pilota degli anodi dei display (4) e dei led (1 gruppo di massimo 7)

1 linea in ingresso per eventuali 7 pulsanti collegati sui pin di pilotaggio dei display

Totale 13 linee.

Ah, i transistor quindi sono 5, e serve 1 diodo per ogni pulsante.

Carino no?

Ciao a tutti!

Link al commento
Condividi su altri siti

in effetti mi sembra una soluzione ottimale...

Però dlgcom ha ragione..complicherei il programma..certo che se poi ti và anche di darmi una mano con questo che chiedere di più? :D (il lucano non mi piace.. )

provo a fare uno schema e te lo posto ok?

grazie a tutti,come farei senza di voi?

Link al commento
Condividi su altri siti

(...ricordando 7 line O per i display,5 per i rispettivi catodi,però di line di ingresso per pulsanti me ne servirebbero almeno 2..per impostare minutaggio e ora,meglio 4? Non posso più usare i combinatori perchè avrei bisogno di 4*4 = 16 entrate... sig sig..)

io procederei così...deto in parole molto povere...

Faccio memorizzare al pic delle variabili che siano rispettivamente i numeri da illuminare...(ogni variabile corrisponderà in vero all'insieme dello stadio delle porte O per comandare i display)

dopodichè,dovrei insegnare al Pic la matematica... cioè che "var 1" + "var 2" = "var 3" e così fino a nove poi.."var 9" + "var 1" = "var 0" questo funziona però solo per il primo dispay..

Adesso dovrei fargli capire che ad ogni zero...del primo display deve corrispondere un + "var 1" del secondo...

fatto ciò il display2 dopo 5 deve tornare zero...ed a quel punto sarà il terzo display ad aumentare..

come idea torna?

Per poter selezionare esternamente l'ora giusta dovrei mettere come dicevo prima 2 o 4 pulsanti... (anche qui ad ogni contatto deve corrispondere un +"var 1".... devo definirli come interrupt vero?

ringrazio ancora tutti quanti..

Link al commento
Condividi su altri siti

Con la mia idea puoi mettere fino a 4 display, 7 led singoli (o un quinto display), e fino a 7 pulsanti.

Ti dovrebbero bastare no?

Vedo che hai le idee un po' confuse, ma non preoccuparti, appena avrai fatto un pochino di esperienza scoprirai che è più semplice di quello che pensi.

Il Pic la conosce bene la matematica, basta sapergli chiedere le cose giuste.

Non ho problemi ad aiutarti, passo dopo passo posso spiegarti tutto quello di cui hai bisogno.

Ciao!

Link al commento
Condividi su altri siti

ok..torno nuovamente a ringraziare...

appena ho qualcosa di scritto lo posto...

Non ho capito però come faccio a collegare tutte quelle cose al pic.. con solo..(si fà per dire) 13I/O...

per i display ne servono 4 (in multiplex) e 4 per i transistor degli anodi no? non sono già ad 8 Out?

Link al commento
Condividi su altri siti

ho riflettuto e credo che si risparmierebbe molta fatica utilizzando una decodifica oltre al pic ma mantenendo in multiplex i display.. (così da dover comandare col pic solo 4 uscite e non 7..)

ho abbozzato un idea in fidocad... se vi andasse di correggermela... :

[FIDOCAD]

MC 75 45 0 0 650

TY 80 45 5 3 0 0 0 * 1

TY 90 45 5 3 0 0 0 * 18

TY 80 80 5 3 0 0 0 * 9

TY 90 80 5 3 0 0 0 * 10

LI 100 85 120 85

LI 100 80 120 80

LI 100 75 120 75

LI 100 70 120 70

LI 75 70 60 70

LI 75 75 60 75

LI 75 80 60 80

LI 75 85 60 85

LI 100 45 135 45

LI 135 45 135 30

MC 135 10 3 0 010

LI 100 65 160 65

MC 160 65 0 0 010

TY 165 60 5 3 0 0 0 * 5V

LI 75 65 45 65

MC 45 65 1 0 040

LI 100 55 110 55

MC 110 55 1 1 980

LI 100 60 125 60

LI 125 60 125 55

LI 125 55 120 55

LI 75 45 65 45

LI 65 45 65 30

LI 75 50 55 50

LI 55 50 55 35

LI 75 55 50 55

LI 50 55 45 55

LI 45 55 45 45

LI 80 60 35 60

LI 35 60 35 55

MC 135 15 0 0 750

LI 135 15 135 10

MC 65 20 0 0 860

MC 55 25 0 0 860

MC 45 35 0 0 860

MC 35 45 0 0 860

MC 65 20 3 0 010

MC 55 25 3 0 010

MC 45 35 3 0 010

MC 35 45 3 0 010

TY 55 5 5 2 0 0 0 * PULSANTE 1 regola le unità di minuti

TY 25 15 5 2 0 0 0 * decine di minuti

TY 25 30 5 2 0 0 0 * unità ore

TY 10 40 5 2 0 0 0 * decine ore

TY 105 90 5 2 0 0 0 * Linee Out che regoleranno gli anodi dei display

TY 10 90 5 2 0 0 0 * linee out che comandano la decodifica 4511

Link al commento
Condividi su altri siti

L'intenzione era di fare in modo che i valori di minutaggio ed ora fossero modificabili dall'esterno solo quando un particolare interruttore fosse messo su "ON".

L'interruttore è quello collegato ad RA1... mi serve per evitare che urtando i pulsanti si possa modificare l'ora del tutto involontariamente...

Altro dilemma..può il mio orologio preservare i valori di tempo anche se viene staccato dalla presa..cioè se viene a manacare la tensione?

O conviene "dire" al micro che ad ogni accensione imposti i valori su 00,00?

Sceta dei display..conviene prendere quelli a catodo comune?

Link al commento
Condividi su altri siti

ho deciso che come lo accendo deve settarsi su 00;00... e poi si dovrà regolare l'ora...

Ho cominciato a buttar giù qualche riga...che ne pensate? ho scritto proprio grosse cavolate? per adesso siamo al primo passo.. se l'interruttore resta su off e si accendo il tutto si dovrebbe vedere 00;00...

per il ritardo necessario per comandare i differenti catodi dei display (tramite rispettivi transistor) ho usato un programma trovato su www.roboitalia.com che ha fatto tutto da solo..(ho solo impostato il tempo...mi ha chiesto quale quarzo usassi ho scritto uno da 4Mz va bene?)

ecco il codice...

PROCESSOR 16F84

RADIX DEC

INCLUDE "P16F84.INC"

ORG 0CH

count RES 2

ORG 00H

bsf STATUS,RP0

movlw 00000010

movwf TRISA

btsfc PORTA,1

goto Label (dovrò mettere le istruzioni per modificare il valore dei numeri illuminati sul display)

movlw 00000000

movwf TRISB

bcf PORTB,0

bcf PORTB,1

bcf PORTB,2

bcf PORTB,3

bsf PORTB,4

bcf PORTB,5

bcf PORTB,6

bcf PORTB,7

call Delay

bcf PORTB,0

bcf PORTB,1

bcf PORTB,2

bcf PORTB,3

bcf PORTB,4

bsf PORTB,5

bcf PORTB,6

bcf PORTB,7

call Delay

bcf PORTB,0

bcf PORTB,1

bcf PORTB,2

bcf PORTB,3

bcf PORTB,4

bcf PORTB,5

bsf PORTB,6

bcf PORTB,7

call Delay

bcf PORTB,0

bcf PORTB,1

bcf PORTB,2

bcf PORTB,3

bcf PORTB,4

bcf PORTB,5

bcf PORTB,6

bsf PORTB,7

call Delay

; subroutines

Delay

;questo Delay l'ho realizzato grazie al programma picLoop disponibile su www.roboitalia.com alla sezione ;downloads ma non ho idea di cosa faccia di preciso...potreste spiegarmelo?Cosa sono i cicli macchina?

;PIC Time Delay = 0,0000200 s with Osc = 4 MHz

movlw D'1'

movwf CounterD

movlw D'1'

movwf CounterC

movlw D'1'

movwf CounterB

movlw D'1'

movwf CounterA

loop decfsz CounterA,1

goto loop

decfsz CounterB,1

goto loop

decfsz CounterC,1

goto loop

decfsz CounterD,1

goto loop

return

Link al commento
Condividi su altri siti

Se vuoi che il pic continui a contare il tempo anche senza alimentazione devi mettere una pila che lo mantiene alimentato. Puoi lasciare spenti i display per risparmiare sull'assorbimento.

Quanto alla decodifica penso sia molto più conveniente farla via software. Le 13 linee sono sufficienti per le funzioni che ti ho detto, e la decodifica software si fa semplicemente tramite la eeprom interna.

Praticamente se vuoi decodificare le cifre da 0 a 9, quando programmi scrivi il pic nelle locazioni di memoria da 0 a 9 il codice che fa apparire il numero corretto sui segmenti. Praticamente, essendo ogni locazione di memoria composta da 8 bit, ne usi 7 per i segmenti e uno lo lasci stare.

Quando devi visualizzare un numero, punti la memoria col numero che vuoi visualizzare, leggi il contenuto e trasferisci su display.

Ripeto la configurazione degli ingressi/uscite:

7 uscite pilotano tutti i segmenti di 4 display e di un gruppo eventuale di massimo 7 led (o meno).

5 uscite pilotano i transistor che accendono uno alla volta i 5 gruppi (4 display + 7 led)

7 pulsanti sono collegati alle stesse 7 uscite che comandano i display.

L'altro capo dei pulsanti, con un diodo in serie, arriva all'ultimo pin rimasto libero, configurato come ingresso.

Il ciclo lettura/scrittura si comporrà quindi nel seguente modo:

Visualizzazione:

Si scrive sulla porta di uscita il valore del primo display (i 7 segmenti)

Si abilita il primo display

Si aspetta il ciclo di ritardo corrispondente.

Si ripete il tutto per tutti i 5 gruppi (così abbiamo acceso anche eventuali 7 led)

Lettura:

Si disabilitano tutti i gruppi (display e led)

Si pone ad 1 il primo dei 7 bit della porta di comando display e pulsanti.

Si controlla il pin di ingresso comune dei pulsanti, se è a 1 il primo pulsante è premuto.

Si sposta l'1 sul secondo pin dell porta di comando.

Si ricontrolla il pin di ingresso comune, se è a 1 il secondo pulsante è premuto.

...e così via fino al settimo pulsante.

Sempre a disposizione... ciao a tutti! :)

Link al commento
Condividi su altri siti

ok..credo di aver capito come realizzare il tutto... (programma a parte s'intende :D:):rolleyes::( ) ho postato l'immagine che ho relaizzato con eagle sul forum principale..dovrebbe spostarla..

Altrimenti la discussione è l'unica mia sul forum generale PLC..

nel frattempo riprovo col programma...

ah..cosa sono i cicli macchina? e in base a cosa scelgo il quarzo? come memorizzo i valori delle sette uscite per i numeri sui display nella eprom?e come li richiamo...?

ok...intanto ringrazio !!! poi,delle troppe domande basta rispondere ad una alla volta... :D

scusatemi se assillo..

(vai biiiiit)

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...