HRP-N3 - серия источников питания с максимальной пиковой мощностью в 350% от MEAN WELL

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

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

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

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

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

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

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

Интересное устройство должно получится. Необычное. Всегда приятно поучаствовать в создании нового (по назначению), хоть и совсем косвенно – в обсуждении.
Оценка
В многообразии литиевых батареек и аккумуляторов нет какого-то универсального или идеального варианта. Выбирая тот или иной вариант для питания устройства, разработчику приходится оперировать множеством параметров, используя наиболее оптимальное их сочетание для каждого приложения. Разберем параметры для различных приложений.
Новичок
 
Регистрация: 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
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
372 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
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
372 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, время: 02:50.
Обратная связь РадиоЛоцман Вверх