Этот вариант у меня нормально работает на дисплее 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); закоментировал
так тогда весь вывод в сериал уберите , он пол скетча занимает, так же он ничего общего с пультоскопом не имеет и работать должен медленнее ПУЛЬТОСКОПА.
Сделал предположение, что на макетном бутерброде где-то проскакивает КЗ... больше ничего в голову не пришло.
Все варианты разобрал, пропаяю на макетке. Если не получится, отпишусь по новой.
и как результат? у меня пролемма та же.... мне кажется что, проблемма в коде....
все оказалось, как и предполагал.... проблемма в коде....(бррр, такой код разбирать)....
в коде найти строчки и их закомментировать, должно получиться так:
//#define power 8 //пин который опрашивает кнопку включения
//#define OFF 14//пин который управляет ключем питания
//#define timepowerON 50 //время удержания кнопки выключения
Доброго дня, достался дисплейчик на R61580, пытался собрать на нем и на Uno. В результате выдает белый экран. Пытался запустить примеры с библиотек идущих вместе со скетчем, тот же результат.
Нашел библиотеку с которой примеры запускаются. подскажите как ее прикрутить так чтоб система заработала.
Всем неравнодушным здравствовать.Собрал я данный девайс.Спасибо автору за разработку и помощь.Никак не мог залить скетч,пришлось запрограммировать через hex файл и все заработало.Уже опробовал в работе,все кажет все видно.Не знаю как вставить фото но девайс уже в корпусе.Еще есть TFT 2,4" который никак не могу запустить.Определяется как 9320 но ни один скетч не проходит.На сайте есть скетч осциллографа для ILI7781 все заливается,все видно но это примитив.Народ выкладывает что-то но не более,готового решения нет.В поиске не первый месяц но пока пусто.Печалька.
Здравствуйте, я собрал схему как у автора с исходниками отсюда http://srukami.inf.ua/pultoscop_v25110.html
Для просмотра сигнала переменного напряжения добавил конденсатор параллельно резистору, на вход осциллографа, как сказано здесь http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=60#comm....
И на некоторых схемах здесь выложенных тоже есть конденсатор с переключателем.
Вопрос следующий: у меня почему-то отрицательные все равно не видит. Сигнал смотрю со звуковой карты
а это ты так и не добавил,.. ))) всё ещё зависает, когда из осциллоскопа выходишь
#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
спасибо за наводку!попробую развести плату и спаять,посмотрю что получится
еще вопрос (хотя мне на другом форуме ответили что можно,спрошу и здесь)-у меня всего одна ардуинка,можно ли собрать на голом камне атмега328 с обвязкой(кварц,конденсаторы по питанию...) как в схеме ардуино нано
спасибо за наводку!попробую развести плату и спаять,посмотрю что получится
еще вопрос (хотя мне на другом форуме ответили что можно,спрошу и здесь)-у меня всего одна ардуинка,можно ли собрать на голом камне атмега328 с обвязкой(кварц,конденсаторы по питанию...) как в схеме ардуино нано
Всем привет! Собрал пультоскоп, прикольный, работает, но вот только какой-то меандр странный... Эффект на любой частоте, генерил смартфоном. Может какая-то типовая ошибка?
имхо 128x64_oled_display. Поднимался уже вопрос этот. Форум разделился на два лагеря. Говорят, что типа олед мелкий, но он очень контрастный и даже при плохом зрении все видно отлично.
имхо 128x64_oled_display. Поднимался уже вопрос этот. Форум разделился на два лагеря. Говорят, что типа олед мелкий, но он очень контрастный и даже при плохом зрении все видно отлично.
Привет. Повторил схемку пультоскопа. И у меня возникли проблемы...
Суть такая что когда касаюсь щупа рукой частота скачит от нескольких герц до нескольких кгц...
Так и должно быть или где то косяк?
Кварц я не менял оставил 16мгц так так он очень маленький на нано. (Может позже заменю. Еще нет и 30мгц кварца)
Фотки не лезут на сервак... Позже кину ссылки на вк.
UPD Открыл еще одно свойство данного девайса. Им можно искать проводку в стенах. Когда подношу его к проводу розетки с нагрузкой то он начинает показывать частоту и график. (При снятых щупах)
Да, наши дома наполнены колебаниями 50 Гц. У меня на пальцах, когда я у компа амплитуда около 7 вольт. Сомневаюсь, что нашему организму нравится такая ситуация.
Так как мой дисплей не работает на библиотеке Adafruit,
нашёл примеры на библиотеке U8glib.h ,на которой заработал (хотя и раскомментирован также SSD1306).
В источнике другой дисплей- заменил в скетче на свой(оставлено закоментированым другие поддерживаемые дисплеи)
но тут не понял с подключением входа сигнала-
в скетче
подключал сигнал с генератора- на экране нет пульсаций.
Так же вопрос по энкодеру - соответствует ли подключение на картинке написанному в скетче?
Что за энкодер можно применить?
скетч полностью
#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/
Так на источнике и спрашивай. Причем тут Пультоскоп.
Попробуйте в ОРИГИНАЛЬНЫЙ СКЕТЧ С САЙТА АВТОРА http://srukami.inf.ua/pultoscop_v25110.html в самом начале добавить
#include <SPI.h>
#include <Wire.h>
как в примерах
Х.З. у меня нет такого экрана
Попробуйте в ОРИГИНАЛЬНЫЙ СКЕТЧ С САЙТА АВТОРА 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>
Сообщение об ошибке
Вот работающий скетч с добавленными дисплеями(подойдёт любой из списка 128х64.
Для дисплеев i2c //Serial.begin(9600); закоментировал
Для ATmega128 использовал MegaCore https://github.com/MCUdude/MegaCore
arduino-1.6.7
так тогда весь вывод в сериал уберите , он пол скетча занимает, так же он ничего общего с пультоскопом не имеет и работать должен медленнее ПУЛЬТОСКОПА.
bodriy2014,
(БлагоДарю за внимание к проблеме)
Сделал предположение, что на макетном бутерброде где-то проскакивает КЗ... больше ничего в голову не пришло.
Все варианты разобрал, пропаяю на макетке. Если не получится, отпишусь по новой.
и как результат? у меня пролемма та же.... мне кажется что, проблемма в коде....
все оказалось, как и предполагал.... проблемма в коде....(бррр, такой код разбирать)....
в коде найти строчки и их закомментировать, должно получиться так:
в двух местах:
/////////////////////////////////////////удержание кнопки отключения //if(digitalRead(power)==HIGH){powerON++;delay(10);} //if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание /////////////////////////////////////////удержание кнопки отключенияДоброго дня, достался дисплейчик на R61580, пытался собрать на нем и на Uno. В результате выдает белый экран. Пытался запустить примеры с библиотек идущих вместе со скетчем, тот же результат.
Нашел библиотеку с которой примеры запускаются. подскажите как ее прикрутить так чтоб система заработала.
https://yadi.sk/d/AtQBNGMJ3LvJmQ
Вот она.
Всем неравнодушным здравствовать.Собрал я данный девайс.Спасибо автору за разработку и помощь.Никак не мог залить скетч,пришлось запрограммировать через hex файл и все заработало.Уже опробовал в работе,все кажет все видно.Не знаю как вставить фото но девайс уже в корпусе.Еще есть TFT 2,4" который никак не могу запустить.Определяется как 9320 но ни один скетч не проходит.На сайте есть скетч осциллографа для ILI7781 все заливается,все видно но это примитив.Народ выкладывает что-то но не более,готового решения нет.В поиске не первый месяц но пока пусто.Печалька.
.На сайте есть скетч осциллографа для ILI7781 все заливается,все видно но это примитив.
А можно ссылку?
Можно.Смотрите форум Калининграда и здесь на форуме тему Мини осциллограф на Arduino LCD5110.Все сдернуто с японского сайта.
tolkach под 9320 попробуйте Mcufriend_kbv
Дайте плиз ПОСЛЕДНЮЮ правленную прошивку под 5110 экран, а то авторская - глючная... (переписывать ее под себя не оч хочется)
не удержался и переписал "под себя":
-убрал работу с батареей (но оставил возможность задействовать)
-убрал терминал
-оптимизировал и оформил код
...рекомендую эту версию для повоторения, как простую, стабильную, и рабочую...
Этот вариант с какими-то изменениями, по сравнению в оригиналом, или просто красивые скобочки?
-убрал работу с батареей (но оставил возможность задействовать)
-убрал терминал
-оптимизировал и оформил код
ничего нового не добавлено...
Здравствуйте, я собрал схему как у автора с исходниками отсюда http://srukami.inf.ua/pultoscop_v25110.html
Для просмотра сигнала переменного напряжения добавил конденсатор параллельно резистору, на вход осциллографа, как сказано здесь http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=60#comm....
И на некоторых схемах здесь выложенных тоже есть конденсатор с переключателем.
Вопрос следующий: у меня почему-то отрицательные все равно не видит. Сигнал смотрю со звуковой карты
Mitche, Вам ещё смещение на половину опорного нужно делать. АЦП в ардуине не true-differential и не умеет работать с отрицательными значениями.
сами ответили, как можно увидеть то чего нет?
Вот и я думаю что нужен делитель для смещения на 2.5 В, меня вот эта схема и ниже описание смутило, http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=20#comm.... Так же в теме есть схему от других авторов с таким же подключением конденсатора, без делителей.
можно построить входной усилитель как в схеме http://bezkz.su/publ/shemy/oscillografy/700212-oscillograf-na-mikrokontrollere-atmega32a.html чтоб сместить измерение отрицательных показателей в диапазон видимости пультоскопом (но только не на лм358 и лм833)
а это ты так и не добавил,.. ))) всё ещё зависает, когда из осциллоскопа выходишь
#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
Всем привет. Некогда был посто о 2-й версии, может кто то знает. стоит ли её ждать или делать то что есть?
Ждать стоит всегда, мало ли у автора дела другие. А собрать можно и первый вариант, перешить потом дело 3 минут
я уже не жду вторую версию.... кончилась ждалка))) перегорел)
Видимо нужно по тиху начинать первую версию.
Заинтересовал проект,а есть ли вариант на ST7565?в ардуино начинающий...
Заинтересовал проект,а есть ли вариант на ST7565?в ардуино начинающий...
Что то тут есть http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=37#comment-211683
спасибо за наводку!попробую развести плату и спаять,посмотрю что получится
еще вопрос (хотя мне на другом форуме ответили что можно,спрошу и здесь)-у меня всего одна ардуинка,можно ли собрать на голом камне атмега328 с обвязкой(кварц,конденсаторы по питанию...) как в схеме ардуино нано
Можно, как в DIP варианте так и SMD.
спасибо за наводку!попробую развести плату и спаять,посмотрю что получится
еще вопрос (хотя мне на другом форуме ответили что можно,спрошу и здесь)-у меня всего одна ардуинка,можно ли собрать на голом камне атмега328 с обвязкой(кварц,конденсаторы по питанию...) как в схеме ардуино нано
Можно
svj3ist вот спасибо!теперь я точно уверен что голая атмега328 тоже подойдет
Всем привет! Собрал пультоскоп, прикольный, работает, но вот только какой-то меандр странный... Эффект на любой частоте, генерил смартфоном. Может какая-то типовая ошибка?
Оказалось, что тухлый генератор из моего телефона. Сгенерил меандр другой ардуиной - все норм.
questioner, какую схему равоодки платы использовали можно посмотреть?
Никакой разводки - навесной монтаж, все на проводочках. Модуль зарядки АКБ, повышаюший DC-DC - модуль на MT3608, ардуино про мини - все, больше там ничего нет. Кнопки вставлены в маленькую китайскую макетку.
попробовал,чет при частоте 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); }questioner привет, не подскажешь где прошивку взять и схему? ради спортивного интереса хочу собрать =))) а то без дела такой экран лежит
Прошивка http://srukami.inf.ua/rar/PULTOSCOPE_128x64_OLED_display.rar, схема это громко сказано, пусть останется для истории:
платы ищатся на али по запросам Lithium Battery Charger Board и dc-dc MT3608
спасибо!
Ардуинка на землю не заведена ;)
Точняк.. ну это же как бы само собой разумеется... да оно все там само собой разумеется )) Поправил
Вот это +5!
Можно еще взять вот такую плату - там и повышающий преобразователь и контроллер заряда в одном флаконе
Хотел бы спросить, субъективный вопрос, какой укран информативнее, приятнее от Нокии3310 или 128x64_OLED_display ?
имхо нокии
имхо 128x64_oled_display. Поднимался уже вопрос этот. Форум разделился на два лагеря. Говорят, что типа олед мелкий, но он очень контрастный и даже при плохом зрении все видно отлично.
имхо 128x64_oled_display. Поднимался уже вопрос этот. Форум разделился на два лагеря. Говорят, что типа олед мелкий, но он очень контрастный и даже при плохом зрении все видно отлично.
Oled без сомнения. Я лично полюбил этот экран
Привет. Повторил схемку пультоскопа. И у меня возникли проблемы...
Суть такая что когда касаюсь щупа рукой частота скачит от нескольких герц до нескольких кгц...
Так и должно быть или где то косяк?
Кварц я не менял оставил 16мгц так так он очень маленький на нано. (Может позже заменю. Еще нет и 30мгц кварца)
Фотки не лезут на сервак... Позже кину ссылки на вк.
UPD Открыл еще одно свойство данного девайса. Им можно искать проводку в стенах. Когда подношу его к проводу розетки с нагрузкой то он начинает показывать частоту и график. (При снятых щупах)
Да, наши дома наполнены колебаниями 50 Гц. У меня на пальцах, когда я у компа амплитуда около 7 вольт. Сомневаюсь, что нашему организму нравится такая ситуация.
нашел еще одну ошибку на схеме... это кнопки последовательно с резисторами=)) а должны быть подтяжки