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

Duglas
Offline
Зарегистрирован: 22.07.2017

Так как мой дисплей не работает на библиотеке Adafruit,

нашёл примеры на библиотеке U8glib.h ,на которой заработал (хотя и раскомментирован также SSD1306).

В источнике другой дисплей- заменил в скетче на свой(оставлено закоментированым другие поддерживаемые дисплеи)

но тут не понял с подключением входа сигнала-

в скетче











const byte theAnalogPin = A8;             // Pinul in Arduino pe care se citesc datele de intrare Контактный Ардуин, что читать ввод

const byte debugpin=13;

подключал сигнал с генератора- на экране нет пульсаций.

Так же вопрос по энкодеру - соответствует ли подключение на картинке написанному в скетче?

Что за энкодер можно применить?

скетч полностью









#include "U8glib.h"
#include "OneButton.h"
#include "Timer.h"
#include <EEPROM.h>

//Setare butoane
OneButton buton4(28,true); //start/meniu главная / меню
OneButton buton5(30,true); //stanga влево
OneButton buton6(32,true); //dreapta вправо

Timer t,t1;//Configurare timer pentru butoane

//Variabile necesare pentru realizarea meniului grafic
int meniu_curent,type,d,i,m;


boolean on=false;//Ruleaza sau nu programul
boolean exitLoop=true;//Iesire din bucla meniului serial

//Definire meniuri si submeniuri
#define MENU_ITEMS 7
char *menu_strings[MENU_ITEMS] = { "OSCILOSCOP ARDUINO", "Tip prag=", "Valoare prag=", "Esantionare=", "Int. V=", "Scalare H=","Linie/punct="};
char* meniu1[]={"Off", "Rise", "Fall"};//submeniu Tip prag
char* meniu2[]={"32", "80", "128", "176", "224"};//submeniu Valoare prag
char* meniu3[]={"28 kHz", "20 kHz", "10 kHz", "5 kHz", "2.5 kHz"};//submeniu Esantionare
char* meniu4[]={"0-5V", "0-3.3V", "0-1.65V", "0-0.825V"};//submeniu interval tensiune
char* meniu5[]={"On", "Off"};//submeniu Scalare H
char* meniu6[]={"Linie", "Punct"};//submeniu Linie/Punct
 
// Setarea implicita a variabilelor
byte useThreshold = 1;                  // 0 = Off, 1 = Rising, 2 = Falling
byte theThreshold = 128;                // 0-255, Multiplicata cu constanta de tensiune
unsigned int timePeriod = 200;          // 0-65535, us or ms per masuratoare (max 0.065s or 65.535s)
byte voltageRange = 1;                  // 1 = 0-3.3V, 2 = 0-1.65V, 3 = 0-0.825V
int m1=1,m2=2,m3=3,m4=0,m5=0,m6=0;            //variabile folosite in meniu
 
boolean autoHScale = true;             // AAuto scalare pe orizontala
boolean linesNotDots = true;            //Trage linii intre puncte
 
// Variabile program
const byte vTextShift = 3;              // Aliniament la 3 px stanga a valorilor afisate
const byte numOfSamples = 100;          // Raman 100 de puncte care se pot folosi pentru reprezentarea semnalului
unsigned int HQadcReadings[numOfSamples];
byte adcReadings[numOfSamples];
byte thresLocation = 0;                 // Pragul barei de localizare
float voltageConst = 0.079365079;          // Factorul de scalare 0-63px in V
float avgV = 0.0;    
float maxV = 0.0;
float minV = 0.0;
float ptopV = 0.0;
float theFreq = 0;
 
const byte theAnalogPin = A8;             // Pinul in Arduino pe care se citesc datele de intrare Контактный Ардуин, что читать ввод

const byte debugpin=13;
 
 
//Configurare display
//U8GLIB_ST7920_128X64_1X u8g(33,35,37,39,41,43,45,47,31,27,29,49);  // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16

// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported 
// devices with all constructor calls is here: https://github.com/olikraus/u8glib/wiki/device
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGM132 u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGM128 u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10);  // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
//U8GLIB_ST7920_192X32_4X u8g(10);    // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_LM6059 u8g(13, 11, 10, 9);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_LM6063 u8g(13, 11, 10, 9);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_BW u8g(10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16);    // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);  // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);  // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 );       // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7);  // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
//U8GLIB_SSD1306_128X64 u8g(10, 9);   // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI 
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);  // Display which does not send AC

//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9);    // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_128X32 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 
//U8GLIB_SSD1306_64X48 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_64X48 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_SSD1306_64X48 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE);  // I2C
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C

//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE);  // I2C

//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9, 8);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1611_DOGM240 u8g(10, 9);   // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_UC1611_DOGM240 u8g(10, 9);   // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_UC1611_DOGM240 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 3, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=3, di/a0=17,rw=16

//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C

//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1611_DOGXL240 u8g(10, 9);    // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_UC1611_DOGXL240 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 3, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=3, di/a0=17,rw=16
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8);  // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8  (SW SPI Nano Board)
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8);  // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8);  // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_HT1632_24X16 u8g(3, 2, 4);   // WR = 3, DATA = 2, CS = 4
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)




// Cod folosit pentru ADC de mare viteza
// De pe: http://forum.arduino.cc/index.php?PHPSESSID=e21f9a71b887039092c91a516f9b0f36&topic=6549.15
#define FASTADC 1
// setarea si golirea registrilor
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
void collectData(void) {
  unsigned int tempThres = 0;
  unsigned int i = 0;
 
  if (autoHScale == true) {
    // Scalare automata
    if (thresLocation > 5*numOfSamples/8) {
      timePeriod = timePeriod + 10;
    } else if (thresLocation < 3*numOfSamples/8) {
      timePeriod = timePeriod - 10;
    } else if (thresLocation > numOfSamples/2) {
      timePeriod = timePeriod + 2;
    } else if (thresLocation < numOfSamples/2) {
      timePeriod = timePeriod - 2;
    }
  }
  // perioada de timp nu poate fi mai mica de 35
  if (timePeriod < 35) {
    timePeriod = 35;
  }
   
  // Setare interval tensiuni
  if (voltageRange == 1) {
    voltageConst = 0.079365079; // 0-5V
  }else if (voltageRange == 2) {
    voltageConst = 0.0523810; // 0-1.65V
  } 
  else if (voltageRange == 3) {
    voltageConst = 0.0261905; // 0-1.65V
  } else if (voltageRange == 4) {
    voltageConst = 0.0130952; //0-0.825V
  }
   
  if (voltageRange == 1) tempThres = theThreshold << 2;
  else  if (voltageRange == 2) tempThres = theThreshold << 2;
  else if (voltageRange == 3) tempThres = theThreshold << 1;
  else if (voltageRange == 4) tempThres = theThreshold;
  if (useThreshold == 1) {
     i = 0; while ((analogRead(theAnalogPin)>tempThres) && (i<32768)) {i++;buton4.tick();/*am pus aici refresh la buton pentru a evita blocarile*/};
     i = 0; while ((analogRead(theAnalogPin)<tempThres) && (i<32768)) {i++;  buton4.tick();/*am pus aici refresh la buton pentru a evita blocarile*/}; 
  }
  else if (useThreshold == 2) {
     i = 0; while ((analogRead(theAnalogPin)<tempThres) && (i<32768)) {i++;buton4.tick();/*am pus aici refresh la buton pentru a evita blocarile*/};
     i = 0; while ((analogRead(theAnalogPin)>tempThres) && (i<32768)) {i++;buton4.tick();/*am pus aici refresh la buton pentru a evita blocarile*/};
  }
  digitalWrite(debugpin,LOW);
 
  // Colecteaza datele ADC
  for (i=0; i<numOfSamples; i++) {
    HQadcReadings[i] = analogRead(theAnalogPin);
    if (timePeriod > 35)
      delayMicroseconds(timePeriod-35);
  }
  for (i=0; i<numOfSamples; i++) {
    // Incadreaza valorile citite in intervalul 0-63
    if (voltageRange == 1) {
      if (HQadcReadings[i]>>4 < 0b111111) adcReadings[i] = HQadcReadings[i]>>4 & 0b111111;
      else adcReadings[i] = 0b111111;
    } else if (voltageRange == 2) {
      if (HQadcReadings[i]>>4 < 0b111111) adcReadings[i] = HQadcReadings[i]>>4 & 0b111111;
      else adcReadings[i] = 0b111111;
    } else if (voltageRange == 3) {
      if (HQadcReadings[i]>>3 < 0b111111) adcReadings[i] = HQadcReadings[i]>>3 & 0b111111;
      else adcReadings[i] = 0b111111;
    } else if (voltageRange == 4) {
      if (HQadcReadings[i]>>2 < 0b111111) adcReadings[i] = HQadcReadings[i]>>2 & 0b111111;
      else adcReadings[i] = 0b111111;
    }
    adcReadings[i] = 63-adcReadings[i];
  }
   
  // Calculeaza frecventa semnalului folosind trecerea prin 0
  if (useThreshold != 0) {
     if (useThreshold == 1) {
        thresLocation = 1;
        while ((adcReadings[thresLocation]<(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
        thresLocation++;
        while ((adcReadings[thresLocation]>(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
     }
     else if (useThreshold == 2) {
        thresLocation = 1;
        while ((adcReadings[thresLocation]>(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
        thresLocation++;
        while ((adcReadings[thresLocation]<(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
     }
 
     theFreq = (float) 1000/(thresLocation * timePeriod) * 1000;
  }
   
  // Tensiunea medie
  avgV = 0;
  for (i=0; i<numOfSamples; i++)
     avgV = avgV + adcReadings[i];
  avgV = (63-(avgV / numOfSamples)) * voltageConst;
 
  // Tensiunea maxima
  maxV = 63;
  for (i=0; i<numOfSamples; i++)
     if (adcReadings[i]<maxV) maxV = adcReadings[i];
  maxV = (63-maxV) * voltageConst;
 
  // Tensiunea minima
  minV = 0;
  for (i=0; i<numOfSamples; i++)
     if (adcReadings[i]>minV) minV = adcReadings[i];
  minV = (63-minV) * voltageConst;
 
  // Teniunea Peak-to-Peak
  ptopV = maxV - minV;
}
 

 
void setup() {
  u8g.begin();
  Serial.begin(9600);
  Serial.begin(115200);
  pinMode(debugpin,OUTPUT);
  buton4.attachClick(b4);
  buton5.attachClick(b5);
  buton6.attachClick(b6);
  t.every(10, tasta);   
  t1.every(10, corelare_meniu);    
  analogReference(EXTERNAL);
  #if FASTADC
    sbi(ADCSRA,ADPS2) ;
    cbi(ADCSRA,ADPS1) ;
    cbi(ADCSRA,ADPS0) ;
  #endif
  delay(100);
}
 
void loop() {
if (on==true) collectData();
  t.update();
  t1.update();
  //afiseaja datele pe display
  u8g.firstPage();  
  do {
  if (on==true)
    draw(); 
  else
    drawMenu();

  } while( u8g.nextPage() );
 
  // Daca se primesc date pe serial afiseaza meniul
  if (Serial.available() > 0) {
    handleSerial();
  }
}

Источник http://www.roroid.ro/osciloscop-cu-arduino/

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

Так на источнике и спрашивай. Причем тут Пультоскоп.

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

Попробуйте в ОРИГИНАЛЬНЫЙ СКЕТЧ С САЙТА АВТОРА http://srukami.inf.ua/pultoscop_v25110.html   в самом начале добавить

#include <SPI.h>
#include <Wire.h>

как в примерах

Х.З. у меня нет такого экрана

Duglas
Offline
Зарегистрирован: 22.07.2017

240265 пишет:

Попробуйте в ОРИГИНАЛЬНЫЙ СКЕТЧ С САЙТА АВТОРА http://srukami.inf.ua/pultoscop_v25110.html   в самом начале добавить

#include <SPI.h>
#include <Wire.h>

как в примерах

Х.З. у меня нет такого экрана

Этот вариант у меня нормально работает на дисплее crius c0-16 (ssd1306) и ардуине 2560,

пробовал на атмеге128- тоже работает

Добавил

#include <SPI.h>
#include <Wire.h>

Сообщение об ошибке















D:\ГЕНА\на углиб\ОсциллографыU8\U8glib_Oscilloscope2\U8glib_Oscilloscope\U8glib_Oscilloscope.ino: In function 'void setup()':

U8glib_Oscilloscope:469: error: 'lcdLED' was not declared in this scope

exit status 1
'lcdLED' was not declared in this scope

Вот работающий скетч с добавленными дисплеями(подойдёт любой из списка 128х64.

Для дисплеев i2c  //Serial.begin(9600); закоментировал









#include "U8glib.h"
#include <EEPROM.h>

// Variables you might want to play with
byte useThreshold = 1;                  // 0 = Off, 1 = Rising, 2 = Falling
byte theThreshold = 128;                // 0-255, Multiplied by voltageConst
unsigned int timePeriod = 200;          // 0-65535, us or ms per measurement (max 0.065s or 65.535s)
byte voltageRange = 1;                  // 1 = 0-3.3V, 2 = 0-1.65V, 3 = 0-0.825V
byte ledBacklight = 100;

boolean autoHScale = true;             // Automatic horizontal (time) scaling
boolean linesNotDots = true;            // Draw lines between data points

// Variables that can probably be left alone
const byte vTextShift = 3;              // Vertical text shift (to vertically align info)
const byte numOfSamples = 100;          // Leave at 100 for 128x64 pixel display
unsigned int HQadcReadings[numOfSamples];
byte adcReadings[numOfSamples];
byte thresLocation = 0;                 // Threshold bar location
float voltageConst = 0.052381;          // Scaling factor for converting 0-63 to V
float avgV = 0.0;    
float maxV = 0.0;
float minV = 0.0;
float ptopV = 0.0;
float theFreq = 0;

const byte theAnalogPin = 7;             // Data read pin

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

// SW SPI:
//U8GLIB_MINI12864_2X u8g(lcdSCK, lcdMOSI, lcdCS, lcdA0, lcdRESET);
// HW SPI:
//U8GLIB_MINI12864_2X u8g(lcdCS, lcdA0, lcdRESET);

// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported 
// devices with all constructor calls is here: https://github.com/olikraus/u8glib/wiki/device
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGM132 u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGM128 u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10);  // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
//U8GLIB_ST7920_192X32_4X u8g(10);    // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_LM6059 u8g(13, 11, 10, 9);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_LM6063 u8g(13, 11, 10, 9);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_BW u8g(10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8);   // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16);    // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);  // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);  // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 );       // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7);  // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
//U8GLIB_SSD1306_128X64 u8g(10, 9);   // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI 

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI 

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);  // Display which does not send AC

//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9);    // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_128X32 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 
//U8GLIB_SSD1306_64X48 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1306_64X48 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_SSD1306_64X48 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE);  // I2C
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C

//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE);  // I2C

//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9, 8);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1611_DOGM240 u8g(10, 9);   // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_UC1611_DOGM240 u8g(10, 9);   // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_UC1611_DOGM240 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 3, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=3, di/a0=17,rw=16

//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C

//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1611_DOGXL240 u8g(10, 9);    // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
//U8GLIB_UC1611_DOGXL240 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 3, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=3, di/a0=17,rw=16
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8);  // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8  (SW SPI Nano Board)
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8);  // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8);  // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
//U8GLIB_HT1632_24X16 u8g(3, 2, 4);   // WR = 3, DATA = 2, CS = 4
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)

// High speed ADC code
// From: http://forum.arduino.cc/index.php?PHPSESSID=e21f9a71b887039092c91a516f9b0f36&topic=6549.15
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

void collectData(void) {
  unsigned int tempThres = 0;
  unsigned int i = 0;

  if (autoHScale == true) {
    // With automatic horizontal (time) scaling enabled,
    // scale quickly if the threshold location is far, then slow down
    if (thresLocation > 5*numOfSamples/8) {
      timePeriod = timePeriod + 10;
    } else if (thresLocation < 3*numOfSamples/8) {
      timePeriod = timePeriod - 10;
    } else if (thresLocation > numOfSamples/2) {
      timePeriod = timePeriod + 2;
    } else if (thresLocation < numOfSamples/2) {
      timePeriod = timePeriod - 2;
    }
  }
  // Enforce minimum time periods
  if (timePeriod < 35) {
    timePeriod = 35;
  }
  
  // Adjust voltage constant to fit the voltage range
  if (voltageRange == 1) {
    voltageConst = 0.0523810; // 0-3.30V
  } else if (voltageRange == 2) {
    voltageConst = 0.0261905; // 0-1.65V
  } else if (voltageRange == 3) {
    voltageConst = 0.0130952; //0-0.825V
  }
  
  // If using threshold, wait until it has been reached
  if (voltageRange == 1) tempThres = theThreshold << 2;
  else if (voltageRange == 2) tempThres = theThreshold << 1;
  else if (voltageRange == 3) tempThres = theThreshold;
  if (useThreshold == 1) {
     i = 0; while ((analogRead(theAnalogPin)>tempThres) && (i<32768)) i++;
     i = 0; while ((analogRead(theAnalogPin)<tempThres) && (i<32768)) i++;
  }
  else if (useThreshold == 2) {
     i = 0; while ((analogRead(theAnalogPin)<tempThres) && (i<32768)) i++;
     i = 0; while ((analogRead(theAnalogPin)>tempThres) && (i<32768)) i++;
  }

  // Collect ADC readings
  for (i=0; i<numOfSamples; i++) {
    // Takes 35 us with high speed ADC setting
    HQadcReadings[i] = analogRead(theAnalogPin);
    if (timePeriod > 35)
      delayMicroseconds(timePeriod-35);
  }
  for (i=0; i<numOfSamples; i++) {
    // Scale the readings to 0-63 and clip to 63 if they are out of range.
    if (voltageRange == 1) {
      if (HQadcReadings[i]>>4 < 0b111111) adcReadings[i] = HQadcReadings[i]>>4 & 0b111111;
      else adcReadings[i] = 0b111111;
    } else if (voltageRange == 2) {
      if (HQadcReadings[i]>>3 < 0b111111) adcReadings[i] = HQadcReadings[i]>>3 & 0b111111;
      else adcReadings[i] = 0b111111;
    } else if (voltageRange == 3) {
      if (HQadcReadings[i]>>2 < 0b111111) adcReadings[i] = HQadcReadings[i]>>2 & 0b111111;
      else adcReadings[i] = 0b111111;
    }
    // Invert for display
    adcReadings[i] = 63-adcReadings[i];
  }
  
  // Calculate and display frequency of signal using zero crossing
  if (useThreshold != 0) {
     if (useThreshold == 1) {
        thresLocation = 1;
        while ((adcReadings[thresLocation]<(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
        thresLocation++;
        while ((adcReadings[thresLocation]>(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
     }
     else if (useThreshold == 2) {
        thresLocation = 1;
        while ((adcReadings[thresLocation]>(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
        thresLocation++;
        while ((adcReadings[thresLocation]<(63-(theThreshold>>2))) && (thresLocation<numOfSamples-1)) (thresLocation++);
     }

     theFreq = (float) 1000/(thresLocation * timePeriod) * 1000;
  }
  
  // Average Voltage
  avgV = 0;
  for (i=0; i<numOfSamples; i++)
     avgV = avgV + adcReadings[i];
  avgV = (63-(avgV / numOfSamples)) * voltageConst;

  // Maximum Voltage
  maxV = 63;
  for (i=0; i<numOfSamples; i++)
     if (adcReadings[i]<maxV) maxV = adcReadings[i];
  maxV = (63-maxV) * voltageConst;

  // Minimum Voltage
  minV = 0;
  for (i=0; i<numOfSamples; i++)
     if (adcReadings[i]>minV) minV = adcReadings[i];
  minV = (63-minV) * voltageConst;

  // Peak-to-Peak Voltage
  ptopV = maxV - minV;
}

void handleSerial(void) {
  char inByte;
  char dataByte;
  boolean exitLoop = false;
  do {
    // Clear out buffer
    do {
      inByte = Serial.read();
    } while (Serial.available() > 0);
  
    Serial.print("\nArduino LCD Oscilloscope\n");
    Serial.print(" 1 - Change threshold usage (currently: ");
      if (useThreshold == 0) Serial.print("Off)\n");
      else if (useThreshold == 1) Serial.print("Rise)\n");
      else if (useThreshold == 2) Serial.print("Fall)\n");
    Serial.print(" 2 - Change threshold value (currently: ");
      Serial.print(theThreshold, DEC); Serial.print(")\n");
    Serial.print(" 3 - Change sampling period (currently: ");
      Serial.print(timePeriod, DEC); Serial.print(")\n");
    Serial.print(" 4 - Change voltage range (currently: ");
      if (voltageRange == 1) Serial.print("0-3.3V)\n");
      else if (voltageRange == 2) Serial.print("0-1.65V)\n");
      else if (voltageRange == 3) Serial.print("0-0.825V)\n");
    Serial.print(" 5 - Toggle auto horizontal (time) scaling (currently: ");
      if (autoHScale == true) Serial.print("On)\n");
      else if (autoHScale == false) Serial.print("Off)\n");
    Serial.print(" 6 - Toggle line/dot display (currently: ");
      if (linesNotDots == true) Serial.print("Lines)\n");
      else if (linesNotDots == false) Serial.print("Dots)\n");
    Serial.print(" 8 - Exit\n");
    
    // Wait for input/response, refresh display while in menu
    do {
      collectData();
      // Picture Display Loop
      u8g.firstPage();  
      do { draw(); } while( u8g.nextPage() );
    } while (Serial.available() == 0);
    inByte = Serial.read();
    
    if (inByte == '1') {
      Serial.print("Change threshold usage\n");
      Serial.print(" 0 - Off\n");
      Serial.print(" 1 - Rise\n");
      Serial.print(" 2 - Fall\n");
      do { } while (Serial.available() == 0);
      dataByte = Serial.read();
      if (dataByte == '0') useThreshold = 0;
      else if (dataByte == '1') useThreshold = 1;
      else if (dataByte == '2') useThreshold = 2;
    } else if (inByte == '2') {
      Serial.print("Change threshold value (thresholds for 0-3.3V,0-1.65V,0-0.825V ranges)\n");
      Serial.print(" 0 - 32 (0.41V, 0.21V, 0.10V)\n");
      Serial.print(" 1 - 80 (1.04V, 0.52V, 0.26V)\n");
      Serial.print(" 2 - 128 (1.66V, 0.83V, 0.41V)\n");
      Serial.print(" 3 - 176 (2.28V, 1.14V, 0.57V)\n");
      Serial.print(" 4 - 224 (2.90V, 1.45V, 0.72V)\n");
      do { } while (Serial.available() == 0);
      dataByte = Serial.read();
      if (dataByte == '0') theThreshold = 32;
      else if (dataByte == '1') theThreshold = 80;
      else if (dataByte == '2') theThreshold = 128;
      else if (dataByte == '3') theThreshold = 176;
      else if (dataByte == '4') theThreshold = 224;
    } else if (inByte == '3') {
      Serial.print("Change sampling frequency\n");
      Serial.print(" 0 - 28 kHz (35 us/sample)\n");
      Serial.print(" 1 - 20 kHz (50 us/sample)\n");
      Serial.print(" 2 - 10 kHz (100 us/sample)\n");
      Serial.print(" 3 - 5 kHz (200 us/sample)\n");
      Serial.print(" 4 - 2.5 kHz (400 us/sample)\n");
      do { } while (Serial.available() == 0);
      dataByte = Serial.read();
      if (dataByte == '0') timePeriod = 35;
      else if (dataByte == '1') timePeriod = 50;
      else if (dataByte == '2') timePeriod = 100;
      else if (dataByte == '3') timePeriod = 200;
      else if (dataByte == '4') timePeriod = 400;
    } else if (inByte == '4') {
      Serial.print("Change voltage range\n");
      Serial.print(" 1 - 0-3.3V\n");
      Serial.print(" 2 - 0-1.65V\n");
      Serial.print(" 3 - 0-0.825V\n");
      do { } while (Serial.available() == 0);
      dataByte = Serial.read();
      if (dataByte == '1') voltageRange = 1;
      else if (dataByte == '2') voltageRange = 2;
      else if (dataByte == '3') voltageRange = 3;
    } else if (inByte == '5') {
      Serial.print("Toggle auto horizontal (time) scaling\n");
      Serial.print(" 0 - Off\n");
      Serial.print(" 1 - On\n");
      do { } while (Serial.available() == 0);
      dataByte = Serial.read();
      if (dataByte == '0') autoHScale = false;
      else if (dataByte == '1') autoHScale = true;
    } else if (inByte == '6') {
      Serial.print("Toggle line/dot display\n");
      Serial.print(" 0 - Lines\n");
      Serial.print(" 1 - Dots\n");
      do { } while (Serial.available() == 0);
      dataByte = Serial.read();
      if (dataByte == '0') linesNotDots = true;
      else if (dataByte == '1') linesNotDots = false;
    } else if (inByte == '8') {
      Serial.print("Bye!\n");
      exitLoop = true;
    }
  } while (exitLoop == false);
}

void draw(void) {
  int i;
  char buffer[16];
  
  u8g.setFont(u8g_font_micro);
  
  // Draw static text
  u8g.drawStr(0, 5+vTextShift, "Av");
  u8g.drawStr(0, 11+vTextShift, "Mx");
  u8g.drawStr(0, 17+vTextShift, "Mn");
  u8g.drawStr(0, 23+vTextShift, "PP");
  u8g.drawStr(0, 29+vTextShift, "Th");
  u8g.drawStr(24, 35+vTextShift, "V");
  u8g.drawStr(0, 41+vTextShift, "Tm");
  u8g.drawStr(4, 47+vTextShift, "ms/div");
  u8g.drawStr(20, 53+vTextShift, "Hz");
  u8g.drawStr(0, 59+vTextShift, "R");
  
  // Draw dynamic text
  if (autoHScale == true) u8g.drawStr(124, 5, "A");
  dtostrf(avgV, 3, 2, buffer);
  u8g.drawStr(12, 5+vTextShift, buffer);
  dtostrf(maxV, 3, 2, buffer);
  u8g.drawStr(12, 11+vTextShift, buffer);
  dtostrf(minV, 3, 2, buffer);
  u8g.drawStr(12, 17+vTextShift, buffer);
  dtostrf(ptopV, 3, 2, buffer);
  u8g.drawStr(12, 23+vTextShift, buffer);
  dtostrf(theFreq, 5, 0, buffer);
  u8g.drawStr(0, 53+vTextShift, buffer);
  if (useThreshold == 0) {
    u8g.drawStr(12, 29+vTextShift, "Off");
  } else if (useThreshold == 1) {
    u8g.drawStr(12, 29+vTextShift, "Rise");
    dtostrf((float) (theThreshold>>2) * voltageConst, 3, 2, buffer);
  } else if (useThreshold == 2) {
    u8g.drawStr(12, 29+vTextShift, "Fall");
    dtostrf((float) (theThreshold>>2) * voltageConst, 3, 2, buffer);
  }
  u8g.drawStr(8, 35+vTextShift, buffer);
  // Correctly format the text so that there are always 4 characters
  if (timePeriod < 400) {
    dtostrf((float) timePeriod/1000 * 25, 3, 2, buffer);
  } else if (timePeriod < 4000) {
    dtostrf((float) timePeriod/1000 * 25, 3, 1, buffer);
  } else if (timePeriod < 40000) {
    dtostrf((float) timePeriod/1000 * 25, 3, 0, buffer);
  } else { // Out of range
    dtostrf((float) 0.00, 3, 2, buffer);
  }
  u8g.drawStr(12, 41+vTextShift, buffer);
  if (voltageRange == 1) {
    u8g.drawStr(4, 59+vTextShift, "0-3.30");
  } else if (voltageRange == 2) {
    u8g.drawStr(4, 59+vTextShift, "0-1.65");
  } else if (voltageRange == 3) {
    u8g.drawStr(4, 59+vTextShift, "0-0.83");
  }
  
  // Display graph lines
  u8g.drawLine((128-numOfSamples),0,(128-numOfSamples),63);
  if (useThreshold != 0)
     for (i=29; i<127; i+=3)
        u8g.drawPixel(i,63-(theThreshold>>2));
  for (i=0; i<63; i+=5) {
     u8g.drawPixel(53,i);
     u8g.drawPixel(78,i);
     u8g.drawPixel(103,i);
     u8g.drawPixel(127,i);
  }
  // Threshold bar
  for (i=0; i<63; i+=3)
     u8g.drawPixel(thresLocation+(128-numOfSamples),i);
  // Draw ADC readings
  if (linesNotDots == true) {
    for (i=1; i<numOfSamples; i++) // Draw using lines
      u8g.drawLine(i+(128-numOfSamples)-1,adcReadings[i-1],i+(128-numOfSamples),adcReadings[i]);
  } else {
    for (i=2; i<numOfSamples; i++) // Draw using points
      u8g.drawPixel(i+(128-numOfSamples),adcReadings[i]);
  }
}

void setup() {
  u8g.begin();
  //Serial.begin(9600);
  
  // Turn on LED backlight
  analogWrite(lcdLED, ledBacklight);
  
  #if FASTADC
    // set prescale to 16
    sbi(ADCSRA,ADPS2) ;
    cbi(ADCSRA,ADPS1) ;
    cbi(ADCSRA,ADPS0) ;
  #endif
  delay(100);
}

void loop() {
  collectData();
  // Picture Display Loop
  u8g.firstPage();  
  do { draw(); } while( u8g.nextPage() );

  // If user sends any serial data, show menu
  if (Serial.available() > 0) {
    handleSerial();
  }

  // rebuild the picture after some delay
  delay(100);
}

Для ATmega128  использовал MegaCore https://github.com/MCUdude/MegaCore

arduino-1.6.7

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

так тогда весь вывод в сериал уберите , он пол скетча занимает, так же он ничего общего с пультоскопом не имеет и работать должен медленнее ПУЛЬТОСКОПА.

brotherirk
Offline
Зарегистрирован: 24.07.2017

AJGrupp пишет:

bodriy2014,

(БлагоДарю за внимание к проблеме)

Сделал предположение, что на макетном бутерброде где-то проскакивает КЗ... больше ничего в голову не пришло.

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

 

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

все оказалось, как и предполагал.... проблемма в коде....(бррр, такой код разбирать)....

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

//#define power 8 //пин который опрашивает кнопку включения
//#define OFF 14//пин который управляет ключем питания
//#define  timepowerON 50 //время удержания кнопки выключения

в двух местах:

/////////////////////////////////////////удержание кнопки отключения
//if(digitalRead(power)==HIGH){powerON++;delay(10);}  
//if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения 

 

Vadomir
Offline
Зарегистрирован: 12.08.2017

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

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

https://yadi.sk/d/AtQBNGMJ3LvJmQ

Вот она.

 

tolkach
Offline
Зарегистрирован: 05.02.2017

Всем неравнодушным здравствовать.Собрал я данный девайс.Спасибо автору за разработку и помощь.Никак не мог залить скетч,пришлось запрограммировать через hex файл и все заработало.Уже опробовал в работе,все кажет все видно.Не знаю как вставить фото но девайс уже в корпусе.Еще есть TFT 2,4" который никак не могу запустить.Определяется как 9320 но ни один скетч не проходит.На сайте есть скетч осциллографа для ILI7781 все заливается,все видно но это примитив.Народ выкладывает что-то но не более,готового решения нет.В поиске не первый месяц но пока пусто.Печалька.

Vadomir
Offline
Зарегистрирован: 12.08.2017

tolkach пишет:

.На сайте есть скетч осциллографа для ILI7781 все заливается,все видно но это примитив.

А можно ссылку?

tolkach
Offline
Зарегистрирован: 05.02.2017

Можно.Смотрите форум Калининграда и здесь на форуме тему Мини осциллограф на Arduino LCD5110.Все сдернуто с японского сайта.

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

tolkach  под 9320 попробуйте Mcufriend_kbv

brotherirk
Offline
Зарегистрирован: 24.07.2017

Дайте плиз ПОСЛЕДНЮЮ правленную прошивку под 5110 экран, а то авторская - глючная... (переписывать ее под себя не оч хочется)

не удержался и переписал "под себя":

-убрал работу с батареей (но оставил возможность задействовать)

-убрал терминал

-оптимизировал и оформил код

...рекомендую эту версию для повоторения, как простую, стабильную, и рабочую...

//Страница проэкта  http://srukami.inf.ua/pultoscop_v25110.html
// правки by brother v1.0  19.08.2017

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <FreqCount.h> 
#include <PWM.h>
#include <CyberLib.h>

#define led  9   //пин для генератора сигналов (не менять)
#define dds  10   //пин для генератора dds (не менять)

#define levo 13  //кнопка ЛЕВО(можно любой пин)
#define ok 12    //кнопка ОК(можно любой пин)
#define pravo 11 //кнопка ПРАВО(можно любой пин)
//#define akb A5 //любой своюодный аналоговый пин для измерения напряжения АКБ 
#define overclock 27//16  //Частота на которой работает Ардуино 

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 4, 3, 2);//пины к которым у вас подключен дисплей   
      
byte cont=52;//контрастность дисплея
byte SinU=30;   //уровень синхронизации 0 до 255 
int PWM = 128;//стартовое значение ШИМ от 0 до 255        
int32_t frequency = 500; //стартовое значение частоты в Гц
float VCC=5.0;  //напряжение питания, меряем мультиметром
int d=0;
byte menuDDS=0; 
byte sinM[32]={1,6,15,29,48,69,92,117,143,168,191,212,229,243,251,255,254,248,237,222,203,181,156,131,106,81,59,39,22,10,3,1};
byte pilaM[32]={1,9,17,25,33,41,49,57,65,73,81,89,97,105,113,121,129,137,145,153,161,169,177,185,193,201,209,217,225,235,245,255};
byte RpilaM[32]={250,246,238,230,222,214,206,198,190,182,174,166,158,150,142,134,126,118,110,102,94,86,78,70,62,54,41,33,25,17,9,1};
byte trianglM[32]={1,18,35,52,69,86,103,120,137,154,171,188,205,222,239,255,239,223,207,191,175,159,143,127,111,95,79,63,47,31,15,1};
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[255];
byte x=0; 
byte menu=0;//переменная выбора меню 
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
byte pultoskop=0; //флаг выбора генератора или осциллографа
byte razv=6;  
unsigned long count =0;
byte sinX=30; 
byte meaX=83;
int Vmax=0;// максимальное напряжение 
byte sinhMASS=0;
long countX=0;
int prokr=0;

void setup(){
  display.begin();
  display.setContrast(cont);  
  
  while(digitalRead(ok)==LOW){  
    display.clearDisplay();  
 
    display.setCursor(10,0);  
    if(pultoskop==0){ display.setTextColor(WHITE, BLACK);}
    else{ display.setTextColor(BLACK); }
    display.println("Пультоскоп");
  
    display.setCursor(10,10);
    if(pultoskop==1){ display.setTextColor(WHITE, BLACK);}
    else{ display.setTextColor(BLACK); }
    display.println("Генератор");
  
    display.setCursor(10,20);
    if(pultoskop==2){ display.setTextColor(WHITE, BLACK);}
    else{ display.setTextColor(BLACK); }
    display.println("DDSгенератор");

    //display.setCursor(0,40);
    //display.setTextColor(BLACK);
    //display.print("Батарея=");
    //display.print(analogRead(akb)*5.0/1024);
    //display.print("В"); 

    display.setCursor(24,40);
    display.setTextColor(BLACK);
    display.print("by brother");
 
    if(digitalRead(levo)==HIGH){delay(300);pultoskop=pultoskop+1;}
    if(digitalRead(pravo)==HIGH){delay(300);pultoskop=pultoskop+1;}
    if(pultoskop>2){pultoskop=0;}
    delay(50);  
    display.display(); 
  }

  if(pultoskop==0){FreqCount.begin(1000);}
  if(pultoskop==1){InitTimersSafe(); bool success = SetPinFrequencySafe(led, frequency);}
  if(pultoskop==2){InitTimersSafe(); bool success = SetPinFrequencySafe(led,200000);}  
  
  display.setTextColor(BLACK);
  delay(500); 
}
   
void Zamer(){
  if (razv>=6){ADCSRA = 0b11100010;}//delitel 4
  if (razv==5){ADCSRA = 0b11100011;}//delitel 8
  if (razv==4){ADCSRA = 0b11100100;}//delitel 16
  if (razv==3){ADCSRA = 0b11100101;}//delitel 32
  if (razv==2){ADCSRA = 0b11100110;}//delitel 64
  if (razv<2){ADCSRA = 0b11100111;}//delitel 128
  if (razv==0){
      for(int i=0;i<255;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          delayMicroseconds(500);
          mass[i]=ADCH;
      }
  }
  if (razv>0){
      for(int i=0;i<255;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
  }  
}

void loop() {
if(pultoskop==0){  
  if(opornoe==0){ADMUX = 0b11100011;}//выбор внутреннего опорного 1,1В
  if(opornoe==1){ADMUX = 0b01100011;}//Выбор внешнего опорного
  delay(5);
  
  if(paus==0){Zamer();}
  //#######################################определение точки синхронизации
  bool flagSINHRO=0;
  bool flagSINHRnull=0;
  for(int y=1;y<255;y++){
    if(flagSINHRO==0){if(mass[y]<SinU){flagSINHRnull=1;}}
    if(flagSINHRO==0){if(flagSINHRnull==1){if(mass[y]>SinU){flagSINHRO=1;sinhMASS=y;}}}
  }    
  //#######################################определение точки синхронизации
  //максимальное значение сигнала##########################
  Vmax=0; 
  for(int y=1;y<255;y++){if(Vmax<mass[y]){Vmax=mass[y];} }
  //максимальное значение сигнала##########################
  //#######################################определение точки синхронизации
  //#######################################отрисовка графика 
  display.clearDisplay();
  if(paus==0){
    display.fillCircle(80,47-SinU/7, 2, BLACK);//рисуем уровень синхронизации    
    x=3;
    for(int y=sinhMASS;y<sinhMASS+80;y++){
      if(razv<7){x++;}
      if(razv==7){x=x+2;}
      if(razv==8){x=x+3;} 
      display.drawLine(x, 47-mass[y]/7, x+1, 47-mass[y+1]/7, BLACK);
      display.drawLine(x+1, 47-mass[y]/7+1, x+2, 47-mass[y+1]/7+1, BLACK);        
    }
    sinhMASS=0;
  }  
  if(paus==1){
    display.drawLine(prokr/8,8,prokr/8+6,8, BLACK);//шкала прокрутки
    display.drawLine(prokr/8,9,prokr/8+6,9, BLACK);//шкала прокрутки
    x=3;
    for(int y=prokr;y<prokr+80;y++){
      if(razv<7){x++;}
      if(razv==7){x=x+2;}
      if(razv==8){x=x+3;} 
      display.drawLine(x, 47-mass[y]/7, x+1, 47-mass[y+1]/7, BLACK);
      display.drawLine(x+1, 47-mass[y]/7+1, x+2, 47-mass[y+1]/7+1, BLACK); 
    }
  }  
  //#######################################отрисовка графика
  for(byte i=47;i>5;i=i-7){display.drawPixel(0,i, BLACK);display.drawPixel(1,i, BLACK);display.drawPixel(2,i, BLACK);}//разметка экрана  вертикальная
  //////////////////////////////////////////////////сетка
  for(byte i=47;i>5;i=i-3){display.drawPixel(21,i, BLACK);display.drawPixel(42,i, BLACK);display.drawPixel(63,i, BLACK);}
  for(byte i=3;i<84;i=i+3){display.drawPixel(i,33, BLACK);display.drawPixel(i,19, BLACK);}
  
  //#######################################отрисовка menu 
  if(menu==0){
    display.setCursor(0,0);
    display.setTextColor(WHITE,BLACK);
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.setTextColor(BLACK); 
    display.print(" ");
    display.print(razv);
    display.print(" P");
    if(digitalRead(levo)==HIGH){opornoe=!opornoe;}
    if(digitalRead(pravo)==HIGH){opornoe=!opornoe;}    
  }
  if(menu==1){
    display.setCursor(0,0);
    display.setTextColor( BLACK);
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.setTextColor(WHITE, BLACK); // 'inverted' text 
    display.print(" ");
    display.print(razv);
    display.setTextColor( BLACK); // 'inverted' text
    display.print(" P");
    if(digitalRead(levo)==HIGH){razv=razv-1;if(razv==255){razv=0;}}
    if(digitalRead(pravo)==HIGH){razv=razv+1;if(razv==9){razv=8;}}
  }
  if(menu==2){
    display.setCursor(0,0);
    display.setTextColor( BLACK);
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.print(" ");
    display.print(razv);
    display.setTextColor(WHITE, BLACK); // 'inverted' text 
    display.print(" P");
    paus=1;
    if(digitalRead(levo)==HIGH){prokr=prokr-10;if(prokr<0){prokr=0;}}
    if(digitalRead(pravo)==HIGH){prokr=prokr+10;if(prokr>620){prokr=620;}}    
  }
  if(menu==3){
    prokr=0;
    paus=0;
    display.setCursor(0,0);
    display.setTextColor( BLACK);
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.print(" ");
    display.print(razv);
    display.setTextColor(BLACK);
    display.print(" P");
    if(digitalRead(levo)==HIGH){SinU=SinU-20;if(SinU<20){SinU=20;}}
    if(digitalRead(pravo)==HIGH){SinU=SinU+20;if(SinU>230){SinU=230;}}   
    display.fillCircle(80,47-SinU/7, 5, BLACK);
    display.fillCircle(80,47-SinU/7, 2, WHITE); 
  }
  
  if(digitalRead(ok)==HIGH){menu++;if(menu==4){menu=0;paus=0;}}//перебор меню
  if (FreqCount.available()) { count = FreqCount.read();}//вывод частоты по готовности счетчика
  //#######################################частоты сигнала
  byte Frec1=0;
  long Frec=0;
  bool flagFrec1=0;
  bool flagFrec2=0;
  bool flagFrec3=0;
  for(int y=1;y<255;y++){
    if(flagFrec1==0){if(mass[y]<SinU){flagFrec2=1;}}
    if(flagFrec1==0){if(flagFrec2==1){if(mass[y]>SinU){flagFrec1=1;Frec1=y;}}}
    if(flagFrec1==1){if(mass[y]<SinU){flagFrec3=1;}}
    if(flagFrec3==1){if(mass[y]>SinU){
      if (razv>=6){Frec=1000000/((y-Frec1-1)*3.27);}//delitel 4
      if (razv==5){Frec=1000000/((y-Frec1)*3.27)/2;}//delitel 8
      if (razv==4){Frec=1000000/((y-Frec1)*3.27)/4;}//delitel 16
      if (razv==3){Frec=1000000/((y-Frec1)*3.27)/8;}//delitel 32
      if (razv==2){Frec=1000000/((y-Frec1)*3.27)/16;}//delitel 64
      if (razv==2){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128
      if (razv==1){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128
      if (razv==0){Frec=1000000/((y-Frec1)*500);}//delitel 128
      flagFrec1=0;flagFrec3=0;
    }}
  }
  
  //#######################################частоты сигнала
  display.setTextColor( BLACK);
  if(opornoe==1){
    if((Vmax*VCC/255)>2.5){countX=count*(overclock/16.0);}
    if((Vmax*VCC/255)<2.5){countX=Frec*(overclock/16.0);}
  }
  if(opornoe==0){countX=Frec*(overclock/16.0);}
  if(countX<1000){display.print(" ");display.print(countX);display.print("Hz");}
  if(countX>1000){float countXK=countX/1000.0;display.print(countXK,1);display.print("KHz");}
  if(opornoe==1){display.setCursor(0,40);display.setTextColor(BLACK);
  display.print(Vmax*VCC/255,1);}
  if(opornoe==0){display.setCursor(0,40);display.setTextColor(BLACK);
  display.print(Vmax*1.1/255,1);}
  display.print("V");
  //#######################################отрисовка menu
  delay(200);  
  display.display();
}

if(pultoskop==1){Generator();}

if(pultoskop==2){DDSGenerator();}
}

//#######################################режим ренератора
void Generator(){
  display.clearDisplay();  
  if (flag==0){//флаг выборов режима настройки ШИМ или Частоты
            if(digitalRead(levo)==HIGH){
              frequency=frequency-mnog;
              if(frequency<0){frequency=0;}
              bool success = SetPinFrequencySafe(led, frequency);
              delay(3);//защита от дребезга 
            }
            if(digitalRead(pravo)==HIGH){
              frequency=frequency+mnog;
              bool success = SetPinFrequencySafe(led, frequency);
              delay(3);//защита от дребезга 
            }  
  }
  if (flag==1){//флаг выборов режима настройки ШИМ или Частоты
            if(digitalRead(levo)==HIGH){
              PWM=PWM-1;
              if(PWM<0){PWM=255;} 
              delay(3);//защита от дребезга
            
            }
            if(digitalRead(pravo)==HIGH){
              PWM=PWM+1;
              if(PWM>255){PWM=0;} 
              delay(3);//защита от дребезга 
            }  
  }      
  
  if(digitalRead(ok)==HIGH){//переключение разряда выбора частоты 
    delay(3);//защита от дребезга
    hag++;
    if(hag>=5){hag=0;}
  }
  
  ////////////
  display.setTextSize(1);
  display.setCursor(0,5);
  display.print("PWM=");
  display.print(PWM*100.0/255);
  display.print(" %");
  display.drawLine(0,0,83*PWM/255.0,0, BLACK);
  display.drawLine(0,1,83*PWM/255.0,1, BLACK);
  display.drawLine(0,2,83*PWM/255.0,2, BLACK);
  display.drawLine(0,15,83*PWM/255.0,15, BLACK);
  display.drawLine(0,16,83*PWM/255.0,16, BLACK);
  display.drawLine(0,17,83*PWM/255.0,17, BLACK);
  
  ///////////    
  display.setCursor(5,20);
  display.setTextSize(2);
  long frequencyX=frequency*(overclock/16.0);
  if(frequencyX<1000){display.print(frequencyX);display.setTextSize(1);display.println("Hz");}
  if(frequencyX>1000){if(frequencyX<10000){display.print((frequencyX/1000.0),2);display.setTextSize(1);display.println("KHz");}}
  if(frequencyX>=10000){if(frequencyX<100000){display.print((frequencyX/1000.0),1);display.setTextSize(1);display.println("KHz");}}
  if(frequencyX>=100000){display.print((frequencyX/1000.0),0);display.setTextSize(1);display.println("KHz");}
  display.setCursor(0,40);
  display.setTextSize(1);
  display.print(">>X ");    
    if(hag==0){//выбор множителя частоты
      display.print(1*(overclock/16.0),1); 
      mnog=1;
      flag=0;
    }
    if(hag==1){//выбор множителя частоты
      display.print(10*(overclock/16.0),0); 
      mnog=10;
    }
    if(hag==2){//выбор множителя частоты
      display.print(100*(overclock/16.0),0); 
      mnog=100;
    }
    if(hag==3){//выбор множителя частоты
      display.print(1000*(overclock/16.0),0); 
      mnog=1000;
    } 
    if(hag==4){//выбор  PWM
      display.print("PWM ");
      display.print(PWM*100.0/255);
      display.print("%"); 
      flag=1;
    } 
  display.print("<<");        
  pwmWrite(led, PWM);
  delay(300);  
  display.display();
}

/////////////////////DDS
void DDSGenerator(){
  int fr=10;
  if(menuDDS==0){
    display.clearDisplay(); 
    display.setTextColor(WHITE, BLACK); // 'inverted' text
    display.setCursor(10,0);
    display.println("Синус");
    display.setTextColor(BLACK);
    display.setCursor(10,10); 
    display.println("Треугольник");
    display.setCursor(10,20);
    display.println("Пила");
    display.setCursor(10,30);
    display.println("Пила Обр");
    display.setTextColor(BLACK);
    display.setCursor(0,40);
    delay(100);  
    display.display();
    while(D11_Read==LOW){
      PWM=sinM[d];
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
    menuDDS++;
    delay(200);
  }
  if(menuDDS==1){
    display.clearDisplay();     
    display.setTextColor(BLACK); // 'inverted' text
    display.setCursor(10,0);
    display.println("Синус");
    display.setTextColor(WHITE, BLACK);
    display.setCursor(10,10); 
    display.println("Треугольник");
    display.setTextColor(BLACK);
    display.setCursor(10,20);
    display.println("Пила");
    display.setCursor(10,30);
    display.println("Пила Обр");
    display.setTextColor(BLACK);
    delay(100);  
    display.display();
    while(D11_Read==LOW){
      PWM=trianglM[d];
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
    menuDDS++;
    delay(200);
  }  
  if(menuDDS==2){
    display.clearDisplay();     
    display.setTextColor(BLACK); // 'inverted' text
    display.setCursor(10,0);
    display.println("Синус");
    display.setTextColor(BLACK);
    display.setCursor(10,10); 
    display.println("Треугольник");
    display.setTextColor(WHITE, BLACK);
    display.setCursor(10,20);
    display.println("Пила");
    display.setTextColor(BLACK);
    display.setCursor(10,30);
    display.println("Пила Обр");
    display.setTextColor(BLACK);
    delay(100);  
    display.display();
    while(D11_Read==LOW){
      PWM=pilaM[d];
      pwmWrite(dds,PWM);
     // delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}
    }      
    menuDDS++;
    delay(200);
  }
  if(menuDDS==3){
    display.clearDisplay();     
    display.setTextColor(BLACK); // 'inverted' text
    display.setCursor(10,0);
    display.println("Синус");
    display.setTextColor(BLACK);
    display.setCursor(10,10); 
    display.println("Треугольник");
    display.setTextColor(BLACK);
    display.setCursor(10,20);
    display.println("Пила");
    display.setTextColor(WHITE, BLACK);
    display.setCursor(10,30);
    display.println("Пила Обр");
    display.setTextColor(BLACK);
    delay(100);  
    display.display();
    while(D11_Read==LOW){
      PWM=RpilaM[d];
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
      menuDDS++;
    delay(200);
  }
  if(menuDDS>3){menuDDS=0;}
}

 

grif66
Offline
Зарегистрирован: 28.04.2017

Этот вариант с какими-то изменениями, по сравнению в оригиналом, или просто красивые скобочки?

brotherirk
Offline
Зарегистрирован: 24.07.2017

brotherirk пишет:

-убрал работу с батареей (но оставил возможность задействовать)

-убрал терминал

-оптимизировал и оформил код

ничего нового не добавлено...

Mitchel
Offline
Зарегистрирован: 27.08.2017

Здравствуйте, я собрал схему как у автора с исходниками отсюда http://srukami.inf.ua/pultoscop_v25110.html
Для просмотра сигнала переменного напряжения добавил конденсатор параллельно резистору, на вход осциллографа, как сказано здесь http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=60#comm....
И на некоторых схемах здесь выложенных тоже есть конденсатор с переключателем.
Вопрос следующий: у меня почему-то отрицательные все равно не видит. Сигнал смотрю со звуковой карты

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

 Mitche, Вам ещё смещение на половину опорного нужно делать.  АЦП в ардуине не true-differential и не умеет работать с отрицательными значениями.

apeks1
apeks1 аватар
Offline
Зарегистрирован: 19.05.2016

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

сами ответили, как можно увидеть то чего нет?

Mitchel
Offline
Зарегистрирован: 27.08.2017

Вот и я думаю что нужен делитель для смещения на 2.5 В, меня вот эта схема и ниже описание смутило, http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=20#comm.... Так же в теме есть схему от других авторов с таким же подключением конденсатора, без делителей.

apeks1
apeks1 аватар
Offline
Зарегистрирован: 19.05.2016

можно построить входной усилитель как в схеме http://bezkz.su/publ/shemy/oscillografy/700212-oscillograf-na-mikrokontrollere-atmega32a.html чтоб сместить измерение отрицательных показателей в диапазон видимости пультоскопом (но только не на лм358 и лм833)

Mitchel
Offline
Зарегистрирован: 27.08.2017

Electronik83 пишет:

Winstonn пишет:

а это ты так и не добавил,.. ))) всё ещё зависает, когда из осциллоскопа выходишь

#include <avr/wdt.h>                               // это добавил с самом начале

while (flag_key-!digitalRead(key_down) || flag_key-!digitalRead(key_up)) {} 
    delay(1000);             
    wdt_enable(WDTO_30MS);                        //  а сюда вписал это  
    ResetAvr();  

У меня так ваще не работает, проц висит на ватчдоге, постоянно ресетится. Это видно из за автодетекта кнопок. Хотя изначально кнопки надо назначать на вход функцией pinMode(key_xxx, INPUT). Но тогда диод на плате, подключенный к 13-му пину мешает сиьлно.

Тоже с этим столкнулся, решение или прошивать загрузчик для работы watchdog или вместо wet_enable, перед переходим на нулевой адрес сбросить биты ADCSRA = 0b00000000

1707
Offline
Зарегистрирован: 08.02.2017

Всем привет. Некогда был посто о 2-й версии, может кто то знает. стоит ли её ждать или делать то что есть?

grif66
Offline
Зарегистрирован: 28.04.2017

Ждать стоит всегда, мало ли у автора дела другие. А собрать можно и первый вариант, перешить потом дело 3 минут

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

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

1707
Offline
Зарегистрирован: 08.02.2017

Видимо нужно по тиху начинать первую версию.

Novice User
Offline
Зарегистрирован: 25.09.2017

Заинтересовал проект,а есть ли вариант на ST7565?в ардуино начинающий...

1707
Offline
Зарегистрирован: 08.02.2017

Novice User пишет:

Заинтересовал проект,а есть ли вариант на ST7565?в ардуино начинающий...

Что то тут есть http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=37#comment-211683

Novice User
Offline
Зарегистрирован: 25.09.2017

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

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

1707
Offline
Зарегистрирован: 08.02.2017

Можно, как в DIP варианте так и SMD.

svj3ist
svj3ist аватар
Offline
Зарегистрирован: 08.02.2017

Novice User пишет:

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

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

Можно

Novice User
Offline
Зарегистрирован: 25.09.2017

svj3ist вот спасибо!теперь я точно уверен что голая атмега328 тоже подойдет

questioner
Offline
Зарегистрирован: 10.06.2016

Всем привет! Собрал пультоскоп, прикольный, работает, но вот только какой-то меандр странный... Эффект на любой частоте, генерил смартфоном. Может какая-то типовая ошибка?

questioner
Offline
Зарегистрирован: 10.06.2016

Оказалось, что тухлый генератор из моего телефона. Сгенерил меандр другой ардуиной - все норм.

brotherirk
Offline
Зарегистрирован: 24.07.2017

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

questioner
Offline
Зарегистрирован: 10.06.2016

Никакой разводки - навесной монтаж, все на проводочках. Модуль зарядки АКБ, повышаюший DC-DC - модуль на MT3608, ардуино про мини - все, больше там ничего нет. Кнопки вставлены в маленькую китайскую макетку.

Novice User
Offline
Зарегистрирован: 25.09.2017

попробовал,чет при частоте 10 кгц уже неровный мендр кажет...

#include "U8glib.h"

// Variables that can probably be left alone
const byte vTextShift = 3;              // Vertical text shift (to vertically align info)
const byte numOfSamples = 100;          // Leave at 100 for 128x64 pixel display
unsigned int HQadcReadings[numOfSamples];
byte adcReadings[numOfSamples];


byte mass[130];

const byte theAnalogPin =A4;
const byte lcdLED =1;// 6;                   // LED Backlight
const byte lcdA0 = 4;//7;                    // Data and command selections. L: command  H : data
const byte lcdRESET =7;// 8;                 // Low reset
const byte lcdCS = 6;//9;                    // SPI Chip Select (internally pulled up), active low
const byte lcdMOSI =3;// 11;                 // SPI Data transmission
const byte lcdSCK =2;// 13;                  // SPI Serial Clock

// HW SPI:
U8GLIB_MINI12864 u8g(lcdSCK, lcdMOSI, lcdCS, lcdA0, lcdRESET);
// High speed ADC code
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void draw(void) {
  int i;
  //u8g.drawLine((128-numOfSamples),0,(128-numOfSamples),63);//линия X1 Y1 X2 Y2
 for (i=0; i<127; i++) {//ТОЧКИ
     u8g.drawPixel(i,mass[i]/4);
}
void setup() {
  u8g.begin();
}

void loop() {
  int i;
  ADMUX = 0b01100100;//Выбор внешнего опорного   http://avrprog.blogspot.ru/2013/03/blog-post_13.html
  ADCSRA = 0b11100111;
  for(int i=0;i<130;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
 u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(1000);
  }

 

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

questioner  привет, не подскажешь где прошивку взять и схему? ради спортивного интереса хочу собрать =))) а то без дела такой экран лежит

questioner
Offline
Зарегистрирован: 10.06.2016

Прошивка http://srukami.inf.ua/rar/PULTOSCOPE_128x64_OLED_display.rar, схема это громко сказано, пусть останется для истории:

платы ищатся на али по запросам Lithium Battery Charger Board и dc-dc MT3608

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

спасибо!

brotherirk
Offline
Зарегистрирован: 24.07.2017

Ардуинка на землю не заведена ;)

questioner
Offline
Зарегистрирован: 10.06.2016

Точняк.. ну это же как бы само собой разумеется... да оно все там само собой разумеется )) Поправил

brotherirk
Offline
Зарегистрирован: 24.07.2017

Вот это +5!

questioner
Offline
Зарегистрирован: 10.06.2016

Можно еще взять вот такую плату  - там и повышающий преобразователь и контроллер заряда в одном флаконе

1707
Offline
Зарегистрирован: 08.02.2017

Хотел бы спросить, субъективный вопрос, какой укран информативнее, приятнее от Нокии3310 или 128x64_OLED_display ?

brotherirk
Offline
Зарегистрирован: 24.07.2017

имхо нокии

Electronik83
Offline
Зарегистрирован: 06.12.2015

имхо 128x64_oled_display. Поднимался уже вопрос этот. Форум разделился на два лагеря. Говорят, что типа олед мелкий, но он очень контрастный и даже при плохом зрении все видно отлично.

Electronik83
Offline
Зарегистрирован: 06.12.2015

имхо 128x64_oled_display. Поднимался уже вопрос этот. Форум разделился на два лагеря. Говорят, что типа олед мелкий, но он очень контрастный и даже при плохом зрении все видно отлично.

questioner
Offline
Зарегистрирован: 10.06.2016

Oled без сомнения. Я лично полюбил этот экран

Bober611
Offline
Зарегистрирован: 03.10.2017

Привет. Повторил схемку пультоскопа. И у меня возникли проблемы...

Суть такая что когда касаюсь щупа рукой частота скачит от нескольких герц до нескольких кгц...

Так и должно быть или где то косяк? 

Кварц я не менял оставил 16мгц так так он очень маленький на нано. (Может позже заменю. Еще нет и 30мгц кварца)

Фотки не лезут на сервак... Позже кину ссылки на вк.

UPD Открыл еще одно свойство данного девайса. Им можно искать проводку в стенах. Когда подношу его к проводу розетки с нагрузкой то он начинает показывать частоту и график. (При снятых щупах)

questioner
Offline
Зарегистрирован: 10.06.2016

Да, наши дома наполнены колебаниями 50 Гц. У меня на пальцах, когда я у компа амплитуда около 7 вольт. Сомневаюсь, что нашему организму нравится такая ситуация.

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

нашел еще одну ошибку на схеме... это кнопки последовательно с резисторами=)) а должны быть подтяжки