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

max7219 матрица и avr , перевернуть символы


artos5

Рекомендуемые сообщения

Купил на али матрицу . Быстренько написал код . Но возникла проблема ..

Символы выводятся не так как нужно ...

            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);
}                       

Вопрос . как перевернуть буквы?

 

 

 

Цитата

 

IMG_20171212_210121.jpg

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Нее, нужно повернуть символы на 90град. Мне почему то показалось что шрифт переписать - не совсем правильно . 

Получается матрица эта по строчно заполняется. 4 байта = 1 строка , всего 8 строк.

Так как правильно организовать вывод данных , так чтоб и бегущая строка была и т.д.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Код вам не напишу - не программировал мк с нуля. Но теоретически - матрица 8х8, пишете под символ массив 8 байт и крутите его на 90 градусов заполнением. И сдвигаете. Но реализация зависит еще и от подключения матриц. Сорри, если влез немного не в тему.

Настоящему коту и в декабре март!

Ссылка на комментарий
Поделиться на другие сайты

Я в общем символ развернул. Сейчас нормально отображается .

Но теперь новая проблема :

Символ 8*5 получается , и когда я его развернул получается расстояние на 3 пикселя между символами , как ужать символы на экране чтобы расстояние было в пиксель ? ))

Код который сделан уже утром покажу. 

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Вы пишете один символ в матрицу? Нужно усложнять код и работать с матрицами, как с одним массивом

Настоящему коту и в декабре март!

Ссылка на комментарий
Поделиться на другие сайты

Кто работал с такой матрицей??? Блин , у меня косяк с программным 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);
}

 

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Ну как же так можно: простейший код раскатать на страницу?! Вам самого себя не жалко - это вот писать и потом читать?!

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 микросекунд не надо - или у вас на тиратронах собрано все?

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Да это я уже задержку ввел из за паники :)

Голова уже квадратная .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

21 час назад, artos5 сказал:

Вопрос . как перевернуть буквы?

Как именно перевернуть? По отношению к фото - на 180 градусов относительно горизонтали? Т.е. чтобы буквы выводились в столбик не вверх ногами? Или вы хотите выводить ВДОЛЬ матрицы?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

На 90град. 

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

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, artos5 сказал:

еполучается вывести разные буквы на табло в один ряд

Что получается? Я не понимаю, как SPI может влиять на знакогенератор... что там зашито, то и будет выведено

Или вы хотите сказать, что вместо ABC выводится ААА?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Отправляю 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...

А выводится только вторая строка .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Так может проблема не в SPI, а в схеме?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

На плате похоже 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 час назад, snn_krs сказал:

В функции led_out  CS0 и CS1 закомментируйте

Попробовал - все равно бред отправляется. Теперь даже инициализация не корректно проходит.. Когда cs переделал. Нужно весь массив 16х8 в cs заключать ? Или только 16 байт (команда и данные четырех микросхем)?

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

В каждый МАХ7219 передается по два байта: команда и данные, всего 4 * 2 = 8 байт, тоесть 4 вызова функции. Для инициализации тоже надо все инициировать.

Ссылка на комментарий
Поделиться на другие сайты

Все МАХ7219 соединены последовательно. Если передать два байта они останутся в первом чипе, а по CS1  запишется в первый эта команда, а в остальные все 0. Передавать надо по 8 байт и для инициализации и для команд

Ссылка на комментарий
Поделиться на другие сайты

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

отсылаю 0xf0 должно высветиться 11110000 а высвечивается 11111111...

Есть у вас пример программного spi именно совместимого с max7219 ?

Заработало!!!))

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Я дорабатывал для Ардуино, и писал для 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-ми байт

Ссылка на комментарий
Поделиться на другие сайты

@artos5 , заведи буфер из 8*4 байтов и сделай так, чтобы этот буфер выводился в матрицы. Тогда можно будет что угодно делать с изображением, хоть вертеть, хоть крутить, хоть двигать, ... манипулируя битами в этом буфере.

 

13 минуты назад, snn_krs сказал:

int maxbytes=maxDevices*2;

for(int i=maxbytes;i>0;i--)

 

Да уж, тут ничего не скажешь. Учитывая, что maxDevices - неизменное значение. :moil:

Ссылка на комментарий
Поделиться на другие сайты

Завел буфер 

  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} 
//д

};

Скажем первый символ в начало массива пикселей, так чтобы отображалось вдоль Экрана.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, artos5 сказал:

[4][5]

А почему на 4х5 ? 4х8 надо. Рядов то 8 штук, по 8 столбцов (8 бит). Итого - 8 байт на матрицу.
А символ загонять - дак это ж просто. Есть же индексы массива (матриц), по ним и загоняй символы.

Ссылка на комментарий
Поделиться на другие сайты

подумал что буквы красивее будут )))

А есть у тебя готовый массив символов?

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...