Среда, 24.04.2024, 18:16
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Модуль цифрового осцилографа - Страница 30 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Модуль цифрового осцилографа (Пробуем свои силы в построении цифрового осциллографа)
Модуль цифрового осцилографа
vladimersДата: Пятница, 22.03.2013, 01:01 | Сообщение # 436
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
здесь есть такое вернее заложено и прописано . вроде при несильных значениях работает . а вот когда например 10милив/деление и вход подал чуть больше-происходит какбы сбой или ошибка .и тогда и остаются мусор . тоесть довольно сильный стрес какбы по входу .
вот и мысль такая типа при переключении перерисовать или переочистить рабочую область.
я пробывал полной очисткой фона -получалось но тогда слетают все нужные постоянные какбы (кнопки ,бардюр и прочее).
просто знаний нехватает .и как лучше именно- перерисовать фон или полная очистка рабочего фона с перерисовкой сетки ?
просто глобально найти и коректно изменить проверку на выход параметра за размер дисплея (хотя нати то нашол ее ,но вмешиваться нехочу ,незнаю как) думал просто при смене деления проще .

Добавлено (22.03.2013, 01:01)
---------------------------------------------
например вот кусок
*******************************************************************************
* Function Name : change_Div_A
* Description : Функция изменения делителя канала А
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void change_Div_A(void)
{
change_CH_INFO(CHANNEL_A); // изменяем указатель pINFO на INFO_A

/* проверка нажатий кнопок вверх/вниз и изменение делителя */
if((ButtonsBits == UP) && (pINFO->Div < Divider_Position_MAX)) pINFO->Div++;
else if((ButtonsBits == DOWN) && (pINFO->Div > Divider_Position_MIN)) pINFO->Div--;
else if(ButtonsBits == OK)
{
SetActiveMenu(&ChannelA_Menu); // делаем активным меню канала А
Draw_Menu(&ChannelA_Menu);
return;
}
else return;

corrZ_A = pINFO->Zero_PWM_values[pINFO->Div]; /* установка ШИМ в соответсвии с диапазоном делителя */

/* смена делителя и изменение надписи на кнопке на соответсвующую делителю */
btn->Text = Change_AnalogDivider(CHANNEL_A, pINFO->Div);
Update_triggInfo_OnScreen(ReDRAW); /* обновляем инфо триггера */
}

как правельно вставить например -

/* Рисуем закрашенный прямоугольник, основная область вывода осциллограмм */
LCD_DrawFillRect(leftLimit, lowerLimit+5, rightLimit, upperLimit - 5, DRAW, Active_BorderColor);
LCD_DrawGrid(&activeAreaGrid, DRAW); // перерисовываем сетку в области осциллограмм

левая 10 правая 399 вверх 226 и бордюр 13

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


Сообщение отредактировал vladimers - Пятница, 22.03.2013, 04:02
 
ВитГоДата: Пятница, 22.03.2013, 07:35 | Сообщение # 437
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (vladimers)
есть глюк в прошивке -например при неправельном выборе вольт/деления и привышении входного напряжения на экране при выходе луча за пределы экрана -остается мусор .тоесть нет очтистки рабочей части экрана (по мере прохождения луча ,он стерает эти помехи.но невсе )
прорисовка сетки тоже невсе уберает .


ищите в прошивки код который выводит точки осциллограммы на экран

до рисования точек нужно проверить наличие ограничителей координат, что то вроде
if y>200 then y=200
если ограничителей нет - то нужно их поставить..
значение ограничения по идее должно быть равно координатам окна для вывода осциллограммы
причем нужно проверить и верхнее и нижнее ограничение..

ну и фото бы описываемого глюка - тяжело по словесному описанию понять..

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


Виталий (аka ВитГо)
 
vladimersДата: Пятница, 22.03.2013, 14:29 | Сообщение # 438
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
мусор на экране появляет ся при привышении сигнала на входе в режиме максимальной интерполящии,в нормальном режиме такого нет ,все работает нормально .
вот фото и файл ,впринцепи функция очистки присутствую вроде ,но несправляется похоже.
возможно проще прописать например как только пошло превышения верх/низ границ типа такого :
LCD_ClearArea(12, 20, 398,220, Active_BackColor);
LCD_DrawGrid(&activeAreaGrid, DRAW);
тоесть нетолько луч чтоб стирался (как задано щас а и очищался экран в случае превышений )впринцепи такое происходит например когда неправельно выбрано вольт/деление а сигнал довольно большой . но даже при кратковременной подаче сигнала и вылете луча сразу остается мусор (на фото это я несколько раз сделал вылет чтоб наглянее виден был эфект).
Прикрепления: Processing_and_.jpg (138.6 Kb) · Processing_and_.c (20.1 Kb) · Processing_and_.docx (18.5 Kb)


Сообщение отредактировал vladimers - Пятница, 22.03.2013, 14:33
 
ВитГоДата: Пятница, 22.03.2013, 23:42 | Сообщение # 439
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
посмотрю чуть позже..
извиняюсь что не отвечаю.. занят.
Прикрепления: input1-20.cir (11.4 Kb)


Виталий (аka ВитГо)
 
vladimersДата: Среда, 27.03.2013, 03:05 | Сообщение # 440
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
http://www.melt.com.ru/shop/3.5-st035hmm-a50.html
http://www.melt.com.ru/shop/mg0430cpota0.html
интересные дисплейчики
а вот вроде пригодится вам по подкючению их - http://www.ramtex.dk/gclcd....dhEMAXg

http://www.ramtex.dk/products/prodgui.htm


Сообщение отредактировал vladimers - Среда, 27.03.2013, 03:09
 
ВитГоДата: Среда, 27.03.2013, 15:34 | Сообщение # 441
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну это очень дорогие дисплейчики, при совершенно обычных размерах..

для примера я себе заказал 5" http://www.aliexpress.com/item....70.html
по цене менее 40 долларов (это 1200 рублей) - с разрешением 800х480 !
то есть и по диагонали больше (почти вдвое) и по разрешению больше (более чем вдвое) и при этом в 2 раза дешевле !
и кстати это с доставкой цена !! а с мэлта еще доставку нужно будет оплатить


Виталий (аka ВитГо)
 
vladimersДата: Среда, 27.03.2013, 17:10 | Сообщение # 442
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
да,дисплейчик класный по размерам ,(к нельскопу б его прикрутить ),я прикидывал уже ,надо какойнить навигатор прикупить дохлый с таким дисплеем для экспериментов но знаний нехватит переделать драйвер . несмотрели исходник еще?
 
ВитГоДата: Среда, 27.03.2013, 17:35 | Сообщение # 443
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну там стандартный интерфейс.. придет буду пробовать, продавец просто на него еще не прислал даташит.. как придет буду смотреть

Цитата (vladimers)
я прикидывал уже ,надо какойнить навигатор прикупить дохлый с таким дисплеем для экспериментов но знаний нехватит переделать драйвер


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

Цитата (vladimers)
несмотрели исходник еще?


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


Виталий (аka ВитГо)
 
vladimersДата: Среда, 27.03.2013, 17:52 | Сообщение # 444
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
спасибо. я все время вечерами в сети щас после 9ти вечера .
 
ВитГоДата: Среда, 27.03.2013, 19:40 | Сообщение # 445
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
глюки в режиме MIN_MAX_MODE или InterpolationLINEAR ?

фотку бы еще правильного отображения (неправильного вроде вверху есть)

или лучше пару фоток - правильного\неправильного - на одном сигнале


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 27.03.2013, 20:02 | Сообщение # 446
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
в общем мне нужно чтобы ты сказал для начала Y координаты нижней точки экрана вывода осциллограммы и верхней точки


код процедуры
Код

/*******************************************************************************
* Function Name  : DrawClear_iLine
* Description    : отрисовка или очистка одной линии при линейной интерполяции
* Input          : X0pos, Y0pos, X1pos, Y1pos, clear
* Return         : None
*******************************************************************************/
static __inline void DrawClear_iLine(uint16_t X0pos, uint16_t Y0pos, uint16_t Y1pos, DrawState NewDrawState)
{   
  uint16_t clrColor;     
  uint16_t i, j;
  uint16_t tmpY;
   
     if (Y0pos>uppLim) Y0pos=uppLim;
     if (Y0pos<lowLim) Y0pos=lowLim;

     if (Y1pos>uppLim) Y1pos=uppLim;
     if (Y1pos<lowLim) Y1pos=lowLim;
      
  if(Y1pos < Y0pos) { tmpY = Y0pos; Y0pos = Y1pos; Y1pos = tmpY; }    
      
  if(Y1pos - Y0pos == 0) j = 1;
  else j = Y1pos - Y0pos;
      
  Set_LCD_CS();   
  LCD_SetCursor(X0pos,Y0pos);        // Установка курсора в нужную позицию  
   
  if(NewDrawState == CLEAR)
  {
   for (i = 0; i < j; i++)
   {
    /* Проверяем на совпадение координат очистки с сеткой,
    если совпало то очищаем цветом сетки */
    clrColor = Verify_Grid_Match(X0pos, Y0pos);
       
    LCD_PutPixel(clrColor);          // очистить точку на установленной позиции
    Y0pos++;
   }
  }
  else    // if(NewDrawState == DRAW)
  {
   for (i = 0; i < j; i++)    LCD_PutPixel(pINFO->Color);          // Нарисовать точку на установленной позиции
  }

  Reset_LCD_CS();
}


вместо uppLim- нужно подставить максимальную координату окна вывода осциллограммы по Y
вместо lowLim - минимальную координату окна вывода осциллограммы по Y

вообще перемудрили с выводом..


Виталий (аka ВитГо)
 
vladimersДата: Среда, 27.03.2013, 20:21 | Сообщение # 447
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
там по центру сигнал правельный идет (на фото ),тоесть прорисовка сигнала нормальная идет если сигнал незашкалюет . а вот если сигнал больше по уровню чем выставленно на входе (тоесть когда он убегает за границы экрана ) вот тогда и появляется (остается )мусор на экране .вольт/деление выше поставил например -сигнал в нормально тогда показует а вот мусор ввиде полосок и точек лишних остается .
там в файле есть функыя -очистки старой линии вслучае выхода за пределы экрана ,но она несправляется .вернее саму осцелограму то чистит но не мусор .он какбы в памяти экрана остается или гдето еще . вот в строки где идет очистка луча при MIN_MAX_интерполяцыи (MIN_MAX_MODEfunc в файле Processing_and_output.с ) и попробывать интегрировать команду например -
LCD_ClearArea(12, 20, 398,220, Active_BackColor);-типа очистки экрана рабочим фоном с его кординатами ,
возможно с прорисовкой сетки LCD_DrawGrid(&activeAreaGrid, DRAW);
похожая функцыя есть чуть ниже в командах но это при смене интерполяцыии ,хотя и она неочищает экран от мусора .
на остальных режимах все нормально работает .
 
ВитГоДата: Среда, 27.03.2013, 20:31 | Сообщение # 448
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
кстати, а можешь попробовать посмотреть сигнал на делителе 1:5 а потом на 1:10 ?
там вообще при 1:10 что нить видно ?

и потом интересен делитель 1:50 !!! - что видно при нем.

сигнал лучше взять размахом вольт 5 (а если 6 вольт то показывает что нить?)


Виталий (аka ВитГо)
 
vladimersДата: Среда, 27.03.2013, 20:32 | Сообщение # 449
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
левая-10 вниз-13 вправо -399 вверх 226 какраз эта команда очищает рабочую область цветом раб области - LCD_ClearArea(12, 20, 398,220, Active_BackColor);
ксожелению у меня нет генератора с мощным выходом ,там около вольта всего у меня самоделка .
но мусор впринцепи на всех будет вслучае вылита за экран ,я ставлю на самый маленький придел 10-20-50мил/дел и тогда хорошо мусорит вслучае привышения .а выше там сигнал просто в норме окна остается и все нормально тогда .


Сообщение отредактировал vladimers - Среда, 27.03.2013, 20:38
 
ВитГоДата: Среда, 27.03.2013, 20:35 | Сообщение # 450
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну тогда попробуй такие значения

if (Y0pos>220) Y0pos=220;
if (Y0pos<20) Y0pos=20;

if (Y1pos>220) Y1pos=220;
if (Y1pos<20) Y1pos=20;


Виталий (аka ВитГо)
 
Форум » Разработка электронных устройств » Разрабатываю ! » Модуль цифрового осцилографа (Пробуем свои силы в построении цифрового осциллографа)
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz