Newsgroup: it.hobby.elettronica.digitale
Titolo: Seriale VS Parallelo...

Non ci crederete ma gli 40 pin del 16f877
mi stanno stretti... e mi sa che sono costretto di passare al seriale
( finora uso il parallelo ) e volevo chiedere se qualcuno di voi a gia
dovuto fare questa scelta ho visto in giro usare il 74HC299 ( e un
registro universale ) passare da parallelo a seriale non mi entusiasma
ma credo che sia l'unica soluzione, ovvio potrei cambiare processore
ma non so se vale la pena infodno non ho bisongo di chissa queste
grandi potenze di calcolo
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.com

 grandi potenze di calcolo
non e' un problema di velocita' di calcolo quanto di velocita' di I/O
per l'uscita e' molto comodo il 74xx595 ....



a me serve sia S => P che P => S


 grandi potenze di calcolo
Io non ho capito....ma non ti bastano le porte ?
In questo caso, non potresti serializzare il dato su una singola porta ?
--
Ciao
-------------------------------
        Jaco the Relentless
 
eec....@libero.it
http://digilander.iol.it/hienddgl/
-------------------------------

 a me serve sia S => P che P => S
possono andare bene questi?
http://members.xoom.it/stor/elettronica/4094/4094.htm
ciao
Claudio F


wrote:

sembra quello ke voglio...  devo studiarmelo un po.
aparte che sono 2 integrati distinti
( cosa trascurabile )
grazie...
ps hai ustato questo IC in qualke tuo progetto?
 
per esempio si puo' comandare in seriale un LCD con il PIC e poi
tramite questo IC riportarlo in parallelo?
qualcuno ha dato un occhiata  a quello ke ho segnalato io (  74HC299 )
ho letto il datasheet ma non ci ho capito nulla!


In questo caso, non potresti serializzare il dato su una singola porta ?
e quello ke sto cercando di fare
 
posso usare delle porte seriali sul PIC ma pultroppo tutto il resto
del circuto è parallelo ( LCD, IDE, altre componenti )
gia con IDE+LCD sto fuori, in + mi servono dei pusanti e altre cosette
il brutto che IDE ha 16 bit <==> questo vuol dire che non posso
utilizare un registro SIPO, ma al meno dovrei avere un SIPO e un PISO 
colegati sugli stessi piedini e questo complica un po il PCB
forse il fantomatico 74HC299 lo fa ma nessuno lo conosce...
e google trova solo il datasheet che io non sono in grado di leggere (
o meglio lo leggo ma non mi dice nulla :°( )
PS, se uno fa
while ( true ) {
  a0 = 0; // metto 0 sul primo pin della porta a
  a0 = 1; // metto 1 ( +5? ) sul primo pin della porta a
}
per esempio con un 16F84 che onda si genera ( + che altro che
frequenza ha ) ?


 colegati sugli stessi piedini e questo complica un po il PCB
Un bus condiviso con buffer 3states sui device? ;-)
--
Ciao
Daniele Giangrazi

 }
in pratica non si fa mai, perchè la frequenza è altissima e sinceramente non
ho idea di che onda venga fuori. :)
La frequenza è legata al clock del micro: per cambiare stato del piedino
devi usare un certo numero di istruzioni asm. Ogni istruzione impiega da 1 a
4 cicli di clock mi pare, a seconda del tipo, quindi è questo che influenza
la frequenza.
--
...:::Zmaster:::...
DSL powered
zmast[ANTISPAMSYSTEM]@
freemail.it
www.zmasterworld.8m.com
Collaboratore del Media Player Project

 per esempio con un 16F84 che onda si genera ( + che altro che frequenza
ha ) ?
Bisogna vedere in quale codifica assembler viene convertito quel codice, e
poi calcolare la durata di tutte le istr. assembler... oppure si prova
empiricamente.
Scrivendolo direttamente in asm il loop viene eseguito in 4 cicli, con un
clock di 4Mhz impiega 4microsecondi, il segnale sta a livello alto per 3
microsecondi e basso per 1:
loop
 bcf PORTA,0
 bsf PORTA,0
 goto loop
ciao
Claudio F

 per esempio si puo' comandare in seriale un LCD con il PIC e poi tramite
questo IC riportarlo in parallelo?
Certamente, solo che la scrittura su questa "porta serializzata" impiega
molto piu' tempo per essere portata a termine. Mentre in assembler con 2
cicli te la cavi (2 microsecondi), per caricare il dato sul sipo occorrono
ad occhio un'80ina di microsecondi. Questo vuol dire che verso l'LCD non
potrai scrivere piu' di 12mila bytes al secondo (sempre usando 4Mhz di clock
per il PIC).
Scrittura diretta su porta del PIC:
 movlw dato
 movwf PORTB
Scrittura su sipo esterno:
 movlw dato
 movwf TXBYTE
 movlw 8
 movwf CONT
LOOP
 bcf TXBIT
 btfsc TXBYTE,7
 bsf TXBIT
 bsf TXCLOCK ;genera impulso di clock
 bcf TXCLOCK
 rlf TXBYTE,f
 decfsz CONT,f
 goto LOOP
 bsf TXSTROBE ;genera impulso di strobe
 bcf TXSTROBE
dove TXBYTE e CONT sono due variabili del programma e TXBIT, TXCLOCK e
TXSTROBE sono degli alias per indicare i pin di uscita del PIC che
controllano il sipo (che saranno preventivamente stati inizializzati come
uscite a 0).
ciao
Claudio F

Scrittura su sipo esterno:
come sopra :D




forse capisco di + l'arabo... ( = non ho capito quello ke hai detto )


come porta di uscita questo e' inaccettabile.
vuoi dire che non c'è un sengale di start e di load come ci sono nei
tuoi? e che mentre uno shift i dati lui continua a visualizare i dati
sui pin ? 
non è bello... anche se forse non è cosi brutto come sembra se una mia
teoria è giusta speriamo che una email faccia ritorno con felici
notizie...
sara meglio esemplificare... 
nella interfaccia atapi ci sono 16 pin dati che sono paralleli...
che io devo sia leggere che scrivere
e poi altri 7 che devo solo leggere ( e che se cambiano stato metre
shifto sucederebbe un macello )


la frequenza.
il tuo AT90S4433 ( mi sono ricordato tutto? ) ma quanti piedini
usabili per comunicare ha?


 io di asm PIC ne so nulla... non potresi riscrivere in C ( :D )
E io non so nulla di C;) Quella routine non fa altro che generare i segnali
visibili a lato del sipo.
ciao
Claudio F

 nella interfaccia atapi ci sono 16 pin dati che sono paralleli... che io
devo sia leggere che scrivere
allora lascerei perdere in partenza qualsiasi idea "seriale", purtroppo non
conosco le specifiche elettriche di questo bus, vuoi comandare un CD con un
PIC?
In questo caso bisogna usare tutti i pin del PIC per realizzare via software
un vero e proprio bus parallelo come suggerito da Daniele. Con questo si
potrebbe gia' ottenere una velocita' diciamo 8 volte superiore, a la si
potrebbe aumentare di altre 5 volte passando ad un clock di 20Mhz per il
PIC. In questo modo (e usando routines assembler ottimizzate) si potrebbe
forse arrivare ai 400mila bytes/sec (appena un po' sopra la velocita' 2x).
ciao
Claudio F

Io in questi casi uso sempre il cmos 4094, mi sono trovato sembre bene e 
quando mi serve ho gia' le routines in assembler pronte....
Ciao


 usabili per comunicare ha?
8+6+6 (in PortaA, PortB e PortC)
PortA ha 2 pin dedicati alla comunicazione seriale asincrona (TX e RX con
l'USART interno)
Inoltre in PortC o B (non ricordo) ci sono dei piedini dedicati alla seriale
sincrona (sempre via HW)
Volendo usare gli altri bisogna implementare delle apposite routine via
software.


 come porta di uscita questo e' inaccettabile.
E` vero, ma in questo caso non importa, dato che *prima* si impostano i
sedici bit facendoli scorrere nel registro, e soltanto dopo si genera (a
parte) il segnale di strobe per il dispositivo che li dovra` leggere.
Ovviamente in quel momento i bit saranno gia` "fermi".
Per il Razziatore: l'hardware e la parte "a basso livello" del mio
firmware, ivi incluso il pilotaggio del 74hc299 e (con ogni
probabilita`) la spedizione dei comandi IDE, funzionano. Quindi con gli
schemi, il firmware e coadiuvato dai datasheet, hai tutte le
informazioni necessarie per convertire il tutto con linguaggi a piu`
alto livello. Onestamente non credo che riuscirei ad essere piu` chiaro
del datasheet del 74hc299; se lo trovi astruso, prima di tutto dovresti
fare in modo di capire quello. :)
--
Lorenzo

fare in modo di capire quello. :)
Come mai non hai non hai risposto alle mie 2 emails?



bene stiamo messi bene :D



anche qui pochini... non riesco neache a comandare il BUS ATAPI ( 16+7
)
percui anche con il AT90ecc dovrei cmq usare un seriale...
il fatto che abbia il seriale di serie ( come dici dopo ) potrebbe
fare risparmiare dei ns ma non so quanto possa essere utile...
aparte non doverlo fare da programma



Idea e quella ma il parallelo è escluso... solo il LCD + ATAPI
prendono tutti i pin del 877 e questo è al quanto insoportabile...
ho dovrei spostarmi su un altra CPU ( quale ATecc ) ma non ne sono
proprio entusiasto...


 Idea e quella ma il parallelo è escluso... solo il LCD + ATAPI prendono
tutti i pin del 877 e questo è al quanto insoportabile... ho dovrei
spostarmi su un altra CPU ( quale ATecc ) ma non ne sono proprio
entusiasto...
Eppure l'idea giusta e' sempre quella di Daniele, il micro non deve mica
avere per forza tanti pin quanti sono quelli dei dispositivi da controllare.
Un bus parallelo e' solitamente una risorsa che viene condivisa tra piu'
periferiche, la scelta della periferica con cui dialogare ad ogni momento
viene fatta con dei bit di indirizzamento e con dei decodificatori di
indirizzo che in quel momento "connettono" la periferica scelta al bus
unico... in quest'ottica con gli stessi pin puoi comandare di volta in volta
il CD1, il CD2, l'LCD20, un LED, la pompa dell'acquario ecc. Non conosco
pero' l'atapi e non so se ci sono dei vincoli di protocollo che rendono
impossibile questa semplice architettura (se mi dai qualche link potrei
darci un'occhiata).
Ad occhio servono 16 fili bidirezionali per i dati (che potrebbero diventare
solo 9 o 10 con una piccola perdita di velocita'), puoi riservarne 7 per gli
indirizzi (128 indirizzi possibili per selezionare le periferiche), ne
servono diciamo altri 2 come minimo per generare i segnali di
lettura/scrittura (con l'aiuto di qualche comune chip esterno)... e ne
avanzano da  8 a 15 che potrebbero essere usati per semplificare
l'hardware... non butterei via l'idea del parallelo;)
ciao
Claudio F

 aparte non doverlo fare da programma
č molto piů semplice da usare e non devi riempire la memoria con le routine
seriali.


 prendono tutti i pin del 877 e questo è al quanto insoportabile...
Concordo con ClaudioF: con le dovute precauzioni si può usare un bel bus da
16 bit per IDE, LCD e pulsanti.


non butterei via l'idea del parallelo;)
neache io... ma a me mi avevano detto
che non si poteva multiplexare e o si faceva in seriale o si cambiava
CPU... 


 neache io... ma a me mi avevano detto che non si poteva multiplexare e o
si faceva in seriale o si cambiava CPU...
Beh, quel progetto parla chiaro... almeno come connessioni... poi il
software, lo studio da farci dietro e la reperibilita' dei componenti sono
cose da mal di pancia, ma questo non centra;) Grazie per il link, lo
guardero' con piu' calma.
ciao
Claudio F

 wrote:

forse inzio a capire quello ke intendevi..
cioč qualkosa come il 
74F245 della philips?
ah ora che forse ho capito come fare
come posso indicare inderizzo?
cioč se io uso 2 cifre binarie posso anche cavarmela...
ma come si fa con 7... non dirmi una AND perche non ci credo ke devo
usare una and a 8 fili ( con alcuni di essi negati ( e come con delle
not? 
 
finisco domani a fare lo schema del  circuito  e il mese prossimo a
fare il PCB,,, 
 
anche se dubito fortemente di dover utilizare 8 fili ( 3 o 4 si )


 anche se dubito fortemente di dover utilizare 8 fili ( 3 o 4 si )
Se sono 3 o 4 puoi usare 2 linee con delle not, altrimenti rivai con il
decoder... ;-)
--
Ciao
Daniele Giangrazi

 }
Si tratta di normalissimi cicli di lettura/scrittura, per cui prima c'e`
l'impostazione dei vari segnali di selezione e di indirizzo, poi c'e`
l'impostazione del bus dati, e infine c'e` lo strobe. In fondo ai
datasheet puoi trovare i read/write timings, che ti mostrano
l'evoluzione temporale di tutti i vari segnali coinvolti in un accesso
al dispositivo X (sia esso una memoria, un drive IDE o un tostapane, in
generale sono sempre abbastanza simili).
Con tutta la buona volonta`, non posso spiegarti tutto il protocollo IDE
a partire dalle basi dell'elettronica digitale!
--
Lorenzo

guardero' con piu' calma.
non ci crederai c'è l'ho da 2 o 3 mesi ma solo nel ultima settimana ho
scoperto la questa miniera di info interessanti...



Tostapane? uhm.,...  cmq


 della philips anche se credo che sia un po' universale )
La F non si riferisce al DIP ma alla famiglia, piů precisamente la F č fast
(se non sbaglio).
C'č anche LS che č low power schotky, HC high speed cmos, ecc ecc.
--
Ciao
Daniele Giangrazi

 mi sa che spaglio aproccio... inluminami...
O__o Non ho capito molto bene cosa vorresti fare, cmq una volta trovato
l'Enable di ogni periferica, io userei un bel decoder, cosě con n pin posso
scegliere 2^n periferiche...




Non ho detto che F = DIP ma ho semplicemente che dei varei 245 ( c'č
ne sono una decina se non di + ) di F c'č pure il DIP mentre il primo
245 che avevo visto aveva solo io SOP. Uhm forse mi sono espresso
male... chiedo scusa


 mi chiedevo io ho un inderizzo di 4 cifre binarie che mi devo mettere li
con una NAND a 4 ingressi e con alcuni piedini ci devo mettere pure delle
not? non finisco +!
Bastano due 74138 (e una NOT che puo' essere fatta anche con un comune
transistor NPN) e decodifichi i 4 bit in 16 linee.
ciao
Claudio F


Ciao...
PS: 
io attualmente ho intenzione di usare 1 bus dati ( 16 bit ) , 1 bus
ctrl ( 8 bit ) e 1 bus address che pero in pratica non si vede
neache...
 
avevo previsto anche un bit T/!R di direzione sul bus dati ma mi sono
reso conto che apparte praticamente inutile ( ma forse non del tutto
devo ancora studichiare una certa cosa che poi ti diro nel PPS )
percui io avevo in mente di usare 2 addr per la scrittura e la lettura
dal device ( il CDROM o HD o entrambi ) anche perche se volessi usare
il T/!R dovrei usare un IC con 4NOT colegate in sieme per trasformare
il segnale di enable del device al segnale direzionale...
 
il circuito è questo 
 
[FIDOCAD]
TY 290 30 5 3 0 0 0 * H
TY 290 20 5 3 0 0 0 * L
TY 290 40 5 3 0 0 0 * X
TY 275 20 5 3 0 0 0 * L
TY 275 30 5 3 0 0 0 * L
TY 275 40 5 3 0 0 0 * H
TY 275 10 5 3 0 0 0 * A
TY 290 10 5 3 0 0 0 * B
LI 285 17 285 50
LI 300 17 300 50
TY 304 10 5 3 0 0 0 * Y1
LI 270 17 332 17
TY 321 10 5 3 0 0 0 * Y2
LI 315 17 315 51
TY 305 20 5 3 0 0 0 * L
TY 325 30 5 3 0 0 0 * L
TY 305 30 5 3 0 0 0 * H
TY 325 20 5 3 0 0 0 * H
TY 305 40 5 3 0 0 0 * H
TY 325 40 5 3 0 0 0 * H
MC 230 15 0 0 700
MC 230 35 0 0 700
MC 195 25 0 0 700
LI 195 25 190 25
LI 190 25 190 35
LI 190 35 195 35
LI 185 30 190 30
SA 190 30
LI 230 25 225 25
LI 225 25 225 35
LI 225 35 230 35
LI 220 30 225 30
SA 225 30
MC 195 10 0 0 700
LI 195 10 190 10
LI 190 10 190 20
LI 190 20 195 20
LI 185 15 190 15
SA 190 15
LI 220 15 230 15
LI 185 30 180 30
LI 180 30 180 35
LI 175 45 175 15
LI 175 15 185 15
LI 230 45 175 45
LI 175 25 165 25
LI 180 35 165 35
SA 175 25
TY 161 33 5 3 0 0 0 * E
LI 160 33 165 33
TY 155 23 5 3 0 0 0 * T/R
LI 161 22 164 22
TY 256 17 5 3 0 0 0 * Y1
TY 256 38 5 3 0 0 0 * Y2
 
(glup sono tutte LI ) 
 
PS2 : 
come ho detto ora dispongo di 16 bit ( un imensita! ) e mi dispiace (
davvero! ) usare solo 4 per LCD sapendo che LCD ha la posibilita di
usarne 8 per i dati... mi chiedo... perke la scelta di usarne 4?
e stata un esigenza di PIC con pochi piedini ( ripeto ora ho 16 pin
per i dati ) percui io uso 8 bit perche intanto non ho di queste
esigenze ( ragiungendo cosi il doppio della velocita )... uhm.... 
 
esiste in giro una buona ( e sopratutto completa ) libreria per il
controllo del LCD ? per completa intendo con la possibilita di
ragiungere anche la ram per i caratteri personalizabili


 esiste in giro una buona ( e sopratutto completa ) libreria per il
controllo del LCD ?
non saprei, a dire il vero non ne ho mai usato uno...
ciao
Claudio F

 risolto... con un bel encoder/demultiplexer
? questa non l'ho capita io.
Casomai un decoder/demultiplexer, no?
--
...:::Zmaster:::...
DSL powered
zm...@libero.it
zm...@freemail.it
www.zmasterworld.8m.com