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

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Для любителей сомдельных осциллографов.

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

Выкладываю привью будущего приборчика,

на фото все будущие возможности видно, так что пока не допишу код больше ничего не расскажу!))

P. S. Внимательный глаз все заметит.

 

 

karl2233
Offline
Зарегистрирован: 05.07.2015

афигетьневстать! 

он двухканальный уже?!? о_О

а на каких дисплеях работать будет?

з.ы. блин, когда ж мои АЦП и ОУ из Китая придут?!?!?

 

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

Для любителей сомдельных осциллографов.

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

Выкладываю привью будущего приборчика,

на фото все будущие возможности видно, так что пока не допишу код больше ничего не расскажу!))

P. S. Внимательный глаз все заметит.

Так, значит пора заказывать дисплей. Ардуин я заказал всего две. Учитывая, что я разглядел еще и ваш тестер аккумуляторов - этого мало. АЦП у меня один всего.

Это только первые вопросы на вскидку. Но выкручивать руки Автору и канючить не буду.

Единственная просьба, неплохо бы определиться с основным комплектом как можно раньше (но не любой ценой, тут дни не критичны, достоверность важнее). До меня посылки редко идут меньше 3 месяцев. И скорее всего я такой не один. Понятно, что будут какие-то разночтения во вспомогательных элементах, но основное хорошо бы заказать сразу.

Выглядит уже заманчиво. Желаю Автору успеха и вдохновения.

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

bodriy2014, привет! Дисплей 5110 уже не будет поддерживаться?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Jtest пишет:

bodriy2014, привет! Дисплей 5110 уже не будет поддерживаться?

Привет!

А что там поддерживать? довел тот прибор до ума, кому подходит пусть пользуются.

Это будет совершенно новый прибор, я даже код пишу с чистого листа. И дисплей 5110 для него никак не подходит.

karl2233
Offline
Зарегистрирован: 05.07.2015

bodriy2014, а OLED дисплейчик будет поддержан?

Лекс 59 пишет:
  Учитывая, что я разглядел еще и ваш тестер аккумуляторов - этого мало. АЦП у меня один всего.

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

Если б удалось довести количество ячеек до 2-4, 
да добавить функцию заряда не только LiIo но и NiMH - 
была бы бомба.

Но это здоровенный кусок работы, в сети таких приборов нет.
Видимо задача средствами Ардуино не решаемая :(

Про один АЦП - как понимаю, каналы будут идентичные, так что на плате можно место предусмотреть и потом, настроив один канал, ждать помощи китайцев =)

 

Русл@н
Offline
Зарегистрирован: 14.04.2016

Здравствуйте, можете подсказать как прикрутить к проекту дисплей от нокиа 1202?

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

karl2233 пишет:

bodriy2014, а OLED дисплейчик будет поддержан?

Лекс 59 пишет:
  Учитывая, что я разглядел еще и ваш тестер аккумуляторов - этого мало. АЦП у меня один всего.

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

Если б удалось довести количество ячеек до 2-4, 
да добавить функцию заряда не только LiIo но и NiMH - 
была бы бомба.

Но это здоровенный кусок работы, в сети таких приборов нет.
Видимо задача средствами Ардуино не решаемая :(

Про один АЦП - как понимаю, каналы будут идентичные, так что на плате можно место предусмотреть и потом, настроив один канал, ждать помощи китайцев =)

 

Подождем информации от Автора. У него сейчас период раздумий, выбора, решений. Наверное разрывается между тем и тем. Возможно один канал будет по Пультоскопу, но не факт, код разный тогда нужен. Посмотрим.

Думаю, что памяти 328 хватило бы для построения такого прибора. 
Меня устроил бы и одноканальный.  Но там надо реализовать еще и амперметр.
 Хотя можно сделать переключаемый стабилизатор тока с внешним управлением, 
не от МК.  
Но главное условие решения задач такого рода - наличие энтузиаста, 
кто готов взяться и довести до ума. Это немалый труд.

 

karl2233
Offline
Зарегистрирован: 05.07.2015

так автор и написал  -"код пишу с чистого листа"

а на второй канал какбэ намекает картинка =)

одноканальных ЗУ в сети чуть больше чем дофига.

 

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Как раз валяется такой дисплейчик,пытался запустить его-но там нужно питание схемы 3,3 вольта,чтоб экран завелся.

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

bodriy2014 пишет:

Привет!

А что там поддерживать? довел тот прибор до ума, кому подходит пусть пользуются.

Это будет совершенно новый прибор, я даже код пишу с чистого листа. И дисплей 5110 для него никак не подходит.

Да уж....Нокиа 84х48 или этот 320х240 плюс цвет! bodriy, дерзай! Буду ждать твою новую разработку!

Только вот.....уже собрался повторить, а тут бах, и новая модель..Естественно хочется повторить самое свежее. Теперь опять придется ждать :)

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

karl2233 пишет:

так автор и написал  -"код пишу с чистого листа"

а на второй канал какбэ намекает картинка =)

одноканальных ЗУ в сети чуть больше чем дофига.

 

Картинку можно по разному трактовать. Подождем инфы от Автора.

Дофига? 
Мне нужен с произвольным порогом заряда, произвольным разряда 
по напруге от 1,00 до 14,6 вольт.
Регулируемым, либо ступенчатым током. От 20 ма до 0,7А
Измерением емкости при разряде.
Даже аймакс б 6 этого не умеет.
Желательно на Меге8 - 328, дисплее 3310, либо 12*2

Буду благодарен, если ткнете носом.

Авторский измеритель, о котором я писал, решает проблему только для одного типа акков.
Но это лучше, чем ничего.

 

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

fly245 пишет:

Как раз валяется такой дисплейчик,пытался запустить его-но там нужно питание схемы 3,3 вольта,чтоб экран завелся.

В чем проблема? Я тоже заказал 3В. Логика все равно на 5 работает отлично, а питание... так стабилитрон на 3 вольта и в путь! А ценник разнится. Для 3В что-то в районе 150 рублей, а такое жу 5В - 250 почти. EML стоит существенно дешевле.

T.Rook
Offline
Зарегистрирован: 05.03.2016

Гляньте, вдруг пригодится в качестве делителя? I2C 2 channels digital volume controller IC PT2257

 
karl2233
Offline
Зарегистрирован: 05.07.2015

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

Лекс 59, идёмте в тему про зарядник. Тут чего разводить флуд?
и сворачивайте то, что пишете в коде.

 

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

bodriy2014 пишет:

Для любителей сомдельных осциллографов.

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

Выкладываю привью будущего приборчика,

на фото все будущие возможности видно, так что пока не допишу код больше ничего не расскажу!))

P. S. Внимательный глаз все заметит.

 

 

 

красотища! у меня уже едет такой дисплейчик, жду с нетерпением продолжения) 2 канала это сильно) а это снизу энкодер?)на нем управление делаете?

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Пришла в голову идея. Если наш осциллограф автономное устройство, то можно этим воспользоватся.

1. Выбросить нафиг двуполярное питане.

2. Смещать не сигнал, а "землю".

3. Пробросить опорное напряжение от АЦП9280 на Arduino.

Итого:

+ Минус одна микросхема и геморой с двуполярным питанием.

+ Земля всегда имеет 1/2 опорного напряжения и не нуждается в калибровке.

+ Опорное напряжение общее для АЦП9280 и Arduino

+ Возможность доделать второй канал без дополнительного входного тракта.

- Синтетическая общая земля может давать наводки взаимопроникновение сигналов.

- Запрещается объединять землю по питанию с измеряемой схемой. Простыми словами: "питание только от батарейки, или гальваничесски развязаного блока питания"

karl2233
Offline
Зарегистрирован: 05.07.2015

Okmor,

как по мне, одна микруха не такая уж и большая проблема...

а вот минусы удручают :(

но, как идея - весьма недурственно :)

в конце концов, можно поставить две батарейки =)

з.ы. почитал про двухполярное и вход АЦП.

При наших ОУ(как понимаю, все заказали rall-to-rall) и диодиках на ввыходе второго ОУ, проблем с минусом на входе АЦП быть не должно.

 

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

karl2233 пишет:

как понимаю, все заказали rall-to-rall

Все. Как "папка" носом ткнул, так все и скупили )

karl2233
Offline
Зарегистрирован: 05.07.2015

ыыыыыыы

sirota, загнал под стол ))))))))

хотя операционник нужен, так что поступили верно - Пультоскоп будет не просто показометром.

 

Mining
Offline
Зарегистрирован: 31.01.2016

bodriy2014 пишет:

Для любителей сомдельных осциллографов.

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

Выкладываю привью будущего приборчика,

на фото все будущие возможности видно, так что пока не допишу код больше ничего не расскажу!))

P. S. Внимательный глаз все заметит.

Доброго времени суток! Коли новый проект, то уж кнопки заменить энкодером )))

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Okmor пишет:

Пришла в голову идея. Если наш осциллограф автономное устройство, то можно этим воспользоватся.

1. Выбросить нафиг двуполярное питане.

2. Смещать не сигнал, а "землю".

3. Пробросить опорное напряжение от АЦП9280 на Arduino.

Порылся в докментации. АЦП9280 может выдать 1мА опорного. Atmega328 при 2В опорного, AREF потребляет 0,060мА, операционный усилитель 0,12 мА. Вроде 2В встроенного должно хватить.

Также прогнал через ГУГЛТРАНСЕЙТ документацию к АЦП 9280  https://yadi.sk/i/fGUaSRJYrGqba

АЦП запустился по схеме предложенной karl2233, как оказалось, причиной глюков был элементарный непропай. Все пришлось посадить на порт PIND и отказатся от RX, TX отрладки по COM порту. Также заметил некоторый дефицит входов/выходов. Цыфровые входы заняти АЦП и LCD, еще энкодер и кнопка энкодера, А0 оставил для второго канала. Вроде хватает.

Все не решен вопрос тактирования АЦП. 

 

karl2233
Offline
Зарегистрирован: 05.07.2015

Okmor, разве энкодером удобно управлять? Думаю что кнопки наше фсё - они явно долговечнее, не такие капризные как энкодер.

Получается что входная часть у нас есть? Или ещё эксперементируешь с опорным и питанием? Мож ну его, эти эксперименты? Двухполярное и дело в шляпе =)

з.ы. даташит АЦП - отдельное спасибо!

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Ход исследований.

1. Способ захвата канала для АЦП Ардуинки (вход А0) пришлось переработать.

Заметил небольшое ухудшение захвата канала АЦП Ардуины. Это связанно с рассинхронизацией таймера АЦП и таймера захвата. 

2. Энкодером управлять значительно удобнее. Для подключения энкодера пришлось использовать прерывание иначе дикие тормоза и ложные срабатывания.

3. ЧорноБелый экранчик показал себя значительно лучше. Частота отображения где то 40 - 50 кадров на секунду. Но библиотеку пришлось допилить для работы через апаратный SPI. Еще одно преимущество жидкокристалического экрана, это наличие эффекта шлейфа как в ЭЛТ.

4. Для обработки сигнала использую только целые числа и в основном тип byte, что позволило достичь высокого быстродействия. Вобще задумка такая: внутри использовать только данные АЦП без масштабирования и приведения к реальным значениям. Всяки вольты и другую дребедень, отображаемую на экране, преобразовывать только в момент вывода.

5. Следующим шагом будет добавление внешнего АЦП.

//Запуск АЦП
setup
{
 ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (0 << ADIF) | (1 << ADIE) | (0 << ADPS2) | (1 << ADPS1) | (0 << ADPS0);
 ADMUX = (1 << REFS1) | (1 << REFS0) | (1 << ADLAR)  | (0 << MUX3) | (0 << MUX2)  | (0 << MUX1)  | (0 << MUX0) ;   // Включить циклическое прерывание
}

ISR(ADC_vect) {  AI0 = ADCH;} 

//Запуск таймера
setup
{
 TCCR1A=0;
 OCR1A=1000;
 TCCR1B=0b00001001;
 TIMSK1=0b00000010;
}

loop {
    if (TIMSK1==0b00000000)  // ждем пока таймер насобирает 255 замеров
           { 
            // обрабатываем
             N = 0;
             TIMSK1=0b00000010;  // Включаем таймер
         }
}

//Таймер
ISR(TIMER1_COMPA_vect)//обработчик прерывания по совпадению А
{    
    OCR1A=MeasureDelay; //  MeasureDelay  - задержка в тактах таймера
    MyBuff_AI0[N++] = AI0; // ADCH напрямую использовать нельзя, иначе будет блокировка
                                               // и мы не сможем превысить скорость АЦП ардуины
    if (N==0) {TIMSK1=0b00000000;} // Останавливаем таймер по заполнению
}

 

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

Че-то тема затихла=)))) bodriy2014 как там продвигается дело с новым пультоскопом? не терпится уже=)

HAWES
HAWES аватар
Offline
Зарегистрирован: 05.04.2016

Планируется ли добавить в пункт меню выбор делителя для частотомера? Прикупил по случаю микру-прескалер на 64/256 SAB6456.

В ARDUINO IDE полный 0 , сам поправить исходники  не справлюсь.

http://ru.aliexpress.com/item/1PC-SAB6456A-SAB6456-DIP-8-5pcs-lot/32378377752.html

bogdan68
Offline
Зарегистрирован: 23.04.2016

Ребята кто подскажет куда копать.Пришел экран мне 2.4 TFT 240х320,не мог никак его запустить,кучу библиотек перепробовал.Затем у же в скетче выставил нахально чип 9341 и экран заработал.Но изображение поделено на 2,тоесть два одинаковых изображения.В ардуино только вникаю,может кто подскажет куда копать?

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

bogdan68 пишет:

Ребята кто подскажет куда копать.Пришел экран мне 2.4 TFT 240х320,не мог никак его запустить,кучу библиотек перепробовал.Затем у же в скетче выставил нахально чип 9341 и экран заработал.Но изображение поделено на 2,тоесть два одинаковых изображения.В ардуино только вникаю,может кто подскажет куда копать?

Посмотри здесь http://arduino.ru/forum/apparatnye-voprosy/qvga-tft-display-320x240-ili9340-ili9341#comment-174249

Может поможет...

Igor_kip
Offline
Зарегистрирован: 03.01.2016

Добрый день.
Мучаю пультоскоп 27МГц с TFT дисплеем на 2560 ардуинке, цепляю дисплей 3,2". По частоте ещё не гонял, но зрительно работает довольно шустро.
Подскажите, как раздвинуть осцилограмму по вертикали, у самого опыта мало.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Igor_kip пишет:
Добрый день. Мучаю пультоскоп 27МГц с TFT дисплеем на 2560 ардуинке, цепляю дисплей 3,2". По частоте ещё не гонял, но зрительно работает довольно шустро. Подскажите, как раздвинуть осцилограмму по вертикали, у самого опыта мало.

Эти строки отвечяют за отрисовку графикаю

      tft.drawLine(x,190-mass[y]/2, x+1,190-mass[y+1]/2, GREEN);//график
      tft.drawLine(x+1,190-mass[y]/2+1, x+2,190-mass[y+1]/2+1, GREEN);//график
      tft.drawLine(x+2,190-mass[y]/2+2, x+3,190-mass[y+1]/2+2, GREEN);
      tft.drawLine(x+3,190-mass[y]/2+3, x+4,190-mass[y+1]/2+3, GREEN);

Уберите /2, а если будет мало добавьте *2.

Igor_kip
Offline
Зарегистрирован: 03.01.2016

Спасибо, приеду с дачи, займусь

Igor_kip
Offline
Зарегистрирован: 03.01.2016

Добрый вечер.  Продолжение Пультоскоп TFT 3.2" + 2560 ардуинка пока без разгона. Немного запутался со стиранием графика , я только учусь . Если можно , поправьте пожалуйста , если там не много мороки , только те строки где вопросительные знаки.

Спасибо.

100гц

около18000Кгц

 

[code]
#include <TFT_HX8357.h> // Hardware-specific library
TFT_HX8357 tft = TFT_HX8357();

#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

//пользовательские настройки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define levo 12
#define ok 11
#define pravo 10
#define vertikal 1   //размер вертикальной сеткаи(если "0" отключениа)
//пользовательские настройки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
byte mass[501];//массив АЦП
byte massDEL[501];
byte menu=1;//переменная верхнего меню
byte razv=0;//значение развертки
float x=50;//счетчик оси Х
int Vmax=0;// максимальное напряжение 
float Vakb=0;//напряженеиЕКБ
unsigned long t=0;//переменная для ращета развертки
unsigned long pause=0;//переменная для замены Delay
int t_del=0; //значение цены деления развертки в микросекундах
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
bool clen_p=0;//флаг чистки паузы
void setup(){  
    Vakb=analogRead(A6)*4.33/1024;//проверка напряжения на АКБ
    if(opornoe==0){ADMUX = 0b11100101;}//выбор внутреннего опорного 1,1В
    if(opornoe==1){ADMUX = 0b01100101;}//Выбор внешнего опорного

    tft.begin();
    delay(50);
    tft.fillScreen(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){
      t=micros(); 
      for(int i=0;i<500;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          delayMicroseconds(100);
          mass[i]=ADCH;
      }
      t= micros()-t;
      t_del=t*25/501;
  }
  if (razv>0){
      t=micros();
      for(int i=0;i<500;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
      t= micros()-t;
      t_del=t*25/501;
  }
  
}
void MenuT(){//перерисовка нижнего меню    
    tft.setRotation(0);  
    tft.fillRect(0, 20, 20,320, BLACK);//стирание поля меню низ???????????????????????
   
    tft.setRotation(1);
    tft.setCursor(30,300);
    tft.print("t=");
    if(razv<7){tft.print(t_del);}
    if(razv==7){tft.print(t_del/2);}
    if(razv==8){tft.print(t_del/3);}
    if(razv==9){tft.print(t_del/4);}
    if(razv==10){tft.print(t_del/5);}
    tft.print("us  ");
    tft.print("Vmax=");
    if(opornoe==0){tft.print(Vmax*1.1/255);}
    if(opornoe==1){tft.print(Vmax*5.3/255);}
    tft.print(" ");
    tft.print("B");
    tft.print(Vakb);  
}

void loop() { 
Zamer();  
//отрисовка и перебор меню###############################
if(menu==0){
  tft.setRotation(1);
  tft.setTextColor(RED);
  tft.setTextSize(2); 
  tft.fillRect(0, 0, 85, 25, CYAN);
  tft.setCursor(30,15);
  if(opornoe==0){tft.print("op-1.1V ");}
  if(opornoe==1){tft.print("op-5.3V ");}
  if(digitalRead(pravo)==HIGH){
    tft.setRotation(0); 
    tft.fillRect(65, 0, 120, 50, BLACK);//стирание напряжения???????????????????????????
    tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика????????????????????????
    opornoe=!opornoe;}
  if(digitalRead(levo)==HIGH){
    tft.setRotation(0);  
    tft.setRotation(0); 
     tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика??????????????????????? 
    tft.fillRect(65, 0, 120, 50, BLACK);//стирание напряжения???????????????????????????
    opornoe=!opornoe;}
  tft.setRotation(1);  
  tft.print("Razv*");
  tft.print(razv);
  tft.print("   PauseOFF");
}
if(menu==1){
  tft.setRotation(1);
  tft.setTextColor(RED);
  tft.setTextSize(2); 
  tft.fillRect(90, 0,120, 25, CYAN);
  tft.setCursor(30,15);
  if(opornoe==0){tft.print("op-1.1V ");}
  if(opornoe==1){tft.print("op-5.3V ");}
  if(digitalRead(pravo)==HIGH){//доработать скорость
  tft.setRotation(0); 
  tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика??????????????????????????
  razv++;
  if(razv==11){razv=10;} 
  }
  if(digitalRead(levo)==HIGH){//доработать скорость
  tft.setRotation(0); 
  tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика??????????????????????????
  razv--;
  if(razv==255){razv=0;} 
  }
  tft.setRotation(1); 
  tft.print("Razv*");
  tft.print(razv);
  tft.print("   PauseOFF");
}
if(menu==2){//пауза
  paus=1;
  if(clen_p==0){
  clen_p=1;  
  tft.setRotation(1);
  tft.setTextColor(RED);
  tft.setTextSize(2); 
  tft.fillRect(210, 0,100, 25, CYAN);
  tft.setCursor(30,15);
  if(opornoe==0){tft.print("op-1.1V ");}
  if(opornoe==1){tft.print("op-5.3V ");}
  tft.print("Razv*");
  tft.print(razv);
  if(paus==0){tft.print("   PauseOFF");}
  if(paus==1){tft.print("   PauseON");}
}
}
if(digitalRead(ok)==HIGH){
  menu++;
  tft.setRotation(0); 
  tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика??????????????????????????  
  if(menu==3){menu=0;paus=0;clen_p=0;}
  tft.setRotation(1); 
  tft.fillRect(0, 0,320, 25, BLACK);    
}
//отрисовка и перебор меню###############################
//Выбор опорного#########################################  
if(opornoe==0){ADMUX = 0b11100101;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100101;}//Выбор внешнего опорного
delay(5);
//Выбор опорного#########################################  
tft.setRotation(0); 
//ось напряжения##########################################
tft.drawFastHLine(50,52,215,BLUE);tft.drawFastHLine(50,51,215,BLUE);tft.drawFastHLine(50,50,215,BLUE);
tft.drawFastVLine(50,50,10, BLUE);tft.drawFastVLine(93,50,10, BLUE);tft.drawFastVLine(136,50,10, BLUE);
tft.drawFastVLine(179,50,10, BLUE);tft.drawFastVLine(222,50,10, BLUE);tft.drawFastVLine(265,50,10, BLUE);
//ось времени#############################################
tft.drawFastVLine(50,52,422, RED);tft.drawFastVLine(49,52,422, RED);tft.drawFastVLine(48,52,422, RED);
tft.drawFastHLine(48,53,10,RED);tft.drawFastHLine(48,95,10,RED);tft.drawFastHLine(48,137,10,RED);tft.drawFastHLine(48,179,10,RED);
tft.drawFastHLine(48,221,10,RED);tft.drawFastHLine(48,263,10,RED);tft.drawFastHLine(48,305,10,RED);tft.drawFastHLine(48,347,10,RED);
tft.drawFastHLine(48,389,10,RED);tft.drawFastHLine(48,431,10,RED);tft.drawFastHLine(48,473,10,RED);
//ось времени#############################################
//сетка вертикальная #####################################
tft.drawFastHLine(86,473,3*vertikal,WHITE);tft.drawFastHLine(129,473,3*vertikal,WHITE);tft.drawFastHLine(172,473,3*vertikal,WHITE);tft.drawFastHLine(215,473,3*vertikal,WHITE);tft.drawFastHLine(258,473,3*vertikal,WHITE);
tft.drawFastHLine(86,431,3*vertikal,WHITE);tft.drawFastHLine(129,431,3*vertikal,WHITE);tft.drawFastHLine(172,431,3*vertikal,WHITE);tft.drawFastHLine(215,431,3*vertikal,WHITE);tft.drawFastHLine(258,431,3*vertikal,WHITE);
tft.drawFastHLine(86,389,3*vertikal,WHITE);tft.drawFastHLine(129,389,3*vertikal,WHITE);tft.drawFastHLine(172,389,3*vertikal,WHITE);tft.drawFastHLine(215,389,3*vertikal,WHITE);tft.drawFastHLine(258,389,3*vertikal,WHITE);
tft.drawFastHLine(86,347,3*vertikal,WHITE);tft.drawFastHLine(129,347,3*vertikal,WHITE);tft.drawFastHLine(172,347,3*vertikal,WHITE);tft.drawFastHLine(215,347,3*vertikal,WHITE);tft.drawFastHLine(258,347,3*vertikal,WHITE);
tft.drawFastHLine(86,305,3*vertikal,WHITE);tft.drawFastHLine(129,305,3*vertikal,WHITE);tft.drawFastHLine(172,305,3*vertikal,WHITE);tft.drawFastHLine(215,305,3*vertikal,WHITE);tft.drawFastHLine(258,305,3*vertikal,WHITE);
tft.drawFastHLine(86,263,3*vertikal,WHITE);tft.drawFastHLine(129,263,3*vertikal,WHITE);tft.drawFastHLine(172,263,3*vertikal,WHITE);tft.drawFastHLine(215,263,3*vertikal,WHITE);tft.drawFastHLine(258,263,3*vertikal,WHITE);
tft.drawFastHLine(86,221,3*vertikal,WHITE);tft.drawFastHLine(129,221,3*vertikal,WHITE);tft.drawFastHLine(172,221,3*vertikal,WHITE);tft.drawFastHLine(215,221,3*vertikal,WHITE);tft.drawFastHLine(258,221,3*vertikal,WHITE);
tft.drawFastHLine(86,179,3*vertikal,WHITE);tft.drawFastHLine(129,179,3*vertikal,WHITE);tft.drawFastHLine(172,179,3*vertikal,WHITE);tft.drawFastHLine(215,179,3*vertikal,WHITE);tft.drawFastHLine(258,179,3*vertikal,WHITE);
tft.drawFastHLine(86,137,3*vertikal,WHITE);tft.drawFastHLine(129,137,3*vertikal,WHITE);tft.drawFastHLine(172,137,3*vertikal,WHITE);tft.drawFastHLine(215,137,3*vertikal,WHITE);tft.drawFastHLine(258,137,3*vertikal,WHITE);
tft.drawFastHLine(86,95,3*vertikal,WHITE);tft.drawFastHLine(129,95,3*vertikal,WHITE);tft.drawFastHLine(172,95,3*vertikal,WHITE);tft.drawFastHLine(215,95,3*vertikal,WHITE);tft.drawFastHLine(258,95,3*vertikal,WHITE);
//сетка вертикальная #####################################
tft.setRotation(1);  
tft.setTextColor(RED);
tft.setTextSize(2);
//шкала напряжения########################################
if(opornoe==0){
    tft.setCursor(30, 260);tft.println("0"); 
    tft.setCursor(0, 218);tft.println("0.22"); 
    tft.setCursor(0, 176);tft.println("0.44"); 
    tft.setCursor(0,134);tft.println("0.66"); 
    tft.setCursor(0, 92);tft.println("0.88"); 
    tft.setCursor(0, 50);tft.println("1.1V");   
}
if(opornoe==1){
    tft.setCursor(30, 260);tft.println("0"); 
    tft.setCursor(0, 218);tft.println("1.00"); 
    tft.setCursor(0, 176);tft.println("2.00"); 
    tft.setCursor(0,134);tft.println("3.00"); 
    tft.setCursor(0, 92);tft.println("4.00"); 
    tft.setCursor(0, 50);tft.println("5.0V");   
}
//шкала напряжения########################################
if(paus==0){MenuT();}
//максимальное значение сигнала##########################
Vmax=0; 
for(int i=0;i<500;i++){  
        if(Vmax<mass[i]){ Vmax=mass[i];} 
}
//максимальное значение сигнала##########################
//отрисовка графика№№№№№№№№№№№№№№№№№№№№№
if(paus==0){
  tft.setRotation(0); 
  x=50;
  for(int y=0;y<420;y++){
      tft.setRotation(1); 
      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;}
      tft.drawLine(x,267-massDEL[y]/1.2, x+1,267-massDEL[y+1]/1.2, BLACK);//стираем график???????????????????????
      tft.drawLine(x,267-mass[y]/1.2, x+1,267-mass[y+1]/1.2, GREEN);//график
         
  }
  for(int i=0;i<500;i++){massDEL[i]=mass[i];}
}
if(paus==1){//режим паузы
       if(digitalRead(pravo)==HIGH){//листаем
        tft.setRotation(0); 
        tft.fillRect(45, 60, 140, 260, BLACK);//стиране графика ????????????????????????????????????????????????
      x=50;
      for(int y=0;y<420;y++){
          tft.setRotation(1);
          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;}
      tft.drawLine(x,267-mass[y]/1.2, x+1,267-mass[y+1]/1.2, GREEN);//график
      }
      MenuT();
    }
    if(digitalRead(levo)==HIGH){//листаем
      tft.setRotation(0); 
      tft.fillRect(45, 60, 140, 260, BLACK);//стиране графика?????????????????????????????????????????????????? 
      x=50;
      for(int y=0;y<420;y++){
          tft.setRotation(1); 
          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;}
      tft.drawLine(x,267-mass[y]/1.2, x+1,267-mass[y+1]/1.2, GREEN);//график
      }
      MenuT();
    }     
}
//отрисовка графика№№№№№№№№№№№№№№№№№№№№№
}
[/code]

 

ElectroMaX
ElectroMaX аватар
Offline
Зарегистрирован: 19.02.2015

Добрый вечер . Имеется у меня экран 3,95" с разрешением 320x480 на ILI9488 , скетч на нем работает , но изображение не на весь экран. Помогите пожалуйста адаптировать скетч под разрешениее моего экрана .

Igor_kip
Offline
Зарегистрирован: 03.01.2016

У меня дисплей тоже 320*480 , я думаю - нет никакой разницы 3,2" или 3,95" главное это разрешение , смотрите на мой скеч , там страние только не переделано , запутался.

ElectroMaX
ElectroMaX аватар
Offline
Зарегистрирован: 19.02.2015

Уважаемый igor_kip уже частично адаптировал скетч ,но работет он пока криво. И кстати такой экранчик у меня тоже есть ,было бы интересно и его приспособить.

ElectroMaX
ElectroMaX аватар
Offline
Зарегистрирован: 19.02.2015

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

Разобрался развертка стояла 10.

karl2233
Offline
Зарегистрирован: 05.07.2015

Igor_kip, не получается, потому что код не свёрнут.

сворачивать код - это первое, что надо научится делать. иначе никакой скетч работатьь не будет.

инфа 146%.

 

Igor_kip
Offline
Зарегистрирован: 03.01.2016

Исправил. Так?

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

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

Лот вот http://ru.aliexpress.com/item/1Set-High-Quality-P6100-Oscilloscope-Probe-DC-100MHz-Scope-Clip-Probe-100MHz/32335084740.html

Ценник 280 рублей. Вчера ездил до знакомого проверял работу контроллера намоточного станка (механи устала, ошибается, переделываем под электронное управление. Осталась только решить проблемы со считыванием оборотов (датчик присрать не где совсем... прийдется заказывать у токоря переходной вал, а то мой 3д принтер ни как не приедет... и видимо не приедет...)) Ну да ладно отвелекся. По случаю у него есть и генератор сигналов совковский как прямоуголных, так и синусойды. Осцилографы тоже совковские, но один может синхронизацию и паузу. Так вот проверяли на 10МГц, очень дадже не дурно. генератор давно не поверялся, прямоугольный перед подъемом начинал немного плавный подъем, но затем резко вверх и после достижения заданного уровня немного сразу завышал, но падал. Достали хорошие щупы, тоже совок, 1:1, не юзанные, там картина была 1 в 1. Примерно так:

Делитель 1х Сопротивлние 100Ом.

Делитель 10х Сопротивлние 10МОм.

Кабель очень мягкий, податливый. Имеется сам щуп, зажим на него, пару наконечников/ограничителей разной формы и длны, а так же сменные цветные шайбы по 2 цвета каждая (каналы типа что бы отличать) и отвертка для подстройки конденсатора. Естественно разъем феншуйный BNC. Его легче найти за бесплатно на барахолках от старых сетевух или в магазине торгующим видеонаблюдением.

В общем дешево и для пультоскопа будет то что доктор прописал!

 

karl2233
Offline
Зарегистрирован: 05.07.2015

везётжешьнекоторым!

мне ни АЦП ни ОУ не пришло ((((((

UPD. тока пожаловался - и сегодня пришло всё )))))))

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Вчера выделил несколько часов, что бы поигратся с проектом.

Моя идея двухканального осциллографа. Один канал на АЦП, а другой на Ардуине.

Первый канал опрашивается в зацикленном прерывании АЦП Ардуины. ISR(ADC_vect) {  AI0 = ADCH;}

В цыкле таймера 

byte AI0;
ISR(TIMER1_COMPA_vect)//обработчик прерывания по совпадению А
{    
    MyBuff_AI0[N] =AI0;
    //MyBuff_AI0[N] =ADCH; // При таком варианте таймер тупо зависает в єтом месте, пока не будет обработано прерівание АЦП.
      N++;      
    OCR1A=MeasureDelay; //MeasureDelay;
    if (N==0) {TIMSK1=0b00000000;} // Остановить таймер
  }

Так вот. Такой код нифига не работает. При увеличении частоты опроса AI0, АЦП ардуины перестает отрабатывать вообще.

При убирании промежуточной переменной AI0, таймер тупо ждет на результат АЦП на строчке.

Что из єтого следует:

В двухканальном режиме опрос внешнего АЦП и внутреннего нужно делать в прерівании  ISR(ADC_vect) 

При переключении на одноканальный режим,  ISR(ADC_vect)   нужно отключать и опрашивать вход в прерывании ISR(TIMER1_COMPA_vect)

 

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor

Привет, не трать время на этот костыль.

Будет один канал на 6MSps и второй на 0,6MSps (((

Думаю лучше выжать все соки с AD9280 возможно даже Атмегу разогнать и бросить все силы на заполнение буфера данными с АЦП на максимальной скорости.

А если второй канал захочешь добавить то просто добавишь мультиплексор, оцифровываем первый канал это 83мкс потом второй канал  83мкс и дальше обработка данных и вывод на дисплей (данные примерно).

HAWES
HAWES аватар
Offline
Зарегистрирован: 05.04.2016

bodriy2014 пишет:

 возможно даже Атмегу разогнать

Может стоит присмотреться к Дуинке помощнее. И ножек поболе.

http://ru.aliexpress.com/item/DUE-R3-Board-SAM3X8E-32-bit-ARM-Cortex-M3-Control-Board-Module-For-Arduino/32390548592.html?spm=2114.13010308.0.67.GAVTnR

karl2233
Offline
Зарегистрирован: 05.07.2015

HAWES, а смысл?

к ней ещё комплектухи на ~1500... и можно ничего не делать - за сопоставимую цену у китайцев будет в корпусе, хотя и с параметрами похуже.

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

в идеале - дополнительные модули как шилды. 

автор вообще вначале был против ОУ и АЦП, а ты предлагаешь... сравни цену на ПроМини и R3 =)

 

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

HAWES пишет:

bodriy2014 пишет:

 возможно даже Атмегу разогнать

Может стоит присмотреться к Дуинке помощнее. И ножек поболе.

http://ru.aliexpress.com/item/DUE-R3-Board-SAM3X8E-32-bit-ARM-Cortex-M3-Control-Board-Module-For-Arduino/32390548592.html?spm=2114.13010308.0.67.GAVTnR

Я бы добавил - это уже ARM. И AVR-овский синтаксиси не подойдет. Ты пробовал на ARM инициализирвоать пин на цифровое чтение? Там такая простыня. Мы бы тогда не парились, взяли STM32 пошустрее за 2$ и в путь.

karl2233
Offline
Зарегистрирован: 05.07.2015

чёт проект заглох совсем ((((

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

karl2233 пишет:

чёт проект заглох совсем ((((

С чего это ты решил? Автор изначально говорил что делает в свободное время и при желании. Он не обещал за месяц все наклепать. Уже видели скрины экрана. Так же на сколько мне известно железки он получил недавно, следовательно ждем.

karl2233
Offline
Зарегистрирован: 05.07.2015

да это понятно что в свободное время....

руки чешутся, а никак принять участие не могу - нет чем проверять спаянное и в программировании "0".

VetalST
Offline
Зарегистрирован: 29.12.2015

Подскажите пожалуйста.

1. Можно перед ацп поставить оу MCP6022 даташ http://www.voltmaster.ru/pdf/datasheets/microchip/MCP602x.pdf и запитать двуполярным питанием +5 и -5 вольт. А то я сдаташами и английским не дружу, у нее питание +2.5 - 5.5 вольт.

2. И можно к ардуине будет прикрутить входную часть как в Хамелеоне D. http://elektro-shemi.ru/izmerenie/CHAMELEON_D/Chameleon_D.gif.  Или как то проще все сделать???? Просто дома нашел запчасти как в хамелеоне, что бы не покупать.

 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Вчера пробовал входную часть с виртуальной землей на внешнем АЦП. Взаимопроникновения сигналов не обнаружил.

Там се просто двухканальный ОУ. 

Один канал делает виртуальную землю общую для АЦП Ардуинки и внешнего АЦП.

Второй канал для предусилителя внешнего АЦП, а то его входное сопротивление очень маленькое.

Вроде все работает, но пока нет времени дальше пробовать. 

Итого получается двухканальная схема без двуполярного питания и с одним двухканальным ОУ и с общим AREF и общим нулем.