воскресенье, 17 августа 2014 г.

Дополнительные режимы работы АЦП в MSP430. Часть 2.

Это руководство посвящено многоканальному режиму АЦП в микроконтроллере MSP430G2553 на плате Launchpad. В предыдущей части был рассмотрен одноканальный режим АЦП с прямым доступом к памяти DMA. Точно так же можно использовать АЦП и во многоканальном режиме. АЦП будет автоматически пересылать результаты преобразования со всех каналов на заданный адрес в памяти. В этом процессе ядро микроконтроллера не задействовано и может заниматься другими делами (например расчётами). Операции с АЦП выполняются как бы в отдельном потоке. Таким образом реализуется примитивная аппаратная многозадачность. Как это сделать рассмотрено под катом.

вторник, 5 августа 2014 г.

Дополнительные режимы работы АЦП в MSP430. Часть 1.

В этой части рассказывается о том как запустить АЦП на плате Launchpad и воспользоваться продвинутыми режимами работы АЦП: одноканальным многократным и многоканальным многократным и взаимодействием с контроллером прямого доступа в памяти --- DMA. Благодаря этим режимам АЦП можно автоматизировать процесс аналого-цифрового преобразования, в отличие от PIC и AVR где нужно каждый раз дёргать бит в управляющем регистре, потом ждать конца преобразования и извлекать результат. Достаточно настроить АЦП один раз и потом АЦП будет автоматически пересылать результаты на нужный адрес в памяти без вмешательства со стороны пользователя. Несмотря на то, что микроконтроллер MSP430G2553, который идёт в комплекте с платой Launchpad, относится к категории бюджетных, плата позволяет получать результаты недостижимые для МК семейств PIC и AVR. О подробностях см. под кат.

Как задействовать функцию printf() в MSP430-GCC

Функция printf() бывает очень полезна при отладке различных устройств на MSP430 по UART. Ещё с помощью неё можно выводить сообщения на дисплеи и т.п. Printf() для MSP430 ничем не отличается от printf() из стандартной библиотеки С.

 Задействовать её очень просто. Нужно в любом месте программы определить функцию putchar(). В зависимости от функции putchar() будет различаться поведение функции printf(). Если putchar() выводит символ на UART, то printf() будет печать строку на UART. Если putchar() выводит символ на дисплей, то printf() напечатает строку на дисплее. Например в проекте из предыдущего поста определим функцию putchar() в файле uart.c вот так:
int putchar(int c)
{
    uart_putc(c);
    return c;
}
 
И теперь можно использовать отладочную печать на UART: Например вот так:

printf("P1.5 pin voltage = %d mV\n",mV);