artos5 Опубликовано 12 декабря, 2017 Поделиться Опубликовано 12 декабря, 2017 Купил на али матрицу . Быстренько написал код . Но возникла проблема .. Символы выводятся не так как нужно ... for(y=0; y<8; y++) { for(s=0; s<5; s++) { for(z=0; z<4; z++) { led_out(s+1, font_rus[0][s+a]); //else led_out(s+1, 0); } } } // тест символы unsigned char font_rus[4][5]={ {0b00011111, 0b00100100, 0b00100100, 0b00011111, 0b00000000}, //a {0b00011111, 0b00101001, 0b01001001, 0b01000110, 0b00000000}, //б {0b00011111, 0b00101001, 0b00101001, 0b00010110, 0b00000000}, //в {0b00000001, 0b00011111, 0b00100001, 0b00011111, 0b00000001} //д }; // программный spi void led_out(unsigned char adress, unsigned char value1) { unsigned char i; SCK0; CS0; delay_us(10); for(i=0; i<8; i++) { if (adress & 0x80) { DATA1; } else { DATA0; } SCK1; delay_us(10); SCK0; delay_us(10); adress <<=1; } for(i=0; i<8; i++) { if (value1 & 0x80) { DATA1; } else { DATA0; } SCK1; delay_us(10); SCK0; delay_us(10); value1 <<=1; } SCK0; delay_us(10); CS1; delay_us(10); } Вопрос . как перевернуть буквы? Цитата 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
KomSoft Опубликовано 12 декабря, 2017 Поделиться Опубликовано 12 декабря, 2017 Биты в массиве font_rus перепишите наоборот (справо налево) 0 Настоящему коту и в декабре март! Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
artos5 Опубликовано 12 декабря, 2017 Автор Поделиться Опубликовано 12 декабря, 2017 Нее, нужно повернуть символы на 90град. Мне почему то показалось что шрифт переписать - не совсем правильно . Получается матрица эта по строчно заполняется. 4 байта = 1 строка , всего 8 строк. Так как правильно организовать вывод данных , так чтоб и бегущая строка была и т.д. 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
KomSoft Опубликовано 12 декабря, 2017 Поделиться Опубликовано 12 декабря, 2017 Код вам не напишу - не программировал мк с нуля. Но теоретически - матрица 8х8, пишете под символ массив 8 байт и крутите его на 90 градусов заполнением. И сдвигаете. Но реализация зависит еще и от подключения матриц. Сорри, если влез немного не в тему. 1 Настоящему коту и в декабре март! Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 12 декабря, 2017 Автор Поделиться Опубликовано 12 декабря, 2017 Я в общем символ развернул. Сейчас нормально отображается . Но теперь новая проблема : Символ 8*5 получается , и когда я его развернул получается расстояние на 3 пикселя между символами , как ужать символы на экране чтобы расстояние было в пиксель ? )) Код который сделан уже утром покажу. 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
KomSoft Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 Вы пишете один символ в матрицу? Нужно усложнять код и работать с матрицами, как с одним массивом 0 Настоящему коту и в декабре март! Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 Кто работал с такой матрицей??? Блин , у меня косяк с программным spi... void led_out(unsigned char adress, unsigned char value1) { unsigned char i; SCK0; CS0; delay_us(10); for(i=0; i<8; i++) //цикл для последовательного вывода 8 бит данных из массива { if (adress & 0x80) //выводим "текущий бит" в линию DS { DATA1; } else { DATA0; } SCK1; //выводим "0" в линию SH_CP delay_us(10); SCK0; //выводим "1" в линию SH_CP - считываем бит на входе регистра (считывание происходит по переднему фронту импульса на SH_CP) delay_us(10); adress <<=1; } for(i=0; i<8; i++) //цикл для последовательного вывода 8 бит данных из массива { if (value1 & 0x80) //выводим "текущий бит" в линию DS { DATA1; } else { DATA0; } SCK1; //выводим "0" в линию SH_CP delay_us(10); SCK0; //выводим "1" в линию SH_CP - считываем бит на входе регистра (считывание происходит по переднему фронту импульса на SH_CP) delay_us(10); value1 <<=1; } // SCK1; //выводим "0" в линию SH_CP // delay_us(10); SCK0; delay_us(10); CS1; //SCK1; delay_us(10); } 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
ARV Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 (изменено) Ну как же так можно: простейший код раскатать на страницу?! Вам самого себя не жалко - это вот писать и потом читать?! void spi_out(uint8_t data){ CS0; for(uint8_t mask = 0x80; mask; mask >>= 1){ if(data & mask) DATA1; else DATA0; SCK1; SCK0; } CS1; } Никаких задержек на 10 микросекунд не надо - или у вас на тиратронах собрано все? Изменено 13 декабря, 2017 пользователем ARV 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 Да это я уже задержку ввел из за паники Голова уже квадратная . 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
ARV Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 21 час назад, artos5 сказал: Вопрос . как перевернуть буквы? Как именно перевернуть? По отношению к фото - на 180 градусов относительно горизонтали? Т.е. чтобы буквы выводились в столбик не вверх ногами? Или вы хотите выводить ВДОЛЬ матрицы? 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 На 90град. Я то перевернул уже их. Но есть косяк в программном spi, и неполучается вывести разные буквы на табло в один ряд. Ваш код такой же в работе , и соответственно строки на табло загружаются неправильно... 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
ARV Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 8 минут назад, artos5 сказал: еполучается вывести разные буквы на табло в один ряд Что получается? Я не понимаю, как SPI может влиять на знакогенератор... что там зашито, то и будет выведено Или вы хотите сказать, что вместо ABC выводится ААА? 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 Отправляю n байт, должно заполниться n строк, к примеру так отправляю: led_out(1,0); led_out(1,0); led_out(1,0); led_out(1,0); led_out(2,0xff); led_out(2,0xff); led_out(2,0xff); led_out(2,0xff); led_out(3,0); led_out(3,0); led_out(3,0); led_out(3,0); led_out(4,0xff); led_out(4,0xff); led_out(4,0xff); led_out(4,0xff); Должно появиться на экране: 00000000... 11111111... 00000000... 11111111... А выводится только вторая строка . 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
ARV Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 Так может проблема не в SPI, а в схеме? 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 На плате похоже 4 МАХ7219. Запись в них идет по CS1. Надо сразу передать все 4 символа и только затем установить CS1. CS0; led_out(1,0); led_out(1,0); led_out(1,0); led_out(1,0); CS1; В функции led_out CS0 и CS1 закомментируйте 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 1 час назад, snn_krs сказал: В функции led_out CS0 и CS1 закомментируйте Попробовал - все равно бред отправляется. Теперь даже инициализация не корректно проходит.. Когда cs переделал. Нужно весь массив 16х8 в cs заключать ? Или только 16 байт (команда и данные четырех микросхем)? 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 В каждый МАХ7219 передается по два байта: команда и данные, всего 4 * 2 = 8 байт, тоесть 4 вызова функции. Для инициализации тоже надо все инициировать. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 Для инициализации тоже такой принцип? 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 Все МАХ7219 соединены последовательно. Если передать два байта они останутся в первом чипе, а по CS1 запишется в первый эта команда, а в остальные все 0. Передавать надо по 8 байт и для инициализации и для команд 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 инициализацию в общем проходит , но вот пиксели неправильно выводятся ... не пойму че за фигня.. отсылаю 0xf0 должно высветиться 11110000 а высвечивается 11111111... Есть у вас пример программного spi именно совместимого с max7219 ? Заработало!!!)) 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 Я дорабатывал для Ардуино, и писал для STM32F100. void LedControl::spiTransfer(int addr, volatile byte opcode, volatile byte data) { //Create an array with the data to shift out int offset=addr*2; int maxbytes=maxDevices*2; for(int i=0;i<maxbytes;i++) spidata[i]=(byte)0; //put our device data into the array spidata[offset+1]=opcode; spidata[offset]=data; //enable the line digitalWrite(LEDCONTROL_SPI_CS,LOW); //Now shift out the data for(int i=maxbytes;i>0;i--) shiftOut(LEDCONTROL_SPI_MOSI,LEDCONTROL_SPI_CLK,MSBFIRST,spidata[i-1]); //latch the data onto the display digitalWrite(LEDCONTROL_SPI_CS,HIGH); } Это код для Ардуино. maxDevices это число МАХ7219 shiftOut(LEDCONTROL_SPI_MOSI,LEDCONTROL_SPI_CLK,MSBFIRST,spidata[i-1]); // передача 8-ми байт 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 @artos5 , заведи буфер из 8*4 байтов и сделай так, чтобы этот буфер выводился в матрицы. Тогда можно будет что угодно делать с изображением, хоть вертеть, хоть крутить, хоть двигать, ... манипулируя битами в этом буфере. 13 минуты назад, snn_krs сказал: int maxbytes=maxDevices*2; for(int i=maxbytes;i>0;i--) Да уж, тут ничего не скажешь. Учитывая, что maxDevices - неизменное значение. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 Завел буфер for(x=0; x<str_n; x++) { z= x*4; CS0; led_out(x+1, data[z]); led_out(x+1, data[z+1]); led_out(x+1, data[z+2]); led_out(x+1, data[z+3]); CS1; } Как теперь в него загнать символы? unsigned char font_rus[4][5]={ {0b00011111, 0b00100100, 0b00100100, 0b00011111, 0b00000000}, //a {0b00011111, 0b00101001, 0b01001001, 0b01000110, 0b00000000}, //б {0b00011111, 0b00101001, 0b00101001, 0b00010110, 0b00000000}, //в {0b00000001, 0b00011111, 0b00100001, 0b00011111, 0b00000001} //д }; Скажем первый символ в начало массива пикселей, так чтобы отображалось вдоль Экрана. 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 13 декабря, 2017 Поделиться Опубликовано 13 декабря, 2017 4 минуты назад, artos5 сказал: [4][5] А почему на 4х5 ? 4х8 надо. Рядов то 8 штук, по 8 столбцов (8 бит). Итого - 8 байт на матрицу. А символ загонять - дак это ж просто. Есть же индексы массива (матриц), по ним и загоняй символы. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 13 декабря, 2017 Автор Поделиться Опубликовано 13 декабря, 2017 подумал что буквы красивее будут ))) А есть у тебя готовый массив символов? 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.