а если стираю черной линией предыдущую, то происходит наложение линий графика
свой код держу в голове и если сяду за этот прибор снова то выпущу качественно новую прошивку, в нем помимо отрисовки графика нехватает частотомера. Чужой код вникать и править для меня тежело, делаю это только в исключительных случаях.
Ковыряйте ту прошивку что скинул или ждите новую улучшенную, извините большим помочь не могу.
не-не. я только в Ваш прибор прикручу тестер батареек(то же Ваш) и, если смогу, Люксомер. так что мне пинов хватит ))
а вот строк в меню может не хватить - влазит 4 +1.
Я бы не планировал так много в него совать, там есть свободное место и оперативка у меня на нее планы по части улучшения отображения сигнала осциллограммы.
bodriy2014 – кстати по поводу наших любимых ТТ вы знакомы с проектом
может и здесь зделать что-то подобное Makefile у народа дисплеев разных полно выбрал нужный скомпилировал добавил нужный функционал меню на разный язык и т.д. Конечно тоже надо разбираться но ведь проект интересен и популярен и из за этого.
ну хз... я вот прошивки ТТ никак не научусь компилировать, а вот в коде Пультоскопа по тихоньку разбираюсь и даж добавил меню =)
а вот по поводу начинки Пультоскопа мысля посетила мну: генератор используется частенько в связке с осцилом. вот и получается что не совсем удобное соседство...
bodriy2014 – кстати по поводу наших любимых ТТ вы знакомы с проектом
может и здесь зделать что-то подобное Makefile у народа дисплеев разных полно выбрал нужный скомпилировал добавил нужный функционал меню на разный язык и т.д. Конечно тоже надо разбираться но ведь проект интересен и популярен и из за этого.
Чтоб так делать нужно еще при написании кода это учесть и писать не на ардуино IDE а на С минимум.
Ардуиновские библиотеки экранов не стандартизированы относительно функций вывода, те кто пишут эти библиотеки как хотят так и организовывают вывод и функции вывода, под единый сборщик разные дисплеи не подошьешь.
Чтоб так делать нужно еще при написании кода это учесть и писать не на ардуино IDE а на С минимум.
Ардуиновские библиотеки экранов не стандартизированы относительно функций вывода, те кто пишут эти библиотеки как хотят так и организовывают вывод и функции вывода, под единый сборщик разные дисплеи не подошьешь.
Есть одна либа -в ней многие экраны задействованы- U8glib
Присоединяюсь к высказыванию проект и приборчик просто замечательный. Уже было много успешных повторений на разных экранах и дополнительными функциями.
Извиняюсь если что-то пропустил, информация раскидана по разным местам, было еще много интересных доработок, кто-то прикручивал энкондер, karl2233 пытается добавить люксомерт, и т.д. уже становится сложно что-то быстро найти.
Это хорошо что у автора разработки пультоскопа есть свой сайт где размещены основные разработки на экранах
bodriy2014 – прошу вас разместить на своем сайте если это конечно возможно для ускорения поиска информации ссылки по теме на наиболее интересные и успешные работы для примера и добавлять новые чтобы это не кануло в бездну.
Прошу также пользователей форума дать ссылки на другие интересные и полезные наработки то этой теме из этого сайта или других источников.
Повезло мне купил я наконец ls020 дисплей. Не могли бы скинуть скетч осцилографа или у вас другой экран? Хотелось бы повторить
Скетч я сегодня выложу. А пока поищите в инете библиотеку под ls020.
У меня есть но под старую версию arduino-0023 . Там есть примеры попробуйте загрузить и проверьте работу экрана. Если будут работать примеры то скетч осцилографа у вас тоже пойдет команды для экрана одинаковые.
Повезло мне купил я наконец ls020 дисплей. Не могли бы скинуть скетч осцилографа или у вас другой экран? Хотелось бы повторить
Скетч я сегодня выложу. А пока поищите в инете библиотеку под ls020.
У меня есть но под старую версию arduino-0023 . Там есть примеры попробуйте загрузить и проверьте работу экрана. Если будут работать примеры то скетч осцилографа у вас тоже пойдет команды для экрана одинаковые.
.....что его можно ускорить пока не разберусь как сделать быстрым не будет публичных видео и прошивок по нему.
Отпишитесь мне на емайл (в своей теме про дисплеи от сотиков , указывал неоднократно), протестю скорость на разных либах и подключениях. Или черкните свой емайл. //Стирать линию можно не только закрашивая ее черными точками из массива ее нарисованности , но и применяя команды самого контроллера дисплея, но т.к. еще много инфы вокруг, которую не надо каждый раз стирать, то пока проще использовать все же затирание из массива. массив естественно из типа переменных byte
bodriy2014 – прошу вас разместить на своем сайте если это конечно возможно для ускорения поиска информации ссылки по теме на наиболее интересные и успешные работы для примера и добавлять новые чтобы это не кануло в бездну.
Прошу также пользователей форума дать ссылки на другие интересные и полезные наработки то этой теме из этого сайта или других источников.
- Ext. Crystal Osc.; Frequency 8.0-MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms;[CKSEL=1111 SUT=11]
- Boot Flash section size=1024 words Boot start address=$3C00; [BOOTSZ=01]
Да с Фьюзами не совсем понятно, сегодня знакомый собирал на Атмега328 в DIP корпусе пультоскоп 5110(без ардуино на макетке m328-кварц27MHz-дисплей), по предыдущей версии, помогал ему прошивать (прошивал программатором USBasp программой для прошивки SinaProg 2.1.1.RUS т.е. без ардуино IDE) , Фьюзы поставил такие как в UNO, запустили работает, т.е. есть меню, в режим осциллографа и генератора входим, к измерениям пока не приступали не успели. Так вот то что я выше приписал к фьюзам взято с Калькулятора фьюзов AVR не совсем понятно почему там стоит фиксированная частота LF-FF - кварц-частота 8MHz (external - внешний кварц) 8 MHz. Хотя в UNO запаян на 16MHz.
Если было бы вот так, то было бы понятнее.
LB:3F - лок-биты не выставляем - оставляем 3F или 0F
EF:05 - VCC=2.7V - контроль напряжения питания микроконтроллера
LF:F7 - (external-Ext. Full-swing Crystal - внешний кварц) X MHz.(какой поставим кварц такая будет и частота)
Надо будет попробовать.
Скетч из которого делал .HEX файлы
В связи с тем что в AtMega328 в корпусе DIP отсутствуют 2 пина A6 и A7, перевел пин A6 который выделен в авторской прошивке для измерения напряжения АКБ, па пин A2. Проверил работает.
//Страница проэкта http://srukami.inf.ua/pultoscop_v25110.html
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <FreqCount.h>
#include <PWM.h>
#define led 9 //пин для генератора сигналов (не менять)
//#################№№№№№№####пользовательские настройки
#define power 8 //пин который опрашивает кнопку включения
#define OFF 13//пин который управляет ключем питания
#define timepowerON 50 //время удержания кнопки выключения
#define levo 10 //кнопка ЛЕВО(можно любой пин)
#define ok 11 //кнопка ОК(можно любой пин)
#define pravo 12 //кнопка ПРАВО(можно любой пин)
#define akb A2 //любой своюодный аналоговый пин для измерения напряжения АКБ
#define overclock 27 //Частота на которой работает Ардуино
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей
byte cont=75;//контрастность дисплея
byte SinU=30; //уровень синхронизации 0 до 255
int PWM = 128;//стартовое значение ШИМ от 0 до 255
int32_t frequency = 500; //стартовое значение частоты в Гц
float VCC=5.0; //напряжение питания, меряем мультиметром
//###########################################################
int powerON=0;//состояние кнопки питания
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[256];
byte x=0;
byte menu=0;//переменная выбора меню
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
bool pultoskop=1; //флаг выбора генератора или осциллографа
byte razv=6;
unsigned long count =0;
byte sinX=30;
byte meaX=83;
int Vmax=0;// максимальное напряжение
byte sinhMASS=0;
long countX=0;
void setup(){
digitalWrite(OFF,HIGH);//включем питание
Serial.begin(9600);
display.begin();
display.setContrast(cont);
while(digitalRead(ok)==LOW){
/////////////////////////////////////////удержание кнопки отключения
if(digitalRead(power)==HIGH){powerON++;delay(10);}
if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения
if(pultoskop==1){
display.clearDisplay();
display.setCursor(10,10);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println("Пультоскоп");
display.setCursor(10,20);
display.setTextColor(BLACK);
display.println("Генератор");
display.setCursor(10,40);
display.print("Батарея=");
display.print(analogRead(akb)*5.0/1024);
display.print("В");
}
if(pultoskop==0){
display.clearDisplay();
display.setCursor(10,10);
display.setTextColor(BLACK); // 'inverted' text
display.println("Пультоскоп");
display.setCursor(10,20);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println("Генератор");
display.setCursor(10,40);
display.setTextColor(BLACK);
display.print("Батарея=");
display.print(analogRead(akb)*5.0/1024);
display.print("В");
}
if(digitalRead(levo)==HIGH){delay(200);pultoskop=!pultoskop;}
if(digitalRead(pravo)==HIGH){delay(200);pultoskop=!pultoskop;}
delay(50);
display.display();
}
if(pultoskop==1){
FreqCount.begin(1000);
}
if(pultoskop==0){
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(byte i=0;i<255;i++){
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
delayMicroseconds(500);
mass[i]=ADCH;
}
}
if (razv>0){
for(byte i=0;i<255;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==1){
if(opornoe==0){ADMUX = 0b11100100;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100100;}//Выбор внешнего опорного
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();
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-1, BLACK);
display.drawLine(x+1, 47-mass[y]/7+1, x+2, 47-mass[y+1]/7-1, BLACK);
}
sinhMASS=0;
//#######################################отрисовка графика
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){Zamer();}
if(digitalRead(pravo)==HIGH){Zamer();}
}
if(menu==3){
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==0){Generator();}
}
//#######################################режим ренератора
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-3;
if(PWM<0){PWM=255;}
delay(3);//защита от дребезга
}
if(digitalRead(pravo)==HIGH){
PWM=PWM+3;
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/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/255);
display.print("%");
flag=1;
}
display.print("<<");
pwmWrite(led, PWM);
delay(300);
display.display();
}
Спасибо,за консультацию! Решил просто сделать-Мегу 328Р в DIPе просто кварцем обвязать с двумя кондерами и делитель для 3.3в на дисплей. USB ASP тоже себе смастерил.
Доброго времени суток. Давно слежу за данной темой, и хочу выразить благодарность всем участникам форума за создание такого нужного прибора. От себя хотел бы добавить переделанный код пультоскопа финал 2 под OLED I2C LCD 128x64 0.96" графический дисплей. Проверил, вроде работает. Я пока только начинаю интересоваться ардуино, так, что если в коде что-то не верно прошу поправить. С ув.
//Страница проэкта http://srukami.inf.ua/pultoscop_v25110.html
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <FreqCount.h>
#include <PWM.h>
#define led 9 //пин для генератора сигналов (не менять)
//#################№№№№№№####пользовательские настройки
#define power 8 //пин который опрашивает кнопку включения
#define OFF 13//пин который управляет ключем питания
#define timepowerON 50 //время удержания кнопки выключения
#define levo 10 //кнопка ЛЕВО(можно любой пин)
#define ok 11 //кнопка ОК(можно любой пин)
#define pravo 12 //кнопка ПРАВО(можно любой пин)
#define akb A6 //любой своюодный аналоговый пин для измерения напряжения АКБ
#define overclock 16 //Частота на которой работает Ардуино
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
byte SinU=30; //уровень синхронизации 0 до 255
int PWM = 128;//стартовое значение ШИМ от 0 до 255
int32_t frequency = 500; //стартовое значение частоты в Гц
float VCC=5.0; //напряжение питания, меряем мультиметром
//###########################################################
int powerON=0;//состояние кнопки питания
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[256];
byte x=0;
byte menu=0;//переменная выбора меню
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
bool pultoskop=1; //флаг выбора генератора или осциллографа
byte razv=5;
unsigned long count =0;
byte sinX=30;
byte meaX=83;
int Vmax=0;// максимальное напряжение
byte sinhMASS=0;
long countX=0;
void setup()
{
digitalWrite(OFF,HIGH);//включем питание
//Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
while(digitalRead(ok)==LOW){
/////////////////////////////////////////удержание кнопки отключения
if(digitalRead(power)==HIGH){powerON++;delay(10);}
if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения
if(pultoskop==1){
display.clearDisplay();
display.setCursor(26,15);
display.setTextColor(BLACK,WHITE); // 'inverted' text
display.println("OSCILLOSCOPE");
display.setCursor(34,30);
display.setTextColor(WHITE);
display.println("GENERATOR");
display.setCursor(24,55);
display.print("BATERRY=");
display.print(analogRead(akb)*5.0/1024);
display.print("V");
}
if(pultoskop==0){
display.clearDisplay();
display.setCursor(26,15);
display.setTextColor(WHITE); // 'inverted' text
display.println("OSCILLOSCOPE");
display.setCursor(34,30);
display.setTextColor(BLACK,WHITE); // 'inverted' text
display.println("GENERATOR");
display.setCursor(24,55);
display.setTextColor(WHITE);
display.print("BATERRY=");
display.print(analogRead(akb)*5.0/1024);
display.print("V");
}
if(digitalRead(levo)==HIGH){delay(200);pultoskop=!pultoskop;}
if(digitalRead(pravo)==HIGH){delay(200);pultoskop=!pultoskop;}
delay(50);
display.display();
}
if(pultoskop==1){
FreqCount.begin(1000);
}
if(pultoskop==0){
InitTimersSafe();
bool success = SetPinFrequencySafe(led, frequency);
}
display.setTextColor(WHITE);
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(byte i=0;i<255;i++)
{
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
delayMicroseconds(500);
mass[i]=ADCH;
}
}
if (razv>0)
{
for(byte i=0;i<255;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==1){
if(opornoe==0){ADMUX = 0b11100010;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100010;}//Выбор внешнего опорного
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();
display.fillCircle(122,62-SinU/5, 1, WHITE);//рисуем уровень синхронизации
x=3;
for(int y=sinhMASS;y<sinhMASS+124;y++)
{
if(razv<7){x++;}
if(razv>=7){x=x+2;}
//if(razv==8){x=x+3;}
display.drawLine(x, 64-mass[y]/5, x+1, 64-mass[y+1]/5-1, WHITE);
//display.drawLine(x+1, 64-mass[y]/5+1, x+2, 64-mass[y+1]/5-1, WHITE);
}
sinhMASS=0;
//#######################################отрисовка графика
for(byte i=63;i>5;i=i-7){display.drawPixel(0,i, WHITE);display.drawPixel(1,i, WHITE);display.drawPixel(2,i, WHITE);}//разметка экрана вертикальная
//////////////////////////////////////////////////сетка
for(byte i=127;i>5;i=i-4){/*display.drawPixel(32,i, WHITE);*/display.drawPixel(64,i, WHITE);/*display.drawPixel(96,i, WHITE);*/}
for(byte i=3;i<128;i=i+4){/*display.drawPixel(i,44, WHITE);*/display.drawPixel(i,38, WHITE);}
//////////////////////////////////////////////////сетка
//#######################################отрисовка menu
if(menu==0){
display.setCursor(0,0);
display.setTextColor(BLACK,WHITE);
if(opornoe==0){display.print("1.1");delay(100);}
if(opornoe==1){display.print(VCC,1);delay(100);}
display.setTextColor(WHITE);
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( WHITE);
if(opornoe==0){display.print("1.1");delay(100);}
if(opornoe==1){display.print(VCC,1);delay(100);}
display.setTextColor(BLACK,WHITE); // 'inverted' text
display.print(" ");
display.print(razv);
display.setTextColor( WHITE); // '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( WHITE);
if(opornoe==0){display.print("1.1");delay(100);}
if(opornoe==1){display.print(VCC,1);delay(100);}
display.print(" ");
display.print(razv);
display.setTextColor(BLACK,WHITE); // 'inverted' text
display.print(" P ");
paus=1;
if(digitalRead(levo)==HIGH){Zamer();}
if(digitalRead(pravo)==HIGH){Zamer();}
}
if(menu==3){
paus=0;
display.setCursor(0,0);
display.setTextColor( WHITE);
if(opornoe==0){display.print("1.1");}
if(opornoe==1){display.print(VCC,1);}
display.print(" ");
display.print(razv);
display.setTextColor(WHITE);
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(122,62-SinU/5, 3, WHITE);
display.fillCircle(122,62-SinU/5, 2, BLACK);
}
if(digitalRead(ok)==HIGH)
{
menu++;
delay(100);
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)/16;}//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( WHITE);
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(100,0);display.setTextColor(WHITE);
display.print(Vmax*VCC/255,1);}
if(opornoe==0){display.setCursor(100,0);display.setTextColor(WHITE);
display.print(Vmax*1.1/255,1);}
display.print("V");
//#######################################отрисовка menu
delay(5);
display.display();
}
if(pultoskop==0){Generator();}
}
//#######################################режим ренератора
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-3;
if(PWM<0){PWM=255;}
delay(3);//защита от дребезга
}
if(digitalRead(pravo)==HIGH){
PWM=PWM+3;
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/255);
display.print(" %");
display.drawLine(0,0,127*PWM/255.0,0,WHITE);
display.drawLine(0,1,127*PWM/255.0,1,WHITE);
display.drawLine(0,2,127*PWM/255.0,2,WHITE);
display.drawLine(0,15,127*PWM/255.0,15,WHITE);
display.drawLine(0,16,127*PWM/255.0,16,WHITE);
display.drawLine(0,17,127*PWM/255.0,17,WHITE);
///////////
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/255);
display.print("%");
flag=1;
}
display.print("<<");
pwmWrite(led, PWM);
delay(300);
display.display();
}
D.I.M - спасибо как раз есть такой все думал как его прикрутить, правда мелкий очень зато работает хорошо, проверял на другом девайсе, а то у меня сегодня красный модуль 5110 из поднебесной приказав долго жить отправился на небеса, что-то мне с ними не везет, синий модуль 5110 тоже работает хреново.
.........а то у меня сегодня красный модуль 5110 из поднебесносной приказав долго жить отправился на небеса, что-то мне с ними не везет, синий модуль 5110 тоже работает хреново.
У меня три красных модуля 5110. Купил сначала 2, потом еще один. Из первых двух один отказался работать, другой работает. Тот что не работает расковырял и убил окончательно. Третий модуль, что пришел последним, тоже отказался работать. Я маркером на нем написал "BAD", и отложил в сторону, ковырять не стал. Когда баловался с другими моделями дисплеев, подключал их через преобразователь уровней. Попробовал и красные модули 5110 подключить с преобразователем уровней, и ...они заработали! И тот что работал, и тот, который я пометил "BAD". Может им всетаки нужен уровень сигнала 3.3В?
D.I.M - Расскажите как подключали дисплей т.е. пин(ардуино) ----- пин(дисплея). И делали какие либо изменения по остальным подключениям пинов, а то я еще начинающее вас по коду плохо ориентируюсь мне лучше бы схему
Joiner – спасибо за совет по 5110 была тоже такая мысля но еще не проверял, делители т.е. резистор от М328 --- 1К--- к дисплею и т дисплея -----2К-----на минус или как сделано у вас.
Joiner – спасибо за совет по 5110 была тоже такая мысля но еще не проверял, делители т.е. резистор от М328 --- 1К--- к дисплею и т дисплея -----2К-----на минус или как сделано у вас.
5110 китай красный нужно подключать только от 3,3в и через согласование уровней. А так он не жилец:)
И еще у них беда с контрастностью то темный то еле видно, или бывало что вобще ничего не видно думал что згорел . Лечу так: окуратно снимаю железную окантовку и окурато протираю тряпочкой места контактной резинки на плате, стекле и саму резинку. Собираю под увелечителным стелом следя чтобы не попали пилинки или ворсинки. И главное. Сверху на стекло между железкой и стеклом в месте контактов наклеиваю тонекий размером с контакти кусочек изоленты. Так получается точний контакт без никаких перекосов, стабильная контрастнасть от 45 до 55 взависимости от экземпляра. Так воскресил не один дисплей.
D.I.M – библиотеку установил при компиляции «кода пультоскопа финал 2 под OLED I2C LCD 128x64 0.96"» Возникают ошибки вроде у меня не та SPI. Пробовал на Arduino: 1.6.8 и Arduino: 1.6.5 Запутался я в библиотеках их там уже по 2 шт. в разных местах, надо все чистить.
D.I.M не могли бы вы выложить все библиотеки которые вы используете именно для этого скетча. заранее благодарен.
VetalST все симптомы модулей 5110 один в один, лечил также только без изоленты, даже резинки новые пробовал вырезать, если преобразователи уровней не помогут воспользуюсь вашим советом, пациенты еще есть.
Попробуйте сначала почистить все библиотеки, а эти установите, иначе будут конфликтовать. Еще может возникать конфликт из - за установленой в IDE платы Arduino Robot мне пришлось удалить все файлы связанные с этой платой.
D.I.M - спасибо, библиотеки установил, - PULTOSCOPE_128x64_OLED_display.ino – скомпилировался, ошибок нет.
Arduino: 1.6.8 - на сообщение ниже я думаю внимания не обращать .
Скетч использует 19 820 байт (61%) памяти устройства. Всего доступно 32 256 байт.
Глобальные переменные используют 1 785 байт (87%) динамической памяти, оставляя 263 байт для локальных переменных. Максимум: 2 048 байт.
Недостаточно памяти, программа может работать нестабильно.
я использовал за основу скетч с tft 2.4 ,а синхронизацию с последнего финального с 5110
Я поэтому и спросил, я сразу сделал синхронизацию и на этот дисплей но не выкладывал.
Дайте почту я скину вам последний неопубликованный скетч, там есть синхронизация и стирание графика черной линией.
Мне в коментах на ютюбе написали что его можно ускорить пока не разберусь как сделать быстрым не будет публичных видео и прошивок по нему.
Скинул на почту, обкатаете если окажется лучше того что есть выложу для всех!)
я использовал за основу скетч с tft 2.4 ,а синхронизацию с последнего финального с 5110
Я поэтому и спросил, я сразу сделал синхронизацию и на этот дисплей но не выкладывал.
Дайте почту я скину вам последний неопубликованный скетч, там есть синхронизация и стирание графика черной линией.
Мне в коментах на ютюбе написали что его можно ускорить пока не разберусь как сделать быстрым не будет публичных видео и прошивок по нему.
спасибо! получил. только теперь вопрос а с каким дисплеем? Там пины под дополнительные кнопки а уменя они заняты дисплеем
вот мой скетч.Может сможете подправить?то есть синхронизация работает,но только если рисование графика происходит со стиранием области
спасибо! получил. только теперь вопрос а с каким дисплеем? Там пины под дополнительные кнопки а уменя они заняты дисплеем
дисплей тот что и раньше //дистплей TFT SPFD5408,
кнопки подключать только эти
#define levo 12
#define ok 11
#define pravo 10
больше не нужно.
то есть синхронизация работает,но только если рисование графика происходит со стиранием области
а если стираю черной линией предыдущую, то происходит наложение линий графика
а если стираю черной линией предыдущую, то происходит наложение линий графика
свой код держу в голове и если сяду за этот прибор снова то выпущу качественно новую прошивку, в нем помимо отрисовки графика нехватает частотомера. Чужой код вникать и править для меня тежело, делаю это только в исключительных случаях.
Ковыряйте ту прошивку что скинул или ждите новую улучшенную, извините большим помочь не могу.
понял,спасибо!
ооо! зер гут! )
вот что подумал - а что если кнопки засадить на один пин? есть же вариант через резисторы цепляют на аналоговый вход. тогда получим 2 свободных пина.
или это лишнее усложнение?
ооо! зер гут! )
вот что подумал - а что если кнопки засадить на один пин? есть же вариант через резисторы цепляют на аналоговый вход. тогда получим 2 свободных пина.
или это лишнее усложнение?
Можно и так, только зачем свободные пины, что к ним цеплять? Небось ваши любимые ТТ Маркуса?)))
не-не. я только в Ваш прибор прикручу тестер батареек(то же Ваш) и, если смогу, Люксомер. так что мне пинов хватит ))
а вот строк в меню может не хватить - влазит 4 +1.
не-не. я только в Ваш прибор прикручу тестер батареек(то же Ваш) и, если смогу, Люксомер. так что мне пинов хватит ))
а вот строк в меню может не хватить - влазит 4 +1.
Я бы не планировал так много в него совать, там есть свободное место и оперативка у меня на нее планы по части улучшения отображения сигнала осциллограммы.
ок, учту про память. но вроде скетчи батарейкомера и люксомера не занимают много места и вывод в порт я уберу из Вашего(мне он просто не нужен).
ну или откажусь от чего-то: Пультоскоп важнее =)
bodriy2014 – кстати по поводу наших любимых ТТ вы знакомы с проектом
может и здесь зделать что-то подобное Makefile у народа дисплеев разных полно выбрал нужный скомпилировал добавил нужный функционал меню на разный язык и т.д. Конечно тоже надо разбираться но ведь проект интересен и популярен и из за этого.
bpl, зачем?
проект открытый, можно и так всё сделать. кроме того, тот кто умеет компилировать в готовом коде точно разберётся.
компилировать это самое простое а вот разбираться с кодом для многих не то что сложно а просто невозможно.
ну хз... я вот прошивки ТТ никак не научусь компилировать, а вот в коде Пультоскопа по тихоньку разбираюсь и даж добавил меню =)
а вот по поводу начинки Пультоскопа мысля посетила мну: генератор используется частенько в связке с осцилом. вот и получается что не совсем удобное соседство...
bodriy2014 – кстати по поводу наших любимых ТТ вы знакомы с проектом
может и здесь зделать что-то подобное Makefile у народа дисплеев разных полно выбрал нужный скомпилировал добавил нужный функционал меню на разный язык и т.д. Конечно тоже надо разбираться но ведь проект интересен и популярен и из за этого.
Чтоб так делать нужно еще при написании кода это учесть и писать не на ардуино IDE а на С минимум.
Ардуиновские библиотеки экранов не стандартизированы относительно функций вывода, те кто пишут эти библиотеки как хотят так и организовывают вывод и функции вывода, под единый сборщик разные дисплеи не подошьешь.
Чтоб так делать нужно еще при написании кода это учесть и писать не на ардуино IDE а на С минимум.
Ардуиновские библиотеки экранов не стандартизированы относительно функций вывода, те кто пишут эти библиотеки как хотят так и организовывают вывод и функции вывода, под единый сборщик разные дисплеи не подошьешь.
Есть одна либа -в ней многие экраны задействованы- U8glib
Поддерживаю автора ! Проект на самом деле хорош ... Спасибо !
Присоединяюсь к высказыванию проект и приборчик просто замечательный. Уже было много успешных повторений на разных экранах и дополнительными функциями.
LCD Siemens S65 L2F50
LCD Siemens S65 ls020
Nokia LCD3410
TFT Color 1.44” 128x128 контроллер ILI9163
Извиняюсь если что-то пропустил, информация раскидана по разным местам, было еще много интересных доработок, кто-то прикручивал энкондер, karl2233 пытается добавить люксомерт, и т.д. уже становится сложно что-то быстро найти.
Это хорошо что у автора разработки пультоскопа есть свой сайт где размещены основные разработки на экранах
LCD Nokia 5110 и TFT 2.4 240x320 SPFD5408 с последними версиями схем и прошивок.
bodriy2014 – прошу вас разместить на своем сайте если это конечно возможно для ускорения поиска информации ссылки по теме на наиболее интересные и успешные работы для примера и добавлять новые чтобы это не кануло в бездну.
Прошу также пользователей форума дать ссылки на другие интересные и полезные наработки то этой теме из этого сайта или других источников.
схема входного тракта с сдвигом нуля
фильтр для DDS и делители
печатка для пультоскопа
Не проблема размещу, для того и сайт держу чтоб выкладывать для скачивания и не лазать па форумам.
Скетч я сегодня выложу. А пока поищите в инете библиотеку под ls020.
У меня есть но под старую версию arduino-0023 . Там есть примеры попробуйте загрузить и проверьте работу экрана. Если будут работать примеры то скетч осцилографа у вас тоже пойдет команды для экрана одинаковые.
Скачать Библиотеку под ls020 http://yadi.sk/d/hHmPJl5Hpy6VW
Скачать arduino-0023 http://www.arduino.cc/en/Main/OldSoftwareReleases#previous
добрый день не могли бы вы еще раз выложить библиотеку для дисплея, заранее благодарен
Скетч я сегодня выложу. А пока поищите в инете библиотеку под ls020.
У меня есть но под старую версию arduino-0023 . Там есть примеры попробуйте загрузить и проверьте работу экрана. Если будут работать примеры то скетч осцилографа у вас тоже пойдет команды для экрана одинаковые.
Скачать Библиотеку под ls020 http://yadi.sk/d/hHmPJl5Hpy6VW
Скачать arduino-0023 http://www.arduino.cc/en/Main/OldSoftwareReleases#previous
добрый день не могли бы вы еще раз выложить библиотеку для дисплея, заранее благодарен
.....что его можно ускорить пока не разберусь как сделать быстрым не будет публичных видео и прошивок по нему.
Отпишитесь мне на емайл (в своей теме про дисплеи от сотиков , указывал неоднократно), протестю скорость на разных либах и подключениях. Или черкните свой емайл. //Стирать линию можно не только закрашивая ее черными точками из массива ее нарисованности , но и применяя команды самого контроллера дисплея, но т.к. еще много инфы вокруг, которую не надо каждый раз стирать, то пока проще использовать все же затирание из массива. массив естественно из типа переменных byte
добрый день не могли бы вы еще раз выложить библиотеку для дисплея ls020, заранее благодарен
Удалил и эту не работает. Завтра скину рабочие.
.....
bodriy2014 – прошу вас разместить на своем сайте если это конечно возможно для ускорения поиска информации ссылки по теме на наиболее интересные и успешные работы для примера и добавлять новые чтобы это не кануло в бездну.
Прошу также пользователей форума дать ссылки на другие интересные и полезные наработки то этой теме из этого сайта или других источников.
схема входного тракта с сдвигом нуля
фильтр для DDS и делители
печатка для пультоскопа
ссылки добавил, и буду добавлять если нужно.
bodriy2014,Здравствуйте! Подскажите какие фьюзы нужно выставить для меги328 ,что бы можно было включить кварц на 27мгц.? За ранее спасибо!
bodriy2014,Здравствуйте! Подскажите какие фьюзы нужно выставить для меги328 ,что бы можно было включить кварц на 27мгц.? За ранее спасибо!
Стандартные фьюзы ардуино, они есть в board.txt или в гугле.
Пишу с смартфона посмотреть не могу.
Фьюзы установленные в Arduino Uno R3
Фьюзы считаны AVR USB программатором USBasp программой для прошивки SinaProg 2.1.1.RUS
LB-0F HF-DE EF-05 LF-FF
Atmega328 2.7V 8 MHz - external - внешний кварц 8MHz. Переход к загрузчику после сброса.
LB-0F - лок-биты не выставляем - оставляем 0F или 3F
HF-DE - Разрешить внутрисхемное программирование (SPI); [SPIEN=0]
- Переход к загрузчику после сброса ; [BOOTRST=0]
EF-05 - VCC=2.7V контроль напряжения питания микроконтроллера
LF-FF - кварц-частота 8MHz (external - внешний кварц) 8 MHz.
- Ext. Crystal Osc.; Frequency 8.0-MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms;[CKSEL=1111 SUT=11]
- Boot Flash section size=1024 words Boot start address=$3C00; [BOOTSZ=01]
Да с Фьюзами не совсем понятно, сегодня знакомый собирал на Атмега328 в DIP корпусе пультоскоп 5110(без ардуино на макетке m328-кварц27MHz-дисплей), по предыдущей версии, помогал ему прошивать (прошивал программатором USBasp программой для прошивки SinaProg 2.1.1.RUS т.е. без ардуино IDE) , Фьюзы поставил такие как в UNO, запустили работает, т.е. есть меню, в режим осциллографа и генератора входим, к измерениям пока не приступали не успели. Так вот то что я выше приписал к фьюзам взято с Калькулятора фьюзов AVR не совсем понятно почему там стоит фиксированная частота LF-FF - кварц-частота 8MHz (external - внешний кварц) 8 MHz. Хотя в UNO запаян на 16MHz.
Если было бы вот так, то было бы понятнее.
LB:3F - лок-биты не выставляем - оставляем 3F или 0F
EF:05 - VCC=2.7V - контроль напряжения питания микроконтроллера
НF:D9 - Разрешить внутрисхемное программирование (SPI); [SPIEN=0]
LF:F7 - (external-Ext. Full-swing Crystal - внешний кварц) X MHz.(какой поставим кварц такая будет и частота)
Надо будет попробовать.
Скетч из которого делал .HEX файлы
В связи с тем что в AtMega328 в корпусе DIP отсутствуют 2 пина A6 и A7, перевел пин A6 который выделен в авторской прошивке для измерения напряжения АКБ, па пин A2. Проверил работает.
Os_AtMega328_DIP http://https://yadi.sk/d/sQ6X3AkJoszLZ
Спасибо,за консультацию! Решил просто сделать-Мегу 328Р в DIPе просто кварцем обвязать с двумя кондерами и делитель для 3.3в на дисплей. USB ASP тоже себе смастерил.
добрый день не могли бы вы еще раз выложить библиотеку для дисплея ls020, заранее благодарен
Вот ардуино ID 0022 уже с библиотекой и примерами http://yadi.sk/d/sPCSAXbaqB7Ta
Вот библиотека с примерами http://yadi.sk/d/wWKSj1OHqB7jF ее мне скинул форумчанин она работает только с ардуино ID 1.0.5. лежит тут http://yadi.sk/d/NabTbzKdqB85J.
Подключение дисплея в обеих библиотеках
На днях должны превезти дисплея ls020 тогда смогу точно сказать какая лутше.
Доброго времени суток. Давно слежу за данной темой, и хочу выразить благодарность всем участникам форума за создание такого нужного прибора. От себя хотел бы добавить переделанный код пультоскопа финал 2 под OLED I2C LCD 128x64 0.96" графический дисплей. Проверил, вроде работает. Я пока только начинаю интересоваться ардуино, так, что если в коде что-то не верно прошу поправить. С ув.
D.I.M - спасибо как раз есть такой все думал как его прикрутить, правда мелкий очень зато работает хорошо, проверял на другом девайсе, а то у меня сегодня красный модуль 5110 из поднебесной приказав долго жить отправился на небеса, что-то мне с ними не везет, синий модуль 5110 тоже работает хреново.
.........а то у меня сегодня красный модуль 5110 из поднебесносной приказав долго жить отправился на небеса, что-то мне с ними не везет, синий модуль 5110 тоже работает хреново.
У меня три красных модуля 5110. Купил сначала 2, потом еще один. Из первых двух один отказался работать, другой работает. Тот что не работает расковырял и убил окончательно. Третий модуль, что пришел последним, тоже отказался работать. Я маркером на нем написал "BAD", и отложил в сторону, ковырять не стал. Когда баловался с другими моделями дисплеев, подключал их через преобразователь уровней. Попробовал и красные модули 5110 подключить с преобразователем уровней, и ...они заработали! И тот что работал, и тот, который я пометил "BAD". Может им всетаки нужен уровень сигнала 3.3В?
bpl ,Мне тоже с нокиевскими дисплеями не везет: на красном две строки не отображается, а синий вообще не работает.
D.I.M - Расскажите как подключали дисплей т.е. пин(ардуино) ----- пин(дисплея). И делали какие либо изменения по остальным подключениям пинов, а то я еще начинающее вас по коду плохо ориентируюсь мне лучше бы схему
Joiner – спасибо за совет по 5110 была тоже такая мысля но еще не проверял, делители т.е. резистор от М328 --- 1К--- к дисплею и т дисплея -----2К-----на минус или как сделано у вас.
bpl, вывод SDA дисплея на пин А4 ардуино, SCL, на А5, вход пробника на А2, остальные подключения те же, что и у автора. Библиотека: https://drive.google.com/file/d/0B4prOxHsTkgtS3VxeGl5ci0zM3c/view?usp=sharing
Joiner – спасибо за совет по 5110 была тоже такая мысля но еще не проверял, делители т.е. резистор от М328 --- 1К--- к дисплею и т дисплея -----2К-----на минус или как сделано у вас.
Финальный вариант через преобразователи уровней таких http://www.ebay.com/itm/5PCS-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-5V-to-3-3V-for-Arduino-/281643083290?hash=item41933c661a:g:kw0AAOSwpDdVE9cc
Наверное самый надежный вариант.
D.I.M-Как подключать дисплей понял спасибо, а вот с библиотекой что-то не то, ссылка предлагает - войдите в свой аккаунт.
Joiner -Спасибо буду пробовать.
D.I.M- ...а вот с библиотекой что-то не то, ссылка предлагает - войдите в свой аккаунт.
Понял,ссылку подредактирую.
Сейчас должно работать
5110 китай красный нужно подключать только от 3,3в и через согласование уровней. А так он не жилец:)
И еще у них беда с контрастностью то темный то еле видно, или бывало что вобще ничего не видно думал что згорел . Лечу так: окуратно снимаю железную окантовку и окурато протираю тряпочкой места контактной резинки на плате, стекле и саму резинку. Собираю под увелечителным стелом следя чтобы не попали пилинки или ворсинки. И главное. Сверху на стекло между железкой и стеклом в месте контактов наклеиваю тонекий размером с контакти кусочек изоленты. Так получается точний контакт без никаких перекосов, стабильная контрастнасть от 45 до 55 взависимости от экземпляра. Так воскресил не один дисплей.
D.I.M – библиотеку установил при компиляции «кода пультоскопа финал 2 под OLED I2C LCD 128x64 0.96"» Возникают ошибки вроде у меня не та SPI. Пробовал на Arduino: 1.6.8 и Arduino: 1.6.5 Запутался я в библиотеках их там уже по 2 шт. в разных местах, надо все чистить.
D.I.M не могли бы вы выложить все библиотеки которые вы используете именно для этого скетча. заранее благодарен.
VetalST все симптомы модулей 5110 один в один, лечил также только без изоленты, даже резинки новые пробовал вырезать, если преобразователи уровней не помогут воспользуюсь вашим советом, пациенты еще есть.
bpl , вот скетч с библиотеками, которые у меня работают IDE 1.6.7: https://drive.google.com/file/d/0B4prOxHsTkgtM1NaSmtwWDVoNDQ/view?usp=sharing
Попробуйте сначала почистить все библиотеки, а эти установите, иначе будут конфликтовать. Еще может возникать конфликт из - за установленой в IDE платы Arduino Robot мне пришлось удалить все файлы связанные с этой платой.
bpl, сейчас удалил и переустановил IDE по новой, у меня все компилируется.
D.I.M - спасибо, библиотеки установил, - PULTOSCOPE_128x64_OLED_display.ino – скомпилировался, ошибок нет.
Arduino: 1.6.8 - на сообщение ниже я думаю внимания не обращать .