Сообщество - TECHNO BROTHER

TECHNO BROTHER

2 083 поста 13 661 подписчик

Популярные теги в сообществе:

333

Радио модули NRF24L01 (ARDUINO)

Радио модули NFR24L01 работают в диапазоне частот 2.4-2.5 ГГц, поддерживают передачу данных до 2 Мбит/с и могут работать на 125 каналах. Радио модули выпускаются малой мощности (до 100 метров или около 30 метров в помещении) и с усилителем к которому можно подключить внешнюю антенну (до 1000 м).

Один модуль способен поддерживать связь сразу с шестью приемниками или передатчиками, то есть можно объединить сразу семь устройств в общую радиосеть на частоте 2,4 ГГц. Скорость беспроводного соединения можно настраивать: 250kbps, 1Mbps или 2Mbps, а так же можно изменять мощность в пережиме передатчика от -18dBm до 0dBm.

Основные параметры радио модуля NRF24L01

  • Напряжение питания от 1.9 В до 3.6 В

  • Потребляемый ток при мощности 0dBm 11.3 мА

  • Потребляемый ток при передачи 2 Мбит 13.5 мА

  • Частота 2,4 – 2,525 ГГц

  • Скорость передачи: 250 Кбит, 1 Мбит или 2Mбит

  • Программируемая выходная мощность: 0, -6, -12 и -18 dBm

Схема подключения

При передачи сигнала радио модуль NRF24L01 кратковременно может потреблять большой ток, поэтому рекомендуется по питанию установить электролитический конденсатор емкость от 10 до 220 мкФ.

В статье будет рассмотрено несколько простых примеров использования радио модулей, возможности радио модулей NRF24L01 достаточно большие и они могут применяться в различных системах беспроводной связи, беспроводного контроля доступа, в охранных системах, домашней автоматике и тд.

Перед загрузкой скетчей Вам понадобятся следующие библиотеки:

Тестовый скетч

В этом примере один радио модуль работает в качестве передатчика, а другой в качестве приемника. Передатчик передает два числа, а приемник принимает сигнал и выводит в монитор порта эти числа.

ПЕРЕДАТЧИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN)

int data[2]; 

void setup(){

radio.begin();

radio.setChannel(5); // канал от 0 до 125

radio.setDataRate (RF24_1MBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel (RF24_PA_HIGH); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm

radio.openWritingPipe (0xA0A0A0A001);

}

void loop(){

data[0] = 1234;

data[1] = 5678;

radio.write(&data, sizeof(data));

delay(1000);

}

ПРИЕМНИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN) 

int data[2]; 

void setup(){

delay(1000);

Serial.begin(9600);

radio.begin();

radio.setChannel(5); // канал от 0 до 125 radio.setDataRate (RF24_1MBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel (RF24_PA_HIGH); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm r

adio.openReadingPipe (1, 0xA0A0A0A001);

radio.startListening (); // radio.stopListening ();

}

void loop(){

if(radio.available()){

radio.read(&data, sizeof(data));

Serial.println(data[0]);

Serial.println(data[1]);

} }

Управление 4-я реле

В этом примере можно управлять включением и выключением 4-х реле или других исполнительных уст-в. В передатчике используются 4 кнопки, при нажатии на кнопку в приемнике меняет логическое состояние один их выходов к которому можно подключить модуль реле.

ПЕРЕДАТЧИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN) 

int data_reg;

bool w1,w2,w3,w4; 

void setup(){

delay(1000);

Serial.begin(9600);

radio.begin();

radio.setChannel(5); // канал от 0 до 125

radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel(RF24_PA_MIN); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm

radio.openWritingPipe(0xA1A1A1A102);

pinMode(2,INPUT_PULLUP);

pinMode(3,INPUT_PULLUP);

pinMode(4,INPUT_PULLUP);

pinMode(5,INPUT_PULLUP);

}


void loop(){

if(digitalRead(2)==LOW && w1==0){

w1=1;

data_reg |= (1<<0);

delay(200);

}

if(digitalRead(2)==LOW && w1==1){

w1=0;

data_reg &=~(1<<0);

delay(200);

if(digitalRead(3)==LOW && w2==0){

w2=1;

data_reg |= (1<<1);

delay(200);

}

if(digitalRead(3)==LOW && w2==1){

w2=0;

data_reg &=~(1<<1);

delay(200);

if(digitalRead(4)==LOW && w3==0){

w3=1;

data_reg |= (1<<2);

delay(200);

}

if(digitalRead(4)==LOW && w3==1){

w3=0;

data_reg &=~(1<<2);

delay(200);

if(digitalRead(5)==LOW && w4==0){

w4=1;

data_reg |= (1<<3);

delay(200);

}

if(digitalRead(5)==LOW && w4==1){

w4=0;

data_reg &=~(1<<3);

delay(200);

radio.write(&data_reg, sizeof(data_reg));

Serial.println(data_reg);

delay(100);

}

ПРИЕМНИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN) 

int data_old,data;

unsigned long times; 

void setup(){

delay(1000);

Serial.begin(9600);

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

pinMode(4,OUTPUT);

pinMode(5,OUTPUT);

radio.begin();

radio.setChannel(5); // канал от 0 до 125 radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel(RF24_PA_MIN); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm

radio.openReadingPipe(1, 0xA1A1A1A102);

radio.startListening();

}

void loop(){

if(radio.available()){

radio.read(&data, sizeof(data));

Serial.println(data); 

if(((data >> 0) & 1) ==1){

digitalWrite(2,HIGH);

}

else{digitalWrite(2,LOW);

}

if(((data >> 1) & 1) ==1){

digitalWrite(3,HIGH);

}

else{digitalWrite(3,LOW);

}

if(((data >> 2) & 1) ==1){

digitalWrite(4,HIGH);

}

else{digitalWrite(4,LOW);

}

if(((data >> 3) & 1) ==1){

digitalWrite(5,HIGH);

}

else{

digitalWrite(5,LOW);

} } }

Примеры использования

Электронный термометр DS18B20

В следующем примере к передатчику подключен цифровой датчик температуры DS18B20, передатчик передает температуру, а приемник выводит ее на дисплей LCD1602_I2C. В момент получения информации на экран выводится символ «*».

Терморегулятор

Во всех выше показанных примерах радио модули разделены на приемники и передатчики, в это примере каждый радио модуль работает как приемопередатчик.

Базовый модуль терморегулятора содержит дисплей LCD1602 с модулем I2C и энкодер для установки температуры регулирования. Модуль датчика и управления нагревательным элементом измеряет температуру и каждые 2 секунды передает ее значение в базовый модуль, базовый модуль получает значение температуры и выводит ее на дисплей, при помощи энкодера в базовом модуле можно изменить температуру регулирования, температура регулирования каждые 2 секунды передается в модуль датчика. Оба модуля основное время работают как приемники и раз в 2 секунды переходят в режим передатчика передавая необходимую информацию. Модуль датчика в зависимости от текущей температуры и температуры регулирования управляет цифровым выходом D3 к который может управлять нагревательным элементом.

  • Температура регулирования

  • Индикатор получения информации (в момент приема выводится символ *)

    Скетчи - http://rcl-radio.ru/?p=128866

Показать полностью 7
35

Аудиопроцессор PT2315 (Arduino)

ИМС PT2315 (аналог TDA7315) представляет собой простой стерео аудиопроцессор, который позволяет регулировать громкость и тембр.

Основные параметры аудиопроцессора PT2315:

  • Напряжение питания от 6 до 10 В

  • Ток потребления от 30 до мА

  • Максимальное входное напряжение 2,5 Vrms

  • Коэффициент гармоник 0,07 %

  • Разделение каналов 85 дБ

  • Отношение сигнал/шум 95 дБ

  • Регулировка громкости от -70 до 0 дБ с шагом регулировки 1,25 дБ

  • Регулировка тембра (BASS, TREBLE) ±14 дБ с шагом регулировки 2 дБ

  • Аттенюаторы выходов (CHL, CHR) от 0 до 30 дБ с шагом регулировки 1,25 дБ

  • Управление I2C

Библиотека — https://github.com/liman324/PT2315.git

Тестовый скетч:

#include <Wire.h>

#include <PT2315.h> 

PT2315 pt; 

void setup() {

Serial.begin(9600);

delay(600);

audio();

void loop() {  }

void audio(){

pt.set_volume(0); // int 0...56 === 0...-70 dB step 1.25 dB

pt.set_att_l(0); // int 0...24 === 0...-30 db step 1.25 dB

pt.set_att_r(0); // int 0...24 === 0...-30 db step 1.25 dB

pt.set_loudness(1); // bool 0...1 = on...off

pt.setBass(0); // int -7...+7 === -14...+14 dB step 2 dB

pt.setTreble(7); // // int -7...+7 === -14...+14 dB step 2 dB

}

На базе Adruino Nano используя аудиопроцессор PT2315 можно собрать простой регулятор громкости и тембра.

Регулятор громкости позволяет регулировать громкость, тембр НЧ, тембр ВЧ и баланс, так же поддерживает функцию MUTE.

ИК пульт дублирует работу энкодера и кнопу MUTE. Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:

#define IR2 0x2FDB24D // button encoder

#define IR3 0x2FDF00F // mute

#define IR4 0x2FD906F // >>>

#define IR5 0x2FDF20D // <<<

Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.

Скетч http://rcl-radio.ru/?p=128899

Показать полностью 5
26

АЦП AD7793 (Arduino)

AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами.

АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ. Так имеет два выхода стабилизированного тока для питания термометров сопротивления.

Входное напряжение АЦП ограничено напряжением опорного источника питания которое может иметь значения 1,25 или 2,5 В. В данной статье рассмотрен пример использования внутреннего источника опорного  напряжения которое имеет значение 1,17 В.

АЦП имеет три дифференциальных входа, вход IN3 может использоваться как вход для подачи внешнего опорного напряжения. Входы АЦП могут работать в дифференциальном и несимметричном режиме.

Схема подключения к Arduino

Характеристики AD7793:

  • Напряжение питания цифровое от 2,7 до 5,25 В

  • Напряжение питания аналоговое от 2,7 до 5,25 В

  • Эффективное разрешение до 23 бит

  • Ток потребления 400 мкА

  • Ток потребления в режиме ожидания не более 1 мкА

  • Частота измерения от 4,17 Гц до 500 Гц

  • 3 дифференциальных входа

  • Внутренний источник опорного напряжения 1.17 ± 0.01%

  • Режим измерения напряжения аналогового питания

  • Встроенный датчик температуры (точность ±2°С, необходима калибровка)

  • Самокалибровка шкалы измерения и нуля

  • Два источника тока для питания датчиков

  • Встроенный программируемый усилитель входного сигнала с множителем от 1 до 128

Разрешение в зависимости от множителя входного усилителя (bit) и режима работы входа (Uref = 2.5 V)

несимметричный (дифференциальный) вход

Разрешение в зависимости от множителя входного усилителя (мкВ) (Uref = 2.5 V)

Управление АЦП 4-проводное SPI, используются пины CS, DOUT, DIN, SCLK. Режим работы шины SPI показаны на рисунках (чтение/запись)

В режиме записи данных в регистр сигнал разрешения работы CS необходимо перевести низкий уровень, далее подавать синхроимпульсы SCLK одновременно с данными DIN, запись битов происходит на восходящем фронте синхроимпульса.

При чтении после перевода сигнала разрешения работы CS в низкий уровень необходимо дождаться сигнала готовности АЦП, как только уровень DOUT/RDY станет низким, можно считывать данные. Считывание бита происходит на восходящем фронте синхроимпульса.

Управление АЦП осуществляется через несколько регистров, некоторые из них доступны для записи и чтения, другие только для чтения:

Communications Register During a Write Operation — регистр связи (Write)

При записи или чтении регистров сначала необходимо воспользоваться регистром связи. В нем задается адрес для чтения или записи последующего регистра.

Status Register During a Read Operation — регистр состояния (Read)

  • RDY — бит готовности АЦП к считываю данных

  • ERR — ошибка считывания

  • 0/1 — тип чипа (AD7792/AD7793)

  • CH0…CH2 — индикатор активного входа

Mode Register — регистр режима (Raad/Write)

16-и битный регистр содержит основные настройки работы АЦП

  • U/B — дифференциальный / несимметричный вход

  • G0…G2 — коэффициент усиления усилителя

  • BUF — буферизация

  • REFSEL — выбор внутреннего или внешнего источника опорного напряжения

Data Register — регистр данных (Read)

24-х битный регистр данных, доступен только для чтения

ID Register — Идентификационный регистр (Read)

Идентификационный номер для AD7792/AD7793 сохраняется в реестре идентификаторов.

IO Register — (Raad/Write)

Регистр для управления источниками тока.

OFFSET Register — регистр смещения (Raad/Write)

24-х битный регистр, содержит коэффициент смещения шкалы.

FULL-SCALE Register — масштабный регистр (Raad/Write)

24-х битный регистр, содержит калибровочные коэффициенты шкалы.

Ниже показан пример скетча позволяющий провести измерения напряжения аналогового питания, напряжение подаваемое на вход 1 с множителем 16 работающего в дифференциальном режиме, а так же напряжение встроенного датчика температуры.

Читать дальше - http://rcl-radio.ru/?p=128932

Показать полностью 10
46

Легендарный радиоприемник Советского Союза. VEF 12

Сегодня я расскажу наверно о самом известном и популярном советском радиоприемнике - это ВЭФ 12. Он является продолжением не менее известной линейки радиоприемников под общим именем "Спидола".

Радиоприемник выпускался с 1967 года на Рижском электротехническом заводе ВЭФ. Он, как и его предшественники собран на 10 транзисторах, но внешний вид, схема, компоновка узлов и деталей значительно отличаются.

Для улучшения звуковых характеристик в приемнике установлен громкоговоритель 1ГД-4 эллиптической формы. Шкала настройки стала более растянутой и получила подсветку, которая включалась кнопкой на передней панели.

В нижней части боковой панели появился регулятор тембра по высоким частотам, чего не было на предыдущих моделях. Приемник получил более надежный барабанный переключатель диапазонов.

Во внешнем оформлении стало больше металлических деталей и молдингов, что в сочетании с глянцевой поверхностью пластикового корпуса сделало его внешне более эффектным.

На задней панели приемника появилось гнездо для подключения магнитофона или внешней активной акустической системы и гнездо для подключения наушников. Питание приемника осуществлялось от 6 элементов 373, которого хватало до 200 часов работы. Одним из недостатков приемника являлась задняя крышка, она изготавливалась из белой пластмассы и практически на всех приемниках со временем ее поверхность деформировалась, небольшая деформация есть и на моем экземпляре. На следующей модели приемника ВЭФ-201 эта проблема была решена.

В радиоприемнике две встроенные антенны: магнитная антенна для приема ДВ и СВ, а также внешняя телескопическая антенна для приема Кв диапазона. Также имеется гнездо для подключения внешней антенны.

Стоил радиоприемник 93 рубля 02 копейки, но не смотря на это пользовался огромной популярностью у радиолюбителей. Выпускался и экспортный вариант приемника с диапазоном 13 метров.

Популярностью можно объяснить и огромный тираж этого радиоприемника, уже в 1970 году был выпущен миллионный экземпляр ВЭФ 12!

Радиоприемник ВЭФ и сегодня пользуется популярностью у коллекционеров, хоть и слушать в эфире сейчас особо нечего.

Но если у вас есть желание послушать эфир, радиолюбителей, то советую обратить внимание на действительно народный и популярный приемник Degen DE-1103, он уже много лет пользуется заслуженной популярностью у радиолюбителей. Китайские производители достаточно часто радую радиолюбителей хорошими приемниками, чего не скажешь об отечественных производителях. А ВЭФ 12 лучше поставить на полку как исторический экспонат.

Показать полностью 16
340

Процессор, который использовался в «Тетрисе»: на каких SoC работала недорогая микроэлектроника в 90-х?



В наше время большинство портативных устройств работает на базе достаточно мощных микроконтроллеров, которые способны запускать даже интерпретируемый код на Lua/Python. Чего уж там говорить — даже современная кофеварка или умный электрочайник может быть в разы мощнее оригинального IBM-PC, не говоря уже о автомобильных бортовых компьютерах, которые зачастую мощнее топовых ПК из начала нулевых. Но давайте вспомним конец 90-х и начало 2000-х, когда разработка собственной электроники была практически недоступна рядовому пользователю, а микроконтроллеры программировались в основном только на ассемблере. Недавно я нашёл некоторую информацию о том, какой процессор вероятно использовался в таких знакомых нам приставках Brick Game, которые мы называли «Тетрисами»! Более того, мне удалось найти полный даташит с описанием всех модулей этого процессора, который гордо можно назвать «система на кристалле». Какой была разработка микроэлектроники в 90-х? Читайте в статье!

❯ Немного о «Тетрисе»


Пожалуй, Тетрис или Brick Game был одной из самых популярных портативных игровых консолей в странах СНГ. Появившись где-то в конце 90-х, этот гаджет быстро стал бестселлером среди детишек благодаря наличию сразу нескольких игр, полноценного ЖК-экрана, звука и невероятной дешевизны. Не знаю, сколько Тетрис стоил в момент выхода, но в нулевых цена на него была крайне низкой — около 100-200 рублей в зависимости от корпуса. Типичный школяр мог накопить на собственный Тетрис за несколько недель, что делало его самым доступным игровым девайсом на рынке.



Конечно же, на рынке уже были различные консоли с гораздо более богатым функционалом — например GameBoy и даже GameBoy Color с цветным дисплеем, а люди, родившиеся в конце 90-х или начале 2000-х уже застали PlayStation Portable с реально крутой 3D-графикой и телефоны с хорошим игровым потенциалом — как, например, SE K500i. Однако цена на них была непозволительной роскошью для небогатых семей: PSP стоила 250$ (около 7-8 тысяч рублей по тому курсу), плюс каждый UMD-диск с игрой стоил около 1.000 рублей, GameBoy были относительно редкими в России, а телефоны — это всё же прерогатива более юных ребят, да и в нулевых далеко не всем перепадал крутой K500i — чаще всего покупали телефон попроще типа Siemens A55 (грузчика помним?) или Motorola C350 (а мотоциклиста?). Поэтому тетрисы оставались чуть ли не единственным средством развлечения у небогатых ребят.



Ощутимым плюсом было и то, что Тетрис работал от батареек: они были не слишком дорогими в то время, а если носить с собой в кармане парочку, то можно не бояться, что консоль сядет в долгой дороге и продолжать себя забавлять, да и сам Тетрис работал довольно долго, мне хватало на неделю игры (может и меньше). Несмотря на низкое разрешением всего в 10x20 пикселей, Тетрис обладал достаточно большим монохромным дисплеем без подсветки, на котором было комфортно играть.
Ещё одним немаловажным плюсом консоли была возможность «кооперативной» игры и эдакого азарта: будучи неискушенными детьми, многие из нас пытались поставить рекорды и выбить как можно больший счёт в каждой из доступных игр. Чем больше счёт, тем ты круче среди друзей!



Но что же у Тетриса «под капотом»? На чём он работал внутри? Недавно я нашёл информацию о том, что потенциально в Тетрисе могла использоваться 4х-битная система на чипеHoltek HT1130, которая использовалась в самой разной носимой электроники: от часов на батарейках, до полноценных игровых консолей. Причём я ничуть не преувеличиваю, это действительно SoC: уже в 90-х, тайваньская компания смогла объединить звуковой модуль, контроллер ЖК-дисплея, ввод/вывод и таймер в один чип! Однако тут важно понять, что 100% сказать, на чём работал Тетрис, нельзя — процессор спрятан под компаундом и у него нет корпуса с маркировкой, лишь «голый» кристалл. Тем не менее, мы можем предположить, что это был один из чипов Holtek и посмотреть, на чём же работала портативная электроника тех лет поближе!

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



На данный чипсет есть «утёкший» в сеть даташит с полным описанием регистров микроконтроллера и его ТТХ. Чип был спроектирован так, чтобы не требовать практически никакой обвязки в виде конденсаторов/резисторов и других SMD-элементов — он работал фактически напрямую от пальчиковых батареек и его легко было развести на плате даже начинающему инженеру. Микроконтроллер стабильно оперировал при напряжении от 2.4в до 3.3в, что позволяло просто вставить две последовательно соединенные AA или AAA батарейки с напряжением 1.5-1.6в и получить необходимое питание для работы всей «приставки».

❯ Вычислительное ядро


Саму систему на кристалле можно разделить на несколько соединенных модулей в один чип. Основным, конечно же, является 4х-битное вычислительное ядро неизвестной архитектуры, которое компания Holtek разработала сама или лицензировала как IP-ядро у другой компании для использования в собственном чипе (как, например, MediaTek лицензирует у ARM ядра Cortex). Система команд, по крайней мере, описание мнемоник ассемблера в даташите наводят на мысли о некоторой схожести с микроконтроллером Intel 8051 (однако 8051 был 8-битным) и в целом, напоминают типичную интеловскую архитектуру из 80х. Однако только по мнемоникам точно определить архитектуру невозможно: здесь есть «проприетарные» команды типа SOUND и TIMER.


Чип работает на частоте 1мгц от встроенного тактового генератора, большинство команд выполняется за один такт, максимум — два. Если говорить совсем грубо, то даже ATMega328 в Arduino условно в 16-раз мощнее HT1130, хотя это совсем некорректное сравнение.

Длина машинного слова HT1130 — 4 бита, что отсылает нас в начало 70х годов, если мы говорим о компьютерах. Это означает, что процессор «аппаратно» мог выполнять операции только с числами от 0 до 16, хотя при программной реализации мог пересчитывать хоть 32х-битные числа. Ширина шины данных — 12 бит, что позволяло адресовать вплоть до 4Кб встроенной ROM-памяти. Кроме того, в МК было встроено 128 ячеек оперативной памяти (или 64 байта), где в00H..7FHхранились временные данные программы (например, позиция танчиков на экране) и сE0H..FFHхранился «буфер» кадра, который определял текущую на экране. Также у микроконтроллера были следующие регистры:

  1. R0-R4 — регистры общего назначения. Пары из регистров используются для адресации памяти.

  2. ACC — регистр-аккумулятор, который хранит результаты текущей операции.

  3. PC — указатель на текущую инструкцию в ROM, которую выполняет процессор.

  4. Стековый регистр — судя по всему, «невидимая» связка регистров, которую процессор использует для хранения PC при вызове функций. Ограничен максимум двумя адресами, что не даёт возможность писать программы с вложенностью более двух функций.


С стековым регистром всё интересно получается. В отличии от привычных нам архитектур, HT1130 не хранит в этом регистре указатель на память, он сам по себе как-бы является стеком. Пример допустимого и недопустимого кода:

Выбор 4х-битного процессора очевиден — они очень недорогие в производстве и достаточно простые. Примеры использования 4х-битных архитектур можно найти даже в советских играх: например, в игре «Волк и яйца» (клоне Nintendo Game & Watch) использовалась «микроЭВМ» КБ1013ВК1-2.
В встраиваемой и переносной электронике, 4х-битные вычислительные ядра продолжают использоваться и сейчас: в калькуляторах, в пультах для управления техникой, в часах. Связано это с простой и дешевизной подобных решений, да и если честно, реализация этих устройств была готова ещё в прошлом веке. Зачем дополнительно тратить деньги на R&D существующих решений? :)

❯ Графика


HT1130 специально разрабатывался для переносимых устройств с новомодными LCD-дисплеями. В те годы было нормой, когда на дисплейной матрице не было собственного контроллера с распространенным интерфейсом по типу 8080 или MIPI: частенько, драйвер дисплея либо выделялся в отдельный чип, либо реализовывался прямо в системе на кристалле. У Brick Game был дисплей разрешением в 10x20 пикселей, причём кастомизированный — с «захардкоженными» значками и сегментными индикаторами:



Работа с дисплеем была не особо сложной: один сегмент памяти был отведен специально под эдакий «фреймбуфер» — всё, что мы записывали туда, контроллер дисплея моментально отображал на нашу ЖК-матрицу. Поскольку дисплей был одноцветным, без градаций цвета, память была организована 1 бит — 1 пиксель. Работать со всем этим было как-то так:

MOV A, 0 ; Первая часть адреса (если я не напутал endianness)

MOV R1, A

MOV A, 0b0111 ; Вторая часть адреса. Не удивляйтесь, что по факту получается 224 при 128 байт ОЗУ - часть адресного пространства была как-бы зарезервирована

MOV R0, A

MOV A, 1 ; Закрасим первый пиксель в строке

MOV [R1R0], A ; И запишем это значение в ОЗУ

Частичным доказательством того, что этот чип мог использоваться в Brick Game — это то, что компания Holtek производила готовые «игры на кристалле» — вероятно, уже запрограммированные с завода HT1130 с определенными играми:



Примечательно, что даташит на готовые игры датируются ноябрём 1998 года, в то время как даташит на HT1130 — 1999. Если у вас появился Тетрис раньше этого времени — напишите пожалуйста в комментариях!

❯ Звук


Помимо этого, чипсет имел собственный генератор звука, или как вы вероятно подумаете — «пищалку». В чип (или SDK, если честно, не особо понятно из даташита) была уже встроена звуковая библиотека — причём половину из них как раз таки для игр, что ещё раз косвенно подтверждает догадки об использовании этого чипа в «Тетрисе». Всего поддерживалось до 16 «каналов», в которых было по 3 тональности. В звуковой библиотеке содержались следующие звуки:

  • Шумы

  • Мелодии

  • Выстрелы

  • Будильники



Управлять звуковым трактом было очень просто — буквально несколькими командами на ассемблере. Команда SOUND <номер канала> выбирала один из предопределенных звуков (причем не совсем ясно, где они хранились — возможно в ROM), а команда SOUND ONE/LOOP воспроизводила его в одном из режимов — один раз или повторяющийся. SOUND OFF же выключала звук совсем. Как-то так:

play:

SOUND A

SOUND ONE

SOUND OFF

CLC ; А если нет, то снова выполняем, пока не переполнится, эта операция очищает флаг переноса

loop:

INC A ; Увеличиваем значение в аккумуляторе

JC play ; Если флаг переноса установлен, то наш "таймер" как-бы переполнился и пора снова проиграть звук

JMP loop;

Совсем немудрено, согласитесь? :)

❯ Порты ввода/вывода и кнопки


Кроме этого, HT1130 имел несколько портов ввода-вывода, которые, однако, назвать GPIO нельзя — было 12 портов для вывода, которые могли читать логический уровень (для кнопок), и 4 пина, который мог задавать логический уровень (например, управлять вибромотором или светодиодом). Настройки портов задавались с помощью флагов: можно было настроить встроенные pull-up резисторы и они могли вызывать прерывания при переходе из высокого уровня в низкий.



Выходной порт мог быть сконфигурирован под тип выхода — CMOS или NMOS. Работа с портами шла с помощью команд IN и OUT — как в x86, а обрабатывать их можно было как-то так:

loop: IN A,0b00110010 ; Загрузить в аккумулятор значение порта PM

AND A,0b0001 ; Отсекаем биты состояний других кнопок и проверяем, нажата ли первая кнопка?

JNZ A, btn_pressed ; Если в аккумуляторе не 0 (а значит кнопка нажата) - то переходим на другую метку

JMP loop ; Если нет - то проверяем по новой

btn_pressed:

SOUND 0

SOUND ONE ; Воспроизвести звук при нажатии


❯ Таймер


В чипсете есть встроенный таймер — ну его ж не просто так для часов использовали. :) Основная суть работы аппаратных таймеров заключается в том, что его тактирует какой-либо внешний тактовый генератор с определенным делителем, в нашем случае — от 1 до 6 относительно системного генератора частоты (т.е 1мгц) и с определенной частотой он делает инкремент внутреннего регистра. Как только регистр переполняется — он очищается и вызывается соответствующее прерывание в основном процессоре.

Это позволяет регулировать скорость работы таймера, а посчитать количество тиков в таком случае не особо сложно. Однако учтите, что чем выше делитель таймера (а значит и обратно-пропорционально снижается точность таймера) — тем реже вызываются прерывания и меньше «кушают» наше процессорное время!

❯ Можно ли написать свою программу для Тетриса?


К сожалению, написать какую-нибудь свою игру для этой консоли в домашних условиях невозможно — таких удобных инструментов для прошивки, как у AVR ещё не было. Holtek предлагала собственный SDK, в которое входила IDE, ассемблер и симулятор отладки финальной программы. Однако дабы получить настоящее «хардварное» устройство, необходимо было заказывать у компании Holtek производство кастомизированного чипа с вашей программой на борту.

Чипсет использовал настоящую масочную Read-Only Memory, которая прожигалась один раз и навсегда на заводе. Производитель электроники отсылал скомпилированную программу Holtek, а они в свою очередь производили кастомный чип с прошитой программой. Несмотря на всю простоту ассемблера и устройства в целом, самому под него ничего написать не получится — внешних шин то у него нет. :(

Однако, в наше время можно разработать и собрать «Тетрис» самому: в том числе, с цветным дисплеем и на базе гораздо более мощного железа! Тут тебе и готовые мощные микроконтроллеры, и возможность собрать приставку на базе легендарного процессора Z80, да при желании можно симулировать почти настоящий HT1130 на FPGA!

❯ Заключение


Разработка вычислительной и при этом недорогой электроники в 90-х было весьма веселым занятием. Несмотря на то, что устройства были на первый взгляд достаточно примитивными, в них всё равно крылось много разных нюансов, которые ограничивали программистов во многом.

Однако embedded-разработка тех лет была весьма интересной: когда полноценные игры вмещали в ПЗУ размером пару килобайт, на ремейки Space Invaders на современных движках весом в под сотню мегабайт смотришь с некоторой улыбкой. :)

Спасибо за наводку ресурсу retroscene:
Пост Legnahar, который один из первых опубликовал предположения насчет HT1130 и комментарию =A=L=X= под тем же постом.

Показать полностью 13
439

Самодельные радиолампы в домашней мастерской. Почему, зачем, какими средствами?

Фото 1. Одна из первых "наколенных" советских (?) радиоламп, знаменитая "Бабушка".

Фото 1. Одна из первых "наколенных" советских (?) радиоламп, знаменитая "Бабушка".

Эти, сугубо умозрительные, выводы-размышления здесь исключительно как некое «доброе дело» и надеюсь, что они могут стать дополнительным маленьким толчком в нужном направлении для увлеченного техническим творчеством человека.

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

Фото 2. Страница из той самой, чудом сохранившейся после всех моих скитаний, книги – О. Л. Бартновский. &#xAB;Первые шаги радиолюбителя&#xBB;. Изд. &#xAB;Советская школа&#xBB;, 1962 г. – двухламповый батарейный радиоприемник.

Фото 2. Страница из той самой, чудом сохранившейся после всех моих скитаний, книги – О. Л. Бартновский. «Первые шаги радиолюбителя». Изд. «Советская школа», 1962 г. – двухламповый батарейный радиоприемник.

Фото 3. Из той же книги – монтажная схема радиоприемника.

Фото 3. Из той же книги – монтажная схема радиоприемника.

Впечатляли самодельные конструкции из книжек – все самое интересное, снаружи корпуса, на виду! Ах как мечталось сделать нечто подобное, но были и изрядные опасения прослыть, как минимум, странным и несовременным (ко времени моей активной возни с паяльником, уже во всю применялись микросхемы), а для юношества, это смерти подобно. Уже в 90-х появилось несколько публикаций в журналах об усилителях для музыки, построенных на радиолампах и в таком же конструктиве – красивыми деталями наружу. К сожалению, это энтузиастическое поначалу движение, почти что целиком выродилось в сверхдорогие и/или снобизские околомеломанские понты.

Словом, удалось и с готовыми фабричными радиолампами немного поработать, проникнуться к ним уважением и любовью. Такого бывало наворотишь, что хоть святых выноси! Примечательно, что при этом, всегда и везде, самые выдающиеся конструкторы не могли преодолеть границы стеклянного баллона. Работа только снаружи, как в «горячей» камере. Любое нарушение внутренних элементов – перегоревшее ли соединение, потерявший ли эмиссию катод, межэлектродное замыкание – пытались преодолеть только снаружи, порой, весьма экзотическими и громоздкими способами, но внутрь, за флажки – ни-ни! Строгое табу, ни шагу на эту запретную волшебную территорию.

«Изготовление радиолампы – это же очень сложно!» - в ужасе воскликнут, воздев руки гору. Кто бы спорил – более- менее современное электровакуумное производство – сложный и весьма дорогостоящий процесс. Даже для обыкновенной лампы накаливания он насчитывает десятки операций где фигурируют высокие температуры, редкие и дорогие металлы, опасные реактивы и много-много специфической оснастки. Однако, однако. Вспоминая производство, мы говорим о современной конструкции радиолампы, обязанной быть миниатюрной, экономной, дешевой, долговечной, с высокими электрическими характеристиками, технологичной и повторяемой в массовом производстве. Время изготовления одного экземпляра должно быть минимально. Если мы попытаемся сделать прибор коммерческий, соперничающий с известными современными конструкциями, большую часть требований придется выполнять и познать всю тяжесть сопутствующих им проблем. Если же речь идет о конструкциях лабораторных, для развлечения и исследований, все перечисленное не имеют существенного значения. При этом, при этом, могут быть применены самые простецкие материалы и способы изготовления, в затылок, тоже никто особенно не дышит.

Представив себе такую работу, легко узнать в ней забавы энтузиастов на заре радио, а ознакомившись с их опытом, обнаруживается, что любой школьник сегодня может быть без особенного труда вооружен много лучше тогдашнего профессора – стекло-заготовки, способы и контроль нагрева, доступные материалы, относительно легкодоступный средний и даже высокий вакуум, отжиг, контроль, геттеры… И главное – изрядное количество литературы подробнейше освещающее все тонкости. Погрузившись в этот мир, невольно заражаешься и энтузиазмом предков-мастеров, готовых радиоволны, только что в ручную поштучно не переносить. И чем приходится заниматься - физика, химия, электроника, столярное, слесарное, стеклодувное дело – о-о! …а по ночам, как этакий Леонардо, смотреть в телескоп, сочинять стихи и размышлять о главном.

Рис. 4 Французский универсальный триод ТМ, выпускавшийся серийно в изрядных объемах с 1915 г.

Рис. 4 Французский универсальный триод ТМ, выпускавшийся серийно в изрядных объемах с 1915 г.

Горизонтальная компоновка триода оказалась проще и при этом более вибростойкой. Круглая колба досталась, скорее всего, от заимствования оборудования для производства осветительных ламп. Накал прямой, вольфрамовая нить -  0,7 А, 4 В. При типичных 40 В анодного напряжения и нагрузке 25 кОм - ток анода 2 мА, крутизна характеристики – 0,4 мА/В и коэффициент усиления – 10. Советские варианты ТМ были названы Р-5 и П7. 

Наконец скажут – «Зачем эта бессмысленная пещерная архаика во время существования нейронных сетей и частных полетов в космос? Регресс и деградация!» Отвечу так – сегодня, особенно отчетливо видно, что счастье или хотя бы удобная и беззаботная жизнь отдельного среднего индивидуума в обществе, от общего прогресса никоим образом не зависит, напротив, чем он от него дальше, тем для него же лучше. Пусть сомневающийся попытается трезво и более-менее честно вспомнить основные события-вехи за последние, хотя бы несколько десятилетий и вспомнить – стало ли его существование легче, увереннее, появилось ли больше времени для интересного досуга, видны ли контуры светлого будущего? Ну то-то.  И потом, при всей архаичности работ и результата, есть здесь и место для новых исследований – пленочные электродные системы, новые или комбинированные конструкции ионных вакуумных насосов, да мало ли! Опять же – существует движение и громадные клубы реконструкторов, отстреливающих из луков эльфов по загородным лесам. И никаких вопросов к ним нет – отдыхают люди душой от серых городских будней. Так и здесь.

Визуальные примеры для воодушевления. Современники - всем известный французский энтузиаст-коротковолновик и чешский юноша организовавший мини-производство газоразрядных индикаторов, есть и иные известные меньше.

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

Фото 5. Та самая &#xAB;Бабушка&#xBB; квартирной выделки, средствами кабинета физики и аптеки.

Фото 5. Та самая «Бабушка» квартирной выделки, средствами кабинета физики и аптеки.

На фото - вариант с двумя цоколями – в «мягких» лампах с невысоким вакуумом нити накала перегорали довольно быстро. Здесь, в одном баллоне две таких независимых нити. Перегорела одна – перевернул лампу и она отработает еще один срок.

Здесь уместно привести еще одно, внушительное и редкое собрание трудов отечественного, во истину, титана – Михаила Александровича Бонч-Бруевича – человека неординарного, отца русской ламповой промышленности. В бытность, ему тоже доводилось собирать первые свои радиолампы самыми непрезентабельными средствами и буквально проплавлять своим энтузиазмом извечную казенную стоеросовость начальства, что будет почище прочих неурядиц.

Фото 6. М. А. Бонч-Бруевич возле 25-кВт лампы собственной конструкции.

Фото 6. М. А. Бонч-Бруевич возле 25-кВт лампы собственной конструкции.

P. S. Интересующихся и сочувствующих располагающих литературой (книги, статьи, заметки) 1920-30-х годов касательно изготовления первых радиоламп, прошу поделиться.

Babay Mazay, октябрь, 2022 г.

Показать полностью 5 2
211

Ответ на пост «Было бы смешно, коль не было бы так грустно»2

Я вполне могу допустить (особенно хорошо зная эту кухню т.с. "изнутри"), что ВЕ92 туда был воткнут "чисто для галочки" . Но есть некторые соображения, на которые исходный скандальный материал ответов не дает.

Прежде всего, мы знаем что удаление чипа привело только к сохранению функции монитора. "картинку показывает".

Вполне логично, что ВЕ92 не сможет в реальном времени обрабатывать картинку (у него нету и соответсвующих LVDS интерфейсов для работы с матрицей и цифровыми видеовходами, и сам проц достаточно "дохлый" и памяти там даже на 1/10 полного кадра - близко не хватит и т.п.). Если он и выполняет какието функции то чисто сервисные. А вот сохранения сервисных функций - на как раз и не продемонстрировали. Судя по фотографии платы - к нему подведено подозрительно много дорожек, для "пустышки ". Теоретически он может обслуживать кнопочки (о нормальном фунциклировании OSD, после его замены перемычкой - я инфы не видел, более того на видео монитор подключают лежащим на столе экраном вниз, потом поднимают и показывают нам картинку, функиция ухода в спячку при отсутствии видео сигнала - скорее всего тоже не работала). Может обслуживать тот самый кардридер. Может просто обслуживать память параметров (при его отсутствии - например жестко загружаются умолчания).

Это все требует гораздо более внимательной проверки.

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

Собственно почему поставлен именно ВЕ92 - могу сказать: это единственный приличный отечественный контроллер "в плаcтике", а не в керамике, с ценой как у чугунного моста. Так то есть и аналоги например "атмеги" (которой дла подобной ерунды - более чем хватило бы) но в металлокерамических корпусах - они стоят в разы дороже чем ВЕ92. Ваш покорный слуга, в свое время сам его применял именно из этих соображений (приличный отечественный контроллер, не за овердохрена денег. Он такой один :D ).

Показать полностью
Отличная работа, все прочитано!