Мини осциллограф Arduino на LCD 5110

dtvims
Offline
Зарегистрирован: 26.11.2012

Удвоение толщины линий пошло на пользу :)

Параметром "const byte vTextShift = 130;", в начале скетча, двигаем текст ниже, а все остальное удваиваем вот так:

void draw1(void) {
  int i,j;
//  tft.drawFastVLine((128-numOfSamples), 0, 63, ST7735_YELLOW);
  if (useThreshold != 0)
     for (i=0; i<numOfSamples<<2; i+=3){
        tft.drawPixel(i,0,YELLOW);
        tft.drawPixel(i,126-(theThreshold>>1),YELLOW);
        tft.drawPixel(i,126,YELLOW);
     }
  j=numOfSamples/2;
  for (i=0; i<126; i+=5) {
     tft.drawPixel(0,i,YELLOW);
     tft.drawPixel(j,i,YELLOW);
     tft.drawPixel(j+j,i,YELLOW);
     tft.drawPixel(j+j+j,i,YELLOW);
     tft.drawPixel((numOfSamples<<1)-1,i,YELLOW);
  }
  tft.drawLine(0,adcOldReadings[0]<<1,1,(adcOldReadings[1]<<1)+1, BLACK);
  tft.drawLine(1,adcOldReadings[0]<<1,2,(adcOldReadings[1]<<1)+1, BLACK);
  for (i=1; i<numOfSamples-1; i++){ // Draw using lines
      tft.drawLine(i<<1,adcOldReadings[i]<<1,(i<<1)+1,(adcOldReadings[i+1]<<1)+1, BLACK);
      tft.drawLine((i<<1)+1,adcOldReadings[i]<<1,(i<<1)+2,(adcOldReadings[i+1]<<1)+1, BLACK);
      tft.drawLine((i<<1)-2,adcReadings[i-1]<<1,(i<<1)-1,(adcReadings[i]<<1)+1, WHITE);
      tft.drawLine((i<<1)-1,adcReadings[i-1]<<1,i<<1,(adcReadings[i]<<1)+1, WHITE);
      adcOldReadings[i-1]=adcReadings[i-1];
  }
  tft.drawLine((numOfSamples<<1)-4,adcReadings[numOfSamples-2]<<1,(numOfSamples<<1)-3,(adcReadings[numOfSamples-1]<<1)+1, WHITE);
  tft.drawLine((numOfSamples<<1)-3,adcReadings[numOfSamples-2]<<1,(numOfSamples<<1)-2,(adcReadings[numOfSamples-1]<<1)+1, WHITE);
  adcOldReadings[numOfSamples-2]=adcReadings[numOfSamples-2];
  adcOldReadings[numOfSamples-1]=adcReadings[numOfSamples-1];
}

Недостатком, что отрисовка стала медленнее, т.к. рисовать стало больше, зато красивше:

Immortal
Offline
Зарегистрирован: 28.12.2013

Сколько герц или кадров в секунду получилось?

dtvims
Offline
Зарегистрирован: 26.11.2012

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

Скорость отрисовки тут зависит от сложности графика. Данная картинка мене секунды рисуется. 5 периодов от 0 до 3.3В отрисовывается до 2-х секунд. Когда периодов ближе к 50, невооруженным глазом видно как перерисовавается весь график на протяжении нескольких секунд. Конечно есть еще задержка на работу самого ADC.

Алгоритм в 2-х словах:

1. Выполняется функция измерений, в количестве numOfSamples штук. Между измерениями может быть задержка в микросекундах для масштабирования. Чем меньше частота сигнала, тем больше задержка, чтобы на дисплее увидеть приблизительно 2 периода при автоматическом масштабировании. Данные сразу пересчитываются на масштаб отображения. Далее 2.

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

3. вывод текста, отработка меню по USART не заслуживают особого внимания.

4. Возвращемся на 1-й пункт.

pooller
Offline
Зарегистрирован: 13.04.2014

я так понимаю const byte theAnalogPin = 7;    нужно изменить на пин А5?

dtvims
Offline
Зарегистрирован: 26.11.2012

Зачем?

pooller
Offline
Зарегистрирован: 13.04.2014

Так а куда щуп подключить? Ведь 7 американских используются

pooller
Offline
Зарегистрирован: 13.04.2014

Телефон слова заменяет, как ему вздумается

pooller
Offline
Зарегистрирован: 13.04.2014

Так а куда щуп подключить? Ведь 7 пин  используется экраном

pooller
Offline
Зарегистрирован: 13.04.2014

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

dtvims
Offline
Зарегистрирован: 26.11.2012

Проверять на осцилографе можно только сравнивая частоты и амплитуды, т.к. отображается картинка позже по времени после измерения. У меня именно 7-й и 8-й пины, единственные свободные от монитора, а моник сидит на первых 5. И ДА, ADC  подсаживает сигнал, на stm32 значительно сильнее. Для этого обычно усилители ставят.

pooller
Offline
Зарегистрирован: 13.04.2014

я не говорю за картинку. Картинка как раз очень порадовала. Красивая, четкая синусоида, и то что она медленно отрисовывается это не проблема. Огорчило то, что амплитуда и частота пишутся с отклонениями. 
Я даже на вход подключил пальчиковую батарейку предварительно заменив напряжение на ней поверинным прибором. Вольтметр показал 1.569 В а дуина мне выдала линию на отметке 1.27В 

Далее я генератором задал частоту синусоиды 500 Гц  2 В на что дуина мне выдала 320Гц 1,36В и красивую синусоиду правда положительная полуволна слегка просажена (тоже самое произошло на паралельно подключенном осциллографе при присоединении дуины)

dtvims
Offline
Зарегистрирован: 26.11.2012

Ну расчет часототы и вольтаж зависит от настроек. Там есть константы, которые за это отвечают. За вольтаж именно константа. За частоту отвечает задержка между измерениями, вроде там в коде минимальная задержка, как задержка в работе самого adc, стоит 30микросекунд, вот ее и надо регулировать. Плюс регулируется центральная горизонтальная полоска, которая определяет позицию измерений, ее можно двигать вверх вниз и количество точек от начала до следующего пересечения с сигналом, помноженное на время измерения и будет время полупериода, от куда и считается частота.  Расчеты очень грубые, вот и врет... 50hz у меня тоже скачут в приличном диапазоне, но вполне угадываются...

Artem_M
Offline
Зарегистрирован: 15.05.2014

У китайцев такие осциллографы по 40 баксов: http://www.dx.com/ru/p/234107

dtvims
Offline
Зарегистрирован: 26.11.2012

Думается на ebay  или на aliexpres дешевле найти можно. Есть модельки и еще интереснее. Но вся фишка в том, чтобы сделать самому!

pooller
Offline
Зарегистрирован: 13.04.2014

Да, в том то и дело, что интересно самому

pan-electric
Offline
Зарегистрирован: 15.05.2014
Всем добрый вечер.
Можно подключить этот ЖК дисплей к ардуине уно и сделать осциллограф?
Если да то как подключиться правильно то есть распиновку и как скорректировать прогру под неё
pan-electric
Offline
Зарегистрирован: 15.05.2014

ЖК дисплей HITACHI LMG7400PLFC

pan-electric
Offline
Зарегистрирован: 15.05.2014
я совсем новичок в этом и надеюсь, и полагаюсь на вашу помощь.
Заранее большое спасибо.
 
pooller
Offline
Зарегистрирован: 13.04.2014

240 x128 HD61830B подобный дисплей обсуждали в начале темы, перечитай и все получитсяhttp://pdf1.alldatasheet.com/datasheet-pdf/view/147627/HITACHI/LMG7400PLFC.html

pan-electric
Offline
Зарегистрирован: 15.05.2014

Спасибо pooller за ответ ша посмотрю

pooller
Offline
Зарегистрирован: 13.04.2014

Там в датащите рапиновка написана вот и подключай согласно схемы

pan-electric
Offline
Зарегистрирован: 15.05.2014

есть один вопрос у меня могут удалять комментарии в форуме? я так спрашиваю был один форум и там мне один ответил линком на страницу в интернете, теперь зашёл на форум и там нет больше его комментарии и совсем будто не было

pooller
Offline
Зарегистрирован: 13.04.2014

Не знаю, сам тут чуть больше месяца.

pan-electric
Offline
Зарегистрирован: 15.05.2014

Что то ничего не понял один туман, завтра по новой посмотрю.

dtvims
Offline
Зарегистрирован: 26.11.2012

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

P.s. не замечал, чтобы от сюда ссылки удаляли. Мы же не спамим, а по делу :)

pan-electric
Offline
Зарегистрирован: 15.05.2014

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

Artem_M
Offline
Зарегистрирован: 15.05.2014
Artem_M
У китайцев такие осциллографы по 40 баксов: http://www.dx.com/ru/p/234107
dtvims
Есть модельки и еще интереснее. Но вся фишка в том, чтобы сделать самому!
 
Это понятно, я тоже такой хочу сам собрать, но с прибора по ссылке можно содрать как минимум органы управления, а возможно и что то из схемотехники.
dtvims
Offline
Зарегистрирован: 26.11.2012

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

Artem_M
Offline
Зарегистрирован: 15.05.2014
В описании - AVR 8-битное ядро
 
Но АЦП похоже внешний, как и память для хранения 250 000 выборок. Интересно было бы разобрать такой
udavos
Offline
Зарегистрирован: 10.06.2014

0

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

dtvims пишет:

Удвоение толщины линий пошло на пользу :)

Параметром "const byte vTextShift = 130;", в начале скетча, двигаем текст ниже, а все остальное удваиваем вот так:


Недостатком, что отрисовка стала медленнее, т.к. рисовать стало больше, зато красивше:

А можно ли полный код выложить для этого дисплея и дисплея от нокии 5110?

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

dtvims пишет:

Ключевое - это заменить U8GLIB_MINI12864 на U8GLIB_PCD8544

const byte lcdLED = 6;                   // LED Backlight
const byte lcdA0 = 7;                    // D/C - Data and command selections. L: command  H : data
const byte lcdRESET = 8;                 // RST- Low reset
const byte lcdCS = 9;                    // SCE - SPI Chip Select (internally pulled up), active low
const byte lcdMOSI = 11;                 // DIN(MOSI) - SPI Data transmission
const byte lcdSCK = 13;                  // SCK - SPI Serial Clock

а вот дальше начинаются проблемы, что разрешение экрана меньше чем надо :(

На фото дисплей 5110 с последней программой, а на дуине замкнут adc7 с d0(rx), таким образом на вход осцилографа подается сигнал с uart'а, куда бегут с компа буковки "а".

Не компилитьсяпод arduino uno

dtvims
Offline
Зарегистрирован: 26.11.2012

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

Maverik
Offline
Зарегистрирован: 12.09.2012

для дисплея QVGA на ILI9340 скомпилировать не получилось, хотя родные примеры от Adafruit компилируются и запускаются.

а можо выложить финальный код вместе с библиотеками, в которых делались изменения, а то половина ссылок уже не работает ?? 

 

Maverik
Offline
Зарегистрирован: 12.09.2012

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

вместо объявления пина например

int clock = 5;

использовать 

#define clock 5

ну и так далее

портами управлять напрямую

константы хранить во флеше

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

Maverik
Offline
Зарегистрирован: 12.09.2012

та есть у меня мега, просто не хочется ее тратить на енто дело.

афтар начинал с того, что у него завалялась мини про и дисплей 5110, вот и подумалось что проект он впихнул в мини про.

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Maverik пишет:

та есть у меня мега, просто не хочется ее тратить на енто дело.

афтар начинал с того, что у него завалялась мини про и дисплей 5110, вот и подумалось что проект он впихнул в мини про.

Вот и я надеялся  что на не дорогом железеполучится осцилографический пробничек.

Maverik
Offline
Зарегистрирован: 12.09.2012

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

ради 200 байт задействовать мегу вместо мини про это кощунство. пока думаю вот этот вариант

http://ucexperiment.wordpress.com/2013/02/23/interfacing-microchip-23k256-32kb-sram-spi-memory-to-the-arduino/

цена вопроса 37 руб (при заказе от 10 штук) получаем дополнительно 32 кб ОЗУ и радуемся.

одно не пойму - почему до сих пор это никто из местных не реализовал.

 

ну и второй вариант - копать другую библиотеку графическую и еще уменьшать размер занимаемой памяти. возможно, что-то сбросить в eeprom

Maverik
Offline
Зарегистрирован: 12.09.2012

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

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Ну мне вообще не поплечу такие подвиги)),слабоват в программировании я

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

убери вообще все обращения в uart, как и Serial.begin. там только при инициализации сразу около 200 байт резервируется под буфер

Maverik
Offline
Зарегистрирован: 12.09.2012

не хватает 81 байт....  чувствую без 23к256 не обойтись..

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

еще поковыряйся

кинь хоть код который переделываешь

dtvims
Offline
Зарегистрирован: 26.11.2012

Еще можно избавиться от загрузчика arduino, воспользоваться AVRStudio и залить прошивку как на чистый МК - еще и место останется. Правда придется переписать чуток саму прошивку - избавиться от функций библиотек arduino. 

Maverik
Offline
Зарегистрирован: 12.09.2012

можно, наверное, но всё равно памяти будет очень впритык....  так что заказал 23k256.   :-)

dtvims
Offline
Зарегистрирован: 26.11.2012

Проверено, что если не использовать библиотеки Arduino и компилить в чистый МК в AVRStudio разница очень существенная. На простых задачах разница в несколько раз.

Да взять хотябы одну инициализацию переферии в Arduino по умолчанию, добавим настройки компилятора (оптимизация), убираем загрузчик, работа напрямую с портами - места много освободится.

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

Maverik
Offline
Зарегистрирован: 12.09.2012

я не умею работать напрямую с портами и AvrStudio в глаза не видел, так что ничего сказать не могу на этот счет.  ардуинка мне нравится именно тем, что можно не "работать напрямую с портами".  так что мой выбор по прежднему 23k256, благо что чип+дип вроде бы взялся за ум и внезапно выставил адекватные ценники.  я так понимаю, что pro mini 3.3вольтовая + 23k256 = 34 kb ОЗУ практически без плясок с бубном.

dtvims
Offline
Зарегистрирован: 26.11.2012

У чип и дипа адекватные цены только в оптовом отделе, где заказ минимум на 400р., ито не на все, так что если уж очень хочется у них, то не пользуйтесь розницой. А работать с чистым контроллером не на много сложнее - инструкций в сети навалом, в этом особенная прелесть AVR.

Maverik
Offline
Зарегистрирован: 12.09.2012

ты просто давненько не заходил к ним. эти гуси по ценам умудрились переплюнуть даже нижегородский чип (chip-nn.ru). естественно, не по всем разделам, например в раздел ардуинок на чип+дипе лучше даже не заходить, зато к примеру предмет обсуждения реально стоит 37 руб при заказе от 10 штук, единичный заказ 75 руб.
http://www.chipdip.ru/product/23k256-i-sn/ жаль что корпус soip8, но это небольшая проблема.
А теперь найди такой же ценник на ебее, везде раз в десять (!!!) дороже.
Доставку сделали тоже норм, через Евросеть около 180 руб. год назад никогда бы не подумал что буду однажды хвалить чип+дип, но в жизни всякие чудеса случаются )))

кстати, оставь плиз какой-нибудь контакт - аську, скайп чего-нибудь..