| Línia 309: | Línia 309: | ||
* nCLK=12 CPLD_DI_LATCH: Es llegeix un bit del SPI_DI si s'escau | * nCLK=12 CPLD_DI_LATCH: Es llegeix un bit del SPI_DI si s'escau | ||
{| | {| | ||
!Colspan=4|Estats del divisor | !Colspan=4|Estats del divisor | ||
|- | |- | ||
!nCLK||CLK_SPI | !nCLK||CLK_SPI||Events | ||
|- | |- | ||
|00||0||<-Reset/CLK_SYNC | |00||0||<-Reset/CLK_SYNC | ||
Revisió del 15:00, 2 abr 2014
Versió 1
Connexionat LDST <-> MRSJ
| MRSJ | Dir | LDST | ||||
|---|---|---|---|---|---|---|
| Port | Senyal | PIN | PIN | Senyal | Port | |
| CASSETTE | RxD | 2 | ← | 3 | TxD | Port A |
| TxD | 3 | → | 2 | RxD | ||
| ReadyToSend | 4 | ← | 4 | DTR | ||
| MustSendData | 5 | → | 6 | DSR | ||
| GND | 7 | — | 5 | GND | ||
| Eject | 11 | → | 1 | DCD | ||
| BuffSTOut | 14 | ← | 7 | RTS | ||
| BuffSTIn | 16 | → | 8 | CTS | ||
| Operable | 20 | ← | 4 | DTR | Port B | |
| TERMINAL | RxD | 2 | ← | 3 | TxD | |
| TxD | 3 | → | 2 | RxD | ||
| GND | 7 | — | 5 | GND | ||
Connexionat Emulació MRSJ <-> Cinta i terminal
| MRSJ-Emu | Dir | Perifèrics | ||||
|---|---|---|---|---|---|---|
| Port | Senyal | PIN | PIN | Senyal | Port | |
| Port A | CD | 1 | ← | 20 | Operable | CASSETTE |
| RxD | 2 | ← | 2 | TxD | ||
| TxD | 3 | → | 3 | RxD | ||
| DTR | 4 | → | 5 | MustSendData | ||
| GND | 5 | — | 7 | GND | ||
| DSR | 6 | ← | 4 | ReadyToSend | ||
| RTS | 7 | → | 16 | BuffSTin | ||
| CTS | 8 | ← | 14 | BuffSTout | ||
| Port B | DTR | 4 | → | 11 | Eject | |
| RxD | 2 | ← | 2 | TxD | TERMINAL | |
| DTR | 3 | → | 3 | Eject | ||
| GND | 5 | — | 7 | GND | ||
Versió 2
Analisis econòmic
Conversor USB <-> Serie
Per el que s'ha pogut determinar, FTDI sembla el millor fabricant de conversors USB<->Serie. A molts forums es recomanen els seus adaptadors
A més a més en la seva web hi han penjades les especificacions, Datasheets, Application Notes,.... del seus productes. Cosa que facilita determinar si els seus productes són els adients per les nostres necessitats.
Dintre de la seva gamma de productes, els que més s'aproximen a les nostres necessitats són:
- FT2232D: 2xPorts serie USB FullSpeed
- FT2232H: 2xPorts serie USB HiSpeed
- FT4232H: 4xPorts serie USB HiSpeed
S'ha optat per el FT2232H ja que és el més barat.
Adaptació de voltatges
Per poder connectar el conversor USB a un port RS232 és necessari adaptar els voltatges usant els line-drivers corresponents. Ja que el xip treballa a 3.3V i el RS232 de -15V a 15V
En el nostre cas necessitem: 5x RS232->Lògica 5x Lògica->RS232
S'han explorat 3 opcions per aconseguir-ho:
- A) 3x MAX232 Preu:3x(MAX232 0.49Eur, Condensadors 1.36Eur)=5,55Eur:
- pros:
- al usar el mateix component 3 vegades és més fàcil tenir descompte per volum
- posibilitat d'aillar electricament entre ells els ports terminal i cassette
- chip extremadament popular i per tan fàcil d'aconseguir tan a curt com a llarg termini
- contres:
- consum d'espai de circuit considerable
- possible problema de variacions de voltatge entre els diferents xips
- possibles complicacions d'enrutat del circuit
- pros:
- B) 1x MAX232 + 1xMC1488 + 1xMC1489 Preu:(MAX232 0.49Eur,Condensadors 1.36Eur,MC1488 0.46Eur,MC1489 0.59Eur)=2,90Eur
- pros:
- barat
- chips extremadament populars i per tan fàcils d'aconseguir tan a curt com a llarg termini
- contres:
- possible problema de sobrecarrega al reusar la font del MAX232 per alimentar el MC1488
- impossible aillar els ports.
- pros:
- C) 1x chip ho fa tot (HIN240,MAX244..MAX249....) Preu:6-20Eur
- pros:
- fàcil disseny del circuit
- enrutat del circuit extremadament simple
- més fiable (la probabilitat de fallada d'un circuit és directament proporcional al número de components)
- contres:
- problematic d'obtenir en petites quantitats (menys de 500), relativament probable que en uns anys no es pugui obtenir ni trobar-ne un equivalent.
- car a menys que es demani en grans quantitats (alguns d'ells són realment barats per compres superirors a 2000 unitats...)
- impossible aillar els ports
- pros:
Finalment s'ha optat per la opció A.
Disseny del circuit
S'ha construit un prototipus per verificar el correcte funcionament del xip
FT2232H
i veure si tenia algun comportament extrany (Com per exemple els PA088E fabricats per MCT Corp. que refusen els comandaments EscapeCommFunction(SETXOFF,....); EscapeCommFunction(SETXON,....); )
Per evitar les complicacions de soldar components SMD s'ha utilitzat el mòdul prefabricat
DS2232H_miniModule
que ofereix el propi fabricant del xip. També té l'avantatge que ja porta incorporats tots els components critics per el bon funcionament del xip (Cristall + condensadors, regulació 3.3V , EEPROM....).
S'ha optat per utilitzar condensadors ceràmics en lloc dels estandards de tàntal ja que són més barats, al no tenir polaritat no es poden posar al revés i en cas de sobrecarrega no tendeixen a explotar. També s'ha de dir que la major part dels inconvenients que tenen respecte els de tàntal no ens afecten significativament en aquest disseny (major deriva tèrmica, major deriva al llarg del temps, dependència Vdc/capacitat, soroll piezzoelèctric).
L'estandard USB, que requereix que quan un dispositiu es connecta al bus mantingui un consum inferior a 100mA fins que no rebi l'aprovació del sistema de gestió de consum del bus (normalment el S.O. del PC és el qui controla quanta potència pot consumir cada dispositiu).
Per tan per complir amb l'estandard ens veiem obligats a tenir desactivats tots els MAX232 durant l'arrencada del dispositiu. Ja que cada MAX232 té un consum de 30mA fent un total de 90mA en tots ells, que combinat amb un consum de uns 70-100mA del FT2232H ens posa clarament fora dels limits imposats per l'estandard.
Per desactivar els MAX232 durant l'arrencada s'ha optat per usar el disseny aconsellat per FTDI en
AN_146 USB Hardware Design Guidelines for FTDI_ICs (pg. 6)
. Que utilitza un MOSFET (U6) amb la seva corresponent xarxa de polarització (R5,R6,C6). A més a més s'ha afegit un pont (R1) per si es decideix en algun moment que es vol alimentar directament els MAX232 (durant tests o per estalviar components).
Si s'opta per posar el pont R1 i suprimir el MOSFET , malgrat que s'incompliria l'estandard, el dispositiu continuaria funcionant en la majoria de casos. Ja que gairabé cap Host USB té un limitador de corrent configurable per poder forçar els dispositius a respectar l'estandard. La gran part dels PCs no tenen limitador o si el tenen és un de fixe a 500mA (consum màxim permès per el bus USB).
Finalment, s'ha cablejat els 2 connectors DB-25 de manera que es puguin connectar a una la màquina Mayer sense necessitat de adaptador.
Disseny del PCB
S'ha optat per usar una placa de 2 capes ja que és la més barata de fabricar i si fos necessari, es pot fabricar sense maquinaria especialitzada. S'han utilitzat les versions SMD de la majoria de components ja que així són més barats i ocupen menys espai.
En el disseny actual s'ha intentat fer el màxim de petit possible per així tenir una idea de quin és el tamany mínim de caixa requerit. S'ha decidit posar tots els components a la mateixa cara ja que moltes empreses de ensamblat de plaques no soporten aquesta opció.
Finalment s'han posat un pla de terra a la cara de sota i un altre pla conectat a 5V a la cara de sobre. Això es fa per reduir interferències electromagnètiques i també té l'avantatge de fer de condensador de filtre. Per raons d'espai s'utilitzen els 2 plans per enrutar les línies GND i 5V respectivament.
- Capes del PCB (Dimensions HxW:51.816mm x 108.331mm)
-
Màscara & documentació
-
Capa superior
-
Capa inferior
Versió 3
Motivació
Durant la venta del LDST2 s'han trobat diversos problemes:
- Els conversors FTDI emulen tan bé un port serie real que el Windows invoca el servei serenum que té la mania de confondre el port de TERMINAL amb un mouse serie cosa que acaba provocant que el LDST no arrenqui (el port està en ús) i que la màquina tingui un comportament erratic (rep ordres destinades a un mouse). No hi ha una manera senzilla de desactivar aquest comportament.
- No hi ha manera senzilla de afegir soport pel protocol d'alta velocitat i sembla que algunes màquines només volen parlar el protocol d'alta velocitat....
- El encapsulat del xip (FT2232H) és massa compacte per poder ser soldat a mà de manera fiable. (El volum de producció segurament no serà prou alt per justificar un ensamblat a màquina)
- Han aparegut alguns problemes amb la API del port serie que proporciona el Windows (Imposibilitat de sincronitzar un canvi de linia de control amb les dades o detectar quan s'ha acabat de transmetre, comportament inconsistent entre els diferents drivers de port serie....)
- Detecció de ports innecessariament complexe.
Per solventar tots aquests problemes s'ha optat per un nou diseny que no utilitzi el port serie.
Disseny del protocol
S'ha optat per continuar utilitzant la interficie USB per comunicar-se amb el PC. S'han estudiat diverses opcions:
| Tipus dispositiu | Pros | Contres |
|---|---|---|
| CDC/ACM |
|
|
| Vendor specific |
|
|
| HID |
|
|
Finalment s'ha escollit el dispositiu HID malgrat les limitacions ja que és relativament senzill d'implementar i algunes de les restriccions es poden esquivar amb facilitat.
Una de les restriccions més problemàtiques és la limitació d'EndPoints ( un endpoint tipus Interrupt en mode FullSpeed està limitat a 64KBytes/s ) però per sort és extremadament senzilla d'esquivar. Si el dispositiu s'identifica com a 'CompositeDevice' pot presentar fins a 255 dispositius lògics...
S'ha optat per presentar 2 dispositius lògics un per cada port (CASSETTE, TERMINAL)
Disseny del Hardware
Interficie HDLC/d'alta velocitat
Vist que no s'ha trobat cap xip amb una interfice de relativament bon conectar al PIC18F24J50, (La majoria de xips que està garantit que funcionaran correctament són dels anys 70-80 i utilitzen un bus de 8 bits compatible amb 80x86 o Z80) i com que s'haurà d'utilitzar igualment un PLA/CPLD per conectar els transceptors amb el xip que implementi el protocol HDLC, s'ha optat per integrar dins el propi CPLD la funcionalitat de (de)codificar el protocol HDLC.
Finalment, per simplificar la lògica a implementar en el CPLD, s'ha decidit que aquest només adapti la codificació de les dades el mínim necessari per que compleixin amb la senyalització el protocol SPI que és soportat directament per l'electrònica del PIC18F24J50 soporta directament.
Codificació
S'ha optat per utlitzar una etapa de potència semblant a la original tot i que s'ha substituit el SN75159 per un MC3487N per motius de disponibilitat. La electrònica és bàsicament la mateixa: Un PLA/CPLD controlant un transmisor de RS422/RS485 que s'utilitza com a driver del transformador. Podria esser interessant en un futur d'utilitzar un transformador amb un primari amb presa intermitja i utilitzar 2 sortides del CPLD en mode colector comú per controlar directament el transformador.
Decodificació
S'ha utilitzat un disseny totalment diferent del original. Ja que:
- els xips requerits (o similars) són cada cop més dificils de trobar
- s'ha de ajustar a mà el resonador utilitzat per recuperar la senyal de rellotge per cada placa que es fabriqui....
- requereix molts components discrets auxiliars....
El disseny qe s'ha implementat utilitza optocouplers d'alta velocitat per detectar els pulsos de la senyal i envia directament la sortida dels optocouplers al CPLD per que aquest acabi la decodificació i recuperació de rellotge.
Aquest disseny té com a inconvenients que és molt menys sensible que l'original ja que els optocouplers necessiten un llindar de detecció de 1.8-2V i tampoc disposa d'una etapa amplificadora. Tot i això tests realitzats amb una unitat de dades Mayer han demostrat que rep correctament les dades fins i tot amb 10m de cable. Com a avantage requereix molts pocs components i no requereix cap ajust.
Funcionament del CPLD
El CPLD utilitza un CLK=16.384MHz, és a dir 16x vegades el baudrate. Internament el CPLD divideix aquesta senyar per obtenir un CLK secundari de 1.024MHz sincronitzat amb les dades que està processant. Això també permet la generació de les senyals als moments adecuats per enviar/rebre dades via el protocol SPI.
Quan es compença una transmissió de dades o durant la recepció quan es rep un puls (CLK_SYNC) s'inicialitza el divisor al estat 0 per sincrontizar els rellotges.
Al llarg del cicle del divisor es realitzen diverses accions :
- nCLK=02 HDLC_DT_LATCH: Es llegeix un bit del HDLC i s'actualitza el SPI_DO si s'escau.
- nCLK=06...09: El CLOCK del bus SPI està a nivell actiu si hi ha una transferència de dades en curs
- nCLK=12 CPLD_DI_LATCH: Es llegeix un bit del SPI_DI si s'escau
| Estats del divisor | |||
|---|---|---|---|
| nCLK | CLK_SPI | Events | |
| 00 | 0 | <-Reset/CLK_SYNC | |
| 01 | 0 | ||
| 02 | 0 | ->HDLC_DT_LATCH | |
| 03 | 0 | ||
| 04 | 0 | ||
| 05 | 0 | ||
| 06 | 1 | ||
| 07 | 1 | ||
| 08 | 1 | ||
| 09 | 1 | ||
| 10 | 0 | ||
| 11 | 0 | ||
| 12 | 0 | ->CPLD_DI_LATCH | |
| 13 | 0 | ||
| 14 | 0 | ||
| 15 | 0 | ||
El CPLD té dos modes de funcionament:
- Transmissio (SPI -> HDLC) pin RX_NTX=0
sdfasdfa asdfasdf asdfas
- Recepció (HDLC -> SPI) pin RX_NTX=1
sdf s fasd fas fdasfd asdf