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

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

bulat943 пишет:

так у меня все норм,даже при 30 мв шумов не видно

Дак у тебя развертка на 0.22v, как я понял. А тут я сигнал "размазываю" на весь дисплей... От Vmax до Vmin..

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

да,у меня при отрисовке нет деления на 5

мне нужен именно для просмотра пульсаций по питанию,так как "болею" сборкой приемников и часто возникают возбуды,есть DSO138 но он не удобный...а тут все можно сделать в виде щупа-включил,посмотрел...

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

bulat943 пишет:

да,у меня при отрисовке нет деления на 5

мне нужен именно для просмотра пульсаций по питанию,так как "болею" сборкой приемников и часто возникают возбуды,есть DSO138 но он не удобный...а тут все можно сделать в виде щупа-включил,посмотрел...

У меня при отрисовке тоже нет деления на 5, в режиме лупы:

      if (magnify) ssd1306_draw_line(++x, 63-map(adcBuf[y], Vmin, Vmax, 0, 51), x, 63-map(adcBuf[y+1], Vmin, Vmax, 0, 51));  
              else ssd1306_draw_line(++x, 63-    adcBuf[y]/5,                   x, 63-    adcBuf[y+1]/5);
 
Блин, мы с тобой, как на разных языках общаемся....
Electronik83
Offline
Зарегистрирован: 06.12.2015

Забыл отписаться, с дисплеем 320х480 - перекопал всю библиотеку - по скорости там ничего не улучшить. Написано грамотно и все написано, чтобы работало четко и быстро. Мега2560 не подходит для этих дисплеев, если в динамике с этим дисплеем работать.

И надо прерывания отключать, когда считываешь сигнал с АЦП...

Буду кнопки на прерывания садить....

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

Electronik83 пишет:

Забыл отписаться, с дисплеем 320х480 - перекопал всю библиотеку - по скорости там ничего не улучшить.

Может такое "относитса к делу"?

http://andybrown.me.uk/2013/06/08/a-generic-16-bit-lcd-adaptor-for-the-a...
https://www.youtube.com/watch?v=TlVMz90AYHs

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

Привет. Господа, если кому не лень и есть под рукой экранчик. Подставьте ,плиз, размеры. Пока из Поднебесной идёт хочу корпус сделать

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

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

вот огромное спасибо !!! а я не нагуглил ни фига. спасибищще

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

умер мой ssd1306,греется как печка...видимо 5 в ему все-таки много,хоть и стоит AVS1117-3,3

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

Блин, можете подсказать, пишу в кокосе stm32.

Инициализация порта:

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_All;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 
Потом вот такой цикл:
  while (1) {
 GPIO_WriteBit(GPIOB, GPIO_Pin_3, Bit_SET);
 GPIO_WriteBit(GPIOB, GPIO_Pin_4, Bit_SET);
 Soft_Delay(10000);
 GPIO_WriteBit(GPIOB, GPIO_Pin_3, Bit_RESET);
 GPIO_WriteBit(GPIOB, GPIO_Pin_4, Bit_RESET);
 Soft_Delay(10000);
}
 
Не меняются значения на выходе. Один в 1, другой 0.
Остальные ноги на этом порту дрыгаются как надо.
 
Стер чип, и все равно - B4 = в еденице. 
 
EDIT: Раскурил pdf. Разобрался. Jtag во всем виноват. Думаю, как его теперь вырубить...
EDIT2: Вырубил. Теперь камень не шьется. Блин, вспомнил, как все три атмеги, что были убил фьюзами.
EDIT3: Зажал резет на плате, потом кнопку прошить и отпустил резет - прошилось.
EDIT4: Долго экспериментировал. Вот эти две строчки все решают. И порты стали доступны и шьется нормально, без резет. А! Надо вынуть обе перемыки boot0 и boot1, иначе не работает.
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
 
P.S. Пультоскоп, хоть и на макетке - первый раз и очень клево выручил при отладке, теперь не могу без него... надо в корпус оформить.

 

denbox
Offline
Зарегистрирован: 18.09.2016

Electronik83 пишет:

Забыл отписаться, с дисплеем 320х480 - перекопал всю библиотеку - по скорости там ничего не улучшить. Написано грамотно и все написано, чтобы работало четко и быстро. Мега2560 не подходит для этих дисплеев, если в динамике с этим дисплеем работать.

И надо прерывания отключать, когда считываешь сигнал с АЦП...

Буду кнопки на прерывания садить....

Я для экрана 3.2" 480х320 заказал Arduino Due. Подключается бутербродом, скорость отрисовки вроде нормальная, тестовые скетчи гонял. Но к такому добру, вроде как надо входную часть соответствующую. Сам я не потяну, лежат AD9280, AD823, и еще куча всего из проекта GFX, жду может кто то, что нибудь придумает.

И вопрос: А реально к прикрутить энкодер вместо кнопок к версии на тфт экране?

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

Я думаю, что можно. На прерывания его...

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

а сложно добавить осциллоскоп только для цифрового сигнала (0/1)?

то есть не использовать ацп,а просто опрашивать как кнопку,удобнее смотреть сигнал сразу после синтезаторов частот(он до фнч цифровой,0 и 1),проверять прохождение по I2C и т д.вроде как и частоту можно повысить более 1 МГц(в ассемблере циклический опрос порта занимает 3 такта каждый опрос,допустим опрос PORTA,массив ekran(x)

IN R16, PINA 

 STS {ekran(0)}, R16  3такта

 IN R16, PINA 

 STS {ekran(1)}, R16 3 такта

 IN R16, PINA 

 STS {ekran(2)}, R16 3 такта

 IN R16, PINA 

..........................)

про сенсорный экран не думали?

P.S. вытравил новую плату,под L2F50126,попробую,всю схему запитаю от 3,3 в )))

kvadro8
Offline
Зарегистрирован: 17.02.2017

А что nokia 5510 больше что ли? Те же размеры, даже плата адаптера есть, только вот информации на него маловато, а так давно бы прикрутил

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

.

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

а что функциональность  Пультоскопа не развивается?  все разговоры о дисплеях. Пу льтоскоп это фактически  ИНДИКАТОР чтобы быстро локализовать и определить неисправность +  плюшки для снятия информации и различные генераторы , а мы туда огромные дисплеи пытаемся прикрутить. Я немного отвлекся на другой проект " анализатор аккумуляторов"  на дисплее от Siemens C55. отличный дисплей(101x65) с U8glib - рекомендую. закончу попробую оформить ветку.

а к Пкльтоскопу  прикрутить - бы  генератор тока 0-5мА, 4-20мА,  источник образцового напряжения, логер на SD, вывод в СОМ порт.  это много места не займет, а большинству в работе пригодится 

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

Вот хотел написать и передумал. Напишу:

Этот ili9481 тормознутый, или я просто не умею его готовить. Кароче, оставлю на потом.

Было и есть много идей по доработке на ssd1306. Тут на форуме подсказали ещё.

Придумал, как сделать, чтоб не мерять пять вольт тестером, а на 1.1 измерить че нибудь и потом выставить VCC.

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

Так что пока спать, завтра посмотрю.......

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

собрал на L2F50,атмега328,отдельно выведен RX TX reset для перепрошивки(через коннектор ),зарядное LT4054 через  USB-разъем,корпус bmd60032 http://www.k206.net/bahar/bmd%2060032%20a2.pdf

есть вопрос-есть ли команда отключения экрана?а то после отключения еще долго стоит рисунок без подсветки

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

плата https://yadi.sk/d/jiTQMZu03EPa53

подключение кнопок-

#define levo A3
#define ok A5
#define pravo A4
#define akb A0
вход ацп-А1
 if(opornoe==0){
    ADMUX = 0b11100001;//было  ADMUX = 0b11100100;
  }//выбор внутреннего опорного 1,1В
  if(opornoe==1){
    ADMUX = 0b01100001;//было  ADMUX = 0b11100100;
Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

да есть команда ее использовал  VetalST в своем скетче, погляди

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

может резетом можно экран гасить?

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

вот нашел такую табличку 

#ifndef L2F50_H_ 
#define L2F50_H_ 
 
#include "avcodec.h" 
 
#define DISP_W 132 
#define DISP_H 176 
#define CHAR_H 14 
#define CHAR_W 8 
#define TEXT_COL 16 
#define TEXT_ROW 12 
 
 
#define DATCTL 0xBC         // Data Control (data handling in RAM) 
#define DISCTL 0xCA         // Display Control 
#define GCP64 0xCB          // pulse set for 64 gray scale 
#define GCP16 0xCC          // pulse set for 16 gray scale 
#define OSSEL 0xD0          // Oscillator select 
#define GSSET 0xCD          // set for gray scales 
#define ASCSET 0xAA         // aerea scroll setting 
#define SCSTART 0xAB        // scroll start setting 
#define DISON 0xAF          // Display ON (no parameter) 
#define DISOFF 0xAE         // Display OFF (no parameter) 
#define DISINV 0xA7         // Display Invert (no parameter) 
#define DISNOR 0xA6         // Display Normal (no parameter) 
#define SLPIN  0x95         // Display Sleep (no parameter) 
#define SLPOUT 0x94         // Display out of sleep (no parameter) 
#define RAMWR 0x5C          // Display Memory write 
#define PTLIN 0xA8          // partial screen write 
 
#define SD_CSET 0x15        // column address setting 
#define SD_PSET 0x75        // page address setting 
 
void init_lcd(); 
void fill_screen_picture(AVFrame *pFrame, unsigned int width, unsigned int height); 
void fill_screen_color(unsigned short color); 
#endif /*L2F50_H_*/ 
#define DISOFF 0xAE         // Display OFF (no parameter)-это и есть команда откл дисплея?
Electronik83
Offline
Зарегистрирован: 06.12.2015

ну да. осталось только отправить её в дисплей. только не факт, что он погаснет сразу, т.к. жидкие кристаллы имеют некую статичноть.

может его проще стирать перед выключением подсветки, да и все. например: fill_screen_color(0x00);

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

снова перелистывал форум и нашел!!! https://yadi.sk/d/6rz6gT0osVGjn

lcd.PowerOff(); отключение дисплея,теперь буду дорабатывать....

а сенсорный дисплей сложно приделать?а то мне пришел такой https://ru.aliexpress.com/item/Free-Shipping-1lot-2pcs-UNO-R3-MEGA328P-For-Arduino-2-4-Inch-TFT-Touch-LCD-Screen/32246798992.html ,дисплей разбитый

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

bulat943 пишет:

снова перелистывал форум и нашел!!! https://yadi.sk/d/6rz6gT0osVGjn

lcd.PowerOff(); отключение дисплея,теперь буду дорабатывать....

Имею в своем арменале пару стоек серверных. В каждой свои монитор и свой кмв. Так исторически сложилось, что этот "гемор" решать проще стоя перед сервером. И вот мониторам лет... да первые lcd 15'', и случилсоь что их списали и дали новомодные панели 1u с клавой, kmv и экраном на борту. Сняли мы этих стариков и решили кинуть их себе камеры на входе мониторить. А то до этого один 21'' на 4 камеры, а теперь 4 15'' на 4 камеры. И тут мы поняли что нам последние 3 года мозолило... даже на чисто белой картинке выведенной на монитор красовалась надпись о том что сейчас выведен ввод kmv 1-0... тот на который по дефолту всегда скидывали сделав свое дело (мониторы ни кто ни когда не тушил) все админы. Это самые первы матрицы. Так что очень советую залить белым и потом тушить.

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

bulat943 пишет:

снова перелистывал форум и нашел!!! https://yadi.sk/d/6rz6gT0osVGjn

lcd.PowerOff(); отключение дисплея,теперь буду дорабатывать....

Имею в своем арменале пару стоек серверных. В каждой свои монитор и свой кмв. Так исторически сложилось, что этот "гемор" решать проще стоя перед сервером. И вот мониторам лет... да первые lcd 15'', и случилсоь что их списали и дали новомодные панели 1u с клавой, kmv и экраном на борту. Сняли мы этих стариков и решили кинуть их себе камеры на входе мониторить. А то до этого один 21'' на 4 камеры, а теперь 4 15'' на 4 камеры. И тут мы поняли что нам последние 3 года мозолило... даже на чисто белой картинке выведенной на монитор красовалась надпись о том что сейчас выведен ввод kmv 1-0... тот на который по дефолту всегда скидывали сделав свое дело (мониторы ни кто ни когда не тушил) все админы. Это самые первы матрицы. Так что очень советую залить белым и потом тушить.

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

эта команда заливает белым,по исходнику видно что сначала передается команда 0хАЕ откл дисплея и опускает CS,дисплей выключен,чтоб его снова включить надо инициализировать по новой

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

bulat943 пишет:

эта команда заливает белым,по исходнику видно что сначала передается команда 0хАЕ откл дисплея и опускает CS,дисплей выключен,чтоб его снова включить надо инициализировать по новой

значит 0xFF

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

прикрутил прием по UART

 if(pultoskop==2){ 
  // UART приемник
const long SpeedUART[] = { 1200,2400,4800,9600,19200,38400,57600,115200 };
menu=4;  
if(digitalRead(levo)==LOW){ menu--; if(menu==255) menu=0; }//if(flag_key-!digitalRead(key_down)) { menu--; if(menu==255) menu=7; }
if(digitalRead(pravo)==LOW) { menu++; if(menu==8)   menu=7; }// if(flag_key-!digitalRead(key_up)  ) { menu++; if(menu==8)   menu=0; }
  lcd.drawText(22, 20,"Terminal", 1, WHITE, BLACK);//ssd1306_set_inv(1); ssd1306_set_pos(22,0); ssd1306_string("   Терминал   ");
  lcd.drawText(22, 50,"  Speed ", 1, WHITE, RED);//ssd1306_set_inv(0); ssd1306_set_pos(37, 2); ssd1306_string("Скорость:");
  sprintf(str, "%d%002d   ", SpeedUART[menu]/100);
  lcd.drawText(22, 80,str,1, WHITE, BLACK);//ssd1306_string(SpeedUART[menu]);
  lcd.drawText(160,40,"OK", 1, WHITE, BLACK);// названия кнопок
  lcd.drawText(160,80," +", 1, WHITE, BLACK);//название кнопок
  lcd.drawText(160,120," -", 1, WHITE, BLACK);//то же
  delay(200); 
if(digitalRead(ok)==LOW) {
        Serial.begin(SpeedUART[menu]*(16/overclock));
        lcd.clear(BLACK);//   ssd1306_clear();
        lcd.drawText(0,3,">", 1, WHITE, RED);// //  ssd1306_set_pos(0, 0); ssd1306_char('>'); 
        delay(100);  
        time = millis();
        int x=10, y=3; 
        flag=0;
    while(1) { 
      char incomingByte;  
      time1 = millis()-time;
      if (time1==100){
                    if(flag==0){ 
                     flag=1;
                      x=10; 
                     y=y+10;
                     if(y>120) {
                        x=10;y=3;
                       lcd.clear(BLACK);  //        ssd1306_clear(); 
                       lcd.drawText(0,3,">", 1, WHITE, RED);
                               }}                          
                     }              
      if (Serial.available()){  // Если в буфере есть данные
       time = millis();flag=0;
       incomingByte=Serial.read(); // Считывание байта в переменную incomeByte
        lcd.drawChar(x,y,incomingByte, 1, WHITE, BLACK); // Печать символа в буффер дисплея
       x=x+8;
     //Serial.println(incomingByte, HEX);
     if(x>168){x=0;y=y+10;}
          if(y>120) {
          x=10;y=3;
          lcd.clear(BLACK);  //        ssd1306_clear(); 
          lcd.drawText(0,3,">", 1, WHITE, RED);
                    }
                             }         
   }
  } 
  delay(100);  
}}

теперь осцилл о котором я писал выше-лог 0 и 1...

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

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

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

Поздравляю с "распечаткой" :)

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

Здарова, мужики, только что зарегился перекурив форум с 1 по 15 страницу от А до Я. В доказательство своего серьёзного подхода к теме выкладываю фотки моего рабочего стола ))).

Подпилил пультоскоп немного под себя (вспомнив институтские уроки по С++), за основу взял PULTOSCOPE_LCD5110_final2_DDS_Z

https://drive.google.com/drive/folders/0B8Cen3bTAimVYWVOOEF5SzRHUWM?usp=...

Застрял на DDS-Генераторе. Как я понял, с изменением частоты рабочих пока никто не сделал?

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

Всем кто спаял "всё как у автора, но не запускается": после монтажа берём в руки с пирт и щётку и начисто вычищаем плату со обеих сторон. Фотки выложил для примера, ибо чистота понятие растяжимое, но там где гуляют мегагерцы должно быть очень чисто.

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

вторая половинка готова, осталось плату развести)

Jtest
Offline
Зарегистрирован: 02.06.2015

Xumuk, 3d принтер покупной или самодельный?

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

 особенно рекомендую свою анимацию PWM:

 

frmnog = 0;
  display.drawLine(frmnog + 0, 0, frmnog + 13 * PWM / 256.0, 0, BLACK);                               // PWM анимация 1 пульс
  display.drawLine(frmnog + 0, 14, frmnog + 13, 14, BLACK);
  display.drawLine(frmnog + 0, 14, frmnog + 13 * PWM / 256.0, 14, WHITE);
  display.drawLine(frmnog + 13 * PWM / 256.0, 0, frmnog + 13* PWM / 256.0, 14, BLACK);
 
  frmnog = 14;
  if (PWM > 0) {
  display.drawLine(frmnog -1 , 0, frmnog -1, 14, BLACK);                                              // PWM анимация 1 подъём
  }
  display.drawLine(frmnog + 0, 0, frmnog + 13 * PWM / 256.0, 0, BLACK);                               // PWM анимация 2 пульс
  display.drawLine(frmnog + 0, 14, frmnog + 13, 14, BLACK);
  display.drawLine(frmnog + 0, 14, frmnog + 13 * PWM / 256.0, 14, WHITE);
  display.drawLine(frmnog + 13 * PWM / 256.0, 0, frmnog + 13* PWM / 256.0, 14, BLACK);
 
  frmnog = 28;
  if (PWM > 0) {
  display.drawLine(frmnog -1 , 0, frmnog -1, 14, BLACK);                                              // PWM анимация 2 подъём
  }
  display.drawLine(frmnog + 0, 0, frmnog + 13 * PWM / 256.0, 0, BLACK);                               // PWM анимация 3 пульс
  display.drawLine(frmnog + 0, 14, frmnog + 13, 14, BLACK);
  display.drawLine(frmnog + 0, 14, frmnog + 13 * PWM / 256.0, 14, WHITE);
  display.drawLine(frmnog + 13 * PWM / 256.0, 0, frmnog + 13* PWM / 256.0, 14, BLACK);

  if (PWM == 0) {
  display.drawLine(1, 0, 28, 0, WHITE);                                                               // PWM анимация 0%
  frmnog = 14;
  display.drawLine(frmnog + 13 * PWM / 256.0, 0, frmnog + 13* PWM / 256.0, 14, WHITE);
  frmnog = 28;
  display.drawLine(frmnog + 13 * PWM / 256.0, 0, frmnog + 13* PWM / 256.0, 14, WHITE);
  display.drawLine(1, 14, 28, 14, BLACK);  
  }

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

Jtest пишет:

Xumuk, 3d принтер покупной или самодельный?

купил А8=)) вот недавно, теперь осваиваю)))

man_200
Offline
Зарегистрирован: 29.04.2016

 

 "особенно рекомендую свою анимацию PWM"

Подобную анимацию просил сделать Dimax-а из соседней ветки "Генератор с регулируемой частотой на ардуино". Чтобы можно было видеть форму сигнала. Он посчитал это ненужным. А жаль.

Состыковаться бы вам

Buba94
Offline
Зарегистрирован: 24.02.2017

Вот что вышло 

вкл/выкл от родной кнопки на тини13 мало места занимает, управление клавой, зарядка и вход на родных гнездах

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

Вставляйте в каждый void / loop эту строчку, и делаёте перезагрузку программно, а не обесточиванием МК:

if (digitalRead(pravo) == HIGH && digitalRead(levo) == HIGH) {Reset_AVR();}  // soft reset

   

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

Привет, Electronik83,..

запустил твой код (не считаю переход на "ты" на сайте по интересам признаком безкультурности, не обессудь) из PULTOSCOPE_LCD5110_final2_DDS_Z_EL83_09022017.rar

Так и не смог ни одного DDS сигнала увидеть. Смотрел напрямую, с фильтом R, RC, RCL - какие-то непонятные фигуры. Ты её для ATMega328 писал? Я её тестил на 16Mhz.

У bodriy2014 пока самая рабочая комбинация определения массива "byte sinM[32] = {1, 6,..." и вызова функции. Причём если в цикл с функцией накинуть что-либо типа выбора часторы, - это равносильно delay, которые убивают шустрость генератора.

Из этого вывод: сначала в меню буду задавать частоту, потом включать DDS-сигнал.

По поводу фильтров: лоу пасс самое то!

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

Buba94 , ЭТО ШЕДЕВР ! именно так он и должен выглядеть! можно надписи на кнопках под стиль телевизионного пульта переписать .

bodriy2014, мы пультоскопу памятник скоро поставим. Самое лучшее что я когда-либо собирал! хотя работаю периодически с осцилографами, но идея спаять свой вообше не приходила.

VetalST
Offline
Зарегистрирован: 29.12.2015
А что не получается с  библиотекой L2F50 https://yadi.sk/d/6rz6gT0osVGjn
 
Команда для отключения экрана прописанна в самой библиотеке и вызывается в любом месте скетча где вам нужно отключить экран.
lcd.PowerOff(); // выключаем дисплей командой выключения, чтобы продлить срок его службы

После погашения экрана (ост вкл подсветка) можно выкл питание.

Вот все что есть у меня на яндекс диске по пультоскопу https://yadi.sk/d/i0E2q74_pyDrw папка Осцилло́граф AD9280 это уже с этой темы http://arduino.ru/forum/proekty/virtos-samyi-prostoi-dvukhluchevoi-ostsillograf-ostsillograf-na-arduino.
 
S65Display_LCD_L2F50_PowerOff_ard_1_6_11  библиотека под L2F50, S65Display_LCD_ls020_PowerOff_ard_1_6_11 библиотека под ls020 это последнии библиотеки работают с ардуино ID от 1.6.11 версии. Сейчас у меня стоит ID 1.6.13 все работает.
 
Я уже не помню что конкретно менял в скетчах и что добавлял, смотрите по дате какой архив самый последний. На названия PULTOSCOPE_LCD_ls020_и_т.д или PULTOSCOPE_LCD_L2F50_и_т.д не обращайте внимания, команды в библиотеках я делал одинаковые для обеих экранов что бы можно было менять экраны не изменяя скет. Разница только в инициалезации экрана в самой библиотеке, а команды в скетче все одинаковые для обеих экранов. 
 
Electronik83
Offline
Зарегистрирован: 06.12.2015

Winstonn пишет:

Привет, Electronik83,..

И тебе привет!

Winstonn пишет:

Запустил твой код из PULTOSCOPE_LCD5110_final2_DDS_Z_EL83_09022017.rar

Ты её для ATMega328 писал? Так и не смог ни одного DDS сигнала увидеть.

Вот честно - сигнал с DDS генератора сам не проверял, фильтры не ставил. Видел только какую то невнятку на древнем осциллографе с выхода ШИМ. Я "писал" для Атмегушки328, но я не писал, а просто переписывал с жесткой оптимизацией и переделыванием в код "как я хочу его видеть". Вэйвы отправил во флэш. Может поэтому и не работает ничего. Могу поправить по просьбам радиослушателей:)

Winstonn пишет:

Из этого вывод: сначала в меню буду задавать частоту, потом включать DDS-сигнал.

А вот тут интересно уже. У автора частота сигнала с DDS генератора жестко задана вроде как и её не поменять. Ну или как доработка?

P.S. Неспешно переписываю проект на tft 320x480 @ stm32. Времени, жалко, нету заниматься.

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

Winstonn пишет:

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

bodriy2014, мы пультоскопу памятник скоро поставим. Самое лучшее что я когда-либо собирал! хотя работаю периодически с осцилографами, но идея спаять свой вообше не приходила.

В Китае резко упали продажи осциллографов. Они уже знают причину. Большая часть ардуинщиков стали сами изготавливать осцилографы с кодовым названием "пультоскоп", и перестали покупать готовые приборы. Ебей и Али-экспресс обсуждают введение санкций против bodriy_го.

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

VetalST пишет:

А что не получается с  библиотекой L2F50 https://yadi.sk/d/6rz6gT0osVGjn
 
Команда для отключения экрана прописанна в самой библиотеке и вызывается в любом месте скетча где вам нужно отключить экран.
lcd.PowerOff(); // выключаем дисплей командой выключения, чтобы продлить срок его службы

После погашения экрана (ост вкл подсветка) можно выкл питание.

Вот все что есть у меня на яндекс диске по пультоскопу https://yadi.sk/d/i0E2q74_pyDrw папка Осцилло́граф AD9280 это уже с этой темы http://arduino.ru/forum/proekty/virtos-samyi-prostoi-dvukhluchevoi-ostsillograf-ostsillograf-na-arduino.
 
S65Display_LCD_L2F50_PowerOff_ard_1_6_11  библиотека под L2F50, S65Display_LCD_ls020_PowerOff_ard_1_6_11 библиотека под ls020 это последнии библиотеки работают с ардуино ID от 1.6.11 версии. Сейчас у меня стоит ID 1.6.13 все работает.
 
Я уже не помню что конкретно менял в скетчах и что добавлял, смотрите по дате какой архив самый последний. На названия PULTOSCOPE_LCD_ls020_и_т.д или PULTOSCOPE_LCD_L2F50_и_т.д не обращайте внимания, команды в библиотеках я делал одинаковые для обеих экранов что бы можно было менять экраны не изменяя скет. Разница только в инициалезации экрана в самой библиотеке, а команды в скетче все одинаковые для обеих экранов. 
 


Добрый день, а данная библиотека уже под 8бит переделана или нет?

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

Electronik83 пишет:

У автора частота сигнала с DDS генератора жестко задана вроде как и её не поменять. Ну или как доработка?

Принцип работы DDS у автора - loop с перебором чисел из массива +закоментированный delayMicroseconds. Без delay генератор работает на максимальной частоте МК, включая delay можно понизить частоту до 0 Hz. Сейчас подбираю формулу зависимости значения delay от частоты, Проблема в нелинейности этой зависимости.

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

Winstonn пишет:

Electronik83 пишет:

У автора частота сигнала с DDS генератора жестко задана вроде как и её не поменять. Ну или как доработка?

Принцип работы DDS у автора - loop с перебором чисел из массива +закоментированный delayMicroseconds. Без delay генератор работает на максимальной частоте МК, включая delay можно понизить частоту до 0 Hz. Сейчас подбираю формулу зависимости значения delay от частоты, Проблема в нелинейности этой зависимости.

F = 1 / t
Где F - частота в гц
t - время в секундах

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

Electronik83 пишет:

F = 1 / t
Где F - частота в гц
t - время в секундах

в этом то и комичность ситуации, что не получается так.))) Может где-то запарился и ошибся,.. вечером опять сяду за дело. Сам понимаю, должно именно по этой формуле всё работать. Но, если бы было всё так просто, автор бы эту функцию ещё в первом релизе встроил (как например с PWM). Сделаем!

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

Готово! DSS с погрешностью в 2,5% частота 600 - 0,00..001 Hz . на кварце 16Mhz. Что будет на 24Mhz завтра протестирую.

вот она зависимость :

  

    double frequencyX;                         //определение переменной часторы DDS
    double t;                                  //определение переменной периода DDS
    t = 32 * (fr * pow(10, -6) + (1.0 / 19200)) / (overclock / 16.0);      // fr - переменная из строчки delayMicroseconds(fr);
    frequencyX = 1 / t;

19200 = 600 (максимальная частота на кварце 16Мгц полной функции из массива ) * 32 (количество точек функции массива ).

осталось дотестить, оформить и в корпус запиливать прибор.))