Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Закрытая тема
Опции темы
Непрочитано 09.10.2018, 04:19   #11
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,163
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Вызов функции с массивом

12-12, а чем то множество отдельных светодиодов по сути своей отличается от тех восьми штук, собранных в индикатор?
По сути своей MAX7219 и есть контроллер для зажигания выбранных светодиодов в матрице 8х8.
Просто то множество нужно организовать аналогично первым 3 разрядам индикатора и зажигать соответственно.
А для упрощения использовать массив из 8 байт (unsigned char Data[8]) для хранения там значений для передачи в MAX7219.
В таком варианте функцию Write_MAX7219 можно даже без параметров использовать.
Для отдельных светодиодов вполне можно даже макросы/функции/подпрограммы написать для их зажигания/гашения.
Реклама:
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 09.10.2018, 04:25   #12
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Вызов функции с массивом

Сообщение от 12-12 Посмотреть сообщение
Да так и есть, там передаётся адрес регистра и данные этого регистра для MAX7219. Саму функцию я уже написал, цифры на семисегментник выводятся нормально, но у меня смешанное подключение, 3 цифры семисегмент. и куча светодиодов. Как столкнулся с зажиганием и погасанием отдельных светодиодов, понял что без массива никак не обойтись.
Посмотрите мой проектик,для стм32 правда,но общую картину сможете понять.
http://mcu.goodboard.ru/viewtopic.php?id=139
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 10.10.2018, 01:23   #13
12-12
Частый гость
 
Регистрация: 05.06.2007
Сообщений: 30
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 1 сообщении
12-12 на пути к лучшему
По умолчанию Re: Вызов функции с массивом

Сообщение от mike-y-k Посмотреть сообщение
а чем то множество отдельных светодиодов по сути своей отличается от тех восьми штук, собранных в индикатор?

Отличия в том, что при выводе данных на индикатор, при обновлении цифры, мы посылаем полный байт (код цифры), и нам не важно что было до этого. А в случае с светодиодами, нам всегда нужно знать значение регистра в котором мы хотим зажечь или потушить диод.
12-12 вне форума  
Непрочитано 10.10.2018, 01:37   #14
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,440
Сказал спасибо: 97
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Вызов функции с массивом

Сообщение от 12-12 Посмотреть сообщение
в случае с светодиодами, нам всегда нужно знать значение регистра в котором мы хотим зажечь или потушить диод.
Ну так у вас и есть массив DISPLAY, содержимое которого проектируется на светодиоды.
Вот только его не нужно передавать как параметр функции.
Удобно использовать макросы:

PHP код:
 
#define LED1_ON()          DISPLAY[5] |= 0b00000001
#define LED1_OFF()         DISPLAY[5] &= 0b11111110 
и в нужном месте писать:

PHP код:
 
LED1_ON
(); 
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
mike-y-k (11.10.2018)
Непрочитано 10.10.2018, 01:42   #15
12-12
Частый гость
 
Регистрация: 05.06.2007
Сообщений: 30
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 1 сообщении
12-12 на пути к лучшему
По умолчанию Re: Вызов функции с массивом

В общем всем спасибо. Вчера всё придумал, очень понравилась мне моя конструкция.

Код:
//Передача данных в Max7219 (Adres_Reg - адрес регистра, Data_In_Write - //данные для этого регистра, Led_Flag - флаг работы светодиода (0 - //потушить, 1 - зажечь))
void Write_MAX7219(unsigned char Adres_Reg,unsigned char Data_In_Write,unsigned char Led_Flag)
{
код
}

//Вызовы функции
Write_MAX7219(5,32,1);    //зажечь светодиод 
_delay_ms(500);

Write_MAX7219(5,32,0);   //потушить светодиод
_delay_ms(500);

for(X=4;X‹8;X++)       //потушить все светодиоды
{
   Write_MAX7219(X,255,0); 
}

Массив уже использовал внутри функции. Эта конструкция работает как со светодиодами, так и с индикаторами, потом просто вынесу в отдельную функцию, разложение числа на цифры.
12-12 вне форума  
Непрочитано 10.10.2018, 08:35   #16
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Вызов функции с массивом

Сорри, не читал всей темы. Так понимаю, речь о матрице 8х8 на MAX7219?
Так вот, зажигать отдельный светодиод - неинтересно, и не имеет практического значение. Полагаю, вы будете матрицу использовать для вывода текста или знаков? Ну. В матрице 8 светодиодов объединены столбиком в целый байт. Ну или строчкой, в зависимости, как повернете её. 8 байтов по 8 светодиодов составляют всю матрицу. Допустим, мы поставили ориентацию байтов - горизонтально. Заполненный
байт 0xFF зажигает горизонтальную строчку из 8 светодиодов.
Передавая последовательно 8 байтов 0xFF, мы зажжем все строчки. Причем, передав очередную строку, мы должны дернуть ногой CS.
Значит, ф-ция работы с матрицей должна состоять из восьми передач полного байта и дергания ногой CS после.

Допустим, у нас есть массив 8 байтов.
char array[8] = {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};

напишем ф-цию:
Код:
void LoadMatrix(char arr[])
{
    for(int i = 0; i ‹ 8; i++)
    {
        SPISend(arr[i]);           // отправляется байт по SPI
        SPIWaitEndTransfer();  // ожидание завершения передачи байта
        CS_IMPULSE;              // импульс на CS
    }
}
Вызов этой ф-ции прост:
LoadMatrix(array);

Так же, предполагаю, что у вас есть несколько таких матриц. Да? И тогда их можно объединить в цепочку, друг за другом. Причем, их так же можно ориентировать как горизонтально, так и вертикально. Самое простое - расположить строки горизонтально. Таким образом, в цепочке будут грузиться сначала строки для всех модулей в цепочке, затем дергаться CS, затем следующая строка, и т.д. до восьмой строки.
Первый байт строки - для последнего модуля в цепочке. Последний байт строки - для первого модуля, от которого начинается загрузка.

А вот как подготовить байты, которые будут загружаться - это другой разговор. Вот тут можно уже как угодно, хоть установкой отдельного бита, хоть как. Обычно, берется массив байтов, представляющий собой шрифт 8х8 или 6х8 - буквы, цифры, знаки. Специальными ф-циями выбирается нужная буква, и считывается из массива шрифта в массив формирования выходной строки для матрицы.
Но это уже тема отдельного разговора.

Последний раз редактировалось Исбанни; 10.10.2018 в 08:40.
Исбанни вне форума  
Сказали "Спасибо" Исбанни
Инсбани (15.10.2018)
Непрочитано 10.10.2018, 09:20   #17
12-12
Частый гость
 
Регистрация: 05.06.2007
Сообщений: 30
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 1 сообщении
12-12 на пути к лучшему
По умолчанию Re: Вызов функции с массивом

Сообщение от Исбанни Посмотреть сообщение
Сорри, не читал всей темы. Так понимаю, речь о матрице 8х8 на MAX7219?
Нет, речь шла о смешанном подключении 3х цифр семисегментника и прим. 20 светодиодов к одной микросхеме, причём светодиодами нужно управлять по отдельности, SPI программный.
12-12 вне форума  
Непрочитано 10.10.2018, 10:23   #18
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,019
Сказал спасибо: 43
Сказали Спасибо 272 раз(а) в 213 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Вызов функции с массивом

Я тоже не читал всей темы с начала,
на мой незамутнённый взгляд 20 светодиодов проще кодировать битовой маской uint32 (и написать разные #define для манипуляции с ней) ,
а 3 цифры передать 3 мя отдельными байтами.
Вот и предмета обсуждения больше нет .
dgrishin вне форума  
Сказали "Спасибо" dgrishin
mike-y-k (11.10.2018)
Непрочитано 11.10.2018, 05:38   #19
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,163
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Вызов функции с массивом

12-12, таки в первом приближении именно вариант работы с тем контроллером путём вывода в него сначала 3-х байт для сегментных индикаторов, а потом 5-ти байт с битовыми данными для тех отдельных светодиодов.
Кодировать состояние диодов битами.
Имена для диодов с префиксами LED_ и суффиксами _ON и _OFF вполне в макросы для установки/сброса битов впишутся. Или в define как параметр для функции(й) установки/сброса битов.
Поскольку массив для вывода ну никак не изменяется сам по себе - ничего страшного при таком подходе не произойдёт
Для полноты картины можно даже флаг завести для индикации изменений в том массиве и необходимости выполнения той функции Write…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 11.10.2018 в 05:43.
mike-y-k вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучение PIC C Compiler(CCS C) CERGEI1982 Embedd С 1984 30.08.2023 14:10
OLED ssd1306 + STM32f030f4 miwutka Песочница (вопросы новичков) 195 07.01.2019 15:38
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Как уйти от постоянной проверки условия if? nikolas_osu Микроконтроллеры, АЦП, память и т.д 27 15.05.2011 14:39


Часовой пояс GMT +4, время: 15:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot