Генератор тактовых импульсов "Электроника МК-85"

Digital Equipment Corporation PDP-8 & PDP-11 (а также совместимые с последним советские ЭВМ на 1801ВМ1/2/3)

Moderator: Shaos

User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

piotr433 wrote: Мне заинтересовало, как микросхема Т36ВГ1 обрабатывает нештатное количество битов. Результаты проверки:
1. используются 8 последних битов адреса, все предыдущие игнорируются
2. используются 5 начальных битов данных, все следующие игнорируются
мы снова может выяснить, что функционал Т36ВГ1 может отличаться от типа применяемого процессора или даты выпуска...

ок. когда отлаживал код, то видел, что 5-ть бит добивается 3-мя нулями до 8-ми.
но, но не всегда.
когда мне захотелось зафильтровать всё, что больше 5-ти бит if (data <= 0x1F), то выяснилось, что программа TEST может писать data > 0x1F - подробности не выяснял.
piotr433 wrote:Так что вполне допустимо наличие 8 битов данных.
Piotr, ну я понимаю, что человек без логического анализатора - не может вызывать доверия в принципе.

допустим. О_О

но как же тогда происходит событие прерывания SPI? - которое просто не может происходить при получении менее 8-ми бит.
см. цитаты обработчика прерывания viewtopic.php?f=95&t=18901&p=146854#p146736

как может 5-ть бит второго байта протолкнуть 8-мь бит первого байта во второй корпус регистра?
см. схему https://klapautsiy.github.io/The-displa ... CD1602.png
иначе, 13-ть бит в в двух регистрах сдвига оказались бы размазанными по адресному пространству 8-бит регистров. но 2х8-бит оказываются каждый в своём корпусе ровно по адресам Q0-Q7.
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

пока отложил попытки заставить летать SPI на Arduino ATmega16.
будет настроение - попробую более современный контроллер ATmega328 или 88.
причины могут быть ровно две - древний конроллер, Arduino(где всё медленно и печально).

на настоящий момент полностью работоспособной считается версия с аппаратными регистрами сдвига.
User avatar
piotr433
Novelist
Posts: 49
Joined: 14 Aug 2018 14:30
Location: Szczecin, Польша

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by piotr433 »

мы снова может выяснить, что функционал Т36ВГ1 может отличаться от типа применяемого процессора или даты выпуска...
Я испытал 3 микросхемы:
Т36ВГ1-2 9004 ОП
Т36ВГ1-2 9105
КА1013ВГ2 9305
Результаты совпадают.
Piotr, ну я понимаю, что человек без логического анализатора - не может вызывать доверия в принципе.
Не обижайся, друг :)

Кстати, можно применить атмегу как логический анализатор:
1. ожидаем спада сигнала SYNC
2. в цикле читаем состояние PINB и записываем во внутреннее ОЗУ
3. передаём содержимое внутреннего ОЗУ через последовательный порт
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

piotr433 wrote:Кстати, можно применить атмегу как логический анализатор:
1. ожидаем спада сигнала SYNC
2. в цикле читаем состояние PINB и записываем во внутреннее ОЗУ
3. передаём содержимое внутреннего ОЗУ через последовательный порт
Piotr, не обижайтесь и вы - первый вариант контроллера дисплея просто останавливал процессор МК-85, пока что-то происходило в обработчике прерывания.
т.е. я имел возможность корректно остановить процессор в любом интересном мне месте и посмотреть уровни сигналов где угодно и чем угодно.
недостатком такого подхода было то, что в режиме турбо я получал лишний такт вместо немедленной остановки.
эта проблема и родила эту тему.

поэтому - можно, но уже не нужно.
User avatar
piotr433
Novelist
Posts: 49
Joined: 14 Aug 2018 14:30
Location: Szczecin, Польша

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by piotr433 »

OK, я не настаиваю :)
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

ок.
обработчик прерывания версии с регистрами:

Code: Select all

ISR(INT1_vect) { // SYNC изменился с "0" в "1".
address = ~PINA - 0x80;
data    = ~PINB;
if (address <= 0xE8 - 0x80) {LCD_MK85[address] = data; print_screen = 1;}
}
два 8-мь бит регистра объединены в регистр 16-ть бит.
16-ть бит сыпятся в 16-ть бит регистр.
если бы битов было не ровно 16-ть, то эта конструкция

Code: Select all

address = ~PINA - 0x80;
data    = ~PINB;
не работала бы правильно.
You do not have the required permissions to view the files attached to this post.
User avatar
piotr433
Novelist
Posts: 49
Joined: 14 Aug 2018 14:30
Location: Szczecin, Польша

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by piotr433 »

Да, убедительно. Спасибо!
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

таки, нашёл причину нестабильного приёма Arduino байтов по SPI .

что происходило:
внешне выглядело как конфликт прерываний/обработчиков прерываний.
их в коде - два.
но, как бы там ни было - один из двух становился бы в очередь и обработчик прерывания исполнялся бы чуть позже, но не настолько поздно, чем были бы приняты очередные 8-мь бит по SPI.
два обработчика прерывания в коде... но - НЕТ.
в Arduino существует ещё один, с временем исполнения достаточным, что бы быть причиной сбоев приёма данных по SPI:

Code: Select all

ISR(TIMER0_OVF_vect)

Code: Select all

TIMSK &= ~(1<<TOIE0); // disable timer0 overflow interrupt
отвалятся плюшки millis() и прочего системного времени, но кому оно в этом проекте нужно?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
потестирую и опубликую позже.
всем участникам, большое спасибо - все свободны.
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

отключил от прерываний и остановил все таймеры в Arduino ATmega16:

Code: Select all

TIMSK  = 0; // disable all timers overflow interrupt
TCCR0  = 0; // stop timer0
TCCR2  = 0; // stop timer2
TCCR1A = 0; // disable timer1
TCCR1B = 0; // stop    timer1
пока, тестовый полёт нормальный.

*кто в курсе, откуда ещё можно ожидать несанкционированной активности от Ардуино - просьба поделиться мудростью.
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

ок. контроллер дисплея на интерфейсе SPI взлетел и работает, но с этим вариантом протокола(1-й байт - 8-мь передаваемых бит, 2-й байт - меньше 8-ми передаваемых бит):
Image
будет несовместим.

версия на регистрах сдвига совместима с любым количеством принимаемых бит.

итого:
две версии контроллера дисплея.
1. чуть более сложная аппаратно, но совместимая со всеми известными вариантами протокола.
2. упрощённая и заточенная исключительно на приём 2 по 8-мь бит.
Last edited by Клапауций on 07 Sep 2018 09:02, edited 1 time in total.
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Alekcandr »

Вроде SPI не секретный протокол. Это чего за скрин (эту хрень какая программа сделала)? И в красном кружке? Ведь ничего не понятно.


По смыслу в красном кружке - что-то лишнее, но тем ни мение это не обнуляет выше сказазонное.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

Alekcandr wrote:Вроде SPI не секретный протокол. Это чего за скрин (эту хрень какая программа сделала)? И в красном кружке? Ведь ничего не понятно.


По смыслу в красном кружке - что-то лишнее, но тем ни мение это не обнуляет выше сказазонное.
если тему читать не с конца, а внимательно отсюда viewtopic.php?f=95&t=18901&start=45#p146702 то, всё станет понятно.

*заменил на картинко без пометок. "программа" называется: "логический анализатор подсматривает как в МК-85 процессор передаёт пиксели контроллеру дисплея".
Last edited by Клапауций on 07 Sep 2018 09:09, edited 2 times in total.
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Alekcandr »

Как тут вникнуться. Соседи с ремонтом отбили мне стенку с плиткой в ванной. Тут ходя бы свое доделать. ппц. :rotate:
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
Клапауций
Banned
Posts: 412
Joined: 29 Jun 2018 08:48

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by Клапауций »

Alekcandr wrote:Как тут вникнуться. Соседи с ремонтом отбили мне стенку с плиткой в ванной. Тут ходя бы свое доделать. ппц. :rotate:
фиг с ним с той плиткой - соседей не выбирают.
корову подои и спать.
User avatar
piotr433
Novelist
Posts: 49
Joined: 14 Aug 2018 14:30
Location: Szczecin, Польша

Re: Генератор тактовых импульсов "Электроника МК-85"

Post by piotr433 »

У меня возникла идея, как передать по SPI меньше 8-ми битов. После обнаружения нарастающего фронта на линии SYNC микропроцессор посылает на вход SCK дополнительные 3 импульса. Ниже приведена схема подключения и код обработки прерываний. Проверено на ATmega16 @ 16МГц, работает отлично.
sch.png

Code: Select all

#define OUT_SHIFT	3

ISR (SPI_STC_vect)
{
  address = ~SPDR - 0x80;
  SPCR &= ~(1<<SPIE);
}

/* called at the rising edge of the SYNC signal */
ISR (INT1_vect)
{
  if (address < 0x61)
  {
/* apply three SCK pulses */
    DDRB |= (1<<OUT_SHIFT);
    PORTB |= (1<<OUT_SHIFT);
    PORTB &= ~(1<<OUT_SHIFT);
    PORTB |= (1<<OUT_SHIFT);
    PORTB &= ~(1<<OUT_SHIFT);
    PORTB |= (1<<OUT_SHIFT);
    PORTB &= ~(1<<OUT_SHIFT);
    DDRB &= ~(1<<OUT_SHIFT);
    if ((SPSR & (1<<SPIF)) != 0)
    {
      buffer[address] = ~SPDR;
    }
  }
  SPCR &= ~(1<<SPE);
  address = 0xFF;	/* invalid address */
  SPCR |= (1<<SPE);
  SPCR |= (1<<SPIE);
}
You do not have the required permissions to view the files attached to this post.
Last edited by piotr433 on 07 Sep 2018 13:49, edited 1 time in total.