Здравствуйте, господа. Имеется плата uno, и сенсорный экран на данный момент (код изначально не мой, я только немного подправил) реализован неплохой 2х канальный осциллограф. Хочу реализовать сенсорное управление режимами, но что то уже несколько дней ничего не выходит.
#include "TFTLCD.h"
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//#include <Arial14.h> // font definitions
#define txtLINE0 0
#define txtLINE1 16
#define txtLINE2 30
#define txtLINE3 46
const int LCD_WIDTH = 320;
const int LCD_HEIGHT = 240;
const int SAMPLES = 270;
const int DOTS_DIV = 30;
int sensorValue = 0;
const int ad_sw = A3; // Analog 3 pin for switches
const int ad_ch0 = A6; // Analog 6 pin for channel 0
const int ad_ch1 = A7; // Analog 7 pin for channel 1
const unsigned long VREF[] = {150, 300, 750, 1500, 3000}; // reference voltage 5.0V -> 150 : 1V/div range (100mV/dot)
// It means 5.0 * DOTS_DIV = 150. Use 4.9 if reference voltage is 4.9[V]
// -> 300 : 0.5V/div
// -> 750 : 0.2V/div
// ->1500 : 100mV/div
// -> 3000 : 50mV/div
const int MILLIVOL_per_dot[] = {33, 17, 6, 3, 2}; // mV/dot
const int MODE_ON = 0;
const int MODE_INV = 1;
const int MODE_OFF = 2;
const char *Modes[] = {" NORM", " INV", " OFF"};
const int TRIG_AUTO = 0;
const int TRIG_NORM = 1;
const int TRIG_SCAN = 2;
const int TRIG_ONE = 3;
const char *TRIG_Modes[] = {" Auto", " Norm", " Scan", " One"};
const int TRIG_E_UP = 0;
const int TRIG_E_DN = 1;
#define RATE_MIN 0
#define RATE_MAX 13
const char *Rates[] = {"F1-1", "F1-2 ", "F2 ", "5ms", "10ms", "20ms", "50ms", "0.1s", "0.2s", "0.5s", "1s", "2s", "5s", "10s"};
#define RANGE_MIN 0
#define RANGE_MAX 4
const char *Ranges[] = {"1V ", "0.5V", "0.2V", "0.1V", "50mV"};
unsigned long startMillis;
byte data[4][SAMPLES]; // keep twice of the number of channels to make it a double buffer
byte sample=0; // index for double buffer
///////////////////////////////////////////////////////////////////////////////////////////////
// Define colors here
#define BGCOLOR BLACK
#define GRIDCOLOR WHITE
#define CH1COLOR BLUE
#define CH2COLOR GREEN
// Declare variables and set defaults here
// Note: only ch1 is available with Aitendo's parallel 320x240 TFT LCD
byte range0 = RANGE_MIN, ch0_mode = MODE_ON; // CH0
short ch0_off = 204;
byte range1 = RANGE_MIN, ch1_mode = MODE_ON; // CH1
short ch1_off = 204;
byte rate = 3; // sampling rate
byte trig_mode = TRIG_AUTO, trig_lv = 30, trig_edge = TRIG_E_UP, trig_ch = 1; // trigger settings
byte Start = 1; // Start sampling
byte menu = 0; // Default menu
///////////////////////////////////////////////////////////////////////////////////////////////
void setup(){
tft.reset();
tft.initDisplay();
tft.setRotation(3);
tft.setTextSize(1);
tft.fillScreen(BGCOLOR);
Serial.begin(9600);
DrawGrid();
DrawText();
}
void CheckSW() {
static unsigned long Millis = 0, oMillis = 0;
unsigned long ms;
unsigned short ain = analogRead(ad_sw);
//Serial.println(ain);
return;
ms = millis();
if ((ms - Millis)<5)
return;
Millis = ms;
oMillis = Millis;
//Serial.println(ain);
DrawText();
}
void menu0_sw(int sw) {
switch (sw) {
case 0:
// START/HOLD
if (Start)
Start = 0;
else
Start = 1;
break;
case 1:
// CH0 RANGE -
if (range0 < RANGE_MAX)
range0 ++;
break;
case 2:
// CH1 RANGE -
if (range1 < RANGE_MAX)
range1 ++;
break;
case 3:
// RATE FAST
if (rate > 0)
rate --;
break;
case 4:
// TRIG MODE
if (trig_mode < TRIG_ONE)
trig_mode ++;
else
trig_mode = 0;
break;
case 5:
// SEND
SendData();
break;
case 6:
// TRIG MODE
if (trig_mode > 0)
trig_mode --;
else
trig_mode = TRIG_ONE;
break;
case 7:
// RATE SLOW
if (rate < RATE_MAX)
rate ++;
break;
case 8:
// CH1 RANGE +
if (range1 > 0)
range1 --;
break;
case 9:
// CH0 RANGE +
if (range0 > 0)
range0 --;
break;
case 10:
default:
// MENU SW
menu ++;
break;
}
}
void SendData() {
Serial.print(Rates[rate]);
Serial.println("/div (30 samples)");
for (int i=0; i<SAMPLES; i ++) {
Serial.print(data[sample + 0][i]*MILLIVOL_per_dot[range0]);
Serial.print(" ");
Serial.println(data[sample + 1][i]*MILLIVOL_per_dot[range1]);
}
}
void DrawGrid() {
for (int x=0; x<=SAMPLES; x += 2) { // Horizontal Line
for (int y=0; y<=LCD_HEIGHT; y += DOTS_DIV) {
tft.drawPixel(x, y, GRIDCOLOR);
CheckSW();
}
if (LCD_HEIGHT == 240)
tft.drawPixel(x, LCD_HEIGHT-1, GRIDCOLOR);
}
for (int x=0; x<=SAMPLES; x += DOTS_DIV ) { // Vertical Line
for (int y=0; y<=LCD_HEIGHT; y += 2) {
tft.drawPixel(x, y, GRIDCOLOR);
CheckSW();
}
}
}
void DrawText() {
tft.setTextColor(YELLOW);
tft.setTextSize(1);
tft.setCursor(SAMPLES+3, 5);
tft.print(Ranges[range1]);
tft.println("/DIV");
tft.setCursor(SAMPLES+3, 15);
tft.print(Rates[rate]);
tft.println("/DIV");
tft.setCursor(SAMPLES+3, 25);
tft.println(TRIG_Modes[trig_mode]);
tft.setCursor(SAMPLES+3, 35);
tft.println(trig_edge == TRIG_E_UP ? "UP" : "DN");
tft.setCursor(SAMPLES+3, 45);
tft.println(Modes[ch1_mode]);
tft.setCursor(SAMPLES+3, 60);
tft.setTextColor(RED);
tft.println(" 5 V");
tft.setCursor(SAMPLES+3, 90);
tft.println(" 4 V");
tft.println("");
tft.setCursor(SAMPLES+3, 120);
tft.println(" 3 V");
tft.println("");
tft.setCursor(SAMPLES+3, 150);
tft.println(" 2 V");
tft.println("");
tft.setCursor(SAMPLES+3, 180);
tft.println(" 1 V");
tft.println("");
tft.setCursor(SAMPLES+3, 210);
tft.println(" 0 V");
// tft.setCursor(SAMPLES, 70);
// tft.println(trig_ch == 0 ? "T:1" : "T:2");
}
void DrawGrid(int x) {
if ((x % 2) == 0)
for (int y=0; y<=LCD_HEIGHT; y += DOTS_DIV)
tft.drawPixel(x, y, GRIDCOLOR);
if ((x % DOTS_DIV) == 0)
for (int y=0; y<=LCD_HEIGHT; y += 2)
tft.drawPixel(x, y, GRIDCOLOR);
}
void ClearAndDrawGraph() {
int clear = 0;
if (sample == 0)
clear = 2;
#if 0
for (int x=0; x<SAMPLES; x++) {
GLCD.SetDot(x, LCD_HEIGHT-data[clear+0][x], WHITE);
GLCD.SetDot(x, LCD_HEIGHT-data[clear+1][x], WHITE);
GLCD.SetDot(x, LCD_HEIGHT-data[sample+0][x], BLACK);
GLCD.SetDot(x, LCD_HEIGHT-data[sample+1][x], BLACK);
}
#else
for (int x=0; x<(SAMPLES-1); x++) {
tft.drawLine(x, LCD_HEIGHT-data[clear+0][x], x+1, LCD_HEIGHT-data[clear+0][x+1], BGCOLOR);
tft.drawLine(x, LCD_HEIGHT-data[clear+1][x], x+1, LCD_HEIGHT-data[clear+1][x+1], BGCOLOR);
if (ch0_mode != MODE_OFF)
tft.drawLine(x, LCD_HEIGHT-data[sample+0][x], x+1, LCD_HEIGHT-data[sample+0][x+1], CH1COLOR);
if (ch1_mode != MODE_OFF)
tft.drawLine(x, LCD_HEIGHT-data[sample+1][x], x+1, LCD_HEIGHT-data[sample+1][x+1], CH2COLOR);
CheckSW();
}
#endif
}
void ClearAndDrawDot(int i) {
int clear = 0;
if (i <= 1)
return;
if (sample == 0)
clear = 2;
#if 0
for (int x=0; x<SAMPLES; x++) {
GLCD.SetDot(x, LCD_HEIGHT-data[clear+0][x], WHITE);
GLCD.SetDot(x, LCD_HEIGHT-data[clear+1][x], WHITE);
GLCD.SetDot(x, LCD_HEIGHT-data[sample+0][x], BLACK);
GLCD.SetDot(x, LCD_HEIGHT-data[sample+1][x], BLACK);
}
#else
tft.drawLine(i-1, LCD_HEIGHT-data[clear+0][i-1], i, LCD_HEIGHT-data[clear+0][i], BGCOLOR);
tft.drawLine(i-1, LCD_HEIGHT-data[clear+1][i-1], i, LCD_HEIGHT-data[clear+1][i], BGCOLOR);
if (ch0_mode != MODE_OFF)
tft.drawLine(i-1, LCD_HEIGHT-data[sample+0][i-1], i, LCD_HEIGHT-data[sample+0][i], CH1COLOR);
if (ch1_mode != MODE_OFF)
tft.drawLine(i-1, LCD_HEIGHT-data[sample+1][i-1], i, LCD_HEIGHT-data[sample+1][i], CH2COLOR);
#endif
DrawGrid(i);
}
void DrawGraph() {
for (int x=0; x<SAMPLES; x++) {
tft.drawPixel(x, LCD_HEIGHT-data[sample+0][x], CH1COLOR);
tft.drawPixel(x, LCD_HEIGHT-data[sample+1][x], CH2COLOR);
}
}
void ClearGraph() {
int clear = 0;
if (sample == 0)
clear = 2;
for (int x=0; x<SAMPLES; x++) {
tft.drawPixel(x, LCD_HEIGHT-data[clear+0][x], BGCOLOR);
tft.drawPixel(x, LCD_HEIGHT-data[clear+1][x], BGCOLOR);
}
}
inline unsigned long adRead(byte ch, byte mode, int off)
{
unsigned long a = analogRead(ch);
a = ((a+off)*VREF[ch == ad_ch0 ? range0 : range1]+512) >> 10;
a = a>=(LCD_HEIGHT+1) ? LCD_HEIGHT : a;
if (mode == MODE_INV)
return LCD_HEIGHT - a;
return a;
}
void loop() {
if (trig_mode != TRIG_SCAN) {
unsigned long st = millis();
byte oad;
if (trig_ch == 0)
oad = adRead(ad_ch0, ch0_mode, ch0_off);
else
oad = adRead(ad_ch1, ch1_mode, ch1_off);
for (;;) {
byte ad;
if (trig_ch == 0)
ad = adRead(ad_ch0, ch0_mode, ch0_off);
else
ad = adRead(ad_ch1, ch1_mode, ch1_off);
if (trig_edge == TRIG_E_UP) {
if (ad >= trig_lv && ad > oad)
break;
} else {
if (ad <= trig_lv && ad < oad)
break;
}
oad = ad;
CheckSW();
if (trig_mode == TRIG_SCAN)
break;
if (trig_mode == TRIG_AUTO && (millis() - st) > 100)
break;
}
}
// sample and draw depending on the sampling rate
if (rate <= 5 && Start) {
// change the index for the double buffer
if (sample == 0)
sample = 2;
else
sample = 0;
if (rate == 0) { // full speed, channel 0 only
unsigned long st = millis();
for (int i=0; i<SAMPLES; i ++) {
data[sample+0][i] = adRead(ad_ch0, ch0_mode, ch0_off);
}
for (int i=0; i<SAMPLES; i ++)
data[sample+1][i] = 0;
// Serial.println(millis()-st);
} else if (rate == 1) { // full speed, channel 1 only
unsigned long st = millis();
for (int i=0; i<SAMPLES; i ++) {
data[sample+1][i] = adRead(ad_ch1, ch1_mode, ch1_off);
}
for (int i=0; i<SAMPLES; i ++)
data[sample+0][i] = 0;
// Serial.println(millis()-st);
} else if (rate == 2) { // full speed, dual channel
unsigned long st = millis();
for (int i=0; i<SAMPLES; i ++) {
data[sample+0][i] = adRead(ad_ch0, ch0_mode, ch0_off);
data[sample+1][i] = adRead(ad_ch1, ch1_mode, ch1_off);
}
// Serial.println(millis()-st);
} else if (rate >= 3 && rate <= 5) { // .5ms, 1ms or 2ms sampling
const unsigned long r_[] = {5000/DOTS_DIV, 10000/DOTS_DIV, 20000/DOTS_DIV};
unsigned long st0 = millis();
unsigned long st = micros();
unsigned long r = r_[rate - 3];
for (int i=0; i<SAMPLES; i ++) {
while((st - micros())<r) ;
st += r;
data[sample+0][i] = adRead(ad_ch0, ch0_mode, ch0_off);
data[sample+1][i] = adRead(ad_ch1, ch1_mode, ch1_off);
}
// Serial.println(millis()-st0);
}
ClearAndDrawGraph();
CheckSW();
DrawGrid();
DrawText();
} else if (Start) { // 5ms - 500ms sampling
// copy currently showing data to another
if (sample == 0) {
for (int i=0; i<SAMPLES; i ++) {
data[2][i] = data[0][i];
data[3][i] = data[1][i];
}
} else {
for (int i=0; i<SAMPLES; i ++) {
data[0][i] = data[2][i];
data[1][i] = data[3][i];
}
}
const unsigned long r_[] = {50000/DOTS_DIV, 100000/DOTS_DIV, 200000/DOTS_DIV,
500000/DOTS_DIV, 1000000/DOTS_DIV, 2000000/DOTS_DIV,
5000000/DOTS_DIV, 10000000/DOTS_DIV};
unsigned long st0 = millis();
unsigned long st = micros();
for (int i=0; i<SAMPLES; i ++) {
while((st - micros())<r_[rate-6]) {
CheckSW();
if (rate<6)
break;
}
if (rate<6) { // sampling rate has been changed
tft.fillScreen(BGCOLOR);
break;
}
st += r_[rate-6];
if (st - micros()>r_[rate-6])
st = micros(); // sampling rate has been changed to shorter interval
if (!Start) {
i --;
continue;
}
data[sample+0][i] = adRead(ad_ch0, ch0_mode, ch0_off);
data[sample+1][i] = adRead(ad_ch1, ch1_mode, ch1_off);
ClearAndDrawDot(i);
}
// Serial.println(millis()-st0);
DrawGrid();
DrawText();
} else {
CheckSW();
}
if (trig_mode == TRIG_ONE)
Start = 0;
}
Здравствуйте, господа. Имеется плата uno, и сенсорный экран на данный момент (код изначально не мой, я только немного подправил) реализован неплохой 2х канальный осциллограф. Хочу реализовать сенсорное управление режимами, но что то уже несколько дней ничего не выходит.
нарисованной схемы нет. Прото берется 2.4"TFT SHIELD и втавлется в arduino uno. (по пинам идеально подходит, ибо так изначально и планировалась эта приблуда) при этом шилд занимает поти ве свободные входы. отаются только А7 и А6, которые и ипользуются как входы оциллографа(вставить шилд надо так, чтобы А7 И А6 остались свободныи). Верхний предел проверить не было возожности(частично из-за того, что нет кнопок управления. Не могу увеличить скороть развертки).
Есть цветной дисплейчик ILI9361С. Автор библиотеки утверждает, что он афигеть какой быстрый! И разрешение у него 128х128. Вот на нем бы смастерить! Мне кажется, что вообще классно должно получиться.
Я баловался с таким дисплейчиком. На мой взгляд, действительно графику шустро рисует. Жаль, что не силен в программировании, а то бы попробовал ваши работы переделать на этот дисплей.
А у меня был сенсорный экран под UNO. Взял скетч "Noriaki Mitsunaga" (как в 203 посте), доработал индикацию параметров, добавил сенсорные кнопки переключения режимов.
А у меня был сенсорный экран под UNO. Взял скетч "Noriaki Mitsunaga" (как в 203 посте), доработал индикацию параметров, добавил сенсорные кнопки переключения режимов.
А скетч с доработанными кнопками где? Я заливал себе скетч от Noriaki Mitsunaga" (как в 203 посте), но только практчески все аналоговые входы UNO заняты экраном, кроме "А5" а в скетче вовсе указаны входы "А6" и "А7", которых в Arduino UNO совсем нет. Я только один канал на А5 задействовал а второй 5вольт показывал постоянно.
А скетч с доработанными кнопками где? Я заливал себе скетч от Noriaki Mitsunaga" (как в 203 посте), но только практчески все аналоговые входы UNO заняты экраном, кроме "А5" а в скетче вовсе указаны входы "А6" и "А7", которых в Arduino UNO совсем нет. Я только один канал на А5 задействовал а второй 5вольт показывал постоянно.
Сырой пока чтобы выкладывать. Нужно настроить на работу сначала.... сейчас думаю как щуп сделать
Здравствуйте! Собрал такой прибор на дисплее ILI9163C ,все работает,всем спасибо за предоставленные скетчи! Но подскажите ,какая реальная схема имею ввиду как обвязать вход для подключения щупов,кнопки если есть? И расшифруйте пожалуйста параметры которые выводятся на экран? Какой делитель,какое максимальное напряжение можно подать на вход? Что значит параметр V-1,68 ? За ранее всем спасибо,кто откликнется!
Здравствуйте! Собрал такой прибор на дисплее ILI9163C ,все работает,всем спасибо за предоставленные скетчи! Но подскажите ,какая реальная схема имею ввиду как обвязать вход для подключения щупов,кнопки если есть? И расшифруйте пожалуйста параметры которые выводятся на экран? Какой делитель,какое максимальное напряжение можно подать на вход? Что значит параметр V-1,68 ? За ранее всем спасибо,кто откликнется!
А можно видео работы вашего осцилографа, да и скетчик, желательно. У меня давно вертится мыслишка на этом дисплее попробовать.
это скетч на дисплее ILI9163C 128х128 1.44. Все прекрасно работает,убрал сериал на пк,пока не нужен,зато памяти освободилось достаточно! Не понятно все эти параметры на дисплее что конкретно обозначают,как подключать щупы входные к ардуино? Какое максимальное напряжение можно подавать на вход и можно ли как то поставить делитель 1/10 и как правильно смасштабировать в коде,чтобы корректно по осям отоброжалось? Картинку с дисплеем не смог вставить,не понял как!
Мини USB от ардуино нано торчит) пока по нему питается, делитель не ставил, сделал как у вас по схеме 680к и 0,1мк кондер
Есть к вам пара вопросов, почему-то плавает контрастность у дисплея, в скетче приходится править, и причём почти каждое включение, пока не понял в чем дело, и второе на частоте более 1000 герц не получается рассмотреть скважность импульса, как нибудь можно поправить в программе? Буду очень признателен!
Парни ! Все же подскажите мне пожалуйста,как правильно подключить щупы к ардуино? Выше пишите через резистор и кондер,поясните пожалуйста,что куда?За ранее всем спасибо!
Ну тут можно массу вариантов согласования применить, я на аналоговый вход контроллера (у меня А4) последовательно поставил резистор затем конденсатор и на него щуп, номиналы подбираются исходя из нужд и потребностей, у меня резистор 680кОм кондюк на 100 нФ
Парни ! Все же подскажите мне пожалуйста,как правильно подключить щупы к ардуино? Выше пишите через резистор и кондер,поясните пожалуйста,что куда?За ранее всем спасибо!
Попробую ответить развернуто, ниже разные варианты.
1)Если вы уверенны в измеряемом сигнале в том что он до 5В, можно смело цеплять напрямую к входу ардуино.
2)Если вы не всегда уверенны в напряжении измеряемого сигнала или могут быть наводки, то последовательно входу цепляете резистор от 10КОм до 1МОм(1МОм обычно применяют в промышленных приборах)
В этом случае если в измеряемом сигнале произойдет резкий скачек допустим с 5В до 200В то ваш микроконтроллер не пострадает.
3)Если вы хотите отсечь постоянную составляющую ставьте последовательно конденсатор, Конденсатор пропустит только переменку!
4)Если вы заведомо собираетесь мерять сигнал на больших напряжениях, ставится резистивный делитель допустим 1 к 10 и меряя сигнал 50В на порт микроконтроллера поступит всего 5В.
Парни ! Все же подскажите мне пожалуйста,как правильно подключить щупы к ардуино? Выше пишите через резистор и кондер,поясните пожалуйста,что куда?За ранее всем спасибо!
Кстати что-ж вы такой не внимательный, на страничке проэкта четко указанно как подключать.
А что сможете посоветовать по поводу просмотра формы сигнала 1-5 кГц, разрабатываю гитарные эффекты и необходимо зафексировать форму искажений на выходе устройства, на вход подаю сигнал в этом диапазоне с генератора
А что сможете посоветовать по поводу просмотра формы сигнала 1-5 кГц, разрабатываю гитарные эффекты и необходимо зафексировать форму искажений на выходе устройства, на вход подаю сигнал в этом диапазоне с генератора
Доберусь до генератора сигналов гляну, счас нет под рукой.
А вы пробовали и кнопками и потенциометром подстраивать?или только потенциометром.
Доброго времени ! Подключил ваш PULTOSCOP к дисплею ILI9163C очень красиво смотрится! конечно сделал пока без обвязки входов,это поэтому дисплей и показания моргают?
Дисплей ILI9163C смотрится симпатичнее чем дисплей от Nokia. И разрешение побольше, да и цвет присутствует. Поэтому автору бодрому2014 рекомендовал (скорее просил) сделать осцилоскоп с таким дисплеем.
Вот еще бюджетные решения https://retronics.wordpress.com/2012/07/14/the-0-android-oscilloscope/
http://www.instructables.com/id/A-Preamplifier-for-Smartphone-Oscilloscopes/
http://www.instructables.com/id/Chiposcope/
Вот еще бюджетные решения https://retronics.wordpress.com/2012/07/14/the-0-android-oscilloscope/
http://www.instructables.com/id/A-Preamplifier-for-Smartphone-Oscilloscopes/
http://www.instructables.com/id/Chiposcope/
Согласен дешевле чем делитель в звуковую карту компа или мобильного ничего не придумать.
Здравствуйте, господа. Имеется плата uno, и сенсорный экран на данный момент (код изначально не мой, я только немного подправил) реализован неплохой 2х канальный осциллограф. Хочу реализовать сенсорное управление режимами, но что то уже несколько дней ничего не выходит.
А схемка где? Какие характеристики.
Очень хотелось бы по-подробней.
нарисованной схемы нет. Прото берется 2.4"TFT SHIELD и втавлется в arduino uno. (по пинам идеально подходит, ибо так изначально и планировалась эта приблуда) при этом шилд занимает поти ве свободные входы. отаются только А7 и А6, которые и ипользуются как входы оциллографа(вставить шилд надо так, чтобы А7 И А6 остались свободныи). Верхний предел проверить не было возожности(частично из-за того, что нет кнопок управления. Не могу увеличить скороть развертки).
Как и обещал, сделал обзор собираемого осциллографа. Вот ССЫЛКА на него.
мне кажется такая медленная работа изза библиотеки дисплея
плюс лучше избавится от float, а считать int например, а точку вручную рисовать, это должно быть гораздо быстрее
Как и обещал, сделал обзор собираемого осциллографа. Вот ССЫЛКА на него.
Красиво! И доведено до готового изделия.
Респект.
Как и обещал, сделал обзор собираемого осциллографа. Вот ССЫЛКА на него.
Класно получилось!РЕСПЕКТ!
Смотриш и хочется в обиходе иметь!
На счет быстродействия-библиотека U8glib.h самая универсальная и самая тормознуьая что я видел из ардуиновских библиотек!(
Можно разогнать проц это даст еще пару килогерц но с этой библиотекой быстрее не сделаешь((
Можно заменить некоторые ардуиновские функции на Сишные тоже прибавит пару килогерц, но библиотека как якорь.
Есть цветной дисплейчик ILI9361С. Автор библиотеки утверждает, что он афигеть какой быстрый! И разрешение у него 128х128. Вот на нем бы смастерить! Мне кажется, что вообще классно должно получиться.
Я баловался с таким дисплейчиком. На мой взгляд, действительно графику шустро рисует. Жаль, что не силен в программировании, а то бы попробовал ваши работы переделать на этот дисплей.
Да, приборчик получился интересный. Добавить бы ему скорости, устраивал бы меня полностью.
Библиотека U8glib.h может и медленная, но со "стандартной" экран не запускался. Может кто знает, какая библиотека для дисплеев 3410 побыстрей?
Вот себе для работы собрал.
Пользовался пользовался, смотрю все выкладывают.
Вот и мой Пультоскоп!)
Почему то никак не могу откомпилировать скетч. Откликнитесь, кто делал пожалуйста!
Почему то никак не могу откомпилировать скетч. Откликнитесь, кто делал пожалуйста!
Привет у вас FreqCount.h библиотека установлена?
Если нет, установите.
Да, спасибо! Скомпилировалось, нужно было просто перезапустить ардиуну. Мозг зациклился )))
Подключил к генератору - верхняя частота получилась около 10 КГц. Так должно быть? Частоту показывает уверенно, а вот показания амплитуды скачут.
bodriy2014
скажите, с какой тактовой Вы использовали Pro mini?
А то в описании как то не понятно написано "Pro mini(168MHz)" ))
Да, спасибо! Скомпилировалось, нужно было просто перезапустить ардиуну. Мозг зациклился )))
сажите у Вас тоже контрасность плохая окромя вертикальной линии градации?
Jtest
Почему вы использовали медленную функцию analogRead вместо прерывания самого АЦП?
Гдето так:
Вот что у меня получилось:
bodriy2014
скажите, с какой тактовой Вы использовали Pro mini?
А то в описании как то не понятно написано "Pro mini(168MHz)" ))
подойдет любой про мини, я использовал самый дешевый на Atmega168.
Но заливал в Уно и все работает.
сажите у Вас тоже контрасность плохая окромя вертикальной линии градации?
Да вроде контрастность нормальная, я сразу немного прибавил.
А у меня был сенсорный экран под UNO. Взял скетч "Noriaki Mitsunaga" (как в 203 посте), доработал индикацию параметров, добавил сенсорные кнопки переключения режимов.
Пока играюсь. Думаю как сделать и прикрепить щуп.
А у меня был сенсорный экран под UNO. Взял скетч "Noriaki Mitsunaga" (как в 203 посте), доработал индикацию параметров, добавил сенсорные кнопки переключения режимов.
Пока играюсь. Думаю как сделать и прикрепить щуп.
А у меня не компилится сей скетч
Ну по ошибкам же понятночто нужно определить цвета
А скетч с доработанными кнопками где? Я заливал себе скетч от Noriaki Mitsunaga" (как в 203 посте), но только практчески все аналоговые входы UNO заняты экраном, кроме "А5" а в скетче вовсе указаны входы "А6" и "А7", которых в Arduino UNO совсем нет. Я только один канал на А5 задействовал а второй 5вольт показывал постоянно.
Ну по ошибкам же понятночто нужно определить цвета
Дальше ругается-можно увидеть скетч исправленный?
А скетч с доработанными кнопками где? Я заливал себе скетч от Noriaki Mitsunaga" (как в 203 посте), но только практчески все аналоговые входы UNO заняты экраном, кроме "А5" а в скетче вовсе указаны входы "А6" и "А7", которых в Arduino UNO совсем нет. Я только один канал на А5 задействовал а второй 5вольт показывал постоянно.
Сырой пока чтобы выкладывать. Нужно настроить на работу сначала.... сейчас думаю как щуп сделать
А по входам как быть? Или у вашего экранчика нанлоговые пины свободные?
Так мне нужен только один. Для щупа. Вот описание моего экрана:
Uses digital pins 5-13 and analog 0-3. That means you can use digital pins 2, 3 and analog 4 and 5. Pin 12 is available if not using the micro SD
Здравствуйте! Собрал такой прибор на дисплее ILI9163C ,все работает,всем спасибо за предоставленные скетчи! Но подскажите ,какая реальная схема имею ввиду как обвязать вход для подключения щупов,кнопки если есть? И расшифруйте пожалуйста параметры которые выводятся на экран? Какой делитель,какое максимальное напряжение можно подать на вход? Что значит параметр V-1,68 ? За ранее всем спасибо,кто откликнется!
Здравствуйте! Собрал такой прибор на дисплее ILI9163C ,все работает,всем спасибо за предоставленные скетчи! Но подскажите ,какая реальная схема имею ввиду как обвязать вход для подключения щупов,кнопки если есть? И расшифруйте пожалуйста параметры которые выводятся на экран? Какой делитель,какое максимальное напряжение можно подать на вход? Что значит параметр V-1,68 ? За ранее всем спасибо,кто откликнется!
А можно видео работы вашего осцилографа, да и скетчик, желательно. У меня давно вертится мыслишка на этом дисплее попробовать.
bodriy2014
Занимательный у вас вышел девайс! Грех подумал не повторить))
это скетч на дисплее ILI9163C 128х128 1.44. Все прекрасно работает,убрал сериал на пк,пока не нужен,зато памяти освободилось достаточно! Не понятно все эти параметры на дисплее что конкретно обозначают,как подключать щупы входные к ардуино? Какое максимальное напряжение можно подавать на вход и можно ли как то поставить делитель 1/10 и как правильно смасштабировать в коде,чтобы корректно по осям отоброжалось? Картинку с дисплеем не смог вставить,не понял как!
https://yadi.sk/d/cI4Dp4dHm2mSt
Вот ссылка на фото с дисплеем ILI9163C
cilentlekx, спасибо. Посмотрел, хочу тоже попробовать сделать. Посмотрю, что получится.
bodriy2014
Занимательный у вас вышел девайс! Грех подумал не повторить))
Классно, видно по фото что вы туда модуль зарядки для лития поместили.
А вход счупа как то дорабатывали? конденсаторами или делителем?
Мини USB от ардуино нано торчит) пока по нему питается, делитель не ставил, сделал как у вас по схеме 680к и 0,1мк кондер
Есть к вам пара вопросов, почему-то плавает контрастность у дисплея, в скетче приходится править, и причём почти каждое включение, пока не понял в чем дело, и второе на частоте более 1000 герц не получается рассмотреть скважность импульса, как нибудь можно поправить в программе? Буду очень признателен!
У меня тоже плавала контрасность, кроме одной вертикальной шкалы.
Парни ! Все же подскажите мне пожалуйста,как правильно подключить щупы к ардуино? Выше пишите через резистор и кондер,поясните пожалуйста,что куда?За ранее всем спасибо!
Ну тут можно массу вариантов согласования применить, я на аналоговый вход контроллера (у меня А4) последовательно поставил резистор затем конденсатор и на него щуп, номиналы подбираются исходя из нужд и потребностей, у меня резистор 680кОм кондюк на 100 нФ
То есть последовательно резистор,затем конденсатор 680к. и 0,1мкф.на провод,который на А4? И что этим добиваемся-сглаживания или защита от наводок?
Парни ! Все же подскажите мне пожалуйста,как правильно подключить щупы к ардуино? Выше пишите через резистор и кондер,поясните пожалуйста,что куда?За ранее всем спасибо!
Попробую ответить развернуто, ниже разные варианты.
1)Если вы уверенны в измеряемом сигнале в том что он до 5В, можно смело цеплять напрямую к входу ардуино.
2)Если вы не всегда уверенны в напряжении измеряемого сигнала или могут быть наводки, то последовательно входу цепляете резистор от 10КОм до 1МОм(1МОм обычно применяют в промышленных приборах)
В этом случае если в измеряемом сигнале произойдет резкий скачек допустим с 5В до 200В то ваш микроконтроллер не пострадает.
3)Если вы хотите отсечь постоянную составляющую ставьте последовательно конденсатор, Конденсатор пропустит только переменку!
4)Если вы заведомо собираетесь мерять сигнал на больших напряжениях, ставится резистивный делитель допустим 1 к 10 и меряя сигнал 50В на порт микроконтроллера поступит всего 5В.
Парни ! Все же подскажите мне пожалуйста,как правильно подключить щупы к ардуино? Выше пишите через резистор и кондер,поясните пожалуйста,что куда?За ранее всем спасибо!
Кстати что-ж вы такой не внимательный, на страничке проэкта четко указанно как подключать.
http://srukami.inf.ua/pultoscop_v1_1.html
Схема на черном фоне.
А что сможете посоветовать по поводу просмотра формы сигнала 1-5 кГц, разрабатываю гитарные эффекты и необходимо зафексировать форму искажений на выходе устройства, на вход подаю сигнал в этом диапазоне с генератора
Доберусь до генератора сигналов гляну, счас нет под рукой.
А вы пробовали и кнопками и потенциометром подстраивать?или только потенциометром.
Да конечно, и задержки в скетче менял, но нет адекватного результата, да и в скетче не особо понял как устроено вычисление
Доброго времени ! Подключил ваш PULTOSCOP к дисплею ILI9163C очень красиво смотрится! конечно сделал пока без обвязки входов,это поэтому дисплей и показания моргают?
https://yadi.sk/d/cI4Dp4dHm2mSt
вот ссылка на фото с дисплеем. Подскажите пожалуйста переменный резистор ,для чего он нужен? За ранее спасибо!
Дисплей ILI9163C смотрится симпатичнее чем дисплей от Nokia. И разрешение побольше, да и цвет присутствует. Поэтому автору бодрому2014 рекомендовал (скорее просил) сделать осцилоскоп с таким дисплеем.