Kniga-Online.club
» » » » Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Читать бесплатно Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

На рынке имеются сканирующие X–Y системы, которые используют для оптического сканирования в плоскости X–Y два зеркала, и два отдельных гальванометра.

Зеркала помещены перпендикулярно друг к другу. Лазерный луч следует по пути, показанному на рис. 7.10. Управляющие сигналы для X- и Y-гальванометров формируются отдельными драйверами, и позволяют проецировать лазерное излучение в любую точку плоскости X–Y. Путем последовательного вывода ряда точек могут быть созданы различные образы.

Рис. 7.10. Сканирующая XY система

7.2.4. Аппаратные средства

Рис. 7.11. Внешний аппаратный интерфейс для 68HC12

Функциональная схема управление лазерным проектором приведена на рис. 7.11. На первый взгляд эта схема может показаться сложной. Однако, Вы уже знакомы с каждой из ее подсистем, что облегчает понимание общего устройства системы. Линейка из восьми противодребезговых переключателей, подключенных к порту PORTA микроконтроллера 68HC12, используется для выбора образа, которое го пилообразного сигнала. При этом начинает светиться светодиод, связанный с PORTB[4].

Линейка из восьми противодребезговых переключателей, подключенных к порту PORTA микроконтроллера 68HC12, используется для выбора образа, которое должно быть воспроизведено лазером. Когда образ выбран, подсвечивается соответствующий ему светодиод на PORTB. Например, если мы нажимаем переключатель, связанный с выводом PORTA[4], должно выводиться изображение правого пилообразного сигнала. При этом начинает светиться светодиод, связанный с PORTB[4].

Чтобы показать, какое из изображений было выбрано, используется линейка светодиодных индикаторов. Когда изображение выбрано, соответствующие двоичные значения появляются на выходе порта PORTS[7:0] для X-гальванометра и порта PORTT[7:0] для Y-гальванометра. Они подаются на ЦАП для X-канала и ЦАП для Y-канала, соответственно. ЦАП преобразует каждое из двоичных значений в аналоговый сигнал, способный управлять усилителями гальванометров.

Сигнал управления, открывающий и закрывающий створки затвора, выводится на порт PORTP[0]. Логическая «1» открывает створки, а логический «0» закрывает их. Как и для гальванометров, для створок необходимо преобразовать логический сигнал контроллера 68HC12 в аналоговый сигнал, достаточный для того, чтобы открыть или закрыть створки. Контроллер принимает ТТЛ-совместимый входной сигнал, и преобразует его в сигнал, способный управлять приводом створок.

Завершив на этом обсуждение аппаратных средств, мы подробно рассмотрим в следующем разделе программное обеспечение для управления данной системой.

7.2.5. Структура программы и блок-схема алгоритма

Структура программы и блок-схема алгоритма для системы управления лазерным проектором представлены на рис. 7.12. Обе диаграммы довольно очевидны. Диаграмма интерфейса приводится, чтобы показать преобразование двоичного кода, поступающего от микроконтроллера 68HC12, в аналоговый сигнал ±1 В, необходимый для усилителей гальванометра.

Рис. 7.12. К программе управления лазерным проектором: блок-схема алгоритма (слева), структура программы (вверху справа), шестнадцатеричные значения к диаграмме ЦАП (внизу справа)

Система сначала инициализируется, устанавливая порты в необходимый режим (вход или выход) и закрывая лазерный затвор. Затем программа считывает информацию из порта PORTA, чтобы определить, нажат ли переключатель. Если он нажат, используется команда переключателя, позволяющая определить выбранное изображение. Код, необходимый для создания данного изображения обеспечивается выбором переключателя. Чтобы создать изображение, лазер сначала перемещается в требуемую исходную позицию для заданной траектории. Затем открывается лазерный затвор, и соответствующая траектория обеспечивается последовательностью положений лазерного луча в различные моменты времени. Мы приводим несколько примеров, и затем предлагаем вам самостоятельно, сформировать оставшиеся варианты в качестве домашней работы (задание 14).

7.2.6. Программный код

//********************************************************************

//имя файла: laser.с

//функции: программа для управления лазерным проектором

//контроллер: отладочная плата 68HC12B32 фирмы Motorola

//Выводы отладочной платы микроконтроллера 68HC12B32 фирмы Motorola:

//Port A: Конфигурирован как входной порт, активируемый нажатием

// бездребезговых переключателей на каждом входе

//Port B: Конфигурирован как выходной порт для управления светодиодным

// индикатором

//Port S: Конфигурирован как выходной порт, создающий двоичный код

// на канале X ЦАП

//Port T: Конфигурирован как выходной порт, создающий двоичный код

// на канале Y ЦАП

//Port P[0]: Конфигурирован как выходной порт, создающий TTL совместимый

// сигнал для управления затвором

//авторы: Steve Barrett and Daniel Pack

//создан: февраль 20, 2003

//последняя редакция: март 3, 2004

//********************************************************************

//включенные файлы

//********************************************************************

#include <912b32.h>

//функции прототипов

void initialize_ports(void); //инициализация портов

void shutter(int); //открытие/закрытие створок

void position_laser(unsigned char, unsigned char); // положение лазера

void delay(void);

#define open 1

#define close 0

//main program*************************************************************

//global variables

unsigned char new_PORTA, old_PORTA = 0xFF;

int i;

int go;

void main(void) {

 //инициализировать вектор reset B32

 asm(".area vectors(abs)n"

  ".org 0xFFF8n"

  ".word 0x8000, 0x8000, 0x8000, 0x8000n"

  ".text");

 go = 1; //начало цикла while

 initialize_ports(); //инициализировать порты

 shutter(close); //закрыть створки

 position_laser(0x80,0x80); //расположить луч в центре

 while(go) { //продолжать, пока не нажмут кнопку Stop

  new_PORTA = PORTA; //read PORTA input switches

  if (new_PORTA != old_PORTA) switch(new_PORTA){ //формировать образ по значению

                                                  //нажатой клавиши

   case 0x7F: //PA7 - Точка в центре экрана

    PORTB = 0x80;// подсвечивает светодиод порта PORTE

    position_laser(0x80,0x80);

    shutter(open);

    delay();

    shutter(close);

    PORTB=0x00; //включает красные светодиоды индикатора

    break;

   case 0xBF: //PA6- горизонтальная линия

    position_laser(0x00,0x80);

    shutter(open);

    for{i=0; i<=255; i++) {

     i = (unsigned char)(i);

     position_laser(i, 0x80);

     delay();

    }

    shutter(close);

    PORTB=0x00; //включает красные светодиоды индикатора

    break;

   case 0xDF: //PA5 - Вертикальная линия

    PORTB = 0x20; // подсвечивает светодиод порта PORTB

    position_laser(0x80,0x00);

    shutter(open);

    for(i=0; i<=255;i++) {

     i=(unsigned char)(i);

     position_laser(0x80,i);

     delay();

    }

    shutter(close);

    PORTB=0x00; //включает красные светодиоды индикатора

    break;

   case 0xFF: //PA4 - Правая пила под углом 45 градусов

               // с Юго-Запада на СВ

    PORTB = 0x10; // подсвечивает светодиод порта PORTB

    position_laser(0x00,0x00);

    shutter(open);

    for(i=0; i<=255; i++) {

     i = (unsigned char)(i);

     position_laser(i, i);

     delay();

    }

    shutter(close);

    PORTB=0x00; //включает красные светодиоды индикатора

    break;

   case 0xF7: //PA3 - Левая пила под углом 45 градусов

              //с ЮВ на СЗ

    PORTB = 0x08; // подсвечивает светодиод порта PORTB

    delay();

    PORTB=0x00; // включает красные светодиоды индикатора

    break;

   case 0xFB: //PA2 Окружность

    PORTB = 0x04; // подсвечивает светодиод порта PORTB

    delay();

    PORTB=0x00; //включает красные светодиоды индикатора

    break;

   case 0xFD: //PA1 Синусоида

    PORTB = 0x02; // подсвечивает светодиод порта PORTB

    delay();

    PORTB=0x00; // включает красные светодиоды индикатора

    break;

   case 0xFE: //PA0 Остановка

    PORTB = 0x01; // подсвечивает светодиод порта PORTB

Перейти на страницу:

Стивен Барретт читать все книги автора по порядку

Стивен Барретт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С отзывы

Отзывы читателей о книге Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С, автор: Стивен Барретт. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*