Comando relè da LPT (ex 8255)

Apr 10, 2007 6 Replies

Ciao! eccomi qui dopo un mesetto di test! Allora, ricapitolo un po' tutto quello che ho fatto. Sequendo il tuo consiglio, ho lasciato perdere l'uso della scheda 8255, riservandolo per scopi pi=F9 nobili. Ho quindi diretto i miei sforzi sulla parallela, utilizzando una scheda ISA a parte, con indirizzo 0x278, per non rischiare con l'LPT1 della scheda madre. Sempre seguendo il tuo consiglio, ho comprato un'integrato ULN2003, 7 rel=E8 12v che aprono al massimo un circuito a 220v 5A, poi o comprato 7 led e 7 resistenze da 560 (e ho preso pure una scheda millefori dove costruir=F2 con lo stagno il mio circuito, e vari morsetti, spinette, coccodrilli). Ho fatto un circuitino di test, prelevando sempre dal pc la 12v per i rel=E8, e il circuito funziona. Unica pecca =E8 il fatto che, durante il boot e durante lo spegnimento del pc, tutti i pin della parallela (o almeno gli 8 dei dati che ho controllato) si alzano e poi si riabbassano. Questo non lo posso accettare, in quanto il trasformatore che alimenta le elettrovalvole, non tiene la corrente di spunto di 4 elettrovalvole azionate contemporaneamente. Ho comprato quindi un paio di integrati XOR (SN74LS86AN), utilizzando un ingresso con il pin 0, l'altro ingresso con il pin 7; l'uscita dello XOR va all'ULN2003. Facendo cos=EC, durante il boot, entrambi i pin si alzano, e l'uscita XOR =E8 disabilitata; dopo i pin si abbassano, e l'uscita =E8 ancora disabilitata; poi quando io invio il comando solo al pin 0, l'uscita XOR si abilita, e il rel=E8 si eccita. Facendo cos=EC ho risolto il problema del boot e dello spegnimento, e tutto funziona a meraviglia. Ora potrei accontentarmi di questa soluzione, ma mi hai messo curiosit=E0 e vorrei utilizzare lo shift register; mi piace troppo l'idea di poter controllare, con soli 3 o 4 pin della parallela, un numero virtualmente illimitato di dispositivi, mettendo in ingresso alla prima scheda il pin della parallela, mentre le altre schede prenderebbero in ingresso l'uscita del dato seriale dello shift register della scheda precedente. Vorrei anche ottenere l'isolamento galvanico (da quel che ho capito potrei metterlo direttamente in ingresso). Vorrei chiederti quindi se mi puoi dare un codice di un'integrato che faccia da optoisolatore (con almeno 4 circuiti). Vorrei anche chiederti se lo shift register che mi consigli =E8 compatibile con i segnali TTL, perch=E9 ho letto che =E8 CMOS. Vorrei anche chiederti come faccio a gestire il CLEAR dell'integrato, sempre per il problema che durante il boot ho necessit=E0 di avere la sicurezza che nessun rel=E8 si ecciti; potrei sfruttare il fatto che i pin si alzano, per resettare l'integrato? Vorrei anche chiederti a che velocit=E0 pu=F2 arrivare sia l'optoisolatore che lo shift register; mi sa che non posso permettermi il lusso di inviare i miei segnali di clock con la velocit=E0 del pc, ma devo rallentarli via software, vero? sono stato un po' lunghetto, ma se hai la pazienza di leggere e di rispondermi ti ringrazio tantissimo.



ciao Francesco


On 7 Mar, 10:32, mmm wrote:



Ymhr6 wrote:
> > Trovato! Mettendo i 6 dip switch cos=EC:
> > ON ON ON OFF ON OFF
> > ottengo l'indirizzo 0x01B0.
> verifica un po' anche il secondo 8255 ed l'8253
> > Un'altra domanda: vorrei pilotare con questa scheda le elettrovalvole
> > di irrigazione del mio giardino.
> e' un peccato quella scheda meriterebbe un uso piu' importante :-)
> > Qual'=E8 il sistema migliore per farlo?
> e' difficile dire quale puo' essere il miglior modo in assoluto.
> io userei la parallela che mi da al volo al volo 8-4 bit di output e 5
> bit di input
> se poi devi controllare piu' rele si puo' sempre espandere utilizzando
> uno shift register ( 74hc595 )
> in questa maniera e' possibile espandere la parallela in maniera
> virtualmente illimitata
> > Posso guidare direttamente con il segnale a 5v un piccolo rel=E8 che mi
> > apre un circuito a 24v che va alle eletttrovalvole?
> direttamente con i TTL o i CMOS non ci piloti rele' devi passare tramite
> un transistor o qualche integrato tipo ULN2003 o ULN28003 ( che in
> quantita' costano meno )
> volendo andare sul sicuro si puo' anche interporre un optoisolatore (
> per ogni segnale ) per ottenere l'isolamento galvanico tra il PC e la
> 'scheda' di potenza
> nota bene usando la parallela e la catena di 595 si puo' isolare il
> controllo del 595 usando solo 3 optoisolatori invece che isolare i
> segnali per i rele singolarmente
> se ti interessa posso buttare giu' un paio di schemi di principio
> > Penso che l'amperaggio del segnale a 5v sia irrisorio, sui 20
> > milliampere.
> pensi MOLTO male 4-8 mA e' un valore piu' ragionevole controlla sui
> datasheet per avere i valori 'esatti'
> - Nascondi testo tra virgolette -
> - Mostra testo tra virgolette -

e' una di quelle moderne con un solo integrato o poco piu' o una di quelle vecchie-vecchie fatte a TTL ?

queste ultime sono eccezionali per sperimentare se ti fai la scorta di

74xx374

inoltre sempre queste in genere si possono modificare per farle diventare bidirezionali ( NON ECP EPP )

non so se lo hai gia' fatto, ma scaricati i datasheet degli integrati, li' trovi tutte le informazioni necessarie

bene , bene

soluzione abbastanza elegante effettivamente

tieni conto che cio' ha un prezzo, tutto diventa piu' lento per due motivi

1) comunque per trasferire i dati anche in un solo registro devi mandare tutta la sequenza d'impulsi 2) se i registri sono piu' di uno e messi in cascata devi comunque aggiornarli tutti

inoltre non sperare di avere registri sparsi per tutta la casa i cablaggi non possono essere lunghissimi

diciamo all'uscita della parallela ma dipende dai punti di vista:-) ti servono 3 optoisolatori: CLK DATA CHIP_SELECT

optoisolatore , tipicamente lo trovi singolo, 4n35 e' un classico, ma tutto dipende dal tuo pusher di fiducia :-)

cmos-ttl a 5 volt sono abbondantemente compatibili almeno finche' nno vuoi pilotare con un cmos 10* ttl e/o sfruttare al massimo le velocita' degli integrati ma non dovrebbe essere il tuo caso

  • numero tirato a fallo di cane :-)

clear : il 595 ha un ingresso di reset 0-attivo ( pin 10 ) non ricordo se agisce sul registro d'uscita o sullo shift register ( controlla sul datasheet )

nel primo caso puo' essere usato per portare a 0 le uscite all' avvio senza colpo ferire

+--+5V | R R=4k7 | +----> al reset | C C= 1microF/10microF a gusto personale | GND

nel secondo caso puoi operare usando il tristate (pin 13 ) e dei pulldown, il tristate lo deve gestire poi il PC

no, non ti preoccupare il collo di bottiglia e' il PC e forse gli optoisolatori

anzi ti diro' di piu' se usi winxxx il collo di bottiglia e' sicuramente il PC ( i driver per l'accesso all'hardware )

ufff ( sospiro di stanchezza con fiatone ) che stancata :-)

P.S: ti ho gia' chiesto di dove sei ?

In verit=E0 non =E8 una scheda parallela pura, ma una di quelle schede multifunzione; fa da controller, da porta COM, da porta parallela, da porta giochi, forse anche di pi=F9, il tutto programmabile attraverso dei ponticelli; per l'LPT, con un ponticello si decide se abilitarla o meno, con un altro ponticello si decide l'indirizzo, 0x378 o 0x278. Naturalmente, come per l'8255, non l'ho comprata ma l'ho trovata tra vario altro hardware gettato perch=E8 obsoleto o non funzionante.

fatto fatto, ci capisco meno della met=E0 ma sono essenziali, quanto meno per capire la piedinatura! :-) (io non ho alcuna base di elettronica, sono perito ragioniere programmatore, quindi per via del software nessun problema, ma per via dell'harware eccomi qui a fare continue domande!

=EC

si immagino, =E8 solo per poter dire che ho fatto un circuito espandibile e non fine a se stesso. Devo controllare solamente 4 elettrovalvole di irrigazione; magari in futuro piloter=F2 l'accensione delle luci del giardino e poco altro; ho sette rel=E8 e mi sa che non li user=F2 mai tutti; per=F2 mettendo lo shift register vado a letto sapendo che la scheda =E8 espandibile eh eh ;-)

CHIP_SELECT dovrebbe essere lo strobe, cio=E8 il segnale che porta lo stato dei registri (che ho scritto tramite i clock) in output; nel datasheet dovrebbe essere quello che chiamano 'Storage register clock input'

Ma, secondo te, ha senso mettere degli optoisolatori, se poi per alimentare gli integrati ed i rel=E8 del mio circuito, utilizzo la stessa alimentazione del pc? Ti chiedo questo perch=E8 l'utilizzo degli optoisolatori mi complicherebbe non poco il tutto, perch=E8 mi inverte la logica, e all'inizio, durante il boot, i rel=E8 sarebbero eccitati; dovrei mettere un altro integrato inverter per rovesciare di nuovo la logica, o sto delirando?

il pin 10 agisce sullo shift register, quindi non fa al caso mio.

ho visto ancora clabare dei pin in questa maniera, ma questo collegamento mi ha sempre lasciato un po' perplesso; ok, finch=E8 si carica il condensatore, il reset ha poca tensione; poi, dopo un po', il condensatore =E8 carico, non conduce pi=F9, e al reset arriva tutta la tensione. Ma se io, per esempio, riavvio subito dopo il pc, il condensatore sar=E0 gi=E0 carico dal riavvio precedente, e al reset arriver=E0 subito la tensione, e non mi resetter=E0 pi=F9 niente... o sto delirando?

il pin 13 (output enable) per non fare output deve essere alto, e quindi dovrebbe ricevere un segnale alto durante il boot, e dopo dovrebbe ricevere sempre un segnale basso, ma come faccio? Dovrei usare un segnale di un pin della parallela e, dopo che =E8 passato attraverso l'XOR, invertirlo, e andare al pin 13 dello shift register, e dopo l'avvio, via software, alzare il pin della parallela, in maniera che si abbassi il pin 13 dello shift register? mamma che casino.

uso win95, quindi non mi pongo il problema

abito in provincia di Padova, ma sono molto pi=F9 vicino a Vicenza che non a Padova; infatti il mio pusher =E8 a Vicenza.

questo era sottinteso :-)

schede come le tue ( l'8255 e' una vera botta di c..o ) o la parallela discreta vanno sempre recuperate, io ho una 2 seriali + parallela discreta con tutti gli integrati montati su zoccoli

e dov'e' il problema , tu chiedi e poi speri che rispondiamo :-)

e poi nessuno e' nato 'imparato'

si e' lui

il '595 e' abbastanza compatibile col protocollo SPI ed io tendo a ragionare in quei termini

non ha senso se poi le alimentazioni sono comuni

comunque se colleghi il diodo dell'opto tra positivo e uscita e se il transitor lo colleghi ad emettitore comune ( emettitore a massa ) ottieni un blocco NON invertente.

il perche' di mettere il diodo tra positivo ed uscita discende dal fatto che gli stadi d'uscita TTL sono asimmetrici con caratteristiche di pilotaggio migliori ( corrente di sink piu' elevate ) con l'uscita bassa

vedo che hai studiato bene, bravo

normalmente ti serve solo alla prima accensione del TUO circuito per portarlo in uno stato noto

eventuali reset del PC ( senza spegnimento ) non dovrebbero poi influire , tieni conto per per scrivere nel '595 hai bisogno di una ben precisa sequenza di segnali

ti allego un circuito che dovreppe poter resettare correttamente tutti e due i registri del '595 ( shift e reg. d'uscita ),

N.B. va provato l'ho fatto a memoria

---INIZIO FIDOCAD questa linea non serve

[FIDOCAD ] MC 110 80 0 0 180 MC 110 125 0 0 180 MC 110 135 0 0 045 MC 110 90 0 0 045 MC 110 65 1 0 080 MC 110 110 1 0 080 LI 110 75 110 80 LI 110 120 110 125 LI 110 110 110 105 LI 110 65 110 60 MC 110 60 0 0 010 MC 110 105 0 0 010 LI 110 75 145 75 MC 115 120 0 0 745 MC 135 120 0 0 745 LI 110 120 115 120 LI 145 75 150 75 LI 150 75 195 75 LI 180 125 185 125 LI 185 125 195 125 TY 200 75 5 3 0 0 0 * al /RST pin 10 del '595 TY 200 125 5 3 0 0 0 * al RCLK pin 12 del '595 LI 80 155 155 155 LI 155 155 155 130 TY 85 130 5 3 0 0 0 * 22microF TY 85 85 5 3 0 0 0 * 10microF TY 95 65 5 3 0 0 0 * 4k7 TY 95 110 5 3 0 0 0 * 4k7 TY 75 160 5 3 0 0 0 * Alla parallela TY 125 110 5 3 0 0 0 * 74HC14 TY 165 110 5 3 0 0 0 * 74HC32 MC 155 120 0 0 720 MC 160 180 2 0 200 MC 170 165 1 0 080 MC 160 190 2 0 200 LI 170 175 170 190 LI 170 190 160 190 LI 160 180 165 180 LI 165 180 170 180 LI 170 180 180 180 LI 180 180 200 180 LI 145 180 135 180 LI 135 180 115 180 LI 145 190 140 190 LI 140 190 115 190 LI 170 165 170 160 LI 170 160 175 160 MC 170 160 0 0 010 TY 155 165 5 3 0 0 0 * 4k7 TY 200 170 5 3 0 0 0 * Circuito alternativo per l'RCLK

--- FINE FIDOCAD , questa linea non serve

questo circuito manda in sequenza un impulso al RST e poi un impulso al RCLK , in modo da resettare correttamente le uscite, e' importante rispettare i valori dei due condensatori

la versione con i diodi costa meno ( in tutti i sensi ) ma e' meno sicura, va testata

inoltre una cosa che i datasheet non dicono e' lo stato dei registri dopo il power-up potrebbe darsi che siano tutti (i bit ) a livello alto, tutti a livello basso o mischiati in maniera casuale.

se si verificasse il secondo caso nno avresti bisogno del circuito di reset

e' lento non ti preoccupare

ciao Marco

sto dall'altra parte della penisola, Napoli per la precisione, non posso quindi andare oltre un aiuto spirituale

Caspita hai ragione! Faccio sempre fatica pensare i miei circuiti al "contrario"!

Allora lascio perdere gli optoisolatori; potrebbe essere utile mettere un buffer non invertente, tipo 74ls244? Protegge qualcosa?

=E0

Il mio problema =E8 che non mi fido del pc. Non posso andare in ferie un mese (magari!) e lasciare il mio giardino in mano al pc; se mi si blocca durante la fase di quiete, ritorno che trovo un bel giardino giallo; se mi si blocca mentre =E8 attivo un rel=E8, torno che trovo un bel giardino azzurra (allagato)!

Ho pensato di mettere, a monte dell'alimentazione del pc, un timer (che ho gi=E0 e che uso quotidianamente per altre cose, e da tre anni non ha mai fatto bizze). Questo timer toglierebbe l'alimentazione al pc (e quindi anche alla mia scheda) durante le ore in cui so che non serve, che principalmente saranno le ure diurne. Con questo sistema ho qualche piccola sicurezza in pi=F9, ma nascono i problemi del boot.

Ho visto lo schema, ma pu=F2 funzionare con il sistema da pirata che uso per togliere alimentazione al pc?

L'idea qui sopra potrebbe funzionare? Naturalmente prima di abilitare l'output preparerei i registri tutti bassi (quindi DATA a 0, otto fronti di salita del clock, un bel fronte di salita del "clock storage", e quindi l'abilitazione dell'output). O bisogna per forza dargli il reset all'inizio?

Per invertire il segnale che arriva dall'XOR, devo per forza usare un integrato inverter (che ne ha sei, quando a me ne serve uno) o posso fare il circuito "a mano", con un transistor, una resistenza di pullup e una resistenza in ingresso alla base?

Francesco

se ti fa piacere male non fa , meglio mantenere tutto sulla stessa tecnologia pero'. o scegli HC o HCT o LS

DOS, DOS, DOS, ti consiglio per applicazioni di questo tipo una macchina DOS

anche un 286 ha potenza di calcolo in eccesso , se usato .... indovina un po' sotto DOS

e poi lo puoi spegnere ed accendere senza troppe remore.

no tutt'altro a meno che non comincia a commutare l'alimentezione alla velocita' di Speedy Gonzales, quello schema e' un reset che si basa proprio sulla attivazione della alimentazione non funzionerebbe se invece tu resettassi semplicemente il PC senza togliere l'alimentazione

e per inciso la coppia RC e' il circuito minimo per fornite l'impulso di reset a microprocessori e microcontroller vari

se abiliti il tri-state del 595 tu puoi prima mandargli i dati che vuoi quindi il reset nno e' piu' necessario.

ricordati pero' di mettere i pull-down agli ingressi dell' ULNxxxx

riassumendo:

1) fai in modo che all'accensione il tristate del 595 resti alto durante la fase di accensione del PC 2) mandi la prima parola di tutti 0 al 595 3) fai diventare basso il tristate del '595

de gustibus, oppure puoi usare 1/4 di un 74xx00 ( NAND ) configurato come inverter, oppure puoi usare una delle porte XOR per ottenere un inverter le soluzioni sono tante , basta guardare un po' oltre la prima definizione di unaq specifica porta logica

eh si, ma ho gi=E0 comprato l'XOR che =E8 LS, il buffer che =E8 LS, lo shift register che =E8 HC, l'ULN2003 che non so definire, ma =E8 compatibile TTL (ho visto che nell'ULNXXXX cambia solamente il valore della resistenza in ingresso alla base; nello specifico per il 2003 TTL =E8 di 2K7). Terr=F2 presente in futuro.

I know I know ....

L'ULN2003 ha gi=E0 un paio di resistenze di pull-down all'interno; prima dell'ingresso al primo transistor (da 7K2), collegata poi con una seconda che prende dall'emettitore del primo transistor (da 3K), e quindi va in ground). Scusa la mia ignoranza; ma a cosa servono? servono a buttare gi=F9 un segnale che dovrebbe essere basso e che magari non =E8 proprio bassissimo?

Avevo pensato di usare una porta XOR (visto che gi=E0 ce l'ho), mettendo un ingresso a VCC, per=F2 ho gi=E0 tutte le porte dell'integrato occupate (data, clock, storage, outputEnable); penso quindi che mi arrangio e me lo faccio a mano.

ti ringrazio tantissimo della pazienza che hai avuto nel rispondermi. Adesso molto probabilmente sparisco per un altro mesetto (durante il quale testet=F2 tutto a puntino). Ma sicuramente mi rifaccio vivo e ti faccio sapere (e speriamo siano buone nuove).

ciao!!!!

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required