TEK 4010/4014 Vector Graphics Termin

Пито
Пт 14 июля 2017 г., 18:43
Терминалы старого стиля векторной графики все еще используются, по крайней мере, здесь :)
Вот TEK 4010/14, который вы можете получить на eBay, скорее всего,..

https: // www.YouTube.com/watch?v = Iztxeohhoym

Посмотрите на прекрасный способ, которым работали эти старые терминалы Vector Graphics.. 8-)

https: // en.Википедия.org/wiki/tektronix_4010

Чтобы попробовать с помощью графики на основе векторов дома, и сегодня вы можете попробовать простую демонстрацию ниже - все, что вам нужно, это чертежи или что -то в этом роде и терминал Teraterm, или что -то в этом роде.. :)

ОБНОВЛЕНИЕ: Добавлена ​​распечатка истекшего времени, добавлено джин, добавленные спрайты, добавленные определения для цветов, стилей линий и размеров шрифтов // A simple TEK4010/4014 Graphics Vector terminal - DEMO // You need ie. TeraTerm or Xterm switched into TEK4010/14 Emulation // The current vector's addressing is 1024x1024 (10bit) // // Loosely inspired by // http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/TEK4010/TEK4010gdisp.html // and other related information found on the web // // Provided as-is, no warranties of any kind are provided :) // by Pito 7/2017 #include "Arduino.h" void setup() { delay(3000); // Wait for USB Serial.begin(115200); } void loop() { // Draw some primitives on the screen for fun // Origin (0,0) is the left bottom corner, y| __x uint32_t elapsed = micros(); Tekcls(); Tekcolor(2); Tekgraph(4); Tekpoint(100, 100); Tekpoint(200, 100); Tekpoint(200, 200); Tekpoint(100, 200); Tekcolor(3); for (uint32_t i = 300; i < 500; i = i + 10) { Tekline(i, 400, i, 600); } Tekstyle(0); Tekline(300, 300, 500, 500); Tekstyle(1); Tekline(600, 400, 200, 300); Tekstyleb(2); Tekcolor(7); Tekplot(10, 700); Tekplot(500, 30); Tekstyle(3); Tekline(400, 600, 100, 800); Tekcolor(4); Tekstyleb(4); Tekplot(300, 330); Tekalpha(); Tekfont(1); Teklocate(700, 400); Tekcolor(6); Serial.println("Hello World !!"); Tekfont(2); Tekcolor(1); Teklocate(700, 300); Serial.println("STM32duino !!"); Tekfont(0); Tekcolor(2); Teklocate(500, 200); Serial.println("THIS IS A TEST OF TEK4014 !!"); Tekcolor(1); Tekstyle(0); Tekbox(300, 200, 600, 600); Tekcolor(2); Tekstyle(0); Tekdot(150, 150); uint32_t i; for (i = 0; i < 360; i++) { float q = i; q = 3.141592f * q / 180.0f; float r = cosf(q); q = sinf(q); q = q * 120.0f; q = q + 195.0f; r = r * 120.0f; r = r + 580.0f; Tekdot((uint16_t) r, (uint16_t) q); } Tekcolor(5); for (i = 0; i < 360; i++) { float q = i; q = 3.141592f * q / 180.0f; q = sinf(q); q = q * 150.0f; q = q + 195.0f; float r = i + 30.0f; Tekdot((uint16_t) r, (uint16_t) q); } uint32_t a = 450; for (i = 1; i < 34; i++) { Tekline(0, 450, 1000, a); a = a + 10; } Tekalpha(); Teklocate(400, 100); elapsed = micros() - elapsed; Serial.print("Elapsed: "); Serial.print(elapsed); Serial.println(" micros"); delay(5000); } // ******************************************************** // TEK4010/4014 basic 10bit commands library // For details consult the TEK4010/4014 manual // Pito 7/2017 for stm32duino // ******************************************************** // Colors for print, plot, dot #define black 0 #define red 1 #define green 2 #define yellow 3 #define blue 4 #define magenta 5 #define cyan 6 #define white 7 // Line styles #define solid 0 #define dotted 1 #define dash_dotted 2 #define short_dashed 3 #define long_dashed 4 // Font sizes #define large 0 #define normal 1 #define small 2 #define smallest 3 // Clear Tek screen void Tekcls() { Serial.write(0x1B); Serial.write(0x0c); //Serial.write(0x0d);Serial.write(0x0a); } // Select a color (0-7) void Tekcolor(uint8_t color) { Serial.write(0x1B); Serial.write(0x5b); Serial.write(0x33); Serial.write(0x30 + color); Serial.write(0x6d); } // Switch to graphical mode with a line style (0-4) void Tekgraph(uint8_t style) { Serial.write(0x1D); Serial.write(0x1B); Serial.write(style | 0x60); } // Select a font size (0-3) for printing alphanumeric strings // The actual font type has to be set in the Emulator void Tekfont(uint8_t fontsize) { Serial.write(0x1B); Serial.write(0x38 + fontsize); } // Normal style lines (0-4) void Tekstyle(uint8_t style) { Serial.write(0x1B); Serial.write(0x60 + style); } // Bold style lines (??) void Tekstyleb(uint8_t style) { Serial.write(0x1B); Serial.write(0x68 + style); } // Switch to alphanumeric mode void Tekalpha() { Serial.write(0x1f); } // Draw a point as a small cross (??) void Tekpoint(uint16_t x, uint16_t y) { Serial.write(0x1C); // FS Serial.write(0x20 + ((y >> 5) & 0x1F)); Serial.write(0x60 + ((y) & 0x1F)); Serial.write(0x20 + ((x >> 5) & 0x1F)); Serial.write(0x40 + ((x) & 0x1F)); } // Draw a single dot void Tekdot(uint16_t x, uint16_t y) { Serial.write(0x1D); // GS Serial.write(0x20 + ((y >> 5) & 0x1F)); Serial.write(0x60 + ((y) & 0x1F)); Serial.write(0x20 + ((x >> 5) & 0x1F)); Serial.write(0x40 + ((x) & 0x1F)); Serial.write(0x40 + ((x) & 0x1F)); } // Draw a line from (x1, y1) to (x2, y2) void Tekline(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { Serial.write(0x1D); // GS Serial.write(0x20 + ((y1 >> 5) & 0x1F)); Serial.write(0x60 + ((y1) & 0x1F)); Serial.write(0x20 + ((x1 >> 5) & 0x1F)); Serial.write(0x40 + ((x1) & 0x1F)); Serial.write(0x20 + ((y2 >> 5) & 0x1F)); Serial.write(0x60 + ((y2) & 0x1F)); Serial.write(0x20 + ((x2 >> 5) & 0x1F)); Serial.write(0x40 + ((x2) & 0x1F)); } // Continue with drawing a line to (x1, y1) void Tekplot(uint16_t x1, uint16_t y1) { Serial.write(0x20 + ((y1 >> 5) & 0x1F)); Serial.write(0x60 + ((y1) & 0x1F)); Serial.write(0x20 + ((x1 >> 5) & 0x1F)); Serial.write(0x40 + ((x1) & 0x1F)); } // Locate a point where to print a string void Teklocate(uint16_t x1, uint16_t y1) { Serial.write(0x1D); // GS Serial.write(0x20 + ((y1 >> 5) & 0x1F)); Serial.write(0x60 + ((y1) & 0x1F)); Serial.write(0x20 + ((x1 >> 5) & 0x1F)); Serial.write(0x40 + ((x1) & 0x1F)); Tekalpha(); } // Draw a box with left bottom corner at (bx, by) and top right corner at (tx, ty) void Tekbox(uint16_t bx, uint16_t by, uint16_t tx, uint16_t ty) { Tekline(bx, by, tx, by); Tekplot(tx, ty); Tekplot(bx, ty); Tekplot(bx, by); } // Draw small sprites void Teksprite(char* sprite) { Serial.write(0x1E); Serial.print(sprite); } // Go to the Graphics-IN mode void Tekgin() { Serial.write(0x1B); Serial.write(0x1A); }

Chismicro
Пт 14 июля 2017 г. 20:39
Интересно, я не знал, что Teraterm понимает tek4010/4014.
Некоторое время назад я адаптировал McURSES:
https: // github.com/chrismicro/mcurses

Пито
Сб 15 июля 2017 г. 9:04
Не только Teraterm понимает TEK4010/4014 Vector Graphics, но и «XERM» тоже.
Пользователи Linux могут попробовать..
Xterm: Эмуляция Tektronix 4014 также довольно хорошая. Он поддерживает 12-разрядную графическую адресацию, масштабируется до размера окна. Четыре разных размера шрифтов и пять типов линий поддерживаются. 12 -битная векторная адресация требует небольших изменений в подпрограммах (в настоящее время я использую 10 бит для X и Y), но позволяет рисовать на большой экране 4096x4096.. Вы вряд ли можете получить такой TFT, подключенный к вашему чертежу в ближайшее время.. : P

Пито
Сб 15 июля 2017 г. 12:26
И .корзин для F103 (96 КБ) с большим действием на экране..:)
Serialusb. Установите шрифт в Lucida или Consolas в окне TEK для лучшего ретро -образа ..
Tek4014_demo.rar
(48.92 киб) скачано 48 раз

Пито
Солнце 16 июля 2017 г. 7:10 утра
Обновлено выше корзина с новым драйвером USB. Вы должны получить около 61 млн. С первым экраном.

Chismicro
Пн 17 июля 2017 г. 9:12
Просто для развлечения я добавил вас, функциональные функции в Guipiitx:
https: // github.com/chrismicro/guipittix ... _wrapper.час
Теперь пример мигания светодиода и пример числа может стимулировать TEK-Display (динамически : D ).
Другие примеры требуют прикосновения, которого я не смог достичь с помощью Teraterm. Кажется, когда я нажимаю на окно Teraterm, оно не отправляет обратно позицию мыши.

Пито
Пн 17 июля 2017 г. 10:11
Чтобы получить положение мыши, вы сначала переключитесь в режим джина.
Не тестируется: // Go to the Graphics-IN mode void Tekgin() { Serial.write(0x1B); Serial.write(0x1A); }

Пито
Пн 17 июля 2017 г. 11:08
С помощью этого быстрого взлома вы можете увидеть данные от движений мыши и нажимать/нажимать кнопки в режиме джина: char b0, b1, b2, b3 , b4; Tekgin(); // set the Graphics-IN mode Teklocate(200, 600); // from here we want printout results while(1) { Tekgin(); // GIN mode if (Serial.available() > 0) b0 = Serial.read(); // Get pressed buttons/mouse code if (Serial.available() > 0) b1 = Serial.read(); // cross hair coordinates if (Serial.available() > 0) b2 = Serial.read(); // cross hair coordinates if (Serial.available() > 0) b3 = Serial.read(); // cross hair coordinates if (Serial.available() > 0) b4 = Serial.read(); // cross hair coordinates Tekalpha(); // go to alpha mode Tekfont(2); Tekcolor(6); Serial.print(b0, HEX);Serial.print(" "); // print out the stuff Serial.print(b1, HEX);Serial.print(" "); Serial.print(b2, HEX);Serial.print(" "); Serial.print(b3, HEX);Serial.print(" "); Serial.println(b4, HEX); delay(500); }

Пито
Пн 17 июля 2017 г. 11:33
Существует также «режим инкрементного сюжета» для рисования меньших «спрайтов» : P
Не тестируется. // Draw small sprites void Teksprite(char* sprite) { Serial.write(0x1E); Serial.print(sprite); }

Chismicro
Пн 17 июля 2017 г. 14:53
Пито, где вы нашли спецификацию?
Я нашел немного GitHub Resource что может быть полезно.

Пито
Пн 17 июля 2017 г. 15:52
Нет спецификации, только гуглить..
Вот флот, состоящий из 625 фрегатов типа 26, созданных Tekcolor(green); char* sprite; // Type 26 frigate sprite = "PAAAAAAAAAAAAAADDBBBDDBBBHHBBBDDBBBHHBBHH"; elapsed = micros(); for(i=100; i<600; i=i+20){ for(a=100; a<600; a=a+20){ Teklocate(i, a); Teksprite(sprite); } } elapsed = micros() - elapsed; Tekalpha(); Tekfont(normal); Teklocate(100, 50); Serial.print("Elapsed: "); Serial.print(elapsed); Serial.println(" micros");

Пито
Сб 22 июля 2017 г. 9:12
В качестве доказательства концепции, который я попробовал с терминалом TEK в качестве экрана анализатора спектра DIY (1024 точка CMSIS FP FFT).
Формирован моим старым Dyi Siggen в 12-битный ADC (Black F407ZE), вход ADC, центрированный с резисторами 2x 10K и в сочетании с Siggen с помощью Cap Cap 100 UF (все они наносят на ракушку без припоя, длинные провода, +Vref-это чернокожие VDD. ) и видео-потока, сделанное через Serialusb в терминал TEK (Teraterm Win7).
Терминал TEK идеально используется, Tekcls () и серийный.Печать чисел иногда вызывает короткое мигание, но рисование 512 спектров (линии или точек) само по себе является быстрым, в реальном времени. Избегание tekcls () и минимизации серийных.Печать сделает это в реальном времени.
Ниже сигнал греха ~ 30 кГц:
1. Уровень выходного генератора сигнала при нуле - вы можете увидеть, как все еще есть утечка сигнала с выхода Siggen, однако (шум шума - что -то вроде 200Vpeak).
2. с АЦП не переоборудованным
3. С АЦП переживаем..
Fft_siggen_1.jpg
Fft_siggen_1.JPG (36.85 киб) просмотрено 783 раза

Rogerclark
Сб 22 июля 2017 г. 10:41
Спасибо

Это может быть действительно полезно.

Поместить его в библиотеку будет следующим логическим шагом

Пито
Сб 22 июля 2017 г. 12:19
В первом посте есть обновленные процедуры. С определением для цветов, шрифтов и стилей линий.
Все еще должен быть разработан способ обновления контента экрана.
Моя идея состоит в том, чтобы переписать динамическую информацию на экране с предыдущей информацией, но с черными чернилами (с цветом фона), тем самым стирайте ее перед написанием нового.
Нравиться: Tekcolor(green); Teklocate(200,200); Serial.print("Hello World"); Tekbox(100,100,700,700); do_something(); // Delete the above info only, no Tekcls() Tekcolor(black); Teklocate(200,200); Serial.print("Hello World"); Tekbox(100,100,700,700); // .. deleted from screen ..

Пито
Сб 22 июля 2017 г. 12:48
Этот док
http: // vt100.net/docs/vt3xx-gp/глава13.HTML#S13.14
Показывает следующую таблицу - как отправляются координаты TEK, и как работает «короткая версия» отправки координат.

Ключевое сообщение здесь: последний байт (низкий x) - это байт, который запускает фактический луч и делает ничьей..
TEK включает в себя 5 -байт большой «видео буфера», где внутренняя логика обнаруживает верхние 2 бита («биты метки») входящих ASCII Chars (фактически бит 6 и 5 байта) и на основе последовательности и значения решает, что делать дальше.

Когда кто -то нуждается в режиме 12BITS 4K x 4K, дополнительный «дополнительный» байт с верхними битами каждых четырех координат должен быть отправлен в качестве второй координаты Y. Терминал должен обнаружить это автоматически и улучшить размер.
Примечание: мы еще не отправляем дополнительный байт.
TEK, кодирующий координаты.jpg
TEK кодирует координаты.JPG (72.9 киб) просмотрено 757 раз

Пито
Сб 22 июля 2017 г. 16:05
Удаление линий, перезаписывая их фоновыми чернилами работает отлично, перезапись Chars оставляет слабые артефакты, подобные здесь
Артефакты шрифта
Артефакты шрифта.JPG (15.58 киб) просмотрено 734 раза

Rogerclark
Сб 22 июля 2017 г. 9:42 вечера
Отличная работа..

Chismicro
Солнце 23 июля 2017 г. 5:44
Я пропустил исходный код?

Rogerclark
Солнце 23 июля 2017 г. 7:06 утра
Первый пост содержал большую часть кода

ViewTopic.PHP?F = 18&T = 2336#P31430

Rogerclark
Солнце 23 июля 2017 г., 7:25 утра
Я сделал это в библиотеку

Не идеально...

#defines должны быть свойствами

Пожалуйста, не стесняйтесь исправить это и в целом улучшить его

Пито
Солнце 23 июля 2017 г. 10:44
@Roger: Спасибо!
Следующими улучшениями могут быть:
1. Представляем IE Tekplotv и Tekploth - вертикальные и горизонтальные линии с коротким адресом
2. Tekbox с короткой адресацией
4. Представление 12 -битного режима
5. Говоря о «идеальной библиотеке» - самой сложной частью было бы создать механизм для перерисовки динамической информации на экране TEK, перезаписывая его фоновым цветом чернил и печатая новую.
Это в основном легко с парой значений, но когда вы рисуете много струн, массивов (в форме линий/точек/спрайтов), вы должны запомнить все «old_values», а когда они меняются и должны печатать Вы должны переписать их картинку с помощью Old_value (с фоновым цветом чернил) в одном и том же месте и распечатать новое значение с фактическим цветом чернил в одном и том же месте..
И это не только одно действие, похожее на сериал.print или tekplot (), но это может быть процесс - т.е. Чтобы перерисовать «спектр», «волны», маленькая картина..
Нелегко..
Конечно, есть обходной путь - вы можете tekcls () и нарисовать новую полную картину с новыми значениями, он достаточно быстро для большинства приложений.

Пито
Солнце 23 июля 2017 г. 12:08
Еще одна демонстрация, которую вы можете попробовать или добавить в библиотеку.

Rogerclark
Солнце 23 июля 2017 г. 11:10
Эта демонстрация сработала для меня нормально.

Я просто помещаю файлы библиотеки в папку внутри папки библиотек

Интересно, должна ли быть функция для отображения текста. Я знаю, что сериал.Печать и сериал.Println работает нормально, но кажется странным, чтобы не нужна конкретная команда TEK, чтобы сделать это

Я могу просто добавить Tek.Печать и Tek.println, который только что называется сериалом.Печать и сериал.println

Также я думаю, что может быть полезно передать последовательный порт в библиотеку в качестве жесткого кодировки на «серийный»

Пито
Мон 24 июля 2017 г. 8:24
Я могу просто добавить Tek.Печать и Tek.println, который только что называется сериалом.Печать и сериал.println Да, это нормально.
Есть одна проблема с серийным.Печать - он не может распечатать научную нотация - например: -3.45E-6.
Итак, мы должны что -то использовать, что может сделать..

PS: терминал TEK, когда в Alpha Mode (tekalpha ()) работает как стандартный «терминал на основе ЧАР».
Параметр размера шрифта (tekfont (), см. Наши определения в LIB) определяет его строки/объем Chars:

Большой - 35 строк из 74 символов
Нормальный - 38 строк из 81 символа
маленький - 58 строк из 121 символа
наименьшее - 64 строки из 133 символов

Используемый фактический тип шрифта может быть установлен в настройке TEK->Шрифт.
Цветная эмуляция и цвет фона могут быть установлены в настройке TEK -> Окно.

Chismicro
Пн 24 июля 2017 г. 8:42 утра
Я могу просто добавить Tek.Печать и Tek.println, который только что называется сериалом.Печать и сериал.println Я сделал это здесь.
Таким образом, все функции Adafruit-GFX используют терминал TEK в качестве выхода.

Пито
Мон 24 июля 2017 г. 8:52 утра
@Chris: Намейте The Tek терминал не очень хорошо подходит для примитивов, так как нет такой команды Afaik..
Adafruit ориентирован на пиксель, Tek ориентирован на вектор с помощью «Нарисуйте линию от A, B до C, D» в качестве единственного примитива графика..
Предполагаю, что демо -демоверсии с эмуляцией Tek Emulation может работать, но это займет много лет, я думаю :)

Пито
Мон 24 июля 2017 г. 10:22
Это тест режима альфа -терминала. // A simple TEK4010/4014 Vector terminal DEMO // You need TeraTerm or Xterm switched to TEK4010/14 Emulation // // Use fast Serial over USB for best experience // // Shows alpha terminal mode // // Provided as-is, no warranties of any kind are provided :) // by Pito 7/2017 #include "Arduino.h" #include "Tek.h" TEK tek; void setup() { delay(3000); Serial.begin(115200); } void loop() { uint32_t i; tek.Tekcls(); tek.Tekfont(normal); tek.Tekcolor(yellow); tek.Tekalpha(); tek.Teklocate(100, 700); for (i = 0; i < 20; i++) { Serial.println("Hello World from STM32duino!"); } delay(2000); tek.Tekcolor(cyan); char* sprite; // Type 26 frigate sprite = "PAAAAAAAAAAAAAADDBBBDDBBBHHBBBDDBBBHHBBHH"; tek.Tekgraph(solid); for(i=350; i<480; i=i+20){ for(uint32_t a=300; a<400; a=a+20){ tek.Teklocate(i, a); tek.Teksprite(sprite); } } delay(2000); tek.Tekfont(smallest); tek.Tekcolor(green); tek.Tekalpha(); tek.Teklocate(100, 300); for (i = 0; i < 80; i++) { Serial.println("This is a test of Tek Terminal.."); } delay(5000); }

Rogerclark
Mon Jul 24, 2017 10:50 утра
@pito

Мы могли бы написать какой -нибудь код, чтобы превратить числа научных обозначений в строку перед отправкой в ​​сериал.печать

Пито
Пн 24 июля 2017 г. 11:01
@Roger: Вот код Float2String, который я использовал для использования в нашем упражнении FPU..
Я должен дважды проверить, так как есть версия Davekw7x, которая имеет ошибку, которая получила ошибку.
http: // www.STM32duino.com/viewtopic.PHP ... = 60#p26771
В этой версии ниже используется единственный точный FPU, когда.
ОБНОВЛЕНИЕ: chnged до 7 цифр, достаточно справедливо для единственной точности.. // ====== float2s(): print out up to 7 digits of input single-precision value // This version enables single-precision for STM32duino, Teensy 3, etc. // from double2s version by J.Beale March 2013 // modified from original float2s() posted by davekw7x on December, 2010 // http://arduino.cc/forum/index.php/topic,46931.0.html // Modded for single precision floats with FPU by Pito 4,7/2017 // No warranties of any kind, provided as-is.. char * float2s(float f) { return float2s(f, 2); } char * float2s(float f, unsigned int digits) { int d; static char s[26]; // formatted number as string int index=0; // handle sign if (f < 0.0f) { s[index++] = '-'; f = -f; } // handle infinite values if (isinf(f)) { strcpy(&s[index], "INF"); return s; } // handle Not a Number if (isnan(f)) { strcpy(&s[index], "NaN"); return s; } // max digits if (digits > 7) digits = 7; int exponent = int(log10f(f)); float g = f / powf(10.0f, exponent); if ((g < 1.0f) && (g != 0.0f)) { g *= 10.0f; exponent--; } // if (exponent < -330) { // lower limit of double-precision on Teensy 3 if (exponent < -38) { g = 0.0f; exponent = 0; } if (digits < 7) { // display number rounded at last digit g += 0.5f / powf(10.0f,digits); } d = g; sprintf(&s[index++],"%d",d); if (digits > 0) sprintf(&s[index++],"."); for (int i=0;i

Пито
Пн 24 июля 2017 г. 15:52
В этой старой доске новостей 25y+
ftp: // невидимкий Island.net/shuford/term ... x_news.текст
Я нашел некоторую информацию о режиме джина и координатах мыши: There are 2 modes of reading the GIN co-ordinates, interactive and non-interactive. Interactive mode: the Xhair cursor is displayed, the operator moves it to the required position and then presses a key (NOT the return key!). A sequence of bytes is sent to the computeras follows: The ASCII value of the key pressed e.g. D HiX byte - 01 followed by the 5 most significant X bits LoX byte - 01 followed by the 5 least significant X bits HiY byte - 01 followed by the 5 most significant Y bits LoY byte - 01 followed by the 5 least significant Y bits This sequence is followed by the termination character(s) as set by a jumper set on the TC2 card within the terminal. The most common setting is to send the CR character. To recreate the X and Y values: X=(32*(HiX-32))+(LoX-32) Y=(32*(HiY-32))+(LoY-32) In non-interactive mode the computer sends . The sequence returned is as above, except that the keycode is replaced by a status byte, this gives information as to whether the terminal is in Alpha, Graphics or GIN mode. I cannot at the moment remember which bit does what.

Chismicro
Mon Jul 24, 2017, 16:02
Если вы посмотрите на Tek-Source Я разместил ранее в этой теме, вы можете увидеть в строке 869 описание и декодирование данных джина.

Существует различие в 2 случаях:
/*--------------------------------------------------------------------------*\ * decode_gin() * * Decodes a GIN tek vector string into an xy pair of relative device * coordinates. It's best to not use absolute device coordinates since the * coordinate bounds are different depending on the report encoding used. * * Standard: * Extended: * * where holds the two low order bits for each coordinate. \*--------------------------------------------------------------------------*/ static void decode_gin(char *c, PLGraphicsIn *gin) { int x, y, lc = strlen(c); if (lc == 4) { x = ((c[0] & 0x1f) << 5) + ((c[1] & 0x1f) ); y = ((c[2] & 0x1f) << 5) + ((c[3] & 0x1f) ); gin->pX = x; gin->pY = y; gin->dX = x / (double) TEKX; gin->dY = y / (double) TEKY; } else if (lc == 5) { y = ((c[0] & 0x1f) << 7) + ((c[2] & 0x1f) << 2) + ((c[1] & 0x06) >> 2); x = ((c[3] & 0x1f) << 7) + ((c[4] & 0x1f) << 2) + ((c[1] & 0x03) ); gin->pX = x; gin->pY = y; gin->dX = x / (double) (TEKX << 2); gin->dY = y / (double) (TEKY << 2); } else { /* Illegal encoding */ gin->pX = 0; gin->pY = 0; gin->dY = 0; gin->dX = 0; } }

Пито
Пн 24 июля 2017 г. 16:57
Посмотрите на мой предыдущий пост, лучший способ - прочитать источник TERM :)
Очень красиво написано, легко читать. TT знает больше, чем я ожидал :)
Честно говоря, я не могу найти помощь или документацию TERM для вариантов эмуляции TEK.. :?
Итак, мы должны прочитать источники.

Из того, что я прочитал, режим джина возвращает всегда 10 -битные значения, даже в 12 -битном режиме..
TT делает в источнике: ToggleCrossHair(tk,ts,FALSE); X = (int)((float)tk->GINX / (float)tk->ScreenWidth * (float)ViewSizeX); Y = (int)((1.0 - (float)(tk->GINY+1) / (float)tk->ScreenHeight) * (float)ViewSizeY); Code[0] = KeyCode; Code[1] = (X >> 7) + 32; Code[2] = ((X >> 2) & 0x1f) + 32; Code[3] = (Y >> 7) + 32; Code[4] = ((Y >> 2) & 0x1f) + 32; Code[5] = 0x0d;

Пито
Пн 24 июля 2017 г., 19:56
Эта демонстрация мыши показывает возвращенные координаты. Координат работы, как и ожидалось.
Я получаю «[36M20» в качестве кода возврата кнопки мыши - скорее всего, последовательность побега.

ОБНОВЛЯТЬ:
«[36M» - это код побега для голукого цвета.
Когда я переоделся на желтый, я получил [33 м - код побега на желтый.
Таким образом, он возвращает фактический активный цвет. Интересный.. 8-)

«0x20» - это код для «пространства», то есть TekginMouseCode по умолчанию для левой кнопки (TERM .INI).
Вы можете изменить это.
// A simple TEK4010/4014 Vector terminal DEMO // You need TeraTerm or Xterm switched to TEK4010/14 Emulation // // Use fast Serial over USB for best experience // // Shows MOUSE activity and returned X and Y coordinates // You must click to get new X and Y // // Provided as-is, no warranties of any kind are provided :) // by Pito 7/2017 #include "Arduino.h" #include "Tek.h" TEK tek; void setup() { delay(3000); Serial.begin(115200); } void loop() { uint32_t i = 0; char b0, b1, b2, b3, b4; uint16_t x = 0, y = 0, xo = 0, yo = 0; tek.Tekcls(); tek.Tekcolor(cyan); while (1) { tek.Tekgin(); if (Serial.available() > 0) b0 = Serial.read(); if (Serial.available() > 0) b1 = Serial.read(); if (Serial.available() > 0) b2 = Serial.read(); if (Serial.available() > 0) b3 = Serial.read(); if (Serial.available() > 0) b4 = Serial.read(); x = 32 * (b1 - 32) + (b2 - 32); y = 32 * (b3 - 32) + (b4 - 32); tek.Tekalpha(); tek.Tekfont(small); tek.Tekcolor(cyan); if ((x != xo) | (y != yo)) { Serial.print(b0, HEX); // KeyCode Serial.print(" X="); Serial.print(x); Serial.print(" Y="); Serial.print(y); Serial.println(); xo = x; yo = y; i++; } delay(100); if (i == 80) { tek.Tekcls(); i = 0; } } }

Rogerclark
Пн 24 июля 2017 г. 22:28
Спасибо, Пито

Можете ли вы сказать мне, где ему нужны текстовые строки научных записей?

Это для координат или исключительно для визуального текста?

Также...
Я думаю, ты сказал, что это не заполняет ??

Это потому, что оригинальное оборудование было вежливым дисплеем?

Пито
Пн 24 июля 2017 г. 22:39
@Roger, нотация SCIFI необходима только для печати результатов расчетов пользователя, а не для координат.
Координаты всегда целыми, 0..4095 для x и y.

Tektronix 4010/4014 и другие - это очень большие пробирки осциллографа, с очень длинным вспомогательным цветом.
Информация, окрашенная в фосфор тонким электронным лучом, длилась как минимум в течение часа, если только вы не сделали чистый экран, что заняло около 1.5 секунд и высокое напряжение с противоположной полярностью очистила заряд (вызывая свечение линий) с фосфора экрана.

Tek-это x-y платтер. Экран похож на лист бумаги в x-y-платтере. Кончик ручки диаметром 1 пиксель.
Чтобы заполнить большую коробку 300x300 с красным цветом, значит сделать 300 линий длиной 300 пикселей.
Тек знает только один графический примитив - линия от (a, b) до (c, d).
В прошлом большие поверхности, где заполнены длинами/сеткой, сделанной из линий.

Rogerclark
Пн 24 июля 2017 г. 22:44
Спасибо за информацию.

Я вспоминаю несколько ранних видеоигр, которые также использовали векторные дисплеи.

Возможно, у нас могут быть астериоды ;-)

Rogerclark
Пн 24 июля 2017 г. 22:49
Еще одна мысль...

Есть ли эмулятор TEK на основе Python?

Пито
Пн 24 июля 2017 г. 22:59
Я вспоминаю несколько ранних видеоигр, которые также использовали векторные дисплеи. Не только игры, но и все графические системы с 50 лет до конца 70 лет (CADS, военные гаджеты - радары и т. Д.).
Чтобы получить «разрешение» 4096x4096 (даже это было не совсем) в однократном цвете, вам понадобится 2 Мбайта видео оперативной памяти при разговоре с растровым режимом. Это количество оперативной памяти было довольно дорогим в то время..
Например, 3101 64-битная оперативная память Intel стоила 99 долларов в середине 1969 года, 40 долларов в 1970 году.
И вам понадобился только один чип 3101 для TEK4014 :)

Стивестронг
Пн 24 июля 2017 г. 11:43
Относительно выполнения заполнения.
Может быть, мы сможем принести Tek, чтобы заполнить прямоугольник, если мы напишем «пространство» персонажа с желаемым цветом и измерением в желаемой координате.
Конечно, это будет работать только для горизонтально и вертикально выровненных заполнений.

Rogerclark
Вт 25 июля 2017 г. 12:20 утра
КСТАТИ. Я искал код векторных астероидов

Я не могу найти окончательный источник, но в этом блоге есть какой -то интересный код

https: // katyscode.WordPress.com/2012/06 ... S-OR-US/

Chismicro
Вт 25 июля 2017 г. 6:21
Относительно выполнения заполнения.
Может быть, мы сможем принести Tek, чтобы заполнить прямоугольник, если мы напишем «пространство» персонажа с желаемым цветом и измерением в желаемой координате.
Конечно, это будет работать только для горизонтально и вертикально выровненных заполнений.
Вы можете сделать «псевдо заполняет», если подходит резолюция экрана.
Вы можете увидеть результат, если просто установите библиотеку Guipittix и запустите Светодиодный пример с помощью Tek-output.
Я заставляю эту библиотеку иметь универсальные графические элементы на любом дисплее. Наверное, я начну делать специальные элементы векторной графики для поддержки этого типа дисплеев.

Zoomx
Вт 25 июля 2017 г. 6:34 утра
[Rogerclark - Пн 24 июля 2017 г. 22:44] - Я вспоминаю несколько ранних видеоигр, которые также использовали векторные дисплеи.

Возможно, у нас могут быть астериоды ;-)
Я помню, что также боевой танк и игра с двумя игроками, я не помню названия. Это была битва между двумя линкору.

Rogerclark
Вт 25 июля 2017 г. 7:19 утра
https: // en.Википедия.org/wiki/battlezon ... ideo_game)

был танком один

Я смутно помню, как играл что -то на основе Star Trek, с кораблем «Enterprise» и «Kingon» (в школьной поездке, я думаю, мы пошли в аркаду, когда мы должны были что -то делать! И у них были старые игровые консольные машины)

Возможно
http: // davesclassicarcard.com/startrek/startrek.HTML

https: // en.Википедия.org/wiki/star_trek_ (arcade_game)

Но тот, который я помню, казалось, предшествовал этому, и из того, что я помню, было больше похоже на астероиды, в том, что это был 2D -представление плана

Rogerclark
Вт 25 июля 2017 г. 7:26 утра
Я нашел то, что кажется хорошим списком векторных игр

http: // Викивизиально.com/wiki/категория: v ... cade_games

Пито
Вт 25 июля 2017 г. 8:26 утра
Что касается заполнения: вы можете заполнить сплошными линиями - сторона TT или XERM достаточно быстра. Чтобы заполнить IE. Коробка 300x300 с линиями, необходимо отправить около 2700 байтов через сериал, с текущими USB -скоростями, скажем, 200 КБ/с. Это примерно 13 мс. Так что это не так "медленно". Было бы медленно при запуске терминала TEK через 9K6.

Пито
Вт 25 июля 2017 г. 8:53 утра
Например: заполнение коробки 300x300 с помощью сплошных линий uint32_t elapsed = micros(); for (i=100; i<400; i++){ tek.Tekline(i,100,i,400); } elapsed = micros() - elapsed;

Пито
Вт 25 июля 2017 г. 9:22 утра
Читая источник TT, я вижу там интересную функциональность в отношении печати текстов.
Вы можете установить, например, ориентация на текст, 0, 90, 180, 270 град. Это здорово при рисовании графиков и диаграмм..

Стивестронг
Вт 25 июля 2017 г. 9:39
[Пито - Вт 25 июля 2017 г. 8:53 утра] - Кстати, почему такой распространение?? (2.897 мс - 7.933 мс).
Я могу думать только о скорости обработки хоста, у Libmaple USB есть буфер TX 2KB, использующий блокировку TX, и если команда Tekline () отправляет более 5 байтов, то буфер будет заполнен и позволит отправлять дальнейшие байты, только если Хозяин читает некоторые из ранее отправленных.
Так что на самом деле ~ 3 мс - это время, чтобы написать данные в буфере TX.

Rogerclark
Вт 25 июля 2017 г. 9:57 утра
Я не думаю, что стоит делать заполнение с линиями

Лучше найти клиента Python Tek 4010 и добавить новую команду для заполнения

Пито
Вт 25 июля 2017 г. 10:21
[Стивестронг - Вт 25 июля 2017 г. 9:39 утра] - Так что на самом деле ~ 3 мс - это время, чтобы написать данные в буфере TX.
ОК, 8 мс - это реалистичное время для заполнения 300x300box..
Это не плохо при условии, что большинство потенциальных пользователей могут использовать эмулятор TEK для визуализации своих измерений, выполненных с их ..Duinos в форме простых 2D -графиков/диаграмм, с возможностью простой копии/вставки/сохранения/печати их графиков. И без необходимости связываться с программированием Windows.
Я не тестировал с XERM, но источники утверждают, что это тоже работает..

PS: Хотя я связывался с POC Spectrum Analyzer выше, полученного урока: получение данных - выборка данных ADC - занимает гораздо больше времени, чем обработка и построение их в окне TEK. Например, с скоростью отбора проб 100 кГц вам нужно 10 мсей, чтобы получить 1024 образца, вам необходимо в среднем спектры, чтобы получить некоторые хорошие результаты, я сделал с 64 спектрами, поэтому общее время для отбора проб данных составило 640 мс. Фактическая обработка FFT 64 спектров занимает может быть, может быть, в целом 100 мсек (FPU ON). Таким образом, скорость обновления спектров на экране TEK была ниже 1 секунды. Построение данных потребовалось 15 мс.

Zoomx
Вт 25 июля 2017 г. 12:09
Боевая зона! Да, давно. Поиск в списке, я люблю, что другая игра была космическими войнами, и я вспомнил еще один звездный замок, но я помню в BW, не по цвету.

Стивестронг
Вт 25 июля 2017 г. 12:55
Звездные волны с подростком: https: // trmm.net/starwars
Существует также демонстрация обработки: https: // github.com/osresearch/vst/tree/ ... Essingdemo

РЕДАКТИРОВАТЬ
Хотя это не TEK, но это последовательный монитор для отображения графики, в основном преобразование последовательных сообщений в графические элементы с использованием обработки.
Форум: https: // форум.Ардуино.CC/INDEX.PHP?Тема = 307293.0
GitHub: https: // github.com/nardj/htmlserialmonitor
Это выглядит очень многообещающе, стоит проверить, предлагает ли он больше преимуществ (скорость, определяемое графическое разнообразие элементов), чем эмулятор TEK.

Chismicro
Вт 25 июля 2017 г. 14:33
Хотя это не TEK, но это последовательный монитор для отображения графики, в основном преобразование последовательных сообщений в графические элементы с использованием обработки.
Форум: https: // форум.Ардуино.CC/INDEX.PHP?Тема = 307293.0
Это выглядит интересно. Вопрос в том, насколько быстро находится обновление дисплея по сравнению с TEK? Быстрое обновление может быть полезно для приложений осциллографа.

@Pito
Я только что сделал Библиотека Arduino на GitHub из этого.

Какое авторское право у тебя? GNU GPL 3 OK?

Chismicro
Пт 28 июля 2017 г. 6:06
Я сделал Маленький редактор спрайта для дисплея TEK.

Вот несколько спрайтов: улыбайтесь лицом
Pffddeeaaaiihhhhjjbbb ddpiae ddphbda bbbpahbd hhap

космический корабль
Peeaadeaaaaihaaiibbbbbbbbbbbbb

Space Invader1
Pdeefiaaaejiih dfphhj epbbbbbifdd apahbd aapahbd dddd
Изображение

@Pito
Все еще открытый вопрос: какая лицензия программного обеспечения для ваших функций TEK?

Пито
Чт, 01 февраля 2018 13:04
Что GNU GPL 3 в порядке..

Кстати: было бы трудно написать небольшое приложение для победы:
1. Простое окно, сметочное, максимальное 4096x4096
2. Меню: настройки Comport, выбор типа шрифта, цвета бумаги/чернила.
3. он будет интерпретировать вышеупомянутые команды TEK..
Я думаю, что это проект выходного дня для кого-то, кто знает, как
:)

PS: в Teraterm's The Color n. 0 - текущий «бумажный» цвет, и цвет n.7 - текущий цвет "чернила".
Цвета 1-6, как это определено в библиотеке.

Mrburnette
Чт, 01 февраля 2018 г. 13:20
[Пито - Чт, 01 февраля 2018 г. 13:04] - <...>
Кстати: было бы трудно написать небольшое приложение для победы:
Не будет Обработка быть заданным?

Есть также еще один компилятор C ++ только для Windows, с которым я играл много лет назад: Куинси
Насколько я помню, это хорошо сработало с графическим интерфейсом Windows.

Луча

Арпрос
Пн, 05 февраля 2018 г. 13:49
Клиент Android был бы действительно удобен. Несколько месяцев назад я начал писать что -то подобное для Android, но используя свой собственный хакерский протокол. Tek4010 был бы лучше.

электрический
Ср. 07 февраля 2018 г., 17:45
Я понятия не имел, что это происходит! Я катил свою собственную демонстрацию некоторое время назад. Похоже, мой код избыточный, за исключением использования набора символов Херши Вектор:

https: // форум.Ардуино.CC/INDEX.PHP?Тема = 523751.0

Изображение

Регулировка для RTC Drift

32-битные таймеры