nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 12:42



Reply to topic  [ 11 posts ] 
nedoPC Sidekick на 40-ногом микроконтроллере PIC16F87x 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Эта тема заведена как продолжение выкладывания мыслей (и обсуждение) на тему пиковского сопроцессора для ретро-компьютеров (началось тут), который я сегодня решил назвать nedoPC Sidekick :lol:

PIC16F871 это 3-долларовый 20-мегагерцовый 40-ногий микроконтроллер с 33 линиями ввода-вывода (6-битный порт A, 8-битные порты B/C/D, а также 3-битный порт E), который может работать в режиме PSP (Parallel Slave Port) и как бы совместим с кучей разнообразных ретро-компьютеров - в этом случае порт D подключается к шине данных, а порт E превращается в сигналы управления /RD,/WR и /CS.

У меня уже долгие годы зреет желание задействовать его как вспомогательный вычислитель:
http://www.nedopc.org/forum/viewtopic.php?p=104863#p104863 (май 2013)
http://www.nedopc.org/forum/viewtopic.php?p=107897#p107897 (сентябрь 2013)
http://www.nedopc.org/forum/viewtopic.php?p=112645#p112645 (февраль 2014)
http://www.nedopc.org/forum/viewtopic.php?p=133409#p133409 (январь 2017)

_________________
:dj: https://mastodon.social/@Shaos


26 Feb 2019 00:02
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Подключать PIC16F871 в хост-систему предполагается так:
Code:
RA0 - application specific (address bit 0, AN0)
RA1 - application specific (address bit 1, AN1)
RA2 - application specific (address bit 2, AN2)
RA3 - application specific (addressable input, AN3)
RA4 - open drain, output to host /INT
RA5 - output to red LED (usually to indicate an error)

RB0...RB7 - output data (read-only for host on 2nd port)

RC0 - application specific (T1OSO,T1CKI)
RC1 - application specific (T1OSI, and CCP2/PWM2 for higher PICs)
RC2 - application specific (CCP1/PWM1)
RC3 - application specific (SCK/SCL for higher PICs)
RC4 - application specific (SDI/SDA for higher PICs)
RC5 - application specific (SDO for higher PICs)
RC6 - TX for RS-232
RC7 - RX for RS-232

RD0...RD7 - PSP data port

RE0 - PSP control /RD
RE1 - PSP control /WR
RE2 - PSP control /CS

Для хоста это выглядит как 2 порта - порт управления и порт данных:
- чтение снаружи всегда идёт раздельно - порт управления из PSP и порт данных из PORTB (через буфер на шину данных);
- запись извне всегда в PSP и снаружи должен быть триггер, который защёлкивает младший бит адреса при записи, передавая его в пик через RA3.

_________________
:dj: https://mastodon.social/@Shaos


26 Feb 2019 00:32
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
В интерфейсе на будущее также можно заложиться на более продвинутые пики из этого семейства вплоть до PIC16F877, у которого 8Кб флеша (все 4 банки), 368 байт ОЗУ и 256 байт EEPROM (получается надо туда обращаться 4 окнами по 64 байта)

P.S. У среднего брата PIC16F874 только 4Кб флеша (2 банки), 192 байта ОЗУ и 128 байт EEPROM (для нас это 2 окна по 64 байта). Кроме того у них обоих на RC3/RC4/RC5 могут быть посажены сигналы для возможного подключения SPI девайсов и даже I2C. Также имеются варианты с буковкой A - пока я только понял, что у них флеш перешивается не 1000 раз как у обычных пиков, а целых 100000! :o

P.P.S. Сегодняшние цены на DigiKey:
Code:
PIC16F871  - $3.29 в DIP и $4.58 в PLCC
PIC16F874  - $5.68 в DIP и $7.75 в PLCC
PIC16F874A - $4.73 в DIP и $5.47 в PLCC
PIC16F877  - $5.93 в DIP и $8.37 в PLCC
PIC16F877A -  нету в DIP и $5.87 в PLCC

Есть ещё PIC16F877T и PIC16F877AT - но это просто другая упаковка (tape) и они чуть дороже...

_________________
:dj: https://mastodon.social/@Shaos


27 Feb 2019 10:02
Profile WWW
Novelist
User avatar

Joined: 14 Aug 2018 14:30
Posts: 49
Location: Szczecin, Польша
Reply with quote
Может PIC18F4520?
32Кб флеша, 1.5Кб ОЗУ, 256 байт EEPROM, совместимый с PIC16F87x по выводам и набору периферийных устройств, стоит $4.27 на DigiKey.


27 Feb 2019 13:23
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
PIC18 это ошибка природы, которой не должно было существовать ;)

Sidekick мне видится именно на PIC16, чтобы была возможность иметь средства разработки для него прямо на ретрокомпьютере :)

_________________
:dj: https://mastodon.social/@Shaos


27 Feb 2019 15:17
Profile WWW
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
У меня тоже была мысля (и пока ни чем не закончилась) прикрутить PIC
с PSP к 8-бит процу. С полной (по возможности) поддержкой
FAT(12-16-32) на SD карте. Может даже обмен данными через ПДП (РК86).


27 Feb 2019 19:07
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Начал городить прототипчик для RC2014 из старой макетной платки:

Image

_________________
:dj: https://mastodon.social/@Shaos


01 Mar 2019 07:27
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Если у нас будет возможность писать с хоста в оба порта (запоминая младший бит адреса на триггере), то управляющий протокол может быть таким:
Code:
xxxx xx00 - application specific
xxxx xx01 - application specific
xxxx xx10 - used by ACIA emulator
xxxx x011 - reset to application (00000011 - default app, otherwise one of 31 specific apps)
xxxx 0111 - set least significant nibble of the working address (and keep most significant nibble as is)
xxxx 1111 - set most significant nibble of the working address (least significant nibble is cleared in this case)
Данные вычитываемые из порта контроля и порта данных после перезагрузки приложения будет зависеть от приложения.
Чтение из порта данных после установки адреса будет выдавать байт по текущему адресу, смещая адрес на 1 после выдачи (порт контроля будет выдавать флаг готовности).
Запись в порт данных после установки адреса будет производить запись байта по текущему адресу, смещая адрес на 1 (порт контроля будет выдавать флаг вычитки).
Два обязательных бита в порту контроля:
бит 0 - флаг готовности входных данных
бит 1 - флаг пустоты выходного буфера

Диапазоны адресов:
Code:
#00...#3F - EEPROM (64 bytes, read & write)
#40...#7F - reserved for future (2nd EEPROM area)
#80...#9F - function calls (32 functions, no address increment, ports behavior depends on function)
#A0...#BF - variables from dedicated area of data memory (32 bytes, read & writes)
#C0...#FF - constants from dedicated area of code memory (64 bytes, read only)
Начало области EEPROM будет доступно пользователю. Конец области будет использоваться системой, но пользователь все равно может туда что-то писать, например:
EEPROM ячейка с адресом #3F (63) может содержать номер приложения, запускаемого по умолчанию (при включении питания либо по дефолтному ресету 00000011).

Константы могут сообщать юзеру о конфигурации сайдкиковой системы, например:
#FF - байт, описывающий целевую систему: #00 - ошибка, #01 - PIC16F871, #02 - PIC16F874. #03 - PIC16F877 (сюда же можно писать количество покрываемых системой портов - скажем в старшие 2 бита: 01 это 2 порта, 10 это 4 порта и 11 это 8 портов - хотя это наверное уже вряд ли);
#FE - две старшие цифры версии прошивки (каждая 0...15);
#FD - младшая цифра версии (0...255);
#FC - количество предзашитых приложений (их запрещается стирать, в отличие от приложений, прошиваемых пользователем);
#C0... - тут может быть строка, идентифицирующая конкретную сборку, например "nedoPC Sidekick with nedoText for RC2014" (41 байт с нулём).
Имя автора и дату сборки наверное тоже можно, но наверное пока ненужно...

_________________
:dj: https://mastodon.social/@Shaos


01 Mar 2019 19:06
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Приложения предположительно могут иметь имена и 2 точки входа - по ресету и по прерыванию (системное прерывание будет уходить в активное в данный момент приложение).

Функция #80 скажем может быть использована для выдачи списка приложений (начиная с первого и может быть даже с пометкой дефолтного приложения):
Code:
aaa*
bbb
ccccc
abba

Может быть даже можно будет сделать переподцепления приложений к разным номерам, но наверное не сейчас...

Возможный формат расположения приложений в памяти - у каждого приложения будет заголовок:
Code:
goto startapp
goto interrupt
goto nextapp
// тут будет имя в формате ДВА 7-битных символа на слово (последний символ 0)
startapp:
...
interrupt:
...
nextapp: // тут идёт следующее приложение

Если цепочка приложений заканчивается, то по адресу nextapp стоит переход на адрес 7FF (конец банки).

Сложный момент - как представлять приложения в старших пиках, где много банок - возможно пока в старших банках мы будем держать общие функции и данные для хост-системы, но не код приложений (либо большие приложения будут сидеть в старших банках, а в нулевой будут только заголовки с длинными переходами в старшие банки).

Пользовательские приложения будут компилироваться пользователем под конкретные адреса на хост-машине и писаться во флеш сайдкика через спец-функции пословно...

_________________
:dj: https://mastodon.social/@Shaos


01 Mar 2019 19:21
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Подключать PIC16F871 в хост-систему предполагается так:
Code:
RA0 - application specific (address bit 0, AN0)
RA1 - application specific (address bit 1, AN1)
RA2 - application specific (address bit 2, AN2)
RA3 - application specific (addressable input, AN3)
RA4 - open drain, output to host /INT
RA5 - output to red LED (usually to indicate an error)

RB0...RB7 - output data (read-only for host on 2nd port)
...

Для хоста это выглядит как 2 порта - порт управления и порт данных:
- чтение снаружи всегда идёт раздельно - порт управления из PSP и порт данных из PORTB (через буфер на шину данных);
- запись извне всегда в PSP и снаружи должен быть триггер, который защёлкивает младший бит адреса при записи, передавая его в пик через RA3.

Читать состояние этого триггера предполагается через "addressable input", к которому будет подключаться один из 8 произвольных входных сигналов в зависимости от адреса на адресных битах RA0...RA2 - в простейшем случае когда адрес входа 000, то на RA3 будет состояние триггера защелкнувшего нулевой бит адреса с шины при записи в порт извне, а когда адрес 111, то пользовательский вход. В будущем можно на 001 посадить второй триггер, защелкивающий первый бит адреса с шины (тогда мы сможем отличить друг от друга записи в 4 порта), а на 010 и 011 посадить 2 регистра, куда будут защелкиваться данные с порта RB - таким образом мы расширим и чтение до 4 портов. Входы 100 и 101 могут быть аналоговыми (RA3 может быть использован как вход АЦП AN3) ну и оставшийся адрес 110 может быть использован для другого пользовательского входа...

_________________
:dj: https://mastodon.social/@Shaos


04 Mar 2019 17:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Начал городить прототипчик для RC2014 из старой макетной платки

Продолжаю городить...


Attachments:
sidekick-proto2.jpg
sidekick-proto2.jpg [ 190.88 KiB | Viewed 7553 times ]

_________________
:dj: https://mastodon.social/@Shaos
15 Mar 2019 00:11
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 11 posts ] 

Who is online

Users browsing this forum: No registered users and 5 guests


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:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.