C:\Users\vasyna\AppData\Local\Temp\ccSoHhMZ.ltrans0.ltrans.o: In function `main':
ccSoHhMZ.ltrans0.o:(.text.startup+0xa0): undefined reference to `Adafruit_GFX::cp437(bool)'
collect2.exe: error: ld returned 1 exit status
Может все таки вы выложите свои адафруит обе (общую и под конкретный контроллер и за одно и pwm и чего там еще было). На не напрягаю, но для полноты картины. Иначе труд Ваш пропадает...
Короче весь скетч под переделку или переделывать адафруит... но меня это задрало... уже 6-й раз переписываю функции вывода, особенно с кнопками проблема, на кирилице приходится переделывать весь пересчет количества символов и размещения в кнопке.
Все скомпилено на 1.6.13 и все отменно работает. Сходу видно некоторые места где используется одни и те же стринги которые можно былобы задефайнить, но я синюшный в дрын и ломает... сам аппарат покажу как будет спроектирован и отпечатан корпус.
Вот схема подключения:
Еще раз - на авторство не претендую. Камраду 240265, спасибо огромное. Все таки уследил, а я забросил.
PS. Корпус планируется со свободным местом и православным BNC разъемом с местом под схему ОУ, если к таковой по итогу кто-то дельно определится. Всем кто работал над пультоскопом спасибо!
Все я ДОГОВАРИВАЮ думаете мне нужен "геморой" учить пользоваться программой.
Настройки и библиотеки хранятся еще здесь C:\Users\User\AppData\Local\Arduino15
Если удалить эту папку Ардуино запустится с нуля и будет брать библиотеки из папки с Ардуиной.
Мне выкладывать не куда. У Вас он берет скорее всего библиотеки из вышеуказанной папки, а там Вы шрифт не поменяли.
Библы хранятся у меня в одной папке.
Такой папки C:\Users\User\AppData\Local\Arduino15 у меня и нет. Все настройки ардуино иде лежат в папке с дунькой, либы лежат в папке в дропбоксе. Решение задачи болт он выше. Вам спасибо, но в след раз доведите дело до конца. Я буду Вам в 2 раза больше пизнательней.
Не знаю как у Вас , но у меня все без "болтов" работает.
Еще раз. Скет Ваш откомпилился, но пришлось в сток докинуть 4 библиотеки. А следовательно их надо было еще найти. Потом оказалось что надо или русифицировать по нормальному adafruit (я уже е раз переделывал бибу под русификатор, чтобы не заморачиваться с лишним вызовом перекодировки, но я более или менее слежу за обновлениями библиотек и временами забываю сделать бэкап и потом просто перенести эти места правки в новую версию, да и задрало, за год 4 раза уже это делал). Т.е. не взял и расслабился, а допилинг и допилинг. Я де выложил полностью болтон решение. Скачай и радуйся.
Полагаю, разногласия по библиотекам могут быть (и очень даже бывают) изза того, что они (библиотеки), к сожалению, бывают в двух местах (а если добавлен ещё и "stm32duino" блок, то и в трёх). За этим надо следить. При чём, если соглашатся на авто апдейты библиотек, то там опять не факт куда пойдёт новая версия. Я, если не уверен, что творитса с библиотеками, откладываю в сторонку все нужные библиотекти, снимаю софт Arduino, стираю вручную Program Files (x86)/Arduino, AppData/Local/Arduino(XX), Documents/Arduino, ну и ставим по новой, и следим где держть библиотеки.
Скачайте весь пакет ардуины arduino-1.6.5-r5 там ЕСТЬ русский glcdfont.c я его выкладывал пост 2351.
Вот еще раз из того архива Adafruit_GFX_Library - glcdfont.c
Да, но толку от шрифта если библа нормально кирилицу не хавает. Для этого и есть функция utf8rus. Я ее встаривал во все функции адафруита где выводится текст. Но надоело.
Ладно. Больше не будем отвлекаться и мусорить. Готовый пакет есть и этого хватит.
Ну вроде получилось, сейчас сам выбирает осциллограф в меню, все настройки в EEPROM, коэффициент делителя и коэффициент заполнения показует и главное работоспособен.Скрин вот:
Ну вроде получилось, сейчас сам выбирает осциллограф в меню, все настройки в EEPROM, коэффициент делителя и коэффициент заполнения показует и главное работоспособен.Скрин вот:
приколько получилось, не поделитесь исходниками?)приехал сегодня дисплей 5110 думаю маленький ослик еще сделать
Ну адаптировал скетч под экран без выкрутасов, у меня сами видете как,поэтому не проверял, если что подправить не сложно,кратенько-при первом запуске пишет в eeprom настройки и по адресу 0 eeprom,запоминает что уже запускался,поэтому если в ячейке 1 то нужно комментировать строки 85 и 93 запустить и после опять запрограммировать исходник, A1 - контакт управления подсветкой, все остальное стандартно, коэффициент заполнения считывается при появлении импульсов затем просто переписывается без подсчета пока не исчезнет сигнал и появится вновь.
//Страница проэкта http://srukami.inf.ua/pultoscop_v25110.html
#include <EEPROM.h>
#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 power 8 //пин который опрашивает кнопку включения
#define OFF 14 //пин который управляет ключем питания
#define timepowerON 50 //время удержания кнопки выключения
#define levo 4 //кнопка ЛЕВО(можно любой пин)
#define ok 3 //кнопка ОК(можно любой пин)
#define pravo 2 //кнопка ПРАВО(можно любой пин)
#define akb A2 //любой своюодный аналоговый пин для измерения напряжения АКБ
#define LCDPin A1 //выход на контакт подсветки LCD
#define overclock 16 //Частота на которой работает Ардуино
//Adafruit_PCD8544(CLK, DIN, DC, CS, RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(13, 12, 7, A0, 8);//пины к которым у вас подключен дисплей
byte cont=52; //контрастность дисплея
byte SinU=30; //уровень синхронизации 0 до 255
byte mode=0; //первое включение mode=255 в EEPROM
int PWM = 128; //стартовое значение ШИМ от 0 до 255
int32_t frequency = 500; //стартовое значение частоты в Гц
float VCC=5.0; //напряжение питания, меряем мультиметром
//###########################################################
int d=0;
byte menuDDS=0;
byte menuLight=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};
int powerON=0;//состояние кнопки питания
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[701];
byte x=0;
byte menu=0;//переменная выбора меню
bool opornoe=1; //флаг опорного напряжения
bool kzap=0; //флаг коэффициента заполнения
bool paus=0; //флаг режима паузы
byte pultoskop=0; //флаг выбора генератора или осциллографа
byte razv=6;
unsigned long count =0;
byte sinX=30;
byte meaX=83;
int Vmax=0; // максимальное напряжение
int mno=1;
byte sinhMASS=0;
long countX=0;
long speedTTL=9600; //скорость терминала
int prokr=0;
int osc=150;
int s_mno= 1;
boolean lcd=false;
uint32_t tic1;
uint32_t tic2;
int duty;
// /*
void reads(){
razv = EEPROM.read(1); // читаем длину разверстки из еепром
SinU = EEPROM.read(2); // читаем режим разверстки из еепром
menu = EEPROM.read(3); // читаем menu из еепром
s_mno = EEPROM.read(4);
lcd = EEPROM.read(5); // читаем режим подсветки из еепром
}
// */
void setup(){
pinMode(A4,INPUT);
pinMode(LCDPin, OUTPUT); // подсветка дисплея
digitalWrite(OFF,HIGH); //включем питание
//Serial.begin(9600);
display.begin();
display.setContrast(cont);
//display.setRotation(true);
// /*
//При 1-м включении запомнить в EEPROM длину разверстки
mode = EEPROM.read(0); // читаем режим из еепром
if (mode =! 1) { //. закомментировать если не программируется
mode = 1; // проверяем значение в еепром
EEPROM.write(1, razv);
EEPROM.write(2, SinU);
EEPROM.write(3, menu);
EEPROM.write(4, s_mno);
EEPROM.write(5, lcd);
EEPROM.write(0, mode); // пишим его в еепром
} //. закомментировать если не программируется
reads();
if (lcd==true) digitalWrite(LCDPin,HIGH);
else digitalWrite(LCDPin,LOW);
// */
while(digitalRead(ok)==LOW){
// Если не нажата 10 сек кнопка ок в режим осцилоографа автоматом
osc--;
if (osc==0) break;
/////////////////////////////////////////удержание кнопки отключения
//if(digitalRead(power)==HIGH){powerON++;delay(10);}
//if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения
if(pultoskop==0){
display.clearDisplay();
display.setCursor(10,0);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println("Осциллограф");
display.setCursor(10,10);
display.setTextColor(BLACK);
display.println("Генератор");
display.setCursor(10,20);
display.println("DDSгенератор");
display.setCursor(10,30);
display.println("Подсветка");
display.setCursor(0,40);
display.print("Батарея=");
display.print(analogRead(akb)*5.0/1024);
display.print("В");
}
if(pultoskop==1){
display.clearDisplay();
display.setCursor(10,0);
display.setTextColor(BLACK); // 'inverted' text
display.println("Осциллограф");
display.setCursor(10,10);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println("Генератор");
display.setTextColor(BLACK); // 'inverted' text;
display.setCursor(10,20);
display.println("DDSгенератор");
display.setCursor(10,30);
display.println("Подсветка");
display.setCursor(0,40);
display.setTextColor(BLACK);
display.print("Батарея=");
display.print(analogRead(akb)*5.0/1024);
display.print("В");
}
if(pultoskop==2){
display.clearDisplay();
display.setCursor(10,00);
display.setTextColor(BLACK); // 'inverted' text
display.println("Осциллограф");
display.setCursor(10,10);
display.println("Генератор");
display.setTextColor(WHITE, BLACK); // 'inverted' text;
display.setCursor(10,20);
display.println("DDSгенератор");
display.setTextColor(BLACK);
display.setCursor(10,30);
display.println("Подсветка");
display.setCursor(0,40);
display.setTextColor(BLACK);
display.print("Батарея=");
display.print(analogRead(akb)*5.0/1024);
display.print("В");
}
if(pultoskop==3){
display.clearDisplay();
display.setCursor(10,00);
display.setTextColor(BLACK); // 'inverted' text
display.println("Осциллограф");
display.setCursor(10,10);
display.println("Генератор");
display.setTextColor(BLACK);
display.setCursor(10,20);
display.println("DDSгенератор");
display.setTextColor(WHITE, BLACK);
display.setCursor(10,30);
display.println("Подсветка");
display.setCursor(0,40);
display.setTextColor(BLACK);
display.print("Батарея=");
display.print(analogRead(akb)*5.0/1024);
display.print("В");
}
if(digitalRead(levo)==HIGH){delay(300);pultoskop=pultoskop+1;}
if(digitalRead(pravo)==HIGH){delay(300);pultoskop=pultoskop+1;}
if(pultoskop>3){pultoskop=0;}
delay(50);
display.display(); }
if(pultoskop==2){InitTimersSafe(); bool success = SetPinFrequencySafe(led,200000);}
if(pultoskop==0){FreqCount.begin(1000);}
if(pultoskop==1){InitTimersSafe(); bool success = SetPinFrequencySafe(led, frequency);}
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<700;i++){
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
delayMicroseconds(500);
mass[i]=ADCH;
}
}
if (razv>0){
for(int i=0;i<700;i++){
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
mass[i]=ADCH;
}
}
}
void loop() {
/////////////////////////////////////////удержание кнопки отключения
//if(digitalRead(power)==HIGH){powerON++;delay(10);}
//if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения
if(pultoskop==0){
if(opornoe==0){ADMUX = 0b11100011;}//выбор внутреннего опорного 1,1В & A3 пин осциллографа
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];} }
//максимальное значение сигнала##########################
//#######################################определение точки синхронизации
//#######################################отрисовка графика
if(paus==0){
display.clearDisplay();
display.fillCircle(78,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.clearDisplay();
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);
if (s_mno==1) {mno=1;display.print("x1");}
if (s_mno==2) {mno=3;display.print("x3");}
if (s_mno==3) {mno=3;display.print("x9");}
display.print("П");
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
if (s_mno==1) {mno=1;display.print("x1");}
if (s_mno==2) {mno=3;display.print("x3");}
if (s_mno==3) {mno=10;display.print("x9");}
display.print("П");
if(digitalRead(levo)==HIGH){razv=razv-1;if(razv==255){razv=0;}EEPROM.write(1, razv);}
if(digitalRead(pravo)==HIGH){razv=razv+1;if(razv==9){razv=8;}EEPROM.write(1, razv);}
}
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
if (s_mno==1) {mno=1;display.print("x1");}
if (s_mno==2) {mno=3;display.print("x3");}
if (s_mno==3) {mno=10;display.print("x9");}
display.setTextColor( BLACK); // 'inverted' text
display.print("П");
if(digitalRead(levo)==HIGH){s_mno--;if (s_mno<1) s_mno=1;EEPROM.write(4, s_mno);}
if(digitalRead(pravo)==HIGH){s_mno++;if (s_mno>3) s_mno=3;EEPROM.write(4, s_mno);}
}
if(menu==3){
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);
if (s_mno==1) {mno=1;display.print("x1");}
if (s_mno==2) {mno=3;display.print("x3");}
if (s_mno==3) {mno=10;display.print("x9");}
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.print("П");
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==4){
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);
if (s_mno==1) {mno=1;display.print("x1");}
if (s_mno==2) {mno=3;display.print("x3");}
if (s_mno==3) {mno=10;display.print("x9");}
display.setTextColor(BLACK);
display.print("П");
if(digitalRead(levo)==HIGH){SinU=SinU-20;if(SinU<20){SinU=20;}EEPROM.write(2, SinU);}
if(digitalRead(pravo)==HIGH){SinU=SinU+20;if(SinU>230){SinU=230;}EEPROM.write(2, SinU);}
display.fillCircle(78,47-SinU/7, 5, BLACK);
display.fillCircle(78,47-SinU/7, 2, WHITE);
}
if(digitalRead(ok)==HIGH){menu++;if(menu==5){menu=0;paus=0;}EEPROM.write(3, menu);}//перебор меню
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(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)*mno,1);}
if(opornoe==0){display.setCursor(0,40);display.setTextColor(BLACK);
display.print((Vmax*1.1/255)*mno,1);}
display.print("v");
if (countX < 10) kzap=true;
if (kzap==true && countX > 10){
FreqCount.end();
tic1 = asm_func(1);
tic2 = asm_func(0);
duty=(1/((float)tic1/tic2))*100;
kzap=false;
FreqCount.begin(1000);
}
if (kzap==false && countX > 10 && duty < 100){
display.setCursor(4,9);
display.setTextColor(BLACK);
display.print(duty);
display.print("%");
}
//#######################################отрисовка menu
delay(150);
display.display();
}
if(pultoskop==1){Generator();}
if(pultoskop==2){DDSGenerator();}
if(pultoskop==3){Light();}
}
//#######################################режим ренератора
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);
//display.print("Частота=");
//display.print(57);
//display.print("Гц");
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);
//display.setCursor(0,40);
//display.print("Частота=");
// display.print(57);
//display.print("Гц");
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);
//display.setCursor(0,40);
//display.print("Частота=");
// display.print(57);
//display.print("Гц");
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);
//display.setCursor(0,40);
//display.print("Частота=");
// display.print(57);
// display.print("Гц");
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==4){menuDDS=0;}
}
/////////////////////DDS
void(* resetFunc) (void) = 0; // объявляем функцию reset с адресом 0
/////////////////////Меню Light
void Light(){
if(menuLight==0){
display.clearDisplay();
display.setCursor(3,5);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println("Подсветка LCD");
display.setCursor(26,16);
display.setTextColor(BLACK);
if (lcd==true) {display.println(" ON");
}else display.println("OFF");
display.setCursor(3,25);
display.println("Reboot");
}
if(menuLight==1){
display.clearDisplay();
display.setCursor(3,5);
display.setTextColor(BLACK); // 'inverted' text
display.println("Подсветка LCD");
display.setCursor(26,16);
if (lcd==true) {display.println(" ON");
}else display.println("OFF");
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.setCursor(3,25);
display.println("Reboot");
}
if(digitalRead(ok)==HIGH){delay(150);menuLight=menuLight+1;}
if(menuLight>1){menuLight=0;}
if ((menuLight==0)&&(digitalRead(pravo)==HIGH)) {lcd=true;digitalWrite(LCDPin,HIGH);EEPROM.write(5, lcd);}
if ((menuLight==0)&&(digitalRead(levo)==HIGH)) {lcd=false;digitalWrite(LCDPin,LOW);EEPROM.write(5, lcd);}
if ((menuLight==1)&&(digitalRead(pravo)==HIGH)) resetFunc();
if ((menuLight==1)&&(digitalRead(levo)==HIGH)) resetFunc(); //вызываем reset
delay(150);
display.display();
}
/////////////////////Меню Light
/////////////////////Коэффициент заполнения
uint32_t asm_func(uint8_t flag){
asm volatile (
"cli" "\n\t"
"mov r21,%0" "\n\t" // флаг что считывать
//сохранение конфигурация таймеров
"in r30,0x23" "\n\t" // r30 <- GTCCR
"ldi r18,0x83" "\n\t" // GTCCR=0x83
"out 0x23,r18" "\n\t" // GTCCR=0x83
"lds r26,0x80" "\n\t" // r26 <- TCCR1A
"sts 0x80,__zero_reg__" "\n\t" // TCCR1A=0
"lds r27,0x81" "\n\t" // r27 <- TCCR1B
"ldi r19,0x4" "\n\t"
"sts 0x81,r19" "\n\t" // TCCR1B=1<<CS12
"sts 0x85, __zero_reg__" "\n\t" //TCNT1L=0
"sts 0x84, __zero_reg__" "\n\t" //TCNT1H=0
"lds r28,0xB0" "\n\t" // r28 <- TCCR2A
"sts 0xB0,__zero_reg__" "\n\t" // TCCR2A=0
"lds r29,0xB1" "\n\t" // r29 <- TCCR2B
"ldi r20,0x1" "\n\t"
"sts 0xB1,r20" "\n\t" // TCCR2B=1<<CS20
"sts 0xB2,__zero_reg__" "\n\t" // TCNT2=0
"lds r31,0x70" "\n\t" // r31 <- TIMSK2
"sts 0x70,__zero_reg__" "\n\t" // TIMSK2=0
////*******************************************
// пройти если ноль
"wait_begin:" "\n\t"
"sbic 0x09,5" "\n\t" // Порт D5
"rjmp wait_begin" "\n\t"
// пройти если единица -> первый импульс
"wait_start:" "\n\t"
"sbis 0x9,5" "\n\t"
"rjmp wait_start" "\n\t"
"sts 0x43,__zero_reg__" "\n\t" // GTCCR=0 старт синхра
// импульс пошёл, ждём ноль
"wait_pause:" "\n\t"
"sbic 0x09,5" "\n\t"
"rjmp wait_pause" "\n\t"
"cpi r21,__zero_reg__" "\n\t" //
"brne duty" "\n\t"
// импульс кончился, ждём конца периода (единицу)
"wait_end:" "\n\t"
"sbis 0x9,5" "\n\t"
"rjmp wait_end" "\n\t"
"duty:" "\n\t"
////*******************************************
//восстановление таймеров
"sts 0x80,r26" "\n\t" // TCCR1B
"sts 0x81,r27" "\n\t" // TCCR1B
"sts 0xB0,r28" "\n\t" // TCCR2A
"sts 0xB1,r29" "\n\t" // TCCR2B
"sts 0x70,r31" "\n\t" // TIMSK2
"out 0x23,r30" "\n\t" // GTCCR старт таймеры
//вывод 3х байт
"lds r22, 0xB2" "\n\t" // tctn2 0 байт
"lds r23, 0x84" "\n\t" // TCNT1L 1 байт
"lds r24, 0x85" "\n\t" // TCNT1H 2 байт
"lds r25, __zero_reg__" "\n\t" // пустой 3 байт
"sei" "\n\t"
::"r" (flag): ); }
/////////////////////Коэффициент заполнения
Скетч скомпилировался без проблем. IDE Arduino 1.8.1.
Используем библиотеку EEPROM версии 2.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM
Используем библиотеку Adafruit_GFX_Library версии 1.0.2 из папки: C:\Users\Admin\Documents\Arduino\libraries\Adafruit_GFX_Library
Используем библиотеку Adafruit-PCD8544-Nokia-5110-LCD-library-master версии 1.0.1 из папки: C:\Users\Admin\Documents\Arduino\libraries\Adafruit-PCD8544-Nokia-5110-LCD-library-master
Используем библиотеку SPI версии 1.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI
Используем библиотеку FreqCount версии 1.2 из папки: C:\Users\Admin\Documents\Arduino\libraries\FreqCount
Используем библиотеку PWM в папке: C:\Users\Admin\Documents\Arduino\libraries\PWM (legacy)
Используем библиотеку CyberLib в папке: C:\Users\Admin\Documents\Arduino\libraries\CyberLib (legacy)
Скетч использует 18638 байт (57%) памяти устройства. Всего доступно 32256 байт.
воткнул наконец в корпус, пока не все доделано, нет всех переключателей, делители и т д
Поздравляю с закорпусованностью! :) Может, для однозначности, можете подписать, с какого поста там прошивка, ни может ещё какие важности. Знаете как, многие могут с конце ветку читать, ит.п. :) Спасибо!
воткнул наконец в корпус, пока не все доделано, нет всех переключателей, делители и т д
Поздравляю с закорпусованностью! :) Может, для однозначности, можете подписать, с какого поста там прошивка, ни может ещё какие важности. Знаете как, многие могут с конце ветку читать, ит.п. :) Спасибо!
#1443 вот тут скетч помоему,важностей нет вроде никаких))) вместо схемы отключения пока что сделана кнопка на А1 массу подает, тем самым ребутает дисплей, в наличии просто нет pnp транзисторов=)
Для себя изменил:
Автоматическое отключение при достижении напряжения питания ниже 2,8в.
Подача двойного звукового сигнала каждые 10 минут (таблетка от забывчивости).
Установка через меню состояния подсветки постоянно ВКЛ или выкл через установленное время.(дискретность 5сек)
Установка через меню опорного напряжения.
Установка через меню контрастности дисплея.
Установка через меню звукового сопровождение нажатие клавиш.
В пультоскопе: запоминание значений развертки, уровня синхронизации.
В генераторе: запоминание значений скважности, частоты, выбранного множителя частоты.
В терминале: выбор скорости терминала через кейсы от 300 бод до 256000 бод, запоминание значения.
Пультоскоп считаю очень удобным. Спасибо автору за идею и код!
Да, конечно... Я дописывал скейтч еще летом, на прототипе, и вот что-то найти не могу... Неакуратно отношусь к наработкам :)
В крайнем случае, перепишу по новой и опубликую здесь.
Схема как у автора, единственно добавил схему преобразователя на MC34063 и делители. А так же закрыл входы осцила и терминала стабилитронами на 5,1В.
По поводу стабилитронов, не лучшее решение, но качесвто эпюры меня не сильно интересует, а вот паленые порты сильно. Ткнул в генератор авто, а делитель не переключил :)
Так же бывает, что нужно посмотреть в терминале, а логические уровни выше 5 вольт. Стабилитроны спасали уже :)
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS, выбор пал на dso138 но после того как почитал и посмотрел понял что он мягко говоря, не очень. Наткнулся на Пультоскоп который как я понял лучше и дешевле вышеупомянутого китайца Захотел собрать и тут разные версии с разными конфигурациями дисплеев под которые нужны свои драйвера. Ниже составил смету для сборки данного осцилографа. Просьба к форумчанам подскажите исходя из вашего опыта, может какие то детали плохо работают или есть какие то подводные камни при работе с ними или что то неучел. Спасибо
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS, выбор пал на dso138 но после того как почитал и посмотрел понял что он мягко говоря, не очень. Наткнулся на Пультоскоп который как я понял лучше и дешевле вышеупомянутого китайца Захотел собрать и тут разные версии с разными конфигурациями дисплеев под которые нужны свои драйвера. Ниже составил смету для сборки данного осцилографа. Просьба к форумчанам подскажите исходя из вашего опыта, может какие то детали плохо работают или есть какие то подводные камни при работе с ними или что то неучел. Спасибо
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS,
Для таких задач вам нужно осциллограф с полосой не менее 100МГц . Это не начального уровня, это могуть быть младшие модели профессионального уровня, >= 1000 $
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS,
Для таких задач вам нужно осциллограф с полосой не менее 100МГц . Это не начального уровня, это могуть быть младшие модели профессионального уровня, >= 1000 $
А я тоже как-то не туда. МП 24МГц кварц! 100МГц - это только 4 точки на такт, а если кварц загналс. то там такое может быть...
А я тоже как-то не туда. МП 24МГц кварц! 100МГц - это только 4 точки на такт, а если кварц загналс. то там такое может быть...
Почему 4 ? Считают же исходя из скорострельности АЦП. Например у моего осциллографа полоса 300Mhz, а выборка 2 GSample/sec, соответссно количество точек будет 2E9/24E6= ~83 точки. А по вашей методике получилось бы лишь 300/24 = ~12 точек :)
А я тоже как-то не туда. МП 24МГц кварц! 100МГц - это только 4 точки на такт, а если кварц загналс. то там такое может быть...
Почему 4 ? Считают же исходя из скорострельности АЦП. Например у моего осциллографа полоса 300Mhz, а выборка 2 GSample/sec, соответссно количество точек будет 2E9/24E6= ~83 точки. А по вашей методике получилось бы лишь 300/24 = ~12 точек :)
Вот эти вот полосы и выборки... Я все время их путаю )
Значит, все - таки лучше купить китайца в сборе, чем собирать на ардуине? А осциллограф хамелеон намного мощнее dsoO62? Осц 062 не сильно по цене отличается от 138, можно его взять так как на хамелеон экранчик не найти. П.С. Делать точные расчеты с помощью осциллографа не собираюсь, нужно лишь для диагностики МП, то есть на уровне сигнал идет , значит МП не заводится не из за плохого кварца, ремонт МП не является основной работой, просто интересно в них ковырятьсч
Значит, все - таки лучше купить китайца в сборе, чем собирать на ардуине? А осциллограф хамелеон намного мощнее dsoO62? Осц 062 не сильно по цене отличается от 138, можно его взять так как на хамелеон экранчик не найти. П.С. Делать точные расчеты с помощью осциллографа не собираюсь, нужно лишь для диагностики МП, то есть на уровне сигнал идет , значит МП не заводится не из за плохого кварца, ремонт МП не является основной работой, просто интересно в них ковырятьсч
Предлагаю Вам купить 2 десятка кварцев и не любить людям мозг. Нельзя на подобном пробнике увидеть работу ваших кварцев.
Значит, все - таки лучше купить китайца в сборе, чем собирать на ардуине? А осциллограф хамелеон намного мощнее dsoO62? Осц 062 не сильно по цене отличается от 138, можно его взять так как на хамелеон экранчик не найти. П.С. Делать точные расчеты с помощью осциллографа не собираюсь, нужно лишь для диагностики МП, то есть на уровне сигнал идет , значит МП не заводится не из за плохого кварца, ремонт МП не является основной работой, просто интересно в них ковырятьсч
Я думаю следует логировать аналоговый сигнал . места занимает конечно больше но универсальней. к тому-же 328 позволяет использовать SD более 2Г. а затем просматривать на экране. идей много. Жаль я позно включился в микроконтролерную тему. есть идея вывести на внешний разьем SPI шину + питание, и легко без разбора корпуса можно перепрошить и подключать модули общающиеся через SPI. так-же при надобности на вход прикрутить доп. усилитель или делитель. мне по работе нужно и токовый (0-5ма) проверить и ИРПС и RS232 и RS485, частоту и амплитуду сигнала. так-же нужен источник напряжения от 0 до 50 мВ с возможностью атоматичаского повышения и понижения уровня (ГКЧ только очень медленный 1 мин на период - приблизительно).я все это конечно реализую со временим и выложу только разберусь с нормальной IDE и С++ - родная оболочка полный отстой ( в далекой молодости лет 10 писал на Clipper базы данных (под DOS) и лет 5 занимался 1С-бухгалтерия, да и сыну в этом году помогал писать диплом для технаря на PHP (фреймворки , классы - пришлось поработать мозгами, но опыт не пропьешь). сейчас в основном для работы Excel использую но VB не лезу. а тут такая возможность для творчества . класный проект! молодцы.
пока в процесе изготовления. уже переделал под дисплей Nokia 5200 (развернуты буквы, изображение), и сейчас собираю модульный вариант на 5110 для отработки требуемых мне функций. сейчас разберусь как на форуме фотки прикручивать и выложу парочку
Ну Вы даете.... Еще раз
Саму ардуину и библиотеки отсюда http://srukami.inf.ua/pultoscop_v25110.html и http://srukami.inf.ua/pultoscop_v2.html . Русский шрифт находится в Adafruit GFX.
glcdfont.c
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafruit-gfx-i-vyvod-russkikh-bukv-na-displei-v-kodi
https://www.google.ru/search?q=AO3401A&ie=utf-8&oe=utf-8&gws_rd=cr&ei=ue...
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafruit-gfx-i-vyvod-russkikh-bukv-na-displei-v-kodi
https://www.google.ru/search?q=AO3401A&ie=utf-8&oe=utf-8&gws_rd=cr&ei=uel0WOPRM4quswHL3LrwCQ#newwindow=1&q=glcdfont.c+%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9
Что то вы не договариваете. скачал от сюда http://srukami.inf.ua/pultoscop_v25110.html скетч и библы. Убрал свои адафруит и прочее и закинул эти, скомпили, прошил. Все равно кракозябры. ладно, делаю по вашему, http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafruit-gfx-i-vyvod-russkikh-bukv-na-displei-v-kodi меняю font в адафруит, добавляю display.cp437(true);
Все я ДОГОВАРИВАЮ думаете мне нужен "геморой" учить пользоваться программой.
Настройки и библиотеки хранятся еще здесь C:\Users\User\AppData\Local\Arduino15
Если удалить эту папку Ардуино запустится с нуля и будет брать библиотеки из папки с Ардуиной.
Мне выкладывать не куда. У Вас он берет скорее всего библиотеки из вышеуказанной папки, а там Вы шрифт не поменяли.
Выкладываю верное решени. На авторство не претендую Но скетч - болтон даже на последнем IDE.
Поехали скетч:
Отдельно выложу либы: https://www.dropbox.com/s/ymq79p9fpucdkdv/lib.7z?dl=0
Они же с источников
Все скомпилено на 1.6.13 и все отменно работает. Сходу видно некоторые места где используется одни и те же стринги которые можно былобы задефайнить, но я синюшный в дрын и ломает... сам аппарат покажу как будет спроектирован и отпечатан корпус.
Вот схема подключения:
Еще раз - на авторство не претендую. Камраду 240265, спасибо огромное. Все таки уследил, а я забросил.
PS. Корпус планируется со свободным местом и православным BNC разъемом с местом под схему ОУ, если к таковой по итогу кто-то дельно определится. Всем кто работал над пультоскопом спасибо!
Все я ДОГОВАРИВАЮ думаете мне нужен "геморой" учить пользоваться программой.
Настройки и библиотеки хранятся еще здесь C:\Users\User\AppData\Local\Arduino15
Если удалить эту папку Ардуино запустится с нуля и будет брать библиотеки из папки с Ардуиной.
Мне выкладывать не куда. У Вас он берет скорее всего библиотеки из вышеуказанной папки, а там Вы шрифт не поменяли.
Библы хранятся у меня в одной папке.
Такой папки C:\Users\User\AppData\Local\Arduino15 у меня и нет. Все настройки ардуино иде лежат в папке с дунькой, либы лежат в папке в дропбоксе. Решение задачи болт он выше. Вам спасибо, но в след раз доведите дело до конца. Я буду Вам в 2 раза больше пизнательней.
Не знаю как у Вас , но у меня все без "болтов" работает.
Не знаю как у Вас , но у меня все без "болтов" работает.
Еще раз. Скет Ваш откомпилился, но пришлось в сток докинуть 4 библиотеки. А следовательно их надо было еще найти. Потом оказалось что надо или русифицировать по нормальному adafruit (я уже е раз переделывал бибу под русификатор, чтобы не заморачиваться с лишним вызовом перекодировки, но я более или менее слежу за обновлениями библиотек и временами забываю сделать бэкап и потом просто перенести эти места правки в новую версию, да и задрало, за год 4 раза уже это делал). Т.е. не взял и расслабился, а допилинг и допилинг. Я де выложил полностью болтон решение. Скачай и радуйся.
Так Я же давал ссылку на сайт Автора. Там есть все нужные либы и русифцираваная тоже.
Так Я же давал ссылку на сайт Автора. Там есть все нужные либы и русифцираваная тоже.
Нет там руссифицированной версии.
Скачайте весь пакет ардуины arduino-1.6.5-r5 там ЕСТЬ русский glcdfont.c я его выкладывал пост 2351.
Вот еще раз из того архива Adafruit_GFX_Library - glcdfont.c
Полагаю, разногласия по библиотекам могут быть (и очень даже бывают) изза того, что они (библиотеки), к сожалению, бывают в двух местах (а если добавлен ещё и "stm32duino" блок, то и в трёх). За этим надо следить. При чём, если соглашатся на авто апдейты библиотек, то там опять не факт куда пойдёт новая версия. Я, если не уверен, что творитса с библиотеками, откладываю в сторонку все нужные библиотекти, снимаю софт Arduino, стираю вручную Program Files (x86)/Arduino, AppData/Local/Arduino(XX), Documents/Arduino, ну и ставим по новой, и следим где держть библиотеки.
Скачайте весь пакет ардуины arduino-1.6.5-r5 там ЕСТЬ русский glcdfont.c я его выкладывал пост 2351.
Вот еще раз из того архива Adafruit_GFX_Library - glcdfont.c
Да, но толку от шрифта если библа нормально кирилицу не хавает. Для этого и есть функция utf8rus. Я ее встаривал во все функции адафруита где выводится текст. Но надоело.
Ладно. Больше не будем отвлекаться и мусорить. Готовый пакет есть и этого хватит.
Ну вроде получилось, сейчас сам выбирает осциллограф в меню, все настройки в EEPROM, коэффициент делителя и коэффициент заполнения показует и главное работоспособен.Скрин вот:
Крутотень
А остальной функционал на месте.
О скетче, схеме и библах, будем мечтать.
Ну вроде получилось, сейчас сам выбирает осциллограф в меню, все настройки в EEPROM, коэффициент делителя и коэффициент заполнения показует и главное работоспособен.Скрин вот:
приколько получилось, не поделитесь исходниками?)приехал сегодня дисплей 5110 думаю маленький ослик еще сделать
Ну адаптировал скетч под экран без выкрутасов, у меня сами видете как,поэтому не проверял, если что подправить не сложно,кратенько-при первом запуске пишет в eeprom настройки и по адресу 0 eeprom,запоминает что уже запускался,поэтому если в ячейке 1 то нужно комментировать строки 85 и 93 запустить и после опять запрограммировать исходник, A1 - контакт управления подсветкой, все остальное стандартно, коэффициент заполнения считывается при появлении импульсов затем просто переписывается без подсчета пока не исчезнет сигнал и появится вновь.
zz11ss Спасибо
Скетч скомпилировался без проблем. IDE Arduino 1.8.1.
Используем библиотеку EEPROM версии 2.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM
Используем библиотеку Adafruit_GFX_Library версии 1.0.2 из папки: C:\Users\Admin\Documents\Arduino\libraries\Adafruit_GFX_Library
Используем библиотеку Adafruit-PCD8544-Nokia-5110-LCD-library-master версии 1.0.1 из папки: C:\Users\Admin\Documents\Arduino\libraries\Adafruit-PCD8544-Nokia-5110-LCD-library-master
Используем библиотеку SPI версии 1.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI
Используем библиотеку FreqCount версии 1.2 из папки: C:\Users\Admin\Documents\Arduino\libraries\FreqCount
Используем библиотеку PWM в папке: C:\Users\Admin\Documents\Arduino\libraries\PWM (legacy)
Используем библиотеку CyberLib в папке: C:\Users\Admin\Documents\Arduino\libraries\CyberLib (legacy)
Скетч использует 18638 байт (57%) памяти устройства. Всего доступно 32256 байт.
Т.е. в реальном времени если шим меняет скважность, ослик это не покажет в процентах ?
воткнул наконец в корпус, пока не все доделано, нет всех переключателей, делители и т д
Поздравляю с закорпусованностью! :) Может, для однозначности, можете подписать, с какого поста там прошивка, ни может ещё какие важности. Знаете как, многие могут с конце ветку читать, ит.п. :) Спасибо!
Поздравляю с закорпусованностью! :) Может, для однозначности, можете подписать, с какого поста там прошивка, ни может ещё какие важности. Знаете как, многие могут с конце ветку читать, ит.п. :) Спасибо!
#1443 вот тут скетч помоему,важностей нет вроде никаких))) вместо схемы отключения пока что сделана кнопка на А1 массу подает, тем самым ребутает дисплей, в наличии просто нет pnp транзисторов=)
На ssd1306 есть версия пультоскопа?
Версия для OLED 128x64 SSD1306. I2C, есть на страничке автора http://srukami.inf.ua/pultoscop_v25110.html
Скетч под OLED 128*64 дисплей доработана форумчанином D.I.M Видео работы
Только версия без dds генератора и uart приемника...
Да, другой версии вроде нет.
Могу изобразить, если кому-нибудь это надо вообще..
Полную версию пультоскопа на OLED 128x64 SSD1306. I2C очень надо, как раз сть 1.3", на 0.96" собирал версию от . D.I.M.
Понял. Будут новости - тут сообщу.
Еще летом собрал пультоскоп.
вот видео, если кому интересно https://youtu.be/5tGoBKO_CR8
Для себя изменил:
Автоматическое отключение при достижении напряжения питания ниже 2,8в.
Подача двойного звукового сигнала каждые 10 минут (таблетка от забывчивости).
Установка через меню состояния подсветки постоянно ВКЛ или выкл через установленное время.(дискретность 5сек)
Установка через меню опорного напряжения.
Установка через меню контрастности дисплея.
Установка через меню звукового сопровождение нажатие клавиш.
В пультоскопе: запоминание значений развертки, уровня синхронизации.
В генераторе: запоминание значений скважности, частоты, выбранного множителя частоты.
В терминале: выбор скорости терминала через кейсы от 300 бод до 256000 бод, запоминание значения.
Пультоскоп считаю очень удобным. Спасибо автору за идею и код!
Еще летом собрал пультоскоп....
Уважаемый flachnn, было бы здорово, если были бы доступны Ваши вариант скетча, плата. Если у Вас нет каких соображений против того. Заранее Спасибо!
Да, конечно... Я дописывал скейтч еще летом, на прототипе, и вот что-то найти не могу... Неакуратно отношусь к наработкам :)
В крайнем случае, перепишу по новой и опубликую здесь.
Схема как у автора, единственно добавил схему преобразователя на MC34063 и делители. А так же закрыл входы осцила и терминала стабилитронами на 5,1В.
По поводу стабилитронов, не лучшее решение, но качесвто эпюры меня не сильно интересует, а вот паленые порты сильно. Ткнул в генератор авто, а делитель не переключил :)
Так же бывает, что нужно посмотреть в терминале, а логические уровни выше 5 вольт. Стабилитроны спасали уже :)
Здравствуйте,flachnn можете поделиться печаткой,заранее благодарю.
flachnn можете поделиться печаткой
Здравствуйте, можно конечно. https://yadi.sk/d/mOTHIJ7539zvzp
Забыл сказать, в схему добавлена зарядка от USB на ТС4056 :)
Но по чесноку, если бы я разводил по новой, то так плотно бы не стал, решил текстолит экономить. :)
Собрать собрал, но монтаж получился плотный.
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS, выбор пал на dso138 но после того как почитал и посмотрел понял что он мягко говоря, не очень. Наткнулся на Пультоскоп который как я понял лучше и дешевле вышеупомянутого китайца Захотел собрать и тут разные версии с разными конфигурациями дисплеев под которые нужны свои драйвера. Ниже составил смету для сборки данного осцилографа. Просьба к форумчанам подскажите исходя из вашего опыта, может какие то детали плохо работают или есть какие то подводные камни при работе с ними или что то неучел. Спасибо
Основные
1х Arduino Uno или Pro Mini
1x Дисплей 2,4'' TFT LCD 240х320 (читал есть версии которые медленно обновляют дисплей)
4x Кнопки
1x старый аккумулятор 3,5 в
Дополнительные
1x BNC разьем
1x BNC коннектор если щупы будут самодельные
1x корпус можно и самодельный
1x модуль для зарядки li-ion
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS, выбор пал на dso138 но после того как почитал и посмотрел понял что он мягко говоря, не очень. Наткнулся на Пультоскоп который как я понял лучше и дешевле вышеупомянутого китайца Захотел собрать и тут разные версии с разными конфигурациями дисплеев под которые нужны свои драйвера. Ниже составил смету для сборки данного осцилографа. Просьба к форумчанам подскажите исходя из вашего опыта, может какие то детали плохо работают или есть какие то подводные камни при работе с ними или что то неучел. Спасибо
Основные
1х Arduino Uno или Pro Mini
1x Дисплей 2,4'' TFT LCD 240х320 (читал есть версии которые медленно обновляют дисплей)
4x Кнопки
1x старый аккумулятор 3,5 в
Дополнительные
1x BNC разьем
1x BNC коннектор если щупы будут самодельные
1x корпус можно и самодельный
1x модуль для зарядки li-ion
Как бы я не любил свою разработку но Пультоскоп медленнее медленнее чем DSO dso138
Вот данные
dso138 скорость АЦП 1МSp/s
Пультоскоп база скорость АЦП 0,32МSp/s
Пультоскоп разгон(27Мгц) скорость АЦП 0,6МSp/s
Просто чтоб потом не разочаровались.
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS,
Для таких задач вам нужно осциллограф с полосой не менее 100МГц . Это не начального уровня, это могуть быть младшие модели профессионального уровня, >= 1000 $
Добрый день, возникла необходимость в осцилографе начального уровня,для проверки работоспособности кварцевого резонатора на МП и флешек памяти BIOS,
Для таких задач вам нужно осциллограф с полосой не менее 100МГц . Это не начального уровня, это могуть быть младшие модели профессионального уровня, >= 1000 $
А я тоже как-то не туда. МП 24МГц кварц! 100МГц - это только 4 точки на такт, а если кварц загналс. то там такое может быть...
А я тоже как-то не туда. МП 24МГц кварц! 100МГц - это только 4 точки на такт, а если кварц загналс. то там такое может быть...
Почему 4 ? Считают же исходя из скорострельности АЦП. Например у моего осциллографа полоса 300Mhz, а выборка 2 GSample/sec, соответссно количество точек будет 2E9/24E6= ~83 точки. А по вашей методике получилось бы лишь 300/24 = ~12 точек :)
А я тоже как-то не туда. МП 24МГц кварц! 100МГц - это только 4 точки на такт, а если кварц загналс. то там такое может быть...
Почему 4 ? Считают же исходя из скорострельности АЦП. Например у моего осциллографа полоса 300Mhz, а выборка 2 GSample/sec, соответссно количество точек будет 2E9/24E6= ~83 точки. А по вашей методике получилось бы лишь 300/24 = ~12 точек :)
Вот эти вот полосы и выборки... Я все время их путаю )
Значит, все - таки лучше купить китайца в сборе, чем собирать на ардуине? А осциллограф хамелеон намного мощнее dsoO62? Осц 062 не сильно по цене отличается от 138, можно его взять так как на хамелеон экранчик не найти. П.С. Делать точные расчеты с помощью осциллографа не собираюсь, нужно лишь для диагностики МП, то есть на уровне сигнал идет , значит МП не заводится не из за плохого кварца, ремонт МП не является основной работой, просто интересно в них ковырятьсч
Предлагаю Вам купить 2 десятка кварцев и не любить людям мозг. Нельзя на подобном пробнике увидеть работу ваших кварцев.
Я видео снял на эту тему.
Там статья еще есть под видео,
может поможет.
а логгер ни кто не пытался прикрутить к осцилографу или терминалу? былобы очень удобно.
а логгер ни кто не пытался прикрутить к осцилографу или терминалу? былобы очень удобно.
Растолкуйте что конкретно логгировать?
состояние цифрового пина или аналоговый сигнал? или еще что?
Я думаю следует логировать аналоговый сигнал . места занимает конечно больше но универсальней. к тому-же 328 позволяет использовать SD более 2Г. а затем просматривать на экране. идей много. Жаль я позно включился в микроконтролерную тему. есть идея вывести на внешний разьем SPI шину + питание, и легко без разбора корпуса можно перепрошить и подключать модули общающиеся через SPI. так-же при надобности на вход прикрутить доп. усилитель или делитель. мне по работе нужно и токовый (0-5ма) проверить и ИРПС и RS232 и RS485, частоту и амплитуду сигнала. так-же нужен источник напряжения от 0 до 50 мВ с возможностью атоматичаского повышения и понижения уровня (ГКЧ только очень медленный 1 мин на период - приблизительно).я все это конечно реализую со временим и выложу только разберусь с нормальной IDE и С++ - родная оболочка полный отстой ( в далекой молодости лет 10 писал на Clipper базы данных (под DOS) и лет 5 занимался 1С-бухгалтерия, да и сыну в этом году помогал писать диплом для технаря на PHP (фреймворки , классы - пришлось поработать мозгами, но опыт не пропьешь). сейчас в основном для работы Excel использую но VB не лезу. а тут такая возможность для творчества . класный проект! молодцы.
пока в процесе изготовления. уже переделал под дисплей Nokia 5200 (развернуты буквы, изображение), и сейчас собираю модульный вариант на 5110 для отработки требуемых мне функций. сейчас разберусь как на форуме фотки прикручивать и выложу парочку