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

Stashevskiy68
Offline
Зарегистрирован: 09.01.2017

для Electronik83

та да. сейчас ломаю голову над реализацией меню с прокруткой и линейкой . осталось зациклить конец с началом и наоборот а так вроде работает.    

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

Electronik83 пишет:

А я таким загорелся.........................................

Я тоже такой же заказал.........но смог найти на 3000 дороже :))))

sirota
Offline
Зарегистрирован: 18.08.2015
Joiner
Offline
Зарегистрирован: 04.09.2014

sirota пишет:

.

...................

И в 200МГц переделывает по "хлопку".

 

Блииииин!!!! 5 тыс. выкинул на ветер......Пойду застрелюсь! :((((

sirota
Offline
Зарегистрирован: 18.08.2015

Joiner пишет:

sirota пишет:

.

...................

И в 200МГц переделывает по "хлопку".

 

Блииииин!!!! 5 тыс. выкинул на ветер......Пойду застрелюсь! :((((

Лох - это судьба ))) Без обид )

Joiner
Offline
Зарегистрирован: 04.09.2014

sirota]</p> <p>[quote=Joiner пишет:

Лох - это судьба ))) Без обид )

Последнее время со мной что-то происходит.....

Перелопатил весь интернет, нашел клавиатуру, которая нужна за 1700 р. Заплатил, оформил... На следующий день приходит реклама, предлагают на 800 р. дешевле...

Перелопатил весь интернет. Выбрал телевизор, который мне нужен. Заплатил 18000, получил. На следующий день захожу на сайт в тот же магазин, цена на это телевизор 16500 р.!!!!!!!!!!!!!!!

Вот так же и с осциллографом. Проклятие какое-то........

sirota
Offline
Зарегистрирован: 18.08.2015

Joiner пишет:

Вот так же и с осциллографом. Проклятие какое-то........

Покупаем телек. гарантия лучшей цены. 62 тысячи кажется. Грузим в машину и едем. По пути кент стоит, остановился кое-что перетереть. Ну тот типа довези, я ему что машина до талова телек купил, домой везу. Ну в общем слово за слова, он мне да вон магаз такой же теле 40 рублей. Я чуть не всрался. Туда, реально. 40 тысяч! Я волосы на попе рву, ща думаю сдам. И тут я понимаю что ценник висит не от 52'' панели, а от 40'', а сам телек 52''. Как я там наклал...

Stashevskiy68
Offline
Зарегистрирован: 09.01.2017

как говорит русская  народная мудрость :" В умелых руках и член - балалайка". как мы раньше обходились одним стрелочным прибором? для того чтобы оценить форму звукового сигнала, наличие  генерации, логический уровень -   пультоскопа  предостаточно. у меня  осцил(С-67)  дома и 2 на работе  за 17 лет пользовался раз 10. а вот карманный требовался  каждую неделю, но приходилось обходиться мультиметром.   

sirota
Offline
Зарегистрирован: 18.08.2015

Stashevskiy68 пишет:

как говорит русская  народная мудрость :" В умелых руках и член - балалайка". как мы раньше обходились одним стрелочным прибором? для того чтобы оценить форму звукового сигнала, наличие  генерации, логический уровень -   пультоскопа  предостаточно. у меня  осцил(С-67)  дома и 2 на работе  за 17 лет пользовался раз 10. а вот карманный требовался  каждую неделю, но приходилось обходиться мультиметром.   

Ну во первых тогда техники такой не было. А так что была цифра... сейчас калькуляторы быстрее. По поводуосцила, то да. Но немного наоборот. Карманный он мне вообще не нужен. Он мне нужен настольный, но небольшой. И вообще и сам осцил нужен раз в пол года и то по заказу. По сему я бы спокойно обошелся и пультоскопом, но что-то мне подсказывает что не ровен час и когда его вообще не завести с китая. Тем более официально уже нельзя. Меня это и останавливает. Но китаец пишет что отправлять будет как "DYI, HOBBY, ELECTRONIC PARTS". Но сыкотно. Просто вдруг как жизнь повернется и завтра он пригодится. У меня есть возможность практически круглосуточно получать доступ к осцилу, но так не охота ехать туда. Ибо потом за одно обращение и то я сам все сделаю прийдется отрабатывать очередной загашеный бабами ноут и т.д. Вот и думаю Вроде бы 13- не великие деньги и я могу позволить хоть сейчас, но с другой стороны если и буду в ближайший месяц епго использовать, то на 1/100 его возможностей. Но купить скажем тот же DSO за 6 тысяч и через 2 года кусать локти что сжалил каких-то 6-8 тысяч... сам понимаешь.

Joiner
Offline
Зарегистрирован: 04.09.2014

Надо брать. Спросите у dimax_а. Деньги истратил и забыл, а осциллограф будет радовать всю оставшуюся жизнь.

Наличие 2-х каналов и неплохие характеристики дают огромные возможности для исследования любого электронного устройства. У меня на данный момент есть осциллограф ОМЛ-2М. Поигрался, понравилось, но захотелось чего-то покруче. Решил, что Hantek смогу себе позволить. Только что-то долго идет....

А пультоскоп вполне себе хороший карманный пробник и во многих ситуациях будет даже очень удобен. В планах есть желание повторить эту конструкцию. Тем более если всетаки будет нормальный осциллограф, то с ним будет легче настроить и проверить пультоскоп :)

Stashevskiy68
Offline
Зарегистрирован: 09.01.2017

согласен если есть возможность надо брать ! я вообще хочу пультоскоп встроить в станину старой настольной лампы чтобы всегда был под рукой.

MaksVV
Offline
Зарегистрирован: 06.08.2015

както раз навесу собрал пультоскоп, так нужно было сигнал померить, все заработало, автору огромный респект! На экранчике fruit собирал (вроде так называется, цветной такой). И успел увидеть там генератор сигнала. Настраивается как помнится freq и duty. Так вот сейчас нужно на работе по зарез по быстрому простите из говна и палочек собрать станцию для проверки бензиновых топливных форсунок для автомобилей. Программирую плохо, поэтому долго мне самому программу писать, потом настраивать её. Подумал, что можно использовать генератор сигнала от пультоскопа. Только одно но, необходимо отключать генератор по прошествию например определённого времени (нескольких сек), ну или определённого количества импульсов. Помогите решить такую задачу, если не сложно это (а то начнут щас). 

 

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

MaksVV пишет:

 Так вот сейчас нужно на работе по зарез по быстрому простите из говна и палочек собрать станцию для проверки бензиновых топливных форсунок для автомобилей.

 

Господа, извините за флуд не по теме, больше не буду. 

MaksVV, не надо забивать микроскопом гвозди. самое отличное решение 

или если очень ардуино нужно https://www.drive2.ru/c/462912263431389392/

ещё раз извините меня, что не по теме

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

спасибо взял на заметку

sakatgg
Offline
Зарегистрирован: 09.03.2017

Попробовал дисплей TFT на ST7735, скетч http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=46#comment-249516

Сделал временно, R=4.7кОм вставил в разрыв сигнальных проводов. То запускается, то нет, мож думаю провода длинные и контакты. Спаял переходную платку с SMD резюками R=10kOm, как советуют на скрине, думаю хуже не будет

Подключаю - белый экран. Так понял сигнала мощи не хватае, взял напрямую подсоединил - работает.

Может на шлейфе эти резюки уже напаяны?

Arduino Nano (usb 340) , питание с usb, через диод 5В->4,6В (на VCC). Замерил ток на pin Reset дисплея 

             без R          R=10KoM
Reset    0,37mA      0,11mA

Там где скейч и схема есть, вроде как автор не ставил их вообще. 

Пока так :) напрямую, без резюков, вроде ток мизирный и U=4.6В(диод шоттки на Nano). Еще кнопки переделаю на землю 

P.S. Может кому пригодитьcя, код по ссылке от 240265 на дисплей ST7735 подредактировал под кнопки на GND без резисторов, вроде на всех режимах нормально срабатывают:



//страничка проекта <a href="http://srukami.inf.ua/pultoscop_v2.html" rel="nofollow">http://srukami.inf.ua/pultoscop_v2.html</a>
// форум <a href="http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=12#comment-175783" rel="nofollow">http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=12#comment-175783</a>
// скетч и библиотеку изменил под LCD_ls020 VetalST
// скетч и библиотеку изменил под LCD 1.8 дюйма 160х128 ST7735 Владимир Иванов ( 240265 )
// LCD_ls020 подключаем: 
// к ардуине на ATmega328
//**********************************************************
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
#include <FreqCount.h>
#include <PWM.h>

// For the breakout, you can use any 2 or 3 pins
// These pins will also work for the 1.8" TFT shield
#define TFT_CS    10
#define TFT_RST   A0
#define TFT_DC     8

// Option 1 (recommended): must use the hardware SPI pins
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);

// Option 2: use any pins but a little slower!
//#define TFT_SCLK 13   // set these to be whatever pins you like!
//#define TFT_MOSI 11   // set these to be whatever pins you like!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

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

//#################№№№№№№####пользовательские настройки!
#define levo 4
#define ok 3
#define pravo 2
#define akb A3 //любой своюодный аналоговый пин для измерения напряжения АКБ
#define delit 6 //включен или отключен делитель на х10
#define overclock 16 //Частота на которой работает Ардуино 
byte SinU=30; // =30;   //уровень синхронизации 0 до 255
int PWM = 128;//стартовое значение ШИМ от 0 до 255        
int32_t frequency = 500; //стартовое значение частоты в Гц
float VCC=5.0;  //напряжение питания, меряем мультиметром
byte pultoskop=1; //флаг выбора генератора или осциллографа
//###########################################################

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

//********************* ОТРИСОВКА ЛИНИИ *********************************
void Line(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
 uint16_t color) {
  bool vektor = abs(x0 - x1) > abs (y0 - y1);
  if (vektor) {
    if (y1 > y0) {
      int h = x1 - x0 + 1;
      int d = y1 - y0 + 1;
      h = h / d;
      for (; y0 <= y1; y0++) {
       tft. drawFastHLine(x0, y0, h, color);
        x0 = x0 + h;
      }
    }
    else {
      int h = x1 - x0 + 1;
      int d = y0 - y1 + 1;
      h = h / d;
      for (; y0 >= y1; y0--) {
       tft. drawFastHLine(x0, y0, h, color);
        x0 = x0 + h;
      }
    }
  }
  else {
    if (y1 > y0) {
      int h = y1 - y0 + 1;
      int d = x1 - x0 + 1;
      h = h / d;
      for (; x1 >= x0; x0++) {
       tft. drawFastVLine(x0, y0, h, color);
        y0 = y0 + h;
      }
    }
    else {
      int h = y0 - y1 + 1;
      int d = x1 - x0 + 1;
      h = h / d;
      for (; x1 >= x0; x1--) {
        tft.drawFastVLine(x1, y1, h, color);
        y1 = y1 + h;
      }
    }
  }
}

//********************* МЕНЮ DDS *********************
void DDS_Menu () {
    tft.setCursor(35, 30);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(1);
    tft.println("СИНУС");     
    tft.setCursor(35, 50);
    tft.println("ТРЕУГОЛЬНИК");
    tft.setCursor(35, 70); 
    tft.println("ПИЛА");
    tft.setCursor(35, 90);
    tft.println("ПИЛА ОБР");       
}

//***************** ОТРИСОВКА В ПАУЗЕ ОСЦИЛОГРАФА *******************
void Pause(){
        tft.fillRect(0, 12, 160, 3, ST7735_BLACK);//стиране шкалы прокрутки
          tft.fillRect(6, 12, 154, 99, ST7735_BLACK);//стиране поле графика
         // tft.fillRect(0,116, 160, 12, ST7735_BLACK);//стиране НИЖНЕГО МЕНЮ 
          //////////////////////////////////////////////////////////////
          tft.drawLine(prokr/4,12,prokr/4+25,12, ST7735_YELLOW);//шкала прокрутки
          tft.drawLine(prokr/4,13,prokr/4+25,13, ST7735_YELLOW);//шкала прокрутки
          tft.drawLine(prokr/4,14,prokr/4+25,14, ST7735_YELLOW);//шкала прокрутки
          
          //++++++++++++++++ СЕТКА
          for(byte i=110;i>18;i=i-3){
            tft.drawPixel(6,i, ST7735_BLUE);
            tft.drawPixel(25,i, ST7735_BLUE); 
            tft.drawPixel(44,i, ST7735_BLUE); 
            tft.drawPixel(63,i, ST7735_BLUE); 
            tft.drawPixel(82,i, ST7735_BLUE); 
            tft.drawPixel(101,i, ST7735_BLUE);
            tft.drawPixel(120,i, ST7735_BLUE); 
            tft.drawPixel(139,i, ST7735_BLUE); 
            tft.drawPixel(158,i, ST7735_BLUE);
           // tft.drawPixel(159,i, ST7735_BLUE);
          }
          for(byte i=6;i<160;i=i+3){
            tft.drawPixel(i,25, ST7735_BLUE);
            tft.drawPixel(i,42, ST7735_BLUE); 
            tft.drawPixel(i,59, ST7735_BLUE);
            tft.drawPixel(i,76, ST7735_BLUE); 
            tft.drawPixel(i,93, ST7735_BLUE); 
            tft.drawPixel(i,110, ST7735_BLUE);
          }
          //////////////////////////////////////////////////////
          x=5;
          for(int y=prokr;y<prokr+146;y++){
            if(razv<7){ x++;}
            if(razv==7){x=x+2;}
            if(razv==8){ x=x+3; }
            if(razv==9){ x=x+4; }
            if(razv==10){ x=x+5; }
            if(x>160){ x=160; }
          // tft.drawPixel(x,110-mass[y]/3,ST7735_GREEN);
           tft.drawLine(x,110-mass[y]/3, x+1,110-mass[y+1]/3, ST7735_GREEN);//график
          }
      }

//************* ОТРИСОВКА ВЕРХНЕГО МЕНЮ ************************      
void PrintVmenu(){
tft.fillRect(0, 0, 45, 9, ST7735_BLACK);
          if(digitalRead(delit)==HIGH){//включен или отключен делитель
        if(opornoe==0){
                    
    tft.setTextColor(ST7735_WHITE);
    tft.setCursor(3, 1);
    tft.println( "2.2V/d");
        }
        if(opornoe==1){
                   
          tft.setTextColor(ST7735_WHITE);
    tft.setCursor(3, 1);
          tft.println( "10V/d");
        }
      }
      else {//включен или отключен делитель
        if(opornoe==0){
          tft.setTextColor(ST7735_WHITE);
    tft.setCursor(3, 1);
          tft.println( "0.22V/d");
        }
        if(opornoe==1){
          tft.setTextColor(ST7735_WHITE);
    tft.setCursor(3, 1);
          tft.println( "1V/d");
        }
      }

       tft.setCursor(55, 1);
    tft.println( "Разв");
        sprintf(str, "%d", razv); 
    tft.setCursor(91, 1);
    tft.println( str);

}

//******************* ОТРИСОВКА ГЛАВНОГО МЕНЮ *****************  

void GlavMenu (){

     tft.setTextSize(1);
      tft.setTextColor(ST7735_WHITE);
      tft.setCursor(35, 25);
      tft.println("Осцилограф");
       tft.setCursor(35, 55);
       tft.println("Генератор PWM");
       tft.setCursor(35, 85);
        tft.println("Генератор DDS");
      tft.setTextColor(ST7735_BLUE);
       tft.setCursor(30, 110);
       tft.println("Батарея =");
      armcurrent = analogRead(akb)*VCC/1023;//проверка напряжения на АКБ
      temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
      sprintf(str, "%d.%02d V", (int)armcurrent, abs(temp));      
      tft.fillRect(90,110,24,10,ST7735_BLACK);
       tft.setTextColor(ST7735_BLUE);
       tft.setCursor(90, 110);
       tft.println(str);
  
}
  


void setup(){  
  if(opornoe==0){
    ADMUX = 0b11100100;
  }//выбор внутреннего опорного 1,1В
  if(opornoe==1){
    ADMUX = 0b01100100;
  }//Выбор внешнего опорного
SPI.begin;
 SPI.setClockDivider(SPI_CLOCK_DIV2);

  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
 tft.setRotation(3);              //  повернуть по горизонту
  tft.fillScreen(ST7735_BLACK);
  tft.drawRect(0,0,160,128,ST7735_WHITE); // рисуем рамку
  tft.drawRect(2,2,156,125,ST7735_BLUE); // рисуем рамку
  tft.drawRect(4,3,152,121,ST7735_RED); // рисуем рамку
  
  // подтянули кнопки к питанию
  digitalWrite(levo, HIGH); digitalWrite(pravo, HIGH); digitalWrite(ok, HIGH);

 while(digitalRead(ok)==HIGH){  
    if(digitalRead(pravo)==LOW){
     // delay (10);
      while((digitalRead(pravo)==LOW));
      pultoskop=pultoskop-1;
      if(pultoskop<1)pultoskop=3;
    }
    if(digitalRead(levo)==LOW){
     // delay (10);
      while((digitalRead(levo)==LOW));
      pultoskop=pultoskop+1;
      if(pultoskop>3)pultoskop=1;
    }


    if(pultoskop==1){
      GlavMenu ();
 //     tft.setTextSize(1);
      tft.setTextColor(ST7735_RED);
      tft.setCursor(35, 25);
      tft.println("Осцилограф");

    }
    
    if(pultoskop==2){
     GlavMenu ();
       tft.setCursor(35, 55);
       tft.setTextColor(ST7735_RED);
       tft.println("Генератор PWM");
    } 
    
     if(pultoskop==3){
      GlavMenu ();   
       tft.setCursor(35, 85);
       tft.setTextColor(ST7735_RED);
       tft.println("Генератор DDS");
    } 
 delay(200); 
  
}  

     tft.fillScreen(ST7735_BLACK);//очистка дисплея
  if(pultoskop==1){
    FreqCount.begin(1000); 
 //   tft.fillScreen(ST7735_BLACK);//очистка дисплея      
  }
  if(pultoskop==2){
    InitTimersSafe(); 
    bool success = SetPinFrequencySafe(Out, frequency);
 //   tft.fillScreen(ST7735_BLACK);//очистка дисплея  
  }
  if(pultoskop==3){
   InitTimersSafe(); 
   bool success = SetPinFrequencySafe(Out,200000);
//   tft.fillScreen(ST7735_BLACK);//очистка дисплея   
  }
delay(500);  
}

void Zamer(){

  if (razv>=6){ADCSRA = 0b11100010;}//delitel 4
  if (razv==5){ADCSRA = 0b11100011;}//delitel 8
  if (razv==4){ADCSRA = 0b11100100;}//delitel 16
  if (razv==3){ADCSRA = 0b11100101;}//delitel 32
  if (razv==2){ADCSRA = 0b11100110;}//delitel 64
  if (razv<2){ADCSRA = 0b11100111;}//delitel 128
  if (razv==0){
      for(int i=0;i<255;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          delayMicroseconds(500);
          mass[i]=ADCH;
      }
  }
  if (razv>0){
      for(int i=0;i<255;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
  }
  
}

void MenuT(){//перерисовка нижнего меню    

  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)-0.2; }//-0.2 КОРЕКЦИЯ ПОКАЗАНИЙ ЧАСТОТЫ ГЦ //delitel 128
        flagFrec1=0;
        flagFrec3=0;
      }
    }
  }

  //#######################################частоты сигнала

   tft.setTextColor(ST7735_WHITE);
   tft.setCursor(1, 120);
    tft.println( "F=");
    
  if(opornoe==1){
    if((Vmax*VCC/255)>2.8){ countX=count*(overclock/16.0); }
    if((Vmax*VCC/255)<=2.8){ countX=Frec*(overclock/16.0); }
  }
  if(opornoe==0){ countX=Frec*(overclock/16.0); }
  if(countX<1000){
    sprintf(str, "%d Hz", countX);
    tft.setTextColor(ST7735_WHITE);
    tft.setCursor(18, 120);
    tft.println( str);  
  }
  if(countX>=1000){
  float countXK=countX/1000.0;
  temp = (countXK - (int)countXK) * 1000; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д
  sprintf(str, "%d.%03d kHz", (int)countXK, abs(temp));
  tft.setTextColor(ST7735_WHITE);
  tft.setCursor(18, 120);
  tft.println( str);  
  }
  tft.setTextColor(ST7735_WHITE);
   tft.setCursor(18, 120);
    tft.println( str);  
    
    //--------- Напряжение --------------------
  if(digitalRead(delit)==HIGH){//включен или отключен делитель
      if(opornoe==0){ armcurrent = (Vmax*1.1/255)*10; }
     if(opornoe==1){ armcurrent = (Vmax*VCC/255)*10;  }
  }
   else {
     if(opornoe==0){ armcurrent = Vmax*1.1/255; }
     if(opornoe==1){ armcurrent = Vmax*VCC/255;  }
   }
  tft.setTextColor(ST7735_WHITE);
   tft.setCursor(100, 120);
    tft.println( "U=");  
    temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
    sprintf(str, "%d.%02d V", (int)armcurrent, abs(temp));
   tft.setTextColor(ST7735_WHITE);
   tft.setCursor(118, 120);
    tft.println( str);  
}

void loop() { 
  if(pultoskop==1){
    while(1){

      //********** ОТРИСОВКА И ПЕРЕБОР ВЕРХНЕГО МЕНЮ ***************************
      
      //***************** опорное  **************************
      if(menu==0){ 
        tft.fillRect(0, 0, 45, 9, ST7735_RED);
       PrintVmenu(); 

        if(digitalRead(pravo)==LOW){
         tft.fillRect(0, 12, 30, 120, ST7735_BLACK);//стирание напряжения
          opornoe=1;
        }
        if(digitalRead(levo)==LOW){ 
          tft.fillRect(0, 12, 30, 120, ST7735_BLACK);//стирание напряжения
          opornoe=0;
        }
      }
      /////////////////////////// развертка /////////////////////////////
      if(menu==1){
        tft.fillRect(48, 0, 57, 9, ST7735_RED);
     PrintVmenu();

        if(digitalRead(pravo)==LOW){//добавть скорость
        delay (30);
        while((digitalRead(pravo)==LOW));
          razv++;
          if(razv==11){ razv=10;} 
        }
        if(digitalRead(levo)==LOW){//убавить скорость
        delay (30);
        while((digitalRead(levo)==LOW));
          razv--;
          if(razv==255){ razv=0; } 
        } 
      }
      ///////////////////// синхронизация /////////////////////////////////
      if(menu==2){  
        prokr=0;
        paus=0;
    PrintVmenu();

  tft.fillRect(105, 0, 174, 9, ST7735_RED); 
  tft.setCursor(112, 1);        
  tft.println( "Синх-ция");      
        if(digitalRead(levo)==LOW){
          SinU=SinU-10;
          if(SinU<10){ SinU=10; }
        }
        if(digitalRead(pravo)==LOW){
          SinU=SinU+10;
          if(SinU>240){ SinU=240; }
        }

        tft.fillCircle(155,110-SinU/3, 3, ST7735_RED);       
        tft.fillCircle(155,110-SinU/3, 1, ST7735_BLACK);
      }      
      ///////////////////// пауза //////////////////////////////////
      if(menu==3){
        paus=1;
        if(clen_p==0){
         clen_p=1; 
         
         tft.fillRect(105, 0, 174, 9, ST7735_RED);
    PrintVmenu();

    tft.setCursor(112, 1);
    tft.println( "ПАУЗА");      
      }   
        }    

      if(digitalRead(ok)==LOW){
        delay (30);
        while((digitalRead(ok)==LOW));
        menu++;
        tft.fillRect(6, 16, 154, 99, ST7735_BLACK);//стиране поле графика
        tft.fillRect(0,116, 160, 12, ST7735_BLACK);//стиране НИЖНЕГО МЕНЮ 
        if(menu==4){
          menu=0;
          paus=0;
          clen_p=0;
        }
        tft.fillRect(0, 0, 160, 15, ST7735_BLACK);//стиране ВЕРХ МЕНЮ
      }

      //************** ОСЬ НАПРЯЖЕНИЯ ##########################################
      tft.drawLine(2, 20, 2, 114, ST7735_BLUE);
      tft.drawLine(2, 25, 5, 25, ST7735_BLUE); 
      tft.drawLine(2, 42, 5, 42, ST7735_BLUE); 
      tft.drawLine(2, 59, 5, 59, ST7735_BLUE); 
      tft.drawLine(2, 76, 5, 76, ST7735_BLUE); 
      tft.drawLine(2, 93, 5, 93, ST7735_BLUE); 
      tft.drawLine(2, 110,5, 110, ST7735_BLUE); 

      //************ ОСЬ РАЗВЕРТКИ ##########################################
      tft.drawLine(2, 115,158, 115, ST7735_BLUE); 
      //  Черточки ******************     
            for(byte i=6;i<160;i=i+19){
            tft.drawPixel(i,114, ST7735_BLUE); 
            tft.drawPixel(i,113, ST7735_BLUE);
            tft.drawPixel(i,112, ST7735_BLUE); 
 }
      //***************выбор внутреннего опорного 1,1В ########################################
      if(opornoe==0){ ADMUX = 0b11100100; }
      //**************Выбор внешнего опорного ***************************
      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<151;y++){ if(Vmax<mass[y]){ Vmax=mass[y]; } }
      //максимальное значение сигнала ##########################
      
      //************************ ОТРИСОВКА ГРАФИКА *************************
      if(paus==0){       
        tft.fillRect(6, 25, 154, 86, ST7735_BLACK);//стиране поле графика        
//***//*************** стиране НИЖНЕГО МЕНЮ **********************
     tft.fillRect(18, 120, 80, 8, ST7735_BLACK);
     tft.fillRect(118, 120, 25, 8, ST7735_BLACK);
//*****************************************************************
        tft.fillCircle(10,110-SinU/3, 2, ST7735_YELLOW);//рисуем уровень синхронизации 
        tft.fillCircle(10,110-SinU/3, 3, ST7735_YELLOW);//рисуем уровень синхронизации        
           x=5;
       for(int y=sinhMASS-1;y<sinhMASS+151;y++){ 

           if(razv<7){ x++; }
          if(razv==7){ x=x+2; }
          if(razv==8){ x=x+3; } 
          if(razv==9){ x=x+4; }
          if(razv==10){ x=x+5; }
          if(x>159){ x=159; } 
   
        Line(x,110-mass[y]/3, x+1,110-mass[y+1]/3, ST7735_GREEN);//график через Line (быстрее в 2 раза)
        }     
        MenuT();  
      }
     ///////////////////////////// режим паузы //////////////////////////////////////////////// 
     
    if(paus==1){
    
        if(digitalRead(pravo)==LOW){//листаем
          prokr=prokr+2;
          if(prokr>554){prokr=0; }
      Pause();
        }
      if(digitalRead(levo)==LOW){//листаем
          prokr=prokr-2;
          if(prokr<0){prokr=554; }
      Pause();
        } 
      }
     // delay(300); // можно удалить или подобрать по скорости обновления экрана
    }
  }
  
  //************************************************************************************************
  //#######################################  режим ренератора от 1 Гц до 2 МГц
  if(pultoskop==2){
    while(1){
      if (flag==0){//флаг выборов режима настройки  Частоты
        if(digitalRead(levo)==LOW){
          frequency=frequency-mnog;
          if(frequency<0){
            frequency=0;
          }
          bool success = SetPinFrequencySafe(Out, frequency);
          delay(3);//защита от дребезга 
          tft.fillRect(6, 60, 160, 80, ST7735_BLACK);//стирание поля
        }
        if(digitalRead(pravo)==LOW){
          frequency=frequency+mnog;
          bool success = SetPinFrequencySafe(Out, frequency);
          delay(3);//защита от дребезга 
          tft.fillRect(6, 60, 160, 80, ST7735_BLACK);//стирание поля закрашиваем
        }  
      }
      if (flag==1){//флаг выборов режима настройки ШИМ 
        if(digitalRead(levo)==LOW){
          PWM=PWM-2;
          if(PWM<0){
            PWM=255;
          } 
          delay(3);//защита от дребезга
          tft.fillRect(6, 6, 160, 40, ST7735_BLACK);//стирание поля
          tft.fillRect(90, 100, 129, 125, ST7735_BLACK);//стирание в низу число шим
        }
        if(digitalRead(pravo)==LOW){
          PWM=PWM+2;
          if(PWM>255){
            PWM=0;
          } 
          delay(3);//защита от дребезга
          tft.fillRect(6, 6, 160, 40, ST7735_BLACK);//стирание поля 
          tft.fillRect(90, 100, 129, 125, ST7735_BLACK);//стирание в низу число шим
        }  
      }      

      if(digitalRead(ok)==LOW){//переключение разряда выбора частоты 
        delay (30);
        while((digitalRead(ok)==LOW));
        hag++;
        if(hag>=6){
          hag=0;
        }
        tft.fillRect(6, 100, 154, 28, ST7735_BLACK);//стирание поля
      }
      ////////////

      tft.setCursor(10, 19);
      tft.setTextColor(ST7735_GREEN);
      tft.setTextSize(2);
      tft.println("PWM =");                                      
     // temp = PWM*100/255;
      tft.setCursor(80, 19);
      tft.println( PWM*100/255,1);      
      tft.setCursor(122, 19);
      tft.println( "%");
      
      armcurrent = (127*PWM/255)+25; // вычисляем длинны линии

      tft.drawLine(6,10,armcurrent,10, ST7735_YELLOW);
      tft.drawLine(6,11,armcurrent,11, ST7735_YELLOW);
      tft.drawLine(6,12,armcurrent,12, ST7735_YELLOW);
      tft.drawLine(6,13,armcurrent,13, ST7735_YELLOW);
      tft.drawLine(6,14,armcurrent,14, ST7735_YELLOW);

      tft.drawLine(6,37,armcurrent,37, ST7735_YELLOW);
      tft.drawLine(6,38,armcurrent,38, ST7735_YELLOW);
      tft.drawLine(6,39,armcurrent,39, ST7735_YELLOW);
      tft.drawLine(6,40,armcurrent,40, ST7735_YELLOW);
      tft.drawLine(6,41,armcurrent,41, ST7735_YELLOW);

      ///////////////////////////////////    
      long frequencyX=frequency*(overclock/16.0);
       tft.setTextSize(2);
      if(frequencyX<1000){
        sprintf(str, "%d Hz", frequencyX);
        tft.setCursor(30, 60);
        tft.setTextColor(ST7735_WHITE);      
        tft.println(str);                  
        tft.setTextSize(1); 
      }
     
      if(frequencyX>=1000&&frequencyX<1000000){
        tft.setTextSize(2);
        armcurrent=frequencyX/1000.0;
        temp = (armcurrent - (int)armcurrent) * 1000; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%003d kHz", (int)armcurrent, abs(temp));
        tft.setCursor(15, 60);
        tft.setTextColor(ST7735_WHITE);        
        tft.println(str);                
       tft.setTextSize(1);
      }
     
      if(frequencyX>=1000000){
        tft.setTextSize(2);
        armcurrent=frequencyX/1000000.0;
        temp = (armcurrent - (int)armcurrent) * 1000; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%003d MHz", (int)armcurrent, abs(temp));
        tft.setCursor(30, 60);
        tft.setTextColor(ST7735_WHITE);        
        tft.println(str);          
       tft.setTextSize(1);
       
      }  
      if(frequencyX>2000000)frequency=0;

      ////////////////////////////////////////////////////////////// 

        tft.setCursor(5, 100);
        tft.setTextColor(ST7735_BLUE);
        tft.setTextSize(1);
        tft.println(">>");          
    
      if(hag==0){//выбор множителя частоты 
        mnog=1;
        flag=0;
        armcurrent = 1*(overclock/16.0);
        tft.setTextSize(2);
        temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%d Hz", (int)armcurrent, abs(temp));
        tft.setCursor(30, 100);
        tft.setTextColor(ST7735_YELLOW);        
        tft.println(str);          

      }
      if(hag==1){//выбор множителя частоты
        mnog=10;
        armcurrent = 10*(overclock/16.0);
        tft.setTextSize(2);
        temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%d Hz", (int)armcurrent, abs(temp));
        tft.setCursor(30, 100);
        tft.setTextColor(ST7735_YELLOW);        
        tft.println(str);        
      }
      if(hag==2){//выбор множителя частоты
        mnog=100;
        armcurrent = 100*(overclock/16.0);
        tft.setTextSize(2);
        temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%d Hz", (int)armcurrent, abs(temp));
        tft.setCursor(30, 100);
        tft.setTextColor(ST7735_YELLOW);        
        tft.println(str);        
      }
      if(hag==3){//выбор множителя частоты
        mnog=1000;
        armcurrent = 1*(overclock/16.0);
        tft.setTextSize(2);
        temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%d kHz", (int)armcurrent, abs(temp));
        tft.setCursor(30, 100);
        tft.setTextColor(ST7735_YELLOW);        
        tft.println(str);        
      } 
      if(hag==4){//выбор множителя частоты
        mnog=10000;
        armcurrent = 10*(overclock/16.0);
        tft.setTextSize(2);
        temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
        sprintf(str, "%d.%d kHz", (int)armcurrent, abs(temp));
        tft.setCursor(30, 100);
        tft.setTextColor(ST7735_YELLOW);        
        tft.println(str);        
      } 
      if(hag==5){//выбор  PWM 
        flag=1;
        tft.setTextSize(2);
        tft.setCursor(25, 100);
        tft.setTextColor(ST7735_YELLOW);
        tft.println("PWM =");               
       // temp = PWM*100/255;
        tft.setCursor(95, 100);
        tft.setTextColor(ST7735_YELLOW);      
        tft.println(PWM*100/255,1);                   
        tft.setCursor(132, 100);
        tft.setTextColor(ST7735_YELLOW);
        tft.println("%");               
      }
        tft.setCursor(145, 100);
        tft.setTextColor(ST7735_BLUE);
        tft.setTextSize(1);
        tft.println("<<");         
     

      pwmWrite(Out, PWM);
      delay(50);  
    }
  }
 //************************************************************************************************
  //#######################################  режим DDS ренератор
if(pultoskop==3){
  while(1){
int fr=10;

if(menuDDS==0){
  DDS_Menu ();
    tft.setCursor(35, 30);
    tft.setTextColor(ST7735_RED);    
 //   tft.setTextSize(1);
    tft.println("СИНУС");      

    delay(400); 
    while(PIND & (1<<PIND2)){
    PWM=sinM[d];
    pwmWrite(dds,PWM);
    //delayMicroseconds(fr);
    d++;
    if(d==32){d=0;}}
     menuDDS++;
  }
if(menuDDS==1){
  DDS_Menu ();
    tft.setCursor(35, 50);    
    tft.setTextColor(ST7735_RED);
    tft.println("ТРЕУГОЛЬНИК");

    delay(400);
    while(PIND & (1<<PIND2)){
      PWM=trianglM[d];
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
    menuDDS++;
  }
if(menuDDS==2){
  DDS_Menu ();

    tft.setTextColor(ST7735_RED);
    tft.setCursor(35, 70); 
    tft.println("ПИЛА");
    
    delay(400);
    while(PIND & (1<<PIND2)){
      PWM=pilaM[d];
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
      menuDDS++;
  }
if(menuDDS==3){
  DDS_Menu ();

    tft.setCursor(35, 90);
    tft.setTextColor(ST7735_RED);
    tft.println("ПИЛА ОБР");       

    delay(400);  
    while(PIND & (1<<PIND2)){
      PWM=RpilaM[d];
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
      menuDDS++;
  }
if(menuDDS==4){menuDDS=0;}
}
}
/////////////////////DDS
}


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

Придумал добавить логический анализатор на несколько входов. Есть смысл? Так же можно сделать анализатор шин SPI и I2C. Нужно? 

bulat943
Offline
Зарегистрирован: 19.09.2016

я об этом как то писал-было бы не плохо

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

Спасибо за поддержку - начну делать тогда:) Сколько входов? 4?

Stashevskiy68
Offline
Зарегистрирован: 09.01.2017

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

.

 

sakatgg
Offline
Зарегистрирован: 09.03.2017

Electronik83 пишет:

Так же можно сделать анализатор шин SPI и I2C. Нужно? 

Это типа Saleae LOGIC? с записью в файл? 

Хотел еще экран SPI ILI9341 320х240 2.2 потестить с пультоскопом, но он походу полудохлый.

На графтесте с  библами ILI9341 и ILI9340, показывает что-то, под углом если смотреть, и на 2/3 экрана, картинка меняется, но смазанная.

Запитывал и 5В и 3.3В, уровни делал и через резюки, и через делители на GND. При 3.3В подключал на прямую (перемычку на плате ставил). Экран от платы отлепил, контакты на шлейфе нормальные, короче облом :(

alexandr55
Offline
Зарегистрирован: 26.03.2017

Здравствуйте Sakatgg можете поделится прошивкой для вашего пультоскопа на Arduino mini и дисплей ST7735, за ранние спасибо,

bulat943
Offline
Зарегистрирован: 19.09.2016

вообще можно отдельно сделать только лог анализатор,а там уже на spi иi2c замахнуться

если сделать 8 входов то потом еще усовершенствовать-добавить AD9280-то захотел-это лог анализатор,захотел-воткнул платку с AD-шкой и вот вам осциллоскоп с полосой до (допустим) 300  кгц

P.S. доделал хамелеон D CUBE,давно надо было собрать-хороший приборчик...

sakatgg
Offline
Зарегистрирован: 09.03.2017

alexandr55, код на ST7735 в конце поста #2916, под фото. Кнопки на GND, без резюков.

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

Stashevskiy68 пишет:
у меня приятель не мог запустить дисплей 1602. пока с помощью программы не узнал его действительный адрес ,коорый как оказалось не соответствовал перемычкам на плате дисплея.

Просто там к адресу бит прибавляется где то, вот тебе и не тот адрес.

alexandr55
Offline
Зарегистрирован: 26.03.2017

Sakatgg, После компиляции выдает ошибку #include <Adafruit_CFX.h> //Core graphics library, Я так понемаю что нет какойто библиотеки, и как ее подключить?

sakatgg
Offline
Зарегистрирован: 09.03.2017

Качай IDE,  рекомендованный автором https://drive.google.com/open?id=0BxfSZik0BpsAZHNDbjBUVzY4dlU

Либу отсюда https://github.com/adafruit/Adafruit-ST7735-Library ложи в папку libraries 

alexandr55
Offline
Зарегистрирован: 26.03.2017

Спасибо, буду разбираться

DrNimus
Offline
Зарегистрирован: 26.03.2017

alexandr55 пишет:

Sakatgg, После компиляции выдает ошибку #include <Adafruit_CFX.h> //Core graphics library, Я так понемаю что нет какойто библиотеки, и как ее подключить?

Здравствуйте, попробуйте для начала так:  #include "Adafruit_CFX.h"

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

DrNimus пишет:

Здравствуйте, попробуйте для начала так:  #include "Adafruit_CFX.h"

  Может GFX  все таки ?

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

#include "Adafruit_GFX.h"

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

Автоматический выбор развертки (посидел немного в экселе). Прописал перед выводом частоты на экран и после подсчета этой же частоты:

#define PER 1.3                               
  if (count > 3823.3*PER) razv = 6; else
  if (count > 1934.5*PER) razv = 5; else
  if (count > 0969.3*PER) razv = 4; else
  if (count > 0486.8*PER) razv = 3; else
  if (count > 0245.8*PER) razv = 2; else
  if (count > 0120.1*PER) razv = 1; else razv = 0;
 
Как часы работает:)
Никто не задавался вопросом, почему седьмая разертка не работает? Когда делитель АЦП ставим в 2? И если не работает, то зачем он нужен вообще?
Winstonn
Winstonn аватар
Offline
Зарегистрирован: 25.02.2017

круто, я бы автоматическую развёртку дополнил функцией выбора количества периодов : 0,5; 1; 2; 3; 4. Не лишать же пользователя возможности её менять . Но это пока только слова, протестирую и посмотрю сам ))

alexandr55
Offline
Зарегистрирован: 26.03.2017

Всем спасибо разобрался

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

Winstonn пишет:
круто, я бы автоматическую развёртку дополнил функцией выбора количества периодов : 0,5; 1; 2; 3; 4. Не лишать же пользователя возможности её менять . Но это пока только слова, протестирую и посмотрю сам ))

Как тесты?

Juris
Juris аватар
Offline
Зарегистрирован: 28.10.2016

Почему-то перестали приходить уведомления об новых постах сдесь ... Надеюсь, возобновитса теперь. Всем спасибо за новые продвижания тут! :)

Winstonn
Winstonn аватар
Offline
Зарегистрирован: 25.02.2017

Electronik83 пишет:
Как тесты?

мотосезон начался, я бы рад, но, когда не за рулём, какой-то я тормознутый стал последнее время, сорри...

aliveforever
Offline
Зарегистрирован: 24.03.2011

собрал схемку на OLED 128x64, столкнулся с глюком, картинка на дисплее через строчку

https://vk.com/album67396961_152662073?z=photo67396961_456239101%2Falbum...

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

aliveforever пишет:

собрал схемку на OLED 128x64, столкнулся с глюком, картинка на дисплее через строчку

https://vk.com/album67396961_152662073?z=photo67396961_456239101%2Falbum67396961_152662073

ГЫ!))) Были тут такие фотки - лей мою прошиву. Все будет норм. Будет обновление скоро!

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

Winstonn пишет:

2 Electronik83:

https://youtu.be/qY46W4TG_ds

Блин, спасибо, прикольно. Сижу думаю, куда какие коэффициенты воткнуть. Но, честно, я работаю только с 16 МГц частотой камня. Спасибо тебе.

Предидущие прошивы так не глючат?

aliveforever
Offline
Зарегистрирован: 24.03.2011

повторил схему,возник глюк с дисплеем, такое ощущение что картинка рисуется через строчку,как пофиксить?

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

https://vk.com/album67396961_152662073?z=photo67396961_456239101%2Falbum...

aliveforever
Offline
Зарегистрирован: 24.03.2011

повторил схему,возник глюк с дисплеем, такое ощущение что картинка рисуется через строчку,как пофиксить?

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

https://vk.com/album67396961_152662073?z=photo67396961_456239101%2Falbum...

aliveforever
Offline
Зарегистрирован: 24.03.2011

дай ссылочку)

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

aliveforever пишет:

дай ссылочку)

Пришлось листать за тебя эту ветку на форуме https://yadi.sk/d/JCOev7-33EEYHQ.

aliveforever
Offline
Зарегистрирован: 24.03.2011

Electronik83? 

ай спасибо)

Winstonn
Winstonn аватар
Offline
Зарегистрирован: 25.02.2017

Electronik83 пишет:

 https://yadi.sk/d/JCOev7-33EEYHQ.

PULTOSCOPE_SSD1306_final2_DDS_Z_EL83_EDITION

#НоваяПрошивкаПультоскопа

захэштегю этот линк, так легче будет потом искать.

Winstonn
Winstonn аватар
Offline
Зарегистрирован: 25.02.2017

Electronik83 пишет:
Предидущие прошивы так не глючат?
.

На 16 и 24 работают все твои прошивки отлично! Проблема только с фичей "Автоматический выбор развертки" , скорее всего что я чего-то не учёл,.. но то что на 16 работает, а на 24 глючит - это очень странно,... и очень прикольно одновременно, есть теперь над чем поразмыслить ))

satelit 2
Offline
Зарегистрирован: 04.12.2016

я примерно понял, дело в математике, КРАТНОСТЬ надо найти. что бы кратность в фитче была кратной или частоте кварца или частоте экрана, там скорее всего выдет для каждого экрана своя

Stashevskiy68
Offline
Зарегистрирован: 09.01.2017

satelit 2

я примерно понял, дело в математике, КРАТНОСТЬ надо найти. что бы кратность в фитче была кратной или частоте кварца или частоте экрана, там скорее всего выдет для каждого экрана своя
--------------------------------------
полностью согласен ! и контролировать тип данных т.к. влияние каждой цифры после запятой, в данном случае критично.
кстати какой тип у переменной #define overclock 16 // частота на которой работает Ардуино