Плата светодиодных индикаторов для LPCXpresso.

Плата светодиодных индикаторов для LPCXpresso нацелена на создание устройств, содержащих минимальный человеко-машинный интерфейс. Для этого она оснащена четырехсимвольным светодиодным индикатором, одиночным светодиодом и двумя кнопками. Конструкция платы позволяет легко устанавливать ее на LPCXpresso, при минимальной доработке последней.

Для работы с платой индикаторов LPCXpresso должна быть оснащена штыревыми разъемами, например серии PLS, установленными с нижней части. Такие разъемы не входят в комплект поставки отладочного устройства, но при этом являются весьма удобным решением. Подобная доработка также может найти применение в случае работ с использованием плат беспаечного макетирования.

Плата индикаторов
Плата индикаторов, установленная на LPCXpresso

Конструкция платы

Конструкция платы индикаторов ориентирована на применение компонентов поверхностного монтажа и воспроизводство в домашних условиях. Для изготовления необходима заготовка из одностороннего фольгированного стеклотекстолита, размерами 82х35 мм. С целью упрощения операции пайки разъемов, установка элементов производится с лицевой стороны платы. Такое решение обосновано применением длинных 27-контактных разъемов серии PBS, с помощью которых производится стыковка с LPCXpresso.

Подключение индикатора рассчитано на реализацию режима динамической индикации. Это позволило применить элемент с малым числом выводов. В качестве такового может подойти CC56-21 фирмы KingBright или любой аналогичный с общим катодом. Дополнительно предусмотрен одиночный светодиод. Он подключен непосредственно к выводу микроконтроллера, через токоограничивающий резистор.

Принципиальная схема платы индикаторов
Принципиальная схема платы индикаторов

Кроме элементов индикации на плате разведены разъемы шины I2C и UEXT, а все свободные выводы микроконтроллера выведены на контактные площадки. Разъем I2C, кроме 4 стандартных линий содержит дополнительный вывод, подключаемый к выходу прерывания внешнего устройства на шине. Это позволяет значительно расширить алгоритмы работы проектируемых устройств, использующих I2C. Все линии периферийных разъемов подключены к соответствующим выводам микроконтроллера, отвечающим за работу с модулями интерфейсов I2C, SPI, UART.

 Печатная плата
 Печатная плата. Вид со стороны элементов.

Сборка платы

Большинство компонентов устанавливаются с лицевой стороны платы, поэтому сборка должна производиться в определенной последовательности. Вначале на свои места припаиваются все элементы поверхностного монтажа. Вторым этапом выполняется пайка 27-контактных разъемов PBS. Последние являются нестандартными и могут быть изготовлены из элементов большей длины (PBS-30). Далее следует установить разъем UEXT (IDC-10MR)и перемычки. Если UEXT не нужен, перемычки можно не устанавливать. Следующим этапом сборки будет монтаж разъема I2C (PBS-5R) , светодиода и кнопок (SWT-20). После установки всех вышеперечисленных элементов, следует проверить правильность монтажа, так как после установки индикатора, что-то исправлять будет сложно. Если все в порядке, то можно смонтировать индикатор. Некоторое неудобство его монтажа является платой за простую одностороннюю плату. 

Пример программы

Пример программы для платы индикаторов создан в системе CodeRed и представляет собой организацию режима динамической индикации. Результат работы - свечение цифр от 1 до 4.

 

#include"driver_config.h"

#include"target_config.h"

#define PORTDigit LPC_GPIO3

#define PORTSeg   LPC_GPIO2

#define Digit1 0

#define Digit2 1

#define Digit3 2

#define Digit4 3

/*Подпрограмма кодирования цифры */

void KodDigit(int dig)

{switch(dig){                                   /* EDPCXXGBAF*/

      case 0: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b1101000111); break;

      case 1: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b0001000100); break;

      case 2: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b1100001110); break;

      case 3: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b0101001110); break;

      case 4: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b0001001101); break;

      case 5: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b0101001011); break;

      case 6: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b1101001011); break;

      case 7: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b0001000110); break;

      case 8: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b1101001111); break;

      case 9: PORTSeg->MASKED_ACCESS[(0x3CF)] = (0b0101001111); break;

      default: PORTSeg->MASKED_ACCESS[(0x3CF)] =(0b0000001000); break;

            }

} /* Прерываниепотаймеру*/

void TIMER16_1_IRQHandler (void)

{LPC_TMR16B1->IR = 1;              /* clear interrupt flag */

/* Цифра 2 */

if (PORTDigit->MASKED_ACCESS[(1<<Digit1)])

{PORTDigit->MASKED_ACCESS[(1<<Digit1)] = (0<<Digit1);

KodDigit(2);

PORTDigit->MASKED_ACCESS[(1<<Digit2)] = (1<<Digit2);

return;

}

/* Цифра 3 */

if (PORTDigit->MASKED_ACCESS[(1<<Digit2)])

   {PORTDigit->MASKED_ACCESS[(1<<Digit2)] = (0<<Digit2);

   KodDigit(3);

   PORTDigit->MASKED_ACCESS[(1<<Digit3)] = (1<<Digit3);

   return;

   }

/* Цифра 4 */

if (PORTDigit->MASKED_ACCESS[(1<<Digit3)])

   {PORTDigit->MASKED_ACCESS[(1<<Digit3)] = (0<<Digit3);

   KodDigit(4);

   PORTDigit->MASKED_ACCESS[(1<<Digit4)] = (1<<Digit4);

   return;

   }

/* Цифра 1 */

if (PORTDigit->MASKED_ACCESS[(1<<Digit4)])

   {PORTDigit->MASKED_ACCESS[(1<<Digit4)] = (0<<Digit4);

   KodDigit(1);

   PORTDigit->MASKED_ACCESS[(1<<Digit1)] = (1<<Digit1);

   return;

   }

return;

} /*IRQHandler*/ 

/* Main Program */

int main (void) {

/* Настройка портов ввода вывода */

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);

LPC_GPIO2->DIR = 0x7CF;

LPC_GPIO3->DIR |= 0x00f;

/* Настройка таймера на частоту 100Гц */

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8);

LPC_TMR16B1->PR = 4800;

LPC_TMR16B1->MR0 = 50;

LPC_TMR16B1->MCR = 0x03;

LPC_TMR16B1->TCR = 0x01;

NVIC_EnableIRQ(TIMER_16_1_IRQn);

/* Установка первой цифры */

PORTDigit->MASKED_ACCESS[(1<<Digit1)] = (1<<Digit1);

while (1) {};

}

You have no rights to post comments