nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 25 May 2019 11:46



Reply to topic  [ 49 posts ]  Go to page Previous  1, 2, 3, 4  Next
Модульный Z80 компьютер RC2014 
Author Message
Doomed

Joined: 01 Oct 2007 11:30
Posts: 400
Location: Ukraine
Reply with quote
У меня тоже такой есть и даже с барсиком (z280) :lol:
Code:
>go to address: 0x0000 press Return to execute command


Small Computer Monitor - RCZ280
*help
Small Computer Monitor by Stephen C Cousins (www.scc.me.uk)
Version 1.0.0 configuration Z1 for Bill Shen's Z280 based RCZ280 system

Monitor commands:
A [<address>]  = Assemble        |  D [<address>]   = Disassemble
M [<address>]  = Memory display  |  E [<address>]   = Edit memory
R [<name>]     = Registers/edit  |  F [<name>]      = Flags/edit
B [<address>]  = Breakpoint      |  S [<address>]   = Single step
I <port>       = Input from port |  O <port> <data> = Output to port
G [<address>]  = Go to program
BAUD <device> <rate>             |  CONSOLE <device>
FILL <start> <end> <byte>        |  API <function> [<A>] [<DE>]
DEVICES, DIR, HELP, RESET
BASIC    Grant Searle's adaptation of Microsoft BASIC
WBASIC   Warm start BASIC (retains BASIC program)
CPM      Load CP/M from Compact Flash (requires prepared CF card)
*

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


24 Feb 2019 04:32
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Shaos wrote:
а для текстовой видеокарточки мне нужен будет только один порт, но легко декодируемый - взять из области #D8...#DB, скажем #DA?
...
с другой стороны если тормозить процессор вейтом, то чтение ненужно (или туда PS/2-клаву присобачить?)

при записи байта в регистр надо будет взвести триггер, выдающий IFLAG на схему и этот триггер будет сброшен, когда SX-28 выдаст OFLAG, по которому в свою очередь обнулится !WAIT - вобщем как-то так...

вообще если иметь свой отдельный порт, то придётся переделывать прошивки - все эти бейсики и мониторы, а я смотрю там достаточно простой интерфейс к этому чипу MC68B50 Asynchronous Communications Interface Adapter (ACIA) - порт контроля $80 и порт данных $81 - его можно относительно легко сымитировать (правда придётся ещё и контроллер PS/2-клавы на эту же плату за уши притягивать, чтобы полноценный терминал был)

вот исходник интерфейса к ACIA из MS-бейсика от Grant Searle:

 intmini.asm
Code:
;==================================================================================
; Contents of this file are copyright Grant Searle
;
; You have permission to use this for NON COMMERCIAL USE ONLY
; If you wish to use it elsewhere, please include an acknowledgement to myself.
;
; http://searle.hostei.com/grant/index.html
;
; eMail: home.micros01@btinternet.com
;
; If the above don't work, please perform an Internet search to see if I have
; updated the web page hosting service.
;
;==================================================================================

; Minimum 6850 ACIA interrupt driven serial I/O to run modified NASCOM Basic 4.7
; Full input buffering with incoming data hardware handshaking
; Handshake shows full before the buffer is totally filled to allow run-on from the sender

SER_BUFSIZE     .EQU     3FH
SER_FULLSIZE    .EQU     30H
SER_EMPTYSIZE   .EQU     5

RTS_HIGH        .EQU     0D6H
RTS_LOW         .EQU     096H

serBuf          .EQU     $2000
serInPtr        .EQU     serBuf+SER_BUFSIZE
serRdPtr        .EQU     serInPtr+2
serBufUsed      .EQU     serRdPtr+2
basicStarted    .EQU     serBufUsed+1
TEMPSTACK       .EQU     $20ED ; Top of BASIC line input buffer so is "free ram" when BASIC resets

CR              .EQU     0DH
LF              .EQU     0AH
CS              .EQU     0CH             ; Clear screen

                .ORG $0000
;------------------------------------------------------------------------------
; Reset

RST00           DI                       ;Disable interrupts
                JP       INIT            ;Initialize Hardware and go

;------------------------------------------------------------------------------
; TX a character over RS232

                .ORG     0008H
RST08            JP      TXA

;------------------------------------------------------------------------------
; RX a character over RS232 Channel A [Console], hold here until char ready.

                .ORG 0010H
RST10            JP      RXA

;------------------------------------------------------------------------------
; Check serial status

                .ORG 0018H
RST18            JP      CKINCHAR

;------------------------------------------------------------------------------
; RST 38 - INTERRUPT VECTOR [ for IM 1 ]

                .ORG     0038H
RST38            JR      serialInt       

;------------------------------------------------------------------------------
serialInt:      PUSH     AF
                PUSH     HL

                IN       A,($80)
                AND      $01             ; Check if interupt due to read buffer full
                JR       Z,rts0          ; if not, ignore

                IN       A,($81)
                PUSH     AF
                LD       A,(serBufUsed)
                CP       SER_BUFSIZE     ; If full then ignore
                JR       NZ,notFull
                POP      AF
                JR       rts0

notFull:        LD       HL,(serInPtr)
                INC      HL
                LD       A,L             ; Only need to check low byte becasuse buffer<256 bytes
                CP       (serBuf+SER_BUFSIZE) & $FF
                JR       NZ, notWrap
                LD       HL,serBuf
notWrap:        LD       (serInPtr),HL
                POP      AF
                LD       (HL),A
                LD       A,(serBufUsed)
                INC      A
                LD       (serBufUsed),A
                CP       SER_FULLSIZE
                JR       C,rts0
                LD       A,RTS_HIGH
                OUT      ($80),A
rts0:           POP      HL
                POP      AF
                EI
                RETI

;------------------------------------------------------------------------------
RXA:
waitForChar:    LD       A,(serBufUsed)
                CP       $00
                JR       Z, waitForChar
                PUSH     HL
                LD       HL,(serRdPtr)
                INC      HL
                LD       A,L             ; Only need to check low byte becasuse buffer<256 bytes
                CP       (serBuf+SER_BUFSIZE) & $FF
                JR       NZ, notRdWrap
                LD       HL,serBuf
notRdWrap:      DI
                LD       (serRdPtr),HL
                LD       A,(serBufUsed)
                DEC      A
                LD       (serBufUsed),A
                CP       SER_EMPTYSIZE
                JR       NC,rts1
                LD       A,RTS_LOW
                OUT      ($80),A
rts1:
                LD       A,(HL)
                EI
                POP      HL
                RET                      ; Char ready in A

;------------------------------------------------------------------------------
TXA:            PUSH     AF              ; Store character
conout1:        IN       A,($80)         ; Status byte       
                BIT      1,A             ; Set Zero flag if still transmitting character       
                JR       Z,conout1       ; Loop until flag signals ready
                POP      AF              ; Retrieve character
                OUT      ($81),A         ; Output the character
                RET

;------------------------------------------------------------------------------
CKINCHAR        LD       A,(serBufUsed)
                CP       $0
                RET

PRINT:          LD       A,(HL)          ; Get character
                OR       A               ; Is it $00 ?
                RET      Z               ; Then RETurn on terminator
                RST      08H             ; Print it
                INC      HL              ; Next Character
                JR       PRINT           ; Continue until $00
                RET
;------------------------------------------------------------------------------
INIT:
               LD        HL,TEMPSTACK    ; Temp stack
               LD        SP,HL           ; Set up a temporary stack
               LD        HL,serBuf
               LD        (serInPtr),HL
               LD        (serRdPtr),HL
               XOR       A               ;0 to accumulator
               LD        (serBufUsed),A
               LD        A,RTS_LOW
               OUT       ($80),A         ; Initialise ACIA
               IM        1
               EI
               LD        HL,SIGNON1      ; Sign-on message
               CALL      PRINT           ; Output string
               LD        A,(basicStarted); Check the BASIC STARTED flag
               CP        'Y'             ; to see if this is power-up
               JR        NZ,COLDSTART    ; If not BASIC started then always do cold start
               LD        HL,SIGNON2      ; Cold/warm message
               CALL      PRINT           ; Output string
CORW:
               CALL      RXA
               AND       %11011111       ; lower to uppercase
               CP        'C'
               JR        NZ, CHECKWARM
               RST       08H
               LD        A,$0D
               RST       08H
               LD        A,$0A
               RST       08H
COLDSTART:     LD        A,'Y'           ; Set the BASIC STARTED flag
               LD        (basicStarted),A
               JP        $0150           ; Start BASIC COLD
CHECKWARM:
               CP        'W'
               JR        NZ, CORW
               RST       08H
               LD        A,$0D
               RST       08H
               LD        A,$0A
               RST       08H
               JP        $0153           ; Start BASIC WARM
             
SIGNON1:       .BYTE     CS
               .BYTE     "Z80 SBC By Grant Searle",CR,LF,0
SIGNON2:       .BYTE     CR,LF
               .BYTE     "Cold or warm start (C or W)? ",0
             
.END


отсюда видятся только вот такие точки взаимодействия:
Code:
RTS_HIGH        .EQU     0D6H ; 11010110
RTS_LOW         .EQU     096H ; 10010110

Interrupt:
                ...
                IN       A,($80)
                AND      $01             ; Check if interupt due to read buffer full
                ...
                IN       A,($81)         ; Read data
                ...
                LD       A,RTS_HIGH
                OUT      ($80),A

RXA:            ; loop if buffer is empty
                ...
                LD       A,RTS_LOW
                OUT      ($80),A

TXA:            PUSH     AF              ; Store character
conout1:        IN       A,($80)         ; Status byte       
                BIT      1,A             ; Set Zero flag if still transmitting character       
                JR       Z,conout1       ; Loop until flag signals ready
                POP      AF              ; Retrieve character
                OUT      ($81),A         ; Output the character
                RET

INIT:
               ...
               LD        A,RTS_LOW
               OUT       ($80),A         ; Initialise ACIA
               IM        1

т.е. при чтении проверяется бит наличия входного символа 0 в порту $80
при записи проверяется бит готовности 1 в порту $80 (признак пустоты буфера передачи)
ну и при получении символа программа сигнализирует, что символ получен путём взведения бита 6 в порту $80
а порт $81 просто используется для чтения байта с ввода и для передачи байта на вывод

P.S. а вот со Small Computer Monitor несколько сложнее т.к. он проверяет наличие одного из устройств - ACIA или SIO/2 и вот что он делает для ACIA:
Code:
; Control register values
k6850Reset: .EQU 0b00000011     ;Master reset
k6850Init:  .EQU 0b00010110     ;No int, RTS low, 8+1, /64

; Status (control) register bit numbers
k6850RxRdy: .EQU 0              ;Receive data available bit number
k6850TxRdy: .EQU 1              ;Transmit data empty bit number

; Device detection, test 1
; This test just reads from the devices' status (control) register
; and looks for register bits in known states:
; /CTS input bit = low
; /DCD input bit = low
; WARNING
; Sometimes at power up the Tx data reg empty bit is zero, but
; recovers after device initialised. So test 1 excludes this bit.
k6850Mask1: .EQU  0b00001100    ;Mask for known bits in control reg
k6850Test1: .EQU  0b00000000    ;Test value following masking

; Device detection, test 2
; This test just reads from the devices' status (control) register
; and looks for register bits in known states:
; /CTS input bit = low
; /DCD input bit = low
; Transmit data register empty bit = high
k6850Mask2: .EQU  0b00001110    ;Mask for known bits in control reg
k6850Test2: .EQU  0b00000010    ;Test value following masking

; RC2014 serial 6850 initialise
;   On entry: No parameters required
;   On exit:  Z flagged if device is found and initialised
;             AF BC DE HL not specified
;             IX IY I AF' BC' DE' HL' preserved
; If the device is found it is initialised
RC2014_SerialACIA1_Initialise:
; First look to see if the device is present
; Test 1, just read from chip, do not write anything
            IN   A,(kACIA1Cont) ;Read status (control) register
            AND  k6850Mask1     ;Mask for known bits in control reg
            CP   k6850Test1     ;and check for known values
            RET  NZ             ;If not found return with NZ flag
; Attempt to initialise the chip
            LD   A,k6850Reset   ;Master reset
            OUT  (kACIA1Cont),A ;Write to ACIA control register
            LD   A,k6850Init    ;No int, RTS low, 8+1, /64
            OUT  (kACIA1Cont),A ;Write to ACIA control register
; Test 2, perform tests on chip following initialisation
            IN   A,(kACIA1Cont) ;Read status (control) register
            AND  k6850Mask2     ;Mask for known bits in control reg
            CP   k6850Test2     ;Test value following masking
;           RET  NZ             ;Return not found NZ flagged
            RET                 ;Return Z if found, NZ if not

получается надо сохранить нулевыми биты 2 и 3 когда Z80 читает из $80
и прерывания этот монитор не использует (No int, RTS low, 8+1, /64)
значит надо поддержать вариант работы и с прерываниями, и без...

P.P.S. Значит Бейсик ожидает контроллер ACIA по адресам $80,$81. Монитор SCM смотрит в 2 места - $80,$81 и $40,$41.
Поглядел ещё в исходники RomWBW - этот поддерживает только $A0,$A1 и $60,$61 (т.е. бит 5 ещё задействан - там 1 будет).
Хотя https://github.com/wwarthen/RomWBW/blob/master/Source/HBIOS/acia.asm
Судя по комментариям он всё также использует $80,$81 или $40,$41 ACIA, но чтобы их детектирование не путало другие устройства по тем же адресам, он торкает $60 и $A0 (т.к. в ACIA всё равно только старшие 2 бита адреса проверяются):
Code:
; POSSIBLE BASE I/O ADDRESSES
; NOTE THAT THE ACIA ONLY QUALIFIES ADDRESS BITS 7 & 6, SO
; THE ACIA'S TWO PORTS APPEAR REPEATEDLY OVER AN ADDRESS RANGE
; OF $40 STARTING FROM THE REAL BASE PORT.
; WE TAKE ADVANTAGE OF THIS TO AVOID CONFLICTING WITH SIO
; AND COMPACT FLASH MODULES DURING DETECTION PROBES.
;
ACIAA_BASE .EQU   $80 + $20   ; MODULE A
ACIAB_BASE .EQU   $40 + $20   ; MODULE B

_________________
:eugeek: https://twitter.com/Shaos1973


24 Feb 2019 13:39
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Существует аналогичная плата для RC2014 - VGA-выход и USB-клава на пропеллере "VGA Serial Terminal Kit for RC2014":

https://www.tindie.com/products/maccasoft/vga-serial-terminal-kit-for-rc2014/

Набор стоит $46.50 и работает совместно с платой последовательного интерфейса

В моём случае это будет NTSC/PAL+PS/2 Serial Terminal Kit for RC2014 который работает ВМЕСТО платы последовательного интерфейса и надо как-то уложиться хотя бы в $50...

_________________
:eugeek: https://twitter.com/Shaos1973


24 Feb 2019 17:18
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Вот на скорую руку нарисовал в Eagle v5.12.0 шаблон для платок RC2014 более-менее похожий на рекомендации автора:

http://rc2014.co.uk/1377/module-template/

P.S. Перезалил 25 февраля 2019 года после устранения несовместимости с дефолтными правилами игла


Attachments:
rc2014-eagle5.zip [9.48 KiB]
Downloaded 12 times

_________________
:eugeek: https://twitter.com/Shaos1973
24 Feb 2019 21:08
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Shaos wrote:
Существует аналогичная плата для RC2014 - VGA-выход и USB-клава на пропеллере "VGA Serial Terminal Kit for RC2014":

https://www.tindie.com/products/maccasoft/vga-serial-terminal-kit-for-rc2014/

Набор стоит $46.50 и работает совместно с платой последовательного интерфейса

В моём случае это будет NTSC/PAL+PS/2 Serial Terminal Kit for RC2014 который работает ВМЕСТО платы последовательного интерфейса и надо как-то уложиться хотя бы в $50...

Автор RC2014 мне предлагает его микроклавиатурку заюзать для начала ;)
https://www.tindie.com/products/Semachthemonkey/universal-micro-keyboard/
Наверное так и надо сделать ибо клавка по ходу спектрумовская (матрица 5x8) :dj:
Для работы с такой клавкой взять скажем PIC16F871, у которого есть:
- порт A (6 бит)
- порт B (8 бит)
- порт C (8 бит)
- порт D (8 бит)
- порт E (3 бита)
т.е. всего 33 сигнала!

Я планирую задействовать режим PSP для работы с шиной Z80 (чтение и запись в порт #80) - в этом случае порт D подключается к шине данных, а порт E превращается в сигналы управления /RD,/WR и /CS. На вычитку клавки уйдёт 13 сигналов если делать в лоб, либо 8 если адресовать ряды по одному (тогда нужна будет ещё одна микросхема дешифратора переводящая 3 бита адреса в 8 битов выбора ряда для клавки). В итоге остаётся 14 бит, из которых 8 (например порт B) уйдут на выдачу прочитанного символа на буфер (когда Z80 будет читать из порта #81) и из оставшихся 6 битов порта A:

RA0 адрес для чтения клавки KA0
RA1 адрес для чтения клавки KA1
RA2 адрес для чтения клавки KA2
RA3 вход нулевого бита адреса с триггера (и заодно тут заводим бит занятости OFLAG из SX-28 - переключаемся между ними с помощью RA0)
RA4 который ОК пойдёт на прерывание /INT процыка (будет дёргаться если прерывания разрешены и если есть байт с клавки)
RA5 светодиод для индикации Caps Lock

5 битов данных с клавки пойдут на порт C, оставляя ещё 3 бита для других целей:

RC0 вход данных с клавки (бит 0)
RC1 вход данных с клавки (бит 1)
RC2 вход данных с клавки (бит 2)
RC3 вход данных с клавки (бит 3)
RC4 вход данных с клавки (бит 4)
RC5 сигнал IFLAG на SX28 (т.к. похоже пик должен будет общаться с недотекстом, а не хост)
RC6 это TX (можно задействовать на будущее)
RC7 это RX (можно задействовать на будущее)

Тактировать пик можно 10 МГц с делителя частоты из недотекста (там 60 МГц должно было делиться на 6) либо кварц 20 МГц взять, чтобы в полную мощь его разогнать :rotate:

P.S. Интересный момент заключается ещё и в том, что пик в данном случае можно будет не по назначению использовать - скажем заслав в порт управления специальный байт (который не является правильной комбинацией битов для имитируемой микросхемы 68B50, например Master Reset с параметрами) пик можно временно заставить перестать работать в качестве контроллера клавиатуры и в этом режиме он сможет выполнять какие-то другие функции - например принимать и выдавать данные из EEPROM (64 байта) либо из флеша выдавать какие-то программки для Z80, либо выполнять какие-то математические расчёты и т.д. Кроме того эти пики умеют сами себя программно перепрошивать - в таком случае можно будет перепрошивать пик прямо с Z80 - вобщем много интересного можно будет понаделать :)

_________________
:eugeek: https://twitter.com/Shaos1973


25 Feb 2019 21:22
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Shaos wrote:
P.S. Интересный момент заключается ещё и в том, что пик в данном случае можно будет не по назначению использовать - скажем заслав в порт управления специальный байт (который не является правильной комбинацией битов для имитируемой микросхемы 68B50, например Master Reset с параметрами) пик можно временно заставить перестать работать в качестве контроллера клавиатуры и в этом режиме он сможет выполнять какие-то другие функции - например принимать и выдавать данные из EEPROM (64 байта) либо из флеша выдавать какие-то программки для Z80, либо выполнять какие-то математические расчёты и т.д. Кроме того эти пики умеют сами себя программно перепрошивать - в таком случае можно будет перепрошивать пик прямо с Z80 - вобщем много интересного можно будет понаделать :)

Master Reset, это когда в порт управления #80 засылается 00000011 (т.е. 2 младших бита единички) - для наших целей мы можем задействовать остальные биты. Пик имеет доступ только к записи-чтению порта #80 и может выдавать что-то в порт #81 (т.е. Z80 сможет прочитать один байт), а принять что-то из порта #81 он не может т.к. запись пойдёт в SX-28 (работающий в режиме видеоконтроллера). Отсюда выходит, что скажем задать адрес для EEPROM становится нетривиальной задачей - мы должны будем часть из этих 6 битов использовать как данные, например:
Code:
0000 0011 - это режим клавиатуры (обычный Master Reset)
xxxx x011 - вызов другого приложения (xxxxx не равно 00000)
xxxx 1011 - так можно задавать младшие 4 бита адреса EEPROM для дальнейшей работы
xxxx 1111 - так можно задавать старшие 4 бита адреса EEPROM (при этом младшие биты адреса обнуляются) - так мы можем покрыть несколько больше, чем 64 бита

чтение и запись в порт #81 после установки адреса будет выдавать/записывать байт по текущему адресу, смещая адрес на 1 после выдачи
чтение из портов #80 и #81 после вызова функции будет зависеть от функции

P.S. адреса можно распределить так:
Code:
#00...#3F - EEPROM (64 адреса, чтение и запись)
#40...#7F - зарезервировано
#80...#9F - вызов библиотечных функций (32 адреса)
#A0...#BF - переменные из второй страницы данных (32 адреса, чтение и запись)
#C0...#FF - данные из специально отведённого блока кода (64 адреса, которые содержат команды RETLW)

последний диапазон адресов может содержать зашитые в ПЗУ кода данные - например уникальный идентификатор чипа, название программы и имя автора, версия прошивки и т.д.

P.P.S. про пик-сопроцессор далее будет тут: nedoPC Sidekick на PIC16F871

_________________
:eugeek: https://twitter.com/Shaos1973


25 Feb 2019 22:13
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Мой nedoText/SX + nedoPC Sidekick in keyboard mode for RC2014 на 17 корпусов получился (это если TTL-осциллятор тоже микросхемой считать) и в шаблон стандартной платки RC2014 он как бы уже не влезает - попытаюсь уложиться в 10x10 см


Attachments:
nedoTextRC2014-sch1.jpg
nedoTextRC2014-sch1.jpg [ 141.54 KiB | Viewed 812 times ]
nedoTextRC2014-sch2.jpg
nedoTextRC2014-sch2.jpg [ 125.74 KiB | Viewed 812 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
03 Mar 2019 01:01
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Shaos wrote:
Мой nedoText/SX + nedoPC Sidekick in keyboard mode for RC2014 на 17 корпусов получился (это если TTL-осциллятор тоже микросхемой считать) и в шаблон стандартной платки RC2014 он как бы уже не влезает - попытаюсь уложиться в 10x10 см

Вроде уложился :mrgreen:


Attachments:
nedoTextRC2014-brd.jpg
nedoTextRC2014-brd.jpg [ 223.3 KiB | Viewed 893 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
03 Mar 2019 05:08
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Земля и питание разведены:


Attachments:
nedoTextRC2014-brd.jpg
nedoTextRC2014-brd.jpg [ 240.59 KiB | Viewed 869 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
03 Mar 2019 17:46
Profile WWW
Doomed

Joined: 06 Oct 2006 04:17
Posts: 559
Location: г.Лянтор,Сургутского р-на,ХМАО
Reply with quote
Shaos wrote:
Земля и питание разведены:

Уложишься в два слоя или будет многослойная печатная плата?

_________________
:arrow: Сайт о ПК "Специалист" и его клонах


04 Mar 2019 00:17
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
fifan wrote:
Shaos wrote:
Земля и питание разведены:

Уложишься в два слоя или будет многослойная печатная плата?

Уже ушел в 4 :(


Attachments:
nedoTextRC2014-brd.jpg
nedoTextRC2014-brd.jpg [ 230.06 KiB | Viewed 848 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
04 Mar 2019 03:38
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
Вроде все развелось :rotate:


Attachments:
nedoTextRC2014-brd.jpg
nedoTextRC2014-brd.jpg [ 269.32 KiB | Viewed 812 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
04 Mar 2019 23:52
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
OSHpark вот такие картинки генерит и берётся изготовить 3 экземпляра за полторы сотни:
Quote:
We detected a 4 layer board of 3.93 x 3.94 inches (99.8 x 100.0mm)
3 boards will cost $154.80


Attachments:
nedoTextRC2014-oshpark.jpg
nedoTextRC2014-oshpark.jpg [ 233.49 KiB | Viewed 806 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
05 Mar 2019 00:54
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote
В рассылке RC2014 некий Mark T предложил мне следующие вещи по улучшению платы:
Mark T wrote:
Hi Shaos,

Four layer has a much greater impact on cost than double sided.

You might make the layout a bit easier by reducing the glue logic.

Example the address decoding could use a '138. No need to qualify M1 as both /WR and /RD are qualified. Links select address 0b10XXXXXX or 0b01XXXXXX.

Having all the gates of the multiplexers close together in the same package makes the routing a lot easier. In the diagram I've selected the gates so a single 74HCT00 is used for each multiplexer. Also selected the gates and pins used to reduce routing issues.

You might be able to drive the LED direct from the PIC output to avoid adding the inverter, or use a spare gate from IC7 which would have three unused gates.

Also position the ICs that have bussed connection between them next to each other, not spread across the board. IC4 and IC6 next to each other as they are one to one pin mapping.

Then IC10 next to them, but change the pin mapping of the 6116 to line up the connections of the MAx and RCx connections to IC4 and IC6. It doesn't matter what order you connect address and data to the RAM chip.

Similar with IC4 and IC6 so long as the inputs map to the correct outputs.

Next put IC11 at whichever end of IC4, IC6, IC10 that suits the rest of the circuit. And the same with IC8.

Put IC17 next to the RC2014 bus header. D0 to A1, D1 to A2, .... D7 to A7, ground DIR on IC17, PB0 to B1, PB1 to B2, .... PB7 to B7. Then you have straignt connections from IC17 to the bus header.

Then IC15 goes next to IC17, straight connections for PB0 to PB7. I prefer to have all ICs pointing in the same direction to help avoid assembly issues, but just make sure the directions are clearly labelled on the silk screen and you should be OK.

Attachment:
Mark.png
Mark.png [ 39.67 KiB | Viewed 768 times ]


_________________
:eugeek: https://twitter.com/Shaos1973


06 Mar 2019 02:10
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17695
Location: Colorado
Reply with quote

https://www.youtube.com/watch?v=lamL392NJRM

_________________
:eugeek: https://twitter.com/Shaos1973


26 Apr 2019 03:31
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 49 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.