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

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 строк.

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

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

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

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

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

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

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

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

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

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

Символ 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 пользователей онлайн

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

  • Сообщения

    • PS Я слепой определенно. Проглядел что было на графике в стартовом посте - температура Но тем не менее, симуляции микрокапа у меня доверия в этом плане ноль. Я про реальные испытания  
    • И в чем же хрень? Вполне соответствует предложенному ТЗ - от насоса поступает постоянное напряжение 10 вольт. Видимо, это не напряжение питания мотора насоса, а от какой-то управляющей схемы. Или это насос от аквариума, маломощный, или еще что-то. "Есть в мире многое такое, друг Горацио, что и не снилось нашим мудрецам!" 
    • @beggar Учитывая, что Вам влом читать статьи, ща я вкратце поясню (но было бы лучше, Вам прочитать учебники). DCA режим мультиметра - это измерение среднего значения тока. в этом режиме, мультиметр измеряет - какой заряд, протёк за одну секунду, через поперечное сечение проводника. ЗЫ имеет значение, какое число электронов, прошло через поперечное сечение, за одну секунду, и не важно: с какой скоростью они двигались, быстро, медленно, толпами или строем,  главное - сколько. Это среднее значение тока. Действующее значение тока - это вовсе не ток, а его мощностной эквивалент. Здесь важна и скорость электронов, чем быстрее движутся электроны, тем больше потери энергии. Когда по проводнику протекает какой-то ток, на проводнике выделяется тепловая энергия, мощностью P=I*I*R. Рассмотрим случай, когда ток в 1 А протекает в течении 1 секунды, через проводник сопротивлением 1 Ом, тогда мощность равна P=I*I*R=1*1*1=1 Вт. Теперь рассмотрим другой случай, когда тот же ток в 1 ампер (среднее значение), протекает импульсом тока величиной 10 А, продолжительностью 0.1 секунды и паузой продолжительностью 0.9 секунды. тогда мощность выделяющаяся в течении 0.1 секунды P=I*I*R=10*10*1=100 Вт, а в течении 0,9 секунды, т.е. ещё 9 раз по 0,1 секунды 0 Вт, таким образом, мощность выделяющаяся в течении секунды 100/10=10 Вт. Получается, что ток, который покажет амперметр среднего значения - одинаковый, а теплота, выделяющаяся на проводнике, во втором случае, в 10 раз больше. Это какой же ток должен протекать через проводник, чтоб выделялась такая же мощность на проводнике? - получается 3.16 А, P=I*I*R=3.16*3.16*1=10 Вт. Вот амперметр среднеквадратичного значения, в первом случае, показал бы 1 А, а во втором 3.16 А. Получается, что заряд таким током (второй вариант - с импульсным током), заряжал бы аккумулятор током 1 А, а: проводники трансформатора, провода, предохранители, шунты амперметров... грелись бы, как будто по ним проходил бы постоянный ток 3.16 А. при этом, амперметр среднего значения, показывал бы ток 1 А, а амперметр действующего значения 3.16 А. ЗЗЫ хочется верить, что Вам не придётся объяснять, чем отличается - емкость конденсатора, от емкости аккумулятора…
    • что нужно изменить и в какую сторону чтобы повысить напряжение? сейчас 12В хочу попробовать сделать 18-20В, что изменить в делителе?  
    • Окончание заряда сигнализируется красочным свето-дымовым шоу )) 
    • так в видео - есть...   ферритовый стержень диаметром 8-10 мм и длинной 100-120 мм (400-600НМ).. от любой антенны от радиоприемника.. на стержень надевается гильза склеенная из плотной бумаги в несколько слоев..  на гильзу наматывается плотно виток к витку 50 витков провода в один слой... дальше эта намотка сверху изолируется тонкой прочной бумагой или скотчем...  поверх наматывается также плотно (виток к витку) еще один слой провода 50 витков..  обе катушки мотаются в одном направлении, конец одной соединяется с началом другой - это будет отвод (средний вывод по схеме)..  после намотки выводы - подклеить клеем, а всю обмотку с гильзой покрыть лаком... гильза с катушками должна плотно передвигаться по стержню.. так рекомендуют от автора.. я если бы делал, то увеличил бы общее количество витков до 200-240, а отвод (средний вывод) сделал бы от 50 витка (если считать снизу по схеме).. мотал бы проводом 0,32 - 0,36 мм диаметром.. 
    • И не надейтесь, очередная кашкаровшина в чистом виде  
×
×
  • Создать...