Пультоскоп на Arduino 27МГц!!!

man_200
Offline
Зарегистрирован: 29.04.2016

1/F - это период. Длительность импульса в периоде может быть разной (генератор ШИМ определяет это в %). Или не прав? 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

karl2233 Привет!

Ни кто ни кого не обидел, меня вообще по инету обидеть сложно, здесь на форуме в соседней ветке и "моральным уродом" называли, а мне все ни почем!)

Что хотел сказать отсылкой на фильм, что пультоскоп для меня это цель!

Но цель сам поход к которой это уже хорошо проведенный досуг,

когда разбираешься в чем-то новом,

когда пробуешь ищешь наиболее оптимальные решения, и так далее.

Ведь мое первое сообщение на этом форуме было таким

bodriy2014 пишет:

Присоединяюсь.!!!

Удалось запустить на дисплее 5110 только вариант без шкалы и значений.

Как допилить, чтоб шкала и значения были?

в этой ветке

Но потом я вернулся со своим решением, и мне для этого не нужно было как многие спрашивают годов программирования Ардуино за плечами.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Ghost_d Вот ссылка на мой пост с картинками,

о програмном подсчете частоты.

http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=7#comme...

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

bodriy2014 пишет:

karl2233 Привет!

Ни кто ни кого не обидел, 

я рад! тем более цели такой не ставил.

но тема интересна(я про кино), и стоит размышлений.

как и Пультоскоп =)

а так да, привет!)

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Вы выкладываете столько классных реализаций проекта,

что захотел это собрать все в одном месте.

Чтоб вдохновляло тех кто только собирается собирать прибор.

Если кого пропустил прошу простить и прислать фото своего прибора!

http://srukami.inf.ua/gallery.html

 

 

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

man_200 пишет:

1/F - это период. Длительность импульса в периоде может быть разной (генератор ШИМ определяет это в %). Или не прав? 

Прав - прав . Только хорошо мерить прямоугольник , а есл нет то по какому месту мерять ?

Тут уж сам по шкале на экране.

man_200
Offline
Зарегистрирован: 29.04.2016

Длительность любого сигнала или его части измеряется программно перемещением курсора по шкале Х. Отсчет начала, в данном случае, будет от 0, поскольку синхр. начинается от начала шкалы.

И еще. Господа, а зачем программно расчитывать частоту, если сигнал не захвачен аппаратно? Т.е уровень сигнала настолько мал, что им можно и принебречь! Удалить кусок программного расчета частоты, а освободившуюся память использовать для других целей.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

man_200 пишет:

...

И еще. Господа, а зачем программно расчитывать частоту, если сигнал не захвачен аппаратно? Т.е уровень сигнала настолько мал, что им можно и принебречь! Удалить кусок программного расчета частоты, а освободившуюся память использовать для других целей.

Апаратно 1В или 2В уже считать частоту не будет, только программно.

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

Кот открыт для любых доработок и изменений.

Каспер
Offline
Зарегистрирован: 12.06.2016

Привет всем, ребят проблема такая собрал прибор дисплей тфт как у автора проекта только с другим контроллером,поставил библиотеку которую ребятя посоветовали Mcufriend_kbv,экран запустился, касаюсь рукой вывада щупа реакция есть но практически не заметная, подношу к ноутбуку синус есть не стабильный и значение (T)микросекунд стоит в одном положении T=2593ms, все проверил не могу догнать что не так, может сталкивался кто с таким?   

man_200
Offline
Зарегистрирован: 29.04.2016

 

Апаратно 1В или 2В уже считать частоту не будет, только программно.

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

Кот открыт для любых доработок и изменений.

[/quote]

А..., вон оно чо, Михалыч! 

Ghost_d
Offline
Зарегистрирован: 22.04.2014

Спасибо большое за ответы.  С программным определением частоты все равно пока ясности не появилось. (А после моих изменений в коде, почему-то врет ровно в два раза: вместо 1 kHz показывает 2 kHz).

Но, чем дальше в лес - тем толще партизаны :)

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

У меня почему-то нарисовалась полуволна.... Это правильно?

Поправте, если далее ошибаюсь.

Насколько помню, что частота - это трам-пам-пам ...временной интервал между точками, колеблющимеся в одной фазе.... Возмем синусоиду... Для определения частоты, нам нужно узнать время между точками 1 и 3 (НЕ НЕ МЕЖДУ 1 и 2).  Или между зелеными точками или между крайними красными.... Получается, что точка 1 определена на интервале, где происходит подьем, точка 2 - вроде как имеет такое же значение, НО находится на склоне :) Ближайшая подходящая точка №3 - тоже значение и на подьеме.

Найдя расстояние между такими точками (приняв, что измерения происходят через равные интервалы времени, 3.2 мкс) математически получаем частоту...

Так?

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

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

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

man_200 пишет:

 

Апаратно 1В или 2В уже считать частоту не будет, только программно.

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

Кот открыт для любых доработок и изменений.

А..., вон оно чо, Михалыч! 

[/quote]

А чо кому то памяти мало?

У меня на ST7735 порадка 8,5 кбайт свободно.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Sketch uses 22 108 bytes (71%) of program storage space. Maximum is 30 720 bytes.
Global variables use 907 bytes (44%) of dynamic memory, leaving 1 141 bytes for local variables. Maximum is 2 048 bytes.

Буфер 256 байт.

Alex_Mirko
Alex_Mirko аватар
Offline
Зарегистрирован: 16.05.2016

Ghost_d пишет:

Спасибо большое за ответы.  С программным определением частоты все равно пока ясности не появилось. (А после моих изменений в коде, почему-то врет ровно в два раза: вместо 1 kHz показывает 2 kHz).

Но, чем дальше в лес - тем толще партизаны :)

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

У меня почему-то нарисовалась полуволна.... Это правильно?

Поправте, если далее ошибаюсь.

Насколько помню, что частота - это трам-пам-пам ...временной интервал между точками, колеблющимеся в одной фазе.... Возмем синусоиду... Для определения частоты, нам нужно узнать время между точками 1 и 3 (НЕ НЕ МЕЖДУ 1 и 2).  Или между зелеными точками или между крайними красными.... Получается, что точка 1 определена на интервале, где происходит подьем, точка 2 - вроде как имеет такое же значение, НО находится на склоне :) Ближайшая подходящая точка №3 - тоже значение и на подьеме.

Найдя расстояние между такими точками (приняв, что измерения происходят через равные интервалы времени, 3.2 мкс) математически получаем частоту...

Так?

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

Добавляем к поиску максимального значения напряжения поиск минимального

Vmax = 0;
  Vmin = 250;
  for (int i = 0; i < 500; i++) {
    if (Vmax < mass[i]) {
      Vmax = mass[i];
    }
    if (Vmin > mass[i]) {
      Vmin = mass[i];
    }
  }
  
потом из минимального и максимального находим среднюю точку, фиксируем несколько раз пересечение сигнала с этой точкой и находим длину сигнала, далее считаем частоту

void IzmHz2() {
  int x1 = 0;
  int x2 = 0;
  int y = 1;
  int i = 0;
  int nol = (Vmax + Vmin)/2;

  while (y < 5 || i < 501) {
    i++;
    switch (y) {
      case 1:
        if (mass[i] < nol) {
          y = 2;
        }
        break;
      case 2:
        if (mass[i] > nol) {
          y = 3;
          x1 = i;
        }
        break;
      case 3:
        if (mass[i] < nol) {
          y = 4;
        }
        break;
      case 4:
        if (mass[i] > nol) {
          y = 5;
          x2 = i;
        }
        break;
    }
  }
  HZ = 1000000 / (((x2 - x1) * t) / 501);
}

 

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

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

serega94778
Offline
Зарегистрирован: 13.06.2016

Здравствуйте! Скажите у вас  ILI9325 контролёр экрана? Просто не могу найти скетч для этого экрана. Мне сказали что он гдето здесь есть. Спасибо.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

serega94778 пишет:

Здравствуйте! Скажите у вас  ILI9325 контролёр экрана? Просто не могу найти скетч для этого экрана. Мне сказали что он гдето здесь есть. Спасибо.

Привет!

Кто же это вам такую глупость сказал?)))

посмотрите пост #754 у slider дисплей на этом контроллере.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Попробуйте библиотеку Mcufriend_kbv_2.90

VetalST
Offline
Зарегистрирован: 29.12.2015

sokrat-11 пишет:

 Уважаемый VetalST, уменя дисплей l2f50,не могли бы вы выложить версию POWER-OFF скетч и библиотеку,думаю

многие в этом заинтересованы,экземпляр ls020 уже трудно найти.

Попробуйте сначала вот это http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=12#comment-176022 если все отображается правельно то у вас экран как у меня. Эсли буквы и цифры отображаются криво то у вас  l2f50 немного другой, вам понадобится библиотека отсюда http://compcar.ru/forum/showthread.php?t=7237 . Если моя библиотека не подойдет помогу добавить функцию POWER-OFF.

Скетчи полностью одинаковые что на l2f50 что на ls020 замените только бибилиотеку

добавил 4 пункт в меню lcd.PowerOff  http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=29#comment-198538

вот вариант на 4 кнопки http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=28#comment-198456

Вот библиотека под мой l2f50 с функцией POWER-OFF https://yadi.sk/d/6rz6gT0osVGjn

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Нужен ждущий режим и ZOOM в паузе...

sokrat-11
Offline
Зарегистрирован: 11.06.2016

Вот теперь всё так!Я  до этого пробоовал первые версии, всё хорошо.так-что последняя подошла.Спасибо за помощь.На 6 рин повесил ШИМ для преобразователя подсветки,но не хватает частоты, там 900герц а надо бы тыщи три герцев пробывал так и так ,во втором случае всё бы хорошо но ,частота влияет на общую работу прибора,  может что подскажете?

               analogWrite(6,40);    //подсветка ШИМ

                                       и

      int FAN = 6;       // PIN         //подсветка ШИМ
int FAN_pwm = 70;  // PWM 0..255

 void setup(){
 {
TCCR0B = TCCR0B & B11111000 | B00000010;
  pinMode(FAN, OUTPUT);                //подсветка ШИМ
  analogWrite(FAN, FAN_pwm);    //подсветка ШИМ
 
 analogWrite(6,40);    //подсветка ШИМ
 }

 

sokrat-11
Offline
Зарегистрирован: 11.06.2016
int FAN = 6;       // PIN         //подсветка ШИМ
int FAN_pwm = 70;  // PWM 0..255

 void setup(){
 {
TCCR0B = TCCR0B & B11111000 | B00000010;
  pinMode(FAN, OUTPUT);                //подсветка ШИМ
  analogWrite(FAN, FAN_pwm);    //подсветка ШИМ
 

 

serega94778
Offline
Зарегистрирован: 13.06.2016

Платить такие бешенные деньги? Надо быть реально не в себе. Эта копеечное г вообще не упёрлось за деньги. Только как творчество. Цена ардуинки и экрана приемлема. Цена таких осциллографов полный бред.

serega94778
Offline
Зарегистрирован: 13.06.2016

Спасибо, посмотрю если найду.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

serega94778 пишет:

Платить такие бешенные деньги? Надо быть реально не в себе. Эта копеечное г вообще не упёрлось за деньги. Только как творчество. Цена ардуинки и экрана приемлема. Цена таких осциллографов полный бред.

????? Это Вы кому ?

 

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

sokrat-11 пишет:

Вот теперь всё так!Я  до этого пробоовал первые версии, всё хорошо.так-что последняя подошла.Спасибо за помощь.На 6 рин повесил ШИМ для преобразователя подсветки,но не хватает частоты, там 900герц а надо бы тыщи три герцев пробывал так и так ,во втором случае всё бы хорошо но ,частота влияет на общую работу прибора,  может что подскажете?

               analogWrite(6,40);    //подсветка ШИМ

                                       и

      int FAN = 6;       // PIN         //подсветка ШИМ
int FAN_pwm = 70;  // PWM 0..255

 void setup(){
 {
TCCR0B = TCCR0B & B11111000 | B00000010;
  pinMode(FAN, OUTPUT);                //подсветка ШИМ
  analogWrite(FAN, FAN_pwm);    //подсветка ШИМ
 
 analogWrite(6,40);    //подсветка ШИМ
 }

 

https://geektimes.ru/post/255744/

VetalST
Offline
Зарегистрирован: 29.12.2015

sokrat-11   

И гляньте вот это https://yadi.sk/i/6RgSig7apxCSF

GFX
Offline
Зарегистрирован: 24.04.2015

Провел поиск серьезных АЦП, на али вполне доступен 8ми битный АЦП на 2 канала и 100МГц, вот это будет крутой осциллограф уже http://ru.aliexpress.com/item/free-shipping-1pcs-AD9288BSTZ-100-IC-ADC-8BIT-DUAL-100MSPS-48-LQFP/32319940503.html?spm=2114.13010308.0.41.W0z7ex

Только как с него успеть столько скачать...

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

GFX, зачем такое усложнение? 

sirota
Offline
Зарегистрирован: 18.08.2015

GFX пишет:

Провел поиск серьезных АЦП, на али вполне доступен 8ми битный АЦП на 2 канала и 100МГц, вот это будет крутой осциллограф уже http://ru.aliexpress.com/item/free-shipping-1pcs-AD9288BSTZ-100-IC-ADC-8BIT-DUAL-100MSPS-48-LQFP/32319940503.html?spm=2114.13010308.0.41.W0z7ex

Только как с него успеть столько скачать...

По идее смысл такой:

1. У АЦП - сливает данные по команде в буфер

2. Из буфера по мере возможностей читаем и отрисовываем

3. GOTO п.п.1

100МГц ни как не вместиться даже по 4 точкам меандра в память дуньке. Следовательно съехали с вопроса и пошли в сторону STM если уж так надо.

И кто сказал что там 100МГц? там 100млн выборок

GFX
Offline
Зарегистрирован: 24.04.2015

"И кто сказал что там 100МГц? там 100млн выборок" ну так в данном случае частота совпадает с выборками, обновление данных на каждом такте. Проблема в том, что STM32 не пойдет тоже, чтобы с частотой 100 МГц успевать давать клок и запихивать данные себе в оперативку, но АЦП классный с запасом) По поводу усложнения, там же нет разницы, он такой же как и все прочие, параллельный интерфейс и все.

В связи с тем, что 100млн выброк считать кроме как плис в sram особо нечем, можно взять на 40Мгц и дешевле намного тоже 2 канала http://ru.aliexpress.com/item/AD9288BSTZ-80-AD9288BSTZ-40-LQFP48-ADC/187...

интересно сколько можно с него скачать MSPS на STM32 при 72 МГц (для любителей ардуино, вот дешевая плата которая поддерживается средой http://ru.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-Syste...)

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

GFX пишет:

Провел поиск серьезных АЦП, на али вполне доступен 8ми битный АЦП на 2 канала и 100МГц, вот это будет крутой осциллограф уже http://ru.aliexpress.com/item/free-shipping-1pcs-AD9288BSTZ-100-IC-ADC-8BIT-DUAL-100MSPS-48-LQFP/32319940503.html?spm=2114.13010308.0.41.W0z7ex

Только как с него успеть столько скачать...

100 Мгц нафиг не нужно. Процессор не успеет столько обработать.

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

Проблемы.

Захват нельзя производить за три такта и добится таким образом 5 333 333 fps. по причине того, что тактирование должно производится синхронно с захватом. Тактирование производится таймером с выводом ногодрыга на 9ю ножгу частоты 8 000 000. Пришлось опустить частоту захвата до 4 000 000 fps.

Захват произвожу без всяких цыклов вот такой колбасой:

void LoadPin4()
{
MyBuff_AI0[  0 ]  = PIND ; asm("nop"); 
MyBuff_AI0[ 1 ]  = PIND ; asm("nop");
MyBuff_AI0[ 2 ]  = PIND ; asm("nop");
MyBuff_AI0[ 3 ]  = PIND ; asm("nop");
//***************************
MyBuff_AI0[ 253 ]  = PIND ; asm("nop");
MyBuff_AI0[ 254 ]  = PIND ; asm("nop");
MyBuff_AI0[ 255 ]  = PIND ; asm("nop");};
Не решенные проблемы:
Довольно часто момент захвата попадает на момент обновления порта АЦП. И тогда появляются проблеммы как на рисунке.
Заметил следующее. две трети кадров загаженны вот такими помехами. Одна  треть совсем чистая.
Я пришел к выводу, что начало захвата надо синхронизировать с тактовым таймером +-1 такт. Но надо проверять, возможно я ошибаюсь и это не решит проблему.
Идеальным вариантом будет в одной функции тактировать и читать сигнал, но это не возможно. Для сохранения надо три такта, для изменеия байта два такта, для сравнения регистра еще 4-5 тактов. Итого 10 тактов и жалких 1 600 000 fps.

 

 

 

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

Okmor, снимаю шляпу!

синхронизация решит проблему

ggarry
Offline
Зарегистрирован: 21.01.2016

Теперь уже стало очевидным, что Ардуина физически не может синхронизированно читать данные с порта внешнего АЦП СУЩЕСТВЕННО быстрее, чем с внутреннего АЦП. Игра просто не стоит свеч. 

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

немного быстрее - этого достаточно, особенно если учесть простоту и относительную недороговизну АЦП и ОУ.

sirota
Offline
Зарегистрирован: 18.08.2015

ggarry пишет:

Теперь уже стало очевидным, что Ардуина физически не может синхронизированно читать данные с порта внешнего АЦП СУЩЕСТВЕННО быстрее, чем с внутреннего АЦП. Игра просто не стоит свеч. 

Да ладно вам... 

http://arduino.ru/forum/programmirovanie/chastota-schityvaniya-atsp

АЦП в дуньке существенно медленее. А во внешнем будет быстрее. С него снимаем только цифру.

Deem_On
Offline
Зарегистрирован: 15.06.2016
Спасибо большое автору за прибор - за идею и за код. Давно искал что-то подобное, т.к. покупать настоящий большой ОСЦ для моих задач это выходящая за рамки семейного бюджета трата. В вашем устройстве все предельно просто и понятно к повторению (как в схеме так и в коде) большое спасибо что поделились с общественностью своим замечательным Пультоскопом. 
 
Удачи вам и вдохновения в ваших последующих работах!
Logik
Offline
Зарегистрирован: 05.08.2014

Okmor пишет:

Заметил следующее. две трети кадров загаженны вот такими помехами. Одна  треть совсем чистая.

Я пришел к выводу, что начало захвата надо синхронизировать с тактовым таймером +-1 такт. Но надо проверять, возможно я ошибаюсь и это не решит проблему.
Идеальным вариантом будет в одной функции тактировать и читать сигнал, но это не возможно. Для сохранения надо три такта, для изменеия байта два такта, для сравнения регистра еще 4-5 тактов. Итого 10 тактов и жалких 1 600 000 fps.

+1.

Я о таком предупреждал - http://arduino.ru/forum/programmirovanie/parallelnyi-atsp-i-arduino#comment-179498

Там как обычно никто ниче не понял, а Вы таки на это вышли.

\\\Я пришел к выводу, что начало захвата надо синхронизировать с тактовым таймером +-1 такт. 

Возможно. Надо читать доку на конкретный АЦП, там разжевано.

Я бы для борьбы еще попробовал тактировать АЦП через RC цепочку, поигравшись номиналами можно менять  задержку тактирующих фронтов и соответственно двигать их фазу. Ну и питание АЦП обеспечить очень качественное, т.к. работать прийдется в области "тонких" эффектов.

В целом из Вашего опыта напрашивается что камень слаб для внешнего АЦП и 328р - тупиковое направление. Разве что еще исследовать вопрост тактирования АЦП напрямую от кварца контроллера (через буферный каскад разумеется)  и тактирования АЦП от генератора на пару десятков МГц с заводкой тактовой с него на контроллер через делитель. Но все это слишком сложно, проще взять быстрый проц.

Про виртуальную землю - не трате время, это решение проверено веками, оно не работает )) Ситуация с ней следующая, на стенде все красиво а в жизни нет. Потому как по земле могут течь уравнительные токи. Осцил и исследуемая цепь питаются от разных БП, зачастую от разных фаз, без общего заземления. В результате их персональные земли находятся под разным напряжением и при соединении начинают течь уравнительные токи, они могут быть не только довольно большие но и ВЧ от импульсных БП. Схема виртуальной земли не справляется, а то и просто сгорает. Земля должна быть железобетонной!

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

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

Logik пишет:

Про виртуальную землю - не трате время, это решение проверено веками, оно не работает )) Ситуация с ней следующая, на стенде все красиво а в жизни нет. Потому как по земле могут течь уравнительные токи. Осцил и исследуемая цепь питаются от разных БП, зачастую от разных фаз, без общего заземления. В результате их персональные земли находятся под разным напряжением и при соединении начинают течь уравнительные токи, они могут быть не только довольно большие но и ВЧ от импульсных БП. Схема виртуальной земли не справляется, а то и просто сгорает. Земля должна быть железобетонной!

Насколько я понимаю пультоскопу планируется автономное питание (что для малогабаритного прибора очень большой плюс) и причем здесь по теории Logikа уравнительные токи, разные питающие фазы и тому подобное.

 

Logik
Offline
Зарегистрирован: 05.08.2014

oleg_kazakof пишет:

Насколько я понимаю пультоскопу планируется автономное питание (что для малогабаритного прибора очень большой плюс) и причем здесь по теории Logikа.

 

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

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

хоть я и не сторонник виртуальной земли в Пультоскопе с АЦП, но про текущие токи ВЧ забавно: они ведь и так и так текут, никуда от этого не спрячешься.

"камень слаб для внешнего АЦП".

причём тут слабость или сильность? вопрос в тактировании, что б получить профит от внешнего АЦП.

"проще взять быстрый проц"

видать знание работы транзистора лишает возможность понять принцип, который автор закладывал в Пультоскоп =)

Logik
Offline
Зарегистрирован: 05.08.2014

karl2233 пишет:

хоть я и не сторонник виртуальной земли в Пультоскопе с АЦП, но про текущие токи ВЧ забавно: они ведь и так и так текут, никуда от этого не спрячешься.

А непонятна разница между случаям:

-текут по земляному проводу минимального импенданса

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

Ну непонятна если - так и хрен с ним, так и останется тебе непонятна...

 

karl2233 пишет:
причём тут слабость или сильность? вопрос в тактировании, что б получить профит от внешнего АЦП.

"проще взять быстрый проц"

видать знание работы транзистора лишает возможность понять принцип, который автор закладывал в Пультоскоп =)

Okmor  изложил четче некуда:

\\\Для сохранения надо три такта, для изменеия байта два такта, для сравнения регистра еще 4-5 тактов. Итого 10 тактов и жалких 1 600 000 fps.

Далее очевидное, если тактируем проц 16МГц и имеем 1,6Мfps, а хотим большего, например 8Мfps то при прочих равных надо тактировать проц 80МГц, т.е. более сильный проц  (может знание работы транзистора так просветляет?!) Альтернатива - сильно лезть в схемотехнику тактирования, что плохо. 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Logik пишет:

Далее очевидное, если тактируем проц 16МГц и имеем 1,6Мfps, а хотим большего, например 8Мfps то при прочих равных надо тактировать проц 80МГц, т.е. более сильный проц  (может знание работы транзистора так просветляет?!) Альтернатива - сильно лезть в схемотехнику тактирования, что плохо. 

Если взять камень 85Мгц, АЦП - 25 Мгц, обвешать четырехкаскадным ОУ, то у нас получится обычный китайский осциллограф, который проще купить.

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

У меня вопрос. Тут еще кто то, кто пытается запустить этот бл**й АЦП?

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

Okmor,  я на днях буду.  На что обратить внимание? Почему АЦП бл**й?))

VetalST
Offline
Зарегистрирован: 29.12.2015

Давно жду, хоть примера полного кода и схемы. АЦП уже второй месяц валяется. Я с ним просто никогда не сталкивался не хотелось бы спалить после первого включения.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Нашел способ синхронизировать АЦП. Вот первые результаты измерений.

Схема с виртуальной землей показывает не плохие результаты. Специально провел измерение одинаковых сигналов с разными полярностями.

Делаю так:

1. в Setup запускаю тактовый таймер 8 000 000 Гц на 9м пине

TCCR1A=0b01000000;
TCCR1B=0b00001001;
 
2. Функция LoadPin3() производит захват сигнала.
На входе стоит пустой цикл синхронизации фазы тактового генератора.
while ((PINB & (0b00000010)) != 0 ){;}
 
Выглядит она так:
void LoadPin3()
{ 
while ((PINB & (0b00000010)) != 0 ){;}
MyBuff_AI0[  0 ]  = PIND ; asm("nop"); 
MyBuff_AI0[ 1 ]  = PIND ; asm("nop");
MyBuff_AI0[ 2 ]  = PIND ; asm("nop");
MyBuff_AI0[ 3 ]  = PIND ; asm("nop");
MyBuff_AI0[ 4 ]  = PIND ; asm("nop");
MyBuff_AI0[ 5 ]  = PIND ; asm("nop");
MyBuff_AI0[ 6 ]  = PIND ; asm("nop");
MyBuff_AI0[ 7 ]  = PIND ; asm("nop");
MyBuff_AI0[ 8 ]  = PIND ; asm("nop");
MyBuff_AI0[ 9 ]  = PIND ; asm("nop");
MyBuff_AI0[ 10  ]  = PIND ; asm("nop");
MyBuff_AI0[ 11  ]  = PIND ; asm("nop");
MyBuff_AI0[ 12  ]  = PIND ; asm("nop");
MyBuff_AI0[ 13  ]  = PIND ; asm("nop");
MyBuff_AI0[ 14  ]  = PIND ; asm("nop");
MyBuff_AI0[ 15  ]  = PIND ; asm("nop");
MyBuff_AI0[ 16  ]  = PIND ; asm("nop");
MyBuff_AI0[ 17  ]  = PIND ; asm("nop");
MyBuff_AI0[ 18  ]  = PIND ; asm("nop");
MyBuff_AI0[ 19  ]  = PIND ; asm("nop");
MyBuff_AI0[ 20  ]  = PIND ; asm("nop");
MyBuff_AI0[ 21  ]  = PIND ; asm("nop");
MyBuff_AI0[ 22  ]  = PIND ; asm("nop");
MyBuff_AI0[ 23  ]  = PIND ; asm("nop");
MyBuff_AI0[ 24  ]  = PIND ; asm("nop");
MyBuff_AI0[ 25  ]  = PIND ; asm("nop");
MyBuff_AI0[ 26  ]  = PIND ; asm("nop");
MyBuff_AI0[ 27  ]  = PIND ; asm("nop");
MyBuff_AI0[ 28  ]  = PIND ; asm("nop");
MyBuff_AI0[ 29  ]  = PIND ; asm("nop");
MyBuff_AI0[ 30  ]  = PIND ; asm("nop");
MyBuff_AI0[ 31  ]  = PIND ; asm("nop");
MyBuff_AI0[ 32  ]  = PIND ; asm("nop");
MyBuff_AI0[ 33  ]  = PIND ; asm("nop");
MyBuff_AI0[ 34  ]  = PIND ; asm("nop");
MyBuff_AI0[ 35  ]  = PIND ; asm("nop");
MyBuff_AI0[ 36  ]  = PIND ; asm("nop");
MyBuff_AI0[ 37  ]  = PIND ; asm("nop");
MyBuff_AI0[ 38  ]  = PIND ; asm("nop");
MyBuff_AI0[ 39  ]  = PIND ; asm("nop");
MyBuff_AI0[ 40  ]  = PIND ; asm("nop");
MyBuff_AI0[ 41  ]  = PIND ; asm("nop");
MyBuff_AI0[ 42  ]  = PIND ; asm("nop");
MyBuff_AI0[ 43  ]  = PIND ; asm("nop");
MyBuff_AI0[ 44  ]  = PIND ; asm("nop");
MyBuff_AI0[ 45  ]  = PIND ; asm("nop");
MyBuff_AI0[ 46  ]  = PIND ; asm("nop"); 
MyBuff_AI0[ 47  ]  = PIND ; asm("nop");
MyBuff_AI0[ 48  ]  = PIND ; asm("nop");
MyBuff_AI0[ 49  ]  = PIND ; asm("nop");
MyBuff_AI0[ 50  ]  = PIND ; asm("nop");
MyBuff_AI0[ 51  ]  = PIND ; asm("nop");
MyBuff_AI0[ 52  ]  = PIND ; asm("nop");
MyBuff_AI0[ 53  ]  = PIND ; asm("nop");
MyBuff_AI0[ 54  ]  = PIND ; asm("nop");
MyBuff_AI0[ 55  ]  = PIND ; asm("nop");
MyBuff_AI0[ 56  ]  = PIND ; asm("nop");
MyBuff_AI0[ 57  ]  = PIND ; asm("nop");
MyBuff_AI0[ 58  ]  = PIND ; asm("nop");
MyBuff_AI0[ 59  ]  = PIND ; asm("nop");
MyBuff_AI0[ 60  ]  = PIND ; asm("nop");
MyBuff_AI0[ 61  ]  = PIND ; asm("nop");
MyBuff_AI0[ 62  ]  = PIND ; asm("nop");
MyBuff_AI0[ 63  ]  = PIND ; asm("nop");
MyBuff_AI0[ 64  ]  = PIND ; asm("nop"); 
MyBuff_AI0[ 65  ]  = PIND ; asm("nop");
MyBuff_AI0[ 66  ]  = PIND ; asm("nop");
MyBuff_AI0[ 67  ]  = PIND ; asm("nop");
MyBuff_AI0[ 68  ]  = PIND ; asm("nop");
MyBuff_AI0[ 69  ]  = PIND ; asm("nop");
MyBuff_AI0[ 70  ]  = PIND ; asm("nop");
MyBuff_AI0[ 71  ]  = PIND ; asm("nop");
MyBuff_AI0[ 72  ]  = PIND ; asm("nop");
MyBuff_AI0[ 73  ]  = PIND ; asm("nop");
MyBuff_AI0[ 74  ]  = PIND ; asm("nop");
MyBuff_AI0[ 75  ]  = PIND ; asm("nop");
MyBuff_AI0[ 76  ]  = PIND ; asm("nop");
MyBuff_AI0[ 77  ]  = PIND ; asm("nop");
MyBuff_AI0[ 78  ]  = PIND ; asm("nop");
MyBuff_AI0[ 79  ]  = PIND ; asm("nop");
MyBuff_AI0[ 80  ]  = PIND ; asm("nop");
MyBuff_AI0[ 81  ]  = PIND ; asm("nop");
MyBuff_AI0[ 82  ]  = PIND ; asm("nop");
MyBuff_AI0[ 83  ]  = PIND ; asm("nop");
MyBuff_AI0[ 84  ]  = PIND ; asm("nop");
MyBuff_AI0[ 85  ]  = PIND ; asm("nop");
MyBuff_AI0[ 86  ]  = PIND ; asm("nop");
MyBuff_AI0[ 87  ]  = PIND ; asm("nop");
MyBuff_AI0[ 88  ]  = PIND ; asm("nop");
MyBuff_AI0[ 89  ]  = PIND ; asm("nop");
MyBuff_AI0[ 90  ]  = PIND ; asm("nop");
MyBuff_AI0[ 91  ]  = PIND ; asm("nop");
MyBuff_AI0[ 92  ]  = PIND ; asm("nop");
MyBuff_AI0[ 93  ]  = PIND ; asm("nop");
MyBuff_AI0[ 94  ]  = PIND ; asm("nop");
MyBuff_AI0[ 95  ]  = PIND ; asm("nop");
MyBuff_AI0[ 96  ]  = PIND ; asm("nop");
MyBuff_AI0[ 97  ]  = PIND ; asm("nop");
MyBuff_AI0[ 98  ]  = PIND ; asm("nop");
MyBuff_AI0[ 99  ]  = PIND ; asm("nop");
MyBuff_AI0[ 100 ]  = PIND ; asm("nop");
MyBuff_AI0[ 101 ]  = PIND ; asm("nop");
MyBuff_AI0[ 102 ]  = PIND ; asm("nop");
MyBuff_AI0[ 103 ]  = PIND ; asm("nop");
MyBuff_AI0[ 104 ]  = PIND ; asm("nop");
MyBuff_AI0[ 105 ]  = PIND ; asm("nop");
MyBuff_AI0[ 106 ]  = PIND ; asm("nop");
MyBuff_AI0[ 107 ]  = PIND ; asm("nop");
MyBuff_AI0[ 108 ]  = PIND ; asm("nop");
MyBuff_AI0[ 109 ]  = PIND ; asm("nop");
MyBuff_AI0[ 110 ]  = PIND ; asm("nop");
MyBuff_AI0[ 111 ]  = PIND ; asm("nop");
MyBuff_AI0[ 112 ]  = PIND ; asm("nop");
MyBuff_AI0[ 113 ]  = PIND ; asm("nop");
MyBuff_AI0[ 114 ]  = PIND ; asm("nop");
MyBuff_AI0[ 115 ]  = PIND ; asm("nop");
MyBuff_AI0[ 116 ]  = PIND ; asm("nop");
MyBuff_AI0[ 117 ]  = PIND ; asm("nop");
MyBuff_AI0[ 118 ]  = PIND ; asm("nop");
MyBuff_AI0[ 119 ]  = PIND ; asm("nop");
MyBuff_AI0[ 120 ]  = PIND ; asm("nop");
MyBuff_AI0[ 121 ]  = PIND ; asm("nop");
MyBuff_AI0[ 122 ]  = PIND ; asm("nop");
MyBuff_AI0[ 123 ]  = PIND ; asm("nop");
MyBuff_AI0[ 124 ]  = PIND ; asm("nop");
MyBuff_AI0[ 125 ]  = PIND ; asm("nop");
MyBuff_AI0[ 126 ]  = PIND ; asm("nop");
MyBuff_AI0[ 127 ]  = PIND ; asm("nop");
MyBuff_AI0[ 128 ]  = PIND ; asm("nop");
MyBuff_AI0[ 129 ]  = PIND ; asm("nop");
MyBuff_AI0[ 130 ]  = PIND ; asm("nop");
MyBuff_AI0[ 131 ]  = PIND ; asm("nop");
MyBuff_AI0[ 132 ]  = PIND ; asm("nop");
MyBuff_AI0[ 133 ]  = PIND ; asm("nop");
MyBuff_AI0[ 134 ]  = PIND ; asm("nop");
MyBuff_AI0[ 135 ]  = PIND ; asm("nop");
MyBuff_AI0[ 136 ]  = PIND ; asm("nop");
MyBuff_AI0[ 137 ]  = PIND ; asm("nop");
MyBuff_AI0[ 138 ]  = PIND ; asm("nop");
MyBuff_AI0[ 139 ]  = PIND ; asm("nop");
MyBuff_AI0[ 140 ]  = PIND ; asm("nop");
MyBuff_AI0[ 141 ]  = PIND ; asm("nop");
MyBuff_AI0[ 142 ]  = PIND ; asm("nop");
MyBuff_AI0[ 143 ]  = PIND ; asm("nop");
MyBuff_AI0[ 144 ]  = PIND ; asm("nop");
MyBuff_AI0[ 145 ]  = PIND ; asm("nop");
MyBuff_AI0[ 146 ]  = PIND ; asm("nop");
MyBuff_AI0[ 147 ]  = PIND ; asm("nop");
MyBuff_AI0[ 148 ]  = PIND ; asm("nop");
MyBuff_AI0[ 149 ]  = PIND ; asm("nop");
MyBuff_AI0[ 150 ]  = PIND ; asm("nop");
MyBuff_AI0[ 151 ]  = PIND ; asm("nop");
MyBuff_AI0[ 152 ]  = PIND ; asm("nop");
MyBuff_AI0[ 153 ]  = PIND ; asm("nop");
MyBuff_AI0[ 154 ]  = PIND ; asm("nop");
MyBuff_AI0[ 155 ]  = PIND ; asm("nop");
MyBuff_AI0[ 156 ]  = PIND ; asm("nop");
MyBuff_AI0[ 157 ]  = PIND ; asm("nop");
MyBuff_AI0[ 158 ]  = PIND ; asm("nop");
MyBuff_AI0[ 159 ]  = PIND ; asm("nop");
MyBuff_AI0[ 160 ]  = PIND ; asm("nop");
MyBuff_AI0[ 161 ]  = PIND ; asm("nop");
MyBuff_AI0[ 162 ]  = PIND ; asm("nop");
MyBuff_AI0[ 163 ]  = PIND ; asm("nop");
MyBuff_AI0[ 164 ]  = PIND ; asm("nop");
MyBuff_AI0[ 165 ]  = PIND ; asm("nop");
MyBuff_AI0[ 166 ]  = PIND ; asm("nop");
MyBuff_AI0[ 167 ]  = PIND ; asm("nop");
MyBuff_AI0[ 168 ]  = PIND ; asm("nop");
MyBuff_AI0[ 169 ]  = PIND ; asm("nop");
MyBuff_AI0[ 170 ]  = PIND ; asm("nop");
MyBuff_AI0[ 171 ]  = PIND ; asm("nop");
MyBuff_AI0[ 172 ]  = PIND ; asm("nop");
MyBuff_AI0[ 173 ]  = PIND ; asm("nop");
MyBuff_AI0[ 174 ]  = PIND ; asm("nop");
MyBuff_AI0[ 175 ]  = PIND ; asm("nop");
MyBuff_AI0[ 176 ]  = PIND ; asm("nop");
MyBuff_AI0[ 177 ]  = PIND ; asm("nop");
MyBuff_AI0[ 178 ]  = PIND ; asm("nop");
MyBuff_AI0[ 179 ]  = PIND ; asm("nop");
MyBuff_AI0[ 180 ]  = PIND ; asm("nop");
MyBuff_AI0[ 181 ]  = PIND ; asm("nop");
MyBuff_AI0[ 182 ]  = PIND ; asm("nop");
MyBuff_AI0[ 183 ]  = PIND ; asm("nop");
MyBuff_AI0[ 184 ]  = PIND ; asm("nop");
MyBuff_AI0[ 185 ]  = PIND ; asm("nop");
MyBuff_AI0[ 186 ]  = PIND ; asm("nop");
MyBuff_AI0[ 187 ]  = PIND ; asm("nop");
MyBuff_AI0[ 188 ]  = PIND ; asm("nop");
MyBuff_AI0[ 189 ]  = PIND ; asm("nop");
MyBuff_AI0[ 190 ]  = PIND ; asm("nop");
MyBuff_AI0[ 191 ]  = PIND ; asm("nop");
MyBuff_AI0[ 192 ]  = PIND ; asm("nop");
MyBuff_AI0[ 193 ]  = PIND ; asm("nop");
MyBuff_AI0[ 194 ]  = PIND ; asm("nop");
MyBuff_AI0[ 195 ]  = PIND ; asm("nop");
MyBuff_AI0[ 196 ]  = PIND ; asm("nop");
MyBuff_AI0[ 197 ]  = PIND ; asm("nop");
MyBuff_AI0[ 198 ]  = PIND ; asm("nop");
MyBuff_AI0[ 199 ]  = PIND ; asm("nop");
MyBuff_AI0[ 200 ]  = PIND ; asm("nop");
MyBuff_AI0[ 201 ]  = PIND ; asm("nop");
MyBuff_AI0[ 202 ]  = PIND ; asm("nop");
MyBuff_AI0[ 203 ]  = PIND ; asm("nop");
MyBuff_AI0[ 204 ]  = PIND ; asm("nop");
MyBuff_AI0[ 205 ]  = PIND ; asm("nop");
MyBuff_AI0[ 206 ]  = PIND ; asm("nop");
MyBuff_AI0[ 207 ]  = PIND ; asm("nop");
MyBuff_AI0[ 208 ]  = PIND ; asm("nop");
MyBuff_AI0[ 209 ]  = PIND ; asm("nop");
MyBuff_AI0[ 210 ]  = PIND ; asm("nop");
MyBuff_AI0[ 211 ]  = PIND ; asm("nop");
MyBuff_AI0[ 212 ]  = PIND ; asm("nop");
MyBuff_AI0[ 213 ]  = PIND ; asm("nop");
MyBuff_AI0[ 214 ]  = PIND ; asm("nop");
MyBuff_AI0[ 215 ]  = PIND ; asm("nop");
MyBuff_AI0[ 216 ]  = PIND ; asm("nop");
MyBuff_AI0[ 217 ]  = PIND ; asm("nop");
MyBuff_AI0[ 218 ]  = PIND ; asm("nop");
MyBuff_AI0[ 219 ]  = PIND ; asm("nop");
MyBuff_AI0[ 220 ]  = PIND ; asm("nop");
MyBuff_AI0[ 221 ]  = PIND ; asm("nop");
MyBuff_AI0[ 222 ]  = PIND ; asm("nop");
MyBuff_AI0[ 223 ]  = PIND ; asm("nop");
MyBuff_AI0[ 224 ]  = PIND ; asm("nop");
MyBuff_AI0[ 225 ]  = PIND ; asm("nop");
MyBuff_AI0[ 226 ]  = PIND ; asm("nop");
MyBuff_AI0[ 227 ]  = PIND ; asm("nop");
MyBuff_AI0[ 228 ]  = PIND ; asm("nop");
MyBuff_AI0[ 229 ]  = PIND ; asm("nop");
MyBuff_AI0[ 230 ]  = PIND ; asm("nop");
MyBuff_AI0[ 231 ]  = PIND ; asm("nop");
MyBuff_AI0[ 232 ]  = PIND ; asm("nop");
MyBuff_AI0[ 233 ]  = PIND ; asm("nop");
MyBuff_AI0[ 234 ]  = PIND ; asm("nop");
MyBuff_AI0[ 235 ]  = PIND ; asm("nop");
MyBuff_AI0[ 236 ]  = PIND ; asm("nop");
MyBuff_AI0[ 237 ]  = PIND ; asm("nop");
MyBuff_AI0[ 238 ]  = PIND ; asm("nop");
MyBuff_AI0[ 239 ]  = PIND ; asm("nop");
MyBuff_AI0[ 240 ]  = PIND ; asm("nop");
MyBuff_AI0[ 241 ]  = PIND ; asm("nop");
MyBuff_AI0[ 242 ]  = PIND ; asm("nop");
MyBuff_AI0[ 243 ]  = PIND ; asm("nop");
MyBuff_AI0[ 244 ]  = PIND ; asm("nop");
MyBuff_AI0[ 245 ]  = PIND ; asm("nop");
MyBuff_AI0[ 246 ]  = PIND ; asm("nop");
MyBuff_AI0[ 247 ]  = PIND ; asm("nop");
MyBuff_AI0[ 248 ]  = PIND ; asm("nop");
MyBuff_AI0[ 249 ]  = PIND ; asm("nop");
MyBuff_AI0[ 250 ]  = PIND ; asm("nop");
MyBuff_AI0[ 251 ]  = PIND ; asm("nop");
MyBuff_AI0[ 252 ]  = PIND ; asm("nop");
MyBuff_AI0[ 253 ]  = PIND ; asm("nop");
MyBuff_AI0[ 254 ]  = PIND ; asm("nop");
MyBuff_AI0[ 255 ]  = PIND ; asm("nop");
 ;};

Ну, а здесь результат первых измерений:

К сожаления генератора на большую частоту нет.

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

Частота захвата 4 Msps. После обкатки схемы, планирую поменять кварц и достичь частоты 5 Msps.

 

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

Logik пишет:

oleg_kazakof пишет:

Насколько я понимаю пультоскопу планируется автономное питание (что для малогабаритного прибора очень большой плюс) и причем здесь по теории Logikа.

 

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

Судя по всему как раз с тобой сдесь обсуждать и нечего, я пока не видел ни одного твоего нормального ответа. А электронику (в то время называлась радиотехника), я начал изучать 45 лет назад с транзистора МП39 (ТЫ наверное о таком и неслышал).

 

sirota
Offline
Зарегистрирован: 18.08.2015

oleg_kazakof пишет:

Судя по всему как раз с тобой сдесь обсуждать и нечего, я пока не видел ни одного твоего нормального ответа. А электронику (в то время называлась радиотехника), я начал изучать 45 лет назад с транзистора МП39 (ТЫ наверное о таком и неслышал).

Я думаю не стоит тут писюнами меряться. Если уж такой умный - сделай. Мы спасибо скажем, линки на тебя раскидывать будем и благотворить. А пиз...ть попусту... Знаешь в чем может быть затык, расскажи как его обойти.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

VetalST пишет:

Давно жду, хоть примера полного кода и схемы. АЦП уже второй месяц валяется. Я с ним просто никогда не сталкивался не хотелось бы спалить после первого включения.

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

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