Altinkaya: турецкие корпуса для РЭА

Светодиодный индикатор клавиш пианино. Управление от ПК по USB

Страница 4 из 4
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
23.03.2014 21:58 #31
Безусловно Вы правы. Другие МК брать незачем.

Но лишний кругозор ТС не помешает, и я лишь добавил, что программная реализация USB описана самим производителем МК в appnote, а значит есть и «примерочный» код :-) (example code) где-то на сайте Atmel, и стартовые проекты ПО под Windows, рекомендованные самим производителем для изучения. Причём исходники для МК скорее всего есть на Си безотносительно среды разработки (или даже платформы). Я уже молчу про форумы техподдержки (правда, англоязычные), где такие вопросы регулярно поднимаются.

И раз уж поднята тема USB, решил я, не упомянуть всего многообразия кремниевого «животного» мира МК было бы предосудительным.

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

Вот и бегущую строку упомянули, а ведь стоило это сделать раньше, но как мне кажется, проблемы вырастут не со стороны МК.

Выбор решения всегда за ТС и текущая задача, в данной постановке ТС, показать многовекторность в выборе направления движения. Я прав? Ведь не сразу поймешь, начиная новую работу, где искать и что придётся по душе. Более конкретных вопросов пока не последовало.

Интересное устройство должно получится. Необычное. Всегда приятно поучаствовать в создании нового (по назначению), хоть и совсем косвенно – в обсуждении.
Оценка
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Новичок
 
Регистрация: 12.03.2014
Сообщений: 11
Репутация: 10
0 19
0 0
 
29.03.2014 10:41 #32
Если писать ПО для компьютера, тогда нужно учесть особенности работы регистра 74HC595. И вот здесь у меня ступор: получается, что нужно делать так: 0 на MR, 1 на ST; 1 на MR (до конца цикла записи), биты идут в DS, a 1 на SH их "выпускает". Затем защёлкнуть 1-цей на ST и повторить тот же цикл с другими переменными.
Правильно ли я понимаю, что данный алгоритм нужно прописать в программе на компьютере, или же подачей 0 и 1 на такие ноги, как ST, SH, MR займётся мк, а от компьютера требуется лишь сформировать нужные переменные для ноги DS?
P.S. Задумался об adruino.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
29.03.2014 17:21 #33
Не думайте о регистрах, об этом позаботится МК.
Задача ПО на компьютере – передать массив из 11 байт (пускай для простоты у Вас только 88 светодиодов), причем каждая клавиша из полных 7 октав инструмента занимает какое-то место в этом «потоке» бит, как-то так: 10101000, 10000100, … , 00000000, 00000000 (1 - нажата, 0 - не нажата). В программе МК (не важно как получены данные – UART, USB) заведён массив из 11 однобайтовых элементов. Как только данные получены и массив заполнен свежими данными (скажем, выставлен какой-то флаг-переменная), вызывается функция вывода данных в регистры. Вот быстрый набросок, чтобы не бать голословным, используем COM-порт:

Код:
#include <avr/io.h>
#include <avr/interrupt.h>

void hardware_init(void);
void interrupts_init(void);
void hc595_light(uint8_t digits_mas[]);

volatile char v_new_data_flag = 0x00;
volatile int v_i = 0;

uint8_t data_mas[11];

int main()
{
   hardware_init(); // Настраиваете всё нужным образом
   interrupts_init();
   sei();
   
   while(1)
   {
      if(v_new_data_flag == 0x01) // Если пришли новые данные
      {
         hc595_light(data_mas);   // Вывод данных
         v_new_data_flag = 0x00;  // Cброс флага
      }
   }
}

void hardware_init(void)
{
   // Инициализация всего, что может понадобится
}
void interrupts_init(void)
{
   // Аналогично
}

// Обработчик прерывания при приёме данных по UART
ISR(USART_RX_vect)
{
   data_mas[v_i] = USART_receive(); // Принимаем байт, считываем UDR
   v_i++;                           // Наращиваем счётчик, он же - индекс массива
   
   if(v_i>=11)                      // Если приняты все 11 байт
   {
      v_new_data_flag = 0x01;     // Выставляем флаг и возвращаемся к нулевому индексу, 
      v_i = 0;                      // так что следующий принятый байт запишется в data_mas[0]
   }
}

void hc595_light(uint8_t digits_mas[])
{
   for(int k=0; k<=10; k++)         // 11 байт в массиве, все выводятся друг за другом
   {
      uint8_t mask = 0x80;
      for(int i=7; i>=0; i--)       // Побитный вывод каждого байта в массиве
      {                             // Порядок вывода зависит от того, как формировали данные, как распаяны регист регистры
         if(digits_mas[k] & mask)
            sbi(SDI_PORT, SDI_PIN); // Если 1, то линию данных в 1
         else
            cbi(SDI_PORT, SDI_PIN); // Если 0, то линию данных в 0
         mask = mask >> 1;
 
         sbi(CLK_PORT, CLK_PIN);    // Подняли тактовый 
            _delay_us(2);
         cbi(CLK_PORT, CLK_PIN);    // Опустили тактовый (запись по спадающему фронту)
            _delay_us(2);
       }
    }
 
   sbi(LE_PORT, LE_PIN);            // Разрешаем запись в выходной буфер всех регистров hc595
      _delay_us(2);
   cbi(LE_PORT, LE_PIN);            // Запрет записи в выходной буфер до следующего обновления
      _delay_us(2);
}
Как наиболее правильно реализовать передачу – отдельный вопрос, его, как и возможной потери данных, не касаемся. Также нужно понимать, что такой "непосредственный" подход к реализации алгоритма программы МК подразумевает, что Ваш МК должен успевать принимать и обрабатывать данные до прихода новых. Но это удобно для анализа. И едва ли кто-то сможет пальцами обогнать МК :-)
Последний раз редактировалось antonydublin; 29.03.2014 в 17:30.
Оценка
Новичок
 
Регистрация: 29.03.2014
Сообщений: 1
Репутация: 10
 
29.03.2014 21:30 #34
Цитата:
Если писать ПО для компьютера, тогда нужно учесть особенности работы регистра 74HC595.
Вы все усложняете. Нужно отделить мух от котлет. Пусть ПК шлет данные, а работой с железом (ногодрыганье 74HC595) занимается МК.
Но можно отказаться от МК подключив 74HC595 к COM порту. Но порт должен быть не в виде переходника, а не материнской плате компа, в крайнем случае на PCI плате расширения.
На чем пишите кстати для ПК и МК?

Цитата:
Задумался об adruino.
С паяльником не дружите что ли?
Использование МК более рационально и дешевле выйдет. А adruino это навязанная конфигурация, которая мало того что получится дороже, так и возможно что по некоторым параметрам будет недостаточна или наоборот, слишком избыточна.
И кроме того, adruino ide, не торт и ей ищут аналоги. http://habrahabr.ru/post/151544/
Цитата:
А на сладкое — код, компилируемый в bascom значительно меньше по размеру и выполняется часто быстрее, чем код от Arduino IDE.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
29.03.2014 21:51 #35
Спасибо большое за замечание по Arduino. Сам весьма скептически отношусь к этой платформе. Но... ведь многим легче стартовать с конкретных примеров, обсуждаемых на http://arduino.ru/ - там много картинок :-), что само по себе хорошо. Многих может заинтересовать возможность работы с платой через Matlab (мне, к примеру, была интересна связка с Simulink - только как пример) и многое другое. А о скорости выполнения кода, очевидно, речь не идёт. Какая избыточность и недостаточность, к чему разговоры о рациональности... Более того, Паятель, посмотрите ветку с начала и Вы поймёте, что задаёте риторические вопросы:
Цитата:
На чем пишите кстати для ПК и МК?
С паяльником не дружите что ли?
Ответ в обоих случаях "пока что нет" (не в обиду топикстартеру). Так что планомерно отвечаем на любые вопросы, в чём нет ничего зазорного.

Думаю, к этому моменту ТС определился со средой для МК. Кстати, загляните вот на этот ресурс по Atmel - www.avrfreaks.net. Более "живой" базы знаний по AVR, наверное, не существует. Там тысячи проектов с исходными кодами, большинство под WinAVR (GCC компилятор) в связке с AVR Studio.
Последний раз редактировалось antonydublin; 29.03.2014 в 22:28.
Оценка
Ответ
Страница 4 из 4
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 22:53.
Обратная связь РадиоЛоцман Вверх