Модуль цифрового осцилографа
| |
vladimers | Дата: Пятница, 22.03.2013, 01:01 | Сообщение # 436 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: 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
Статус: Offline
| Цитата (vladimers) есть глюк в прошивке -например при неправельном выборе вольт/деления и привышении входного напряжения на экране при выходе луча за пределы экрана -остается мусор .тоесть нет очтистки рабочей части экрана (по мере прохождения луча ,он стерает эти помехи.но невсе ) прорисовка сетки тоже невсе уберает .
ищите в прошивки код который выводит точки осциллограммы на экран
до рисования точек нужно проверить наличие ограничителей координат, что то вроде if y>200 then y=200 если ограничителей нет - то нужно их поставить.. значение ограничения по идее должно быть равно координатам окна для вывода осциллограммы причем нужно проверить и верхнее и нижнее ограничение..
ну и фото бы описываемого глюка - тяжело по словесному описанию понять..
перерисовывать экран стирая глюки идеологически не верно - нужно не маскировать ошибки, а исправлять. дайте код отрисовки осциллограммы.
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Пятница, 22.03.2013, 14:29 | Сообщение # 438 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| мусор на экране появляет ся при привышении сигнала на входе в режиме максимальной интерполящии,в нормальном режиме такого нет ,все работает нормально . вот фото и файл ,впринцепи функция очистки присутствую вроде ,но несправляется похоже. возможно проще прописать например как только пошло превышения верх/низ границ типа такого : LCD_ClearArea(12, 20, 398,220, Active_BackColor); LCD_DrawGrid(&activeAreaGrid, DRAW); тоесть нетолько луч чтоб стирался (как задано щас а и очищался экран в случае превышений )впринцепи такое происходит например когда неправельно выбрано вольт/деление а сигнал довольно большой . но даже при кратковременной подаче сигнала и вылете луча сразу остается мусор (на фото это я несколько раз сделал вылет чтоб наглянее виден был эфект).
Сообщение отредактировал vladimers - Пятница, 22.03.2013, 14:33 |
|
| |
ВитГо | Дата: Пятница, 22.03.2013, 23:42 | Сообщение # 439 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| посмотрю чуть позже.. извиняюсь что не отвечаю.. занят.
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Среда, 27.03.2013, 03:05 | Сообщение # 440 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: 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
Статус: Offline
| ну это очень дорогие дисплейчики, при совершенно обычных размерах..
для примера я себе заказал 5" http://www.aliexpress.com/item....70.html по цене менее 40 долларов (это 1200 рублей) - с разрешением 800х480 ! то есть и по диагонали больше (почти вдвое) и по разрешению больше (более чем вдвое) и при этом в 2 раза дешевле ! и кстати это с доставкой цена !! а с мэлта еще доставку нужно будет оплатить
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Среда, 27.03.2013, 17:10 | Сообщение # 442 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| да,дисплейчик класный по размерам ,(к нельскопу б его прикрутить ),я прикидывал уже ,надо какойнить навигатор прикупить дохлый с таким дисплеем для экспериментов но знаний нехватит переделать драйвер . несмотрели исходник еще?
|
|
| |
ВитГо | Дата: Среда, 27.03.2013, 17:35 | Сообщение # 443 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну там стандартный интерфейс.. придет буду пробовать, продавец просто на него еще не прислал даташит.. как придет буду смотреть
Цитата (vladimers) я прикидывал уже ,надо какойнить навигатор прикупить дохлый с таким дисплеем для экспериментов но знаний нехватит переделать драйвер
дисплеи в готовых устройствах либо впаяны либо подключаются спец разъемами.. - найти такие в продаже малореально.. поэтому проблемы появятся задолго до написания драйвера.. и боюсь что именно они сделают задачу не выполниой
Цитата (vladimers) несмотрели исходник еще?
глянул одним глазом, нужно чтобы мы вместе в сети были - чтобы править и проверять...
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Среда, 27.03.2013, 17:52 | Сообщение # 444 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| спасибо. я все время вечерами в сети щас после 9ти вечера .
|
|
| |
ВитГо | Дата: Среда, 27.03.2013, 19:40 | Сообщение # 445 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| глюки в режиме MIN_MAX_MODE или InterpolationLINEAR ?
фотку бы еще правильного отображения (неправильного вроде вверху есть)
или лучше пару фоток - правильного\неправильного - на одном сигнале
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 27.03.2013, 20:02 | Сообщение # 446 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: 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
Статус: 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
Статус: Offline
| кстати, а можешь попробовать посмотреть сигнал на делителе 1:5 а потом на 1:10 ? там вообще при 1:10 что нить видно ?
и потом интересен делитель 1:50 !!! - что видно при нем.
сигнал лучше взять размахом вольт 5 (а если 6 вольт то показывает что нить?)
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Среда, 27.03.2013, 20:32 | Сообщение # 449 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: 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
Статус: Offline
| ну тогда попробуй такие значения
if (Y0pos>220) Y0pos=220; if (Y0pos<20) Y0pos=20;
if (Y1pos>220) Y1pos=220; if (Y1pos<20) Y1pos=20;
Виталий (аka ВитГо)
|
|
| |
|