Перейти к содержанию

RIMUS1989i

Members
  • Постов

    450
  • Зарегистрирован

  • Посещение

Весь контент RIMUS1989i

  1. Я больше склоняюсь к вашему варианту. Осталось подобрать палитру. Изначально я думал использовать цветовую модель HSV без "value". Но это также минимум 2 байта на пиксель. В принципе можно использовать и один байт на пиксель. Но опять нужно порыться в цветовых моделях - палитрах и придти к какому то стандарту. @COKPOWEHEU Спасибо, я об этом думал. Но это усложняет использование для другой графики: текст, картинка и т.д. В этом и проблема что обновление идет по парным столбцам писал об этом выше. Оно работает так, всего два провода SPI, sclk и mosi, микросхемы которые стоят на дисплее они по спец импульсу определяют начало приема нового пакета данных и это служит флагом для вывода предыдущих (от прошлого пакета). Но пакет один, а получилось так, что дисплей состоит из двух областей, левая и правая. И тут приходится данные отправлять в такой последовательности: 1 и 16 столбец, 2 и 17, 3 и 18 и т.д. Что усложнят прямую отправку данных для разного типа, картинка, буква, спектр. Если со спектром все просто то вот с буквами не очень. Вот для этого в первую очередь использую буфер, для упорядочивания пикселей чтобы другой человек, если захочет использовать мой проект то ему не нужно будет понимать как оно работает.
  2. Нужно это переварить и осознать, как это организовать... Так массив во флеше можно хранить статический не динамический, или что-то я не понял??? Не, мы же не ищем легких путей! И как то это не правильно и расточительно... @ChePay Мне кажется вы погорячились, максимум в 3 раза, то есть уменьшить до 1 го байта на пиксель, и хранить в этом байте только вот эти 16 цветов. @COKPOWEHEU Я развел плату под stm32f103, но как писал выше , её нужно изучить... Есть вариант отправлять только по столбцу ( да не построчно...), Почему по столбцу? Да потому что это анализатор спектра... При работе FFT удобно, выбрал столбец нарисовал его и т.д. Есть еще нюанс, Я могу обновлять столбцы только по такой схеме: 1,16; 2,17; 3;18, 4;19, 5;20 и т.д. при разводке ПП сложились трудности. Плюсы микросхем которые я использую, у них есть своя оперативка, но минус я могу её только разом обновлять... По принципу сдвигового регистра. Нет возможности перерисовать только определенные пиксели. Пока 480... в планах расширить... А никто их не хранит... static void sendData(uint8_t data) { /* Так, как нужны данные 16бит, то мы просто посылаем два раза по 8бит. Младшие 8бит отправляются пустыми. Данные отправляются старшим битом вперед. */ SPDR = data; // Отправляем старшит байт while(!(SPSR & (1<<SPIF))); SPDR = 0; // Отправляем младший байт while(!(SPSR & (1<<SPIF))); return; } функция обновления дисплея: Видео.
  3. Спасибо. Нужно попробовать... А каким образом хранить, но не весь? Пока только atmel серии atmega. Плату под STM32 развел но еще не заказал и их нужно изучать... Каким образом? Картинка динамическая и обновляется в процессе выполнения программы. Не вариант... Для удобства восприятия и в программе, указал xyn цвет и вывел. Дисплей самодельный, светодиодный... И по умолчанию один цвет = 16бит, такие микросхемы... При отправке по spi посылаю данные только в старшие разряды. Младшие 8 бит нули.
  4. Доброго времени суток. Есть вопрос, использования кадрового буфера. Имеется дисплей с RGB пикселями размер X на Y. Есть буфер в виде массива "uint8_t DATA_DISPLAY[x][y][3];" , где x - высота, y - ширина, 3 - количество цветов. И вот тут получается что если дисплей размером например 20*100 то это 6000 байт, как это дело можно оптимизировать? Сейчас это работает так, выполняется программа по отрисовке графики и запись в массив, затем из массива по SPI отправляется на дисплей. При отправке работает два цикла один на ось x, другой на ось y. Все работает быстро и красиво но жрет много озу.
  5. @Sergey_N @Signus Повторюсь, была подобная проблема, на своем устройстве, понадеялся на внутреннюю подтяжку МК, ну в итоге неделю работало стабильно, а потом начались "глюки" пока не подтянул резисторами к +. Попробуйте, и все должно наладится.
  6. @Signus Сори за офф. @dipsat Поверьте на остальных торговых площадках (кроме Али), цены и наличие не утешающие... Если даже показано что в наличии то по факту на 0!
  7. Добрый день. Давно не подходил к этому проекту, но решил к нему вернуться. Окончательная функция получилась в таком виде (см. ниже). Она работает для 16ти битного числа, кто ее захочет использовать, обратите внимание, нет проверки на максимально допустимое число для 16бит - 65535. Мне достаточно до 25000. #define DEFAULT_MAX 25000 static const uint16_t mas[5] PROGMEM = {1,10,100,1000,10000}; uint16_t bitwise_number_change(uint16_t val, uint8_t n, int8_t diff, uint8_t x, uint8_t y) { if(n > 4) return val; uint8_t iv = 0; iv = (val/pgm_read_word(&mas[n]))%10; // Выбираем нужный разряд в десятичной системе val = val - iv * pgm_read_word(&mas[n]); // Обнуляем выбраный разряд iv = iv + diff; // Производим изменение нужного разряда +-1 // Проверяем разряд на правильность введеного значения if((iv & 0x0f) == 15) iv = 9; if(iv > 9) iv = 0; val = val + iv * pgm_read_word(&mas[n]); // Записываем новое значение разряда if(val > DEFAULT_MAX) val = DEFAULT_MAX; // Проверяем значение на максимально доступное ks0066SetXY(x, y); // Координаты выводимого числа for(uint8_t i = 0; i < 5; i++)// Выводим число ks0066WriteData('0' + (val/pgm_read_word(&mas[4-i]))%10); if(level > LEVEL_MENU_CHILD && level <= LEVEL_MENU_DIGIT_5) // Если уровень меню в редакторе, рисуем курсор { ks0066SetXY(x + 4 - n, y); ks0066WriteCommand(0x0E); }else{ ks0066WriteCommand(0x0C); // Удаляем курсор } return val; }
  8. Спасибо за поддержку. Просто люблю из железа выдавить максимум. Что у меня и получилось.
  9. Чуть выше описал основные функции этой затеи, Вы спросите и что? А то что многие проекты которые есть на этом форуме и не только, они все на LCD дисплеях. Увидел я один усилитель со светодиодным анализатором, но он монохромный, я решил пойти дальше и замутил на RGB светодиодах.
  10. Так же данная разработка, будет управлять усилителем, РГ Никитина, селектор входов, защита и лентяйка. Может кому интересно.
  11. Всем привет! Затеялся разработкой анализатора для своего усилителя. Первая печатка была с ошибками, и служила только для отладки (она на видео). Последняя схема перерисована и заказана новая плата на производстве.
  12. Всем привет. 78 герц не так уж хорошо, в одной из тем я писал что для LED дисплея она (частота обновления) должна быть не менее 600 герц. Этот вывод я нашел в интернете в одной из статей. Т.К. при малой частоте обновления экрана, хоть не видно мерцания, но это очень сильно влияет на зрение. По ощущениям, как будто смотришь на сварку (испытал на себе) . Эту частоту не надо путать с частотой обновления кадров. В итоге добился частоты обновления 2500 Гц, при тактовой в 16Мгц. Тактовую частоту можно повысить до 30Мгц. Уже заказана финальная печатная плата 4 слоя.
  13. Я выше писал что это датчик давления. Приводить милливольты в величину придется в любом случае. Но я уже написал код с калибровкой по двум точкам, и преобразованием в величину. Код тестировал на встроенном АЦП 10 бит. #define COEFF_SCALE 10000L static uint32_t Kx[MAXIMUM]; // Наклон static uint32_t Sx[MAXIMUM]; // Смещение // p1, p2 - физическая величина, c1 - c2 значения АЦП, n - номер АЦП, void calibrate(uint8_t p1, uint16_t c1, uint8_t p2, uint16_t c2, uint8_t n) { uint16_t temp = c2 - c1; Kx[n] = ((uint32_t)(p2 - p1) * COEFF_SCALE + (uint32_t)(temp>>1)) / ((uint32_t)temp); Sx[n] = (uint32_t)p1 * COEFF_SCALE - (uint32_t)c1 * Kx[n]; } uint16_t code_to_value(uint16_t code, uint8_t n) { return (uint16_t)(((uint32_t)code * Kx[n] + Sx[n] + (COEFF_SCALE>>1)) / (COEFF_SCALE)); }
  14. Я не прошу за меня решать задачу полностью, и поэтому нет полного т.з. Почитав все ваши (всех кто участвовал в данной теме) посты - советы, сделал вывод, да действительно, а есть ли смысл удоражать схему для экономия разрядов? Нет смысла. Конечный пользователь этого особо не заметит. Тут уже баланс между точно и не дорого. Моэтому сигнал будет заведён на прямую в АЦП, естественно с защитой. ИОН будет 4,096в. А если делать смещение сигнала из первого поста, будет много деталей, которые повысят себестоимость устройства. Не обоснованно. Ещё раз Всем Спасибо!
  15. @yaroslav.s Задача мерить давление 0 - 10кг/см2. с максимальной точность. Сейчас посыпятся вопросы, а какой датчик, тебе мало точности в 1 сотку и т.д.. На данном этапе не важно какой будет датчик. Сейчас стоит задача максимально выжать точности из АЦП. И как правильно преобразовать данный диапазон 0.5-3.5в. Когда с этим разберемся, в любой момент можно коэффициенты подкрутить делителями, и поменять датчик на более точный. Вся точность измерения также зависит от первичного преобразователя, в моем случае это датчик давление, и она (погрешность) суммируется на всех этапах, это я думаю всем понятно. Вопрос состоит в том как все таки правильно преобразовать диапазон. Чтобы тут еще не накосячить. Как говорит один знакомый: делай хорошо, х...(плохо) оно само получится. Как посоветовал @Starichok действительно кто мешает так сделать.
  16. ИОНа пока нет. Вот есть на чид MCP1541T-I/TT - 1% - 69руб., 4.096 или, как выше писал TL431BQDBZRQ1 - 0.5%, 2.5-36в - 47руб.. Есть точнее и дороже... @Starichok Вот теперь совсем запутали. Да действительно можно так, как Вы, сказали. Но что лучше? я уже в замешательстве. Подать напрямую в АЦП, с ИОН 4.096 - потеряю разряды. Понижается точность, из-за потери разрядов. Сделать на ОУ 0-4в., будет куча деталей которые нужно выбирать более точные... Повышается стоимость, для хорошей точности.
  17. Так я и не собираюсь на обычных. Поищу более точные 0.1-0.5% Диапазон измерений от 0.5 до 3.5 в. Опять тратить разряды АЦП. В начале с 0.5 вольтами можно смериться, как-раз идентифицировать обрыв цепи измерения, а выше 3.5 можно конечно и К.З. , но для этого можно и до 3.6-3.7 вольт поднять диапазон измерений. 12 бит не так уж много. С максимально возможной. При измерении 0.5 - 3.5 потеряю около 580 единиц АЦП при ИОН 3.5в, а при ИОН 4.096 уже 1096.
  18. Тоже верно. ИОНа на фиксированные 3.5 нет, можно также через делитель.Взять ИОН на 4.096 и после него поставить делитель. Или есть более точная 0.5% TL431BQDBZRQ1... MCP3208
  19. @Starichok Добрый день. Странный глюк. Обращался к @Lexter
  20. @RIMUS1989i Вот поэтому здесь и задал вопрос, стоит это делать или нет. Вторую часть (повторитель, делитель) придется оставить в любом случае, т.к. измеряемое напряжение выходит за пределы измерения АЦП. Всем спасибо.
  21. чтобы не тратить разряды АЦП на 0.5 вольта.
  22. @yaroslav.s Поясните. Upd Увидел только перепутаны 2 и 3
×
×
  • Создать...