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

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

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала


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

Прочтите описание перед тем, как прочитать онлайн книгу «Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С» бесплатно полную версию:
В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах. Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров. Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.

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

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

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

/*decision(): решение о повороте основано на информации, полученной от*/

/* пяти датчиков. Порог датчика Холла (hes_threshold) и порог       */

/* оптического датчика (opto_threshold) определяются экспериментально.*/

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

void decision() {

 if (sens[5] < hes_threshold) { /* датчик Холла нашел "мину", */

  pwm_motors(back_up); /* робот движется назад и определяются */

  /* дальнейшие действия/*

  if (sens[0] > opto_threshold) pwm_motors(right_turn);

  else pwm_motors(left_turn);

  for(i=0; i<0xFFFF; i++){ /*задержка вращения двигателя */

   for(j=0; j<15; j++) {

    ;

   }

  }

 }

 /*если обнаруживает три стенки (тупик), то движется назад */

 else if((sens[2]>opto_threshold) && (sens[0]>opto_threshold)

  && (sens[4]>opto_threshold)) {

  pwm_motors(back_up);

 }

 /*если стенки спереди и слева, поворачивает направо */

 else if((sens[0]>opto_threshold)&&(sens[2]>opto_threshold)) {

  pwm_motors(right_turn);

 }

 /*если стенки спереди и справа, поворачивает налево */

 else if((sens[2]>opto_threshold)&&(sens[4]>opto_threshold)) {

  pwm_motors(left_turn);

 }

 /*если стенка спереди справа, делает полуповорот направо*/

else if(sens[1]>opto_threshold) {

  pwm_motors(half_right);

 }

 /*если стенка спереди слева, делает полуповорот налево */

 else if(sens[3] > opto_threshold) {

  pwm_motors (half_left) ;

 }

 /*если стенки вблизи нет, продолжает движение вперед */

 else {

  pwm_motors(forward);

 }

}

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

/*init_pwm(): инициализация ШИМ контроллера 68HС12                  */

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

void init_pwm() {

 PWTST= 0x00;

 PWCTL= 0x00; /*Режим фронтовой ШИМ */

 WCLK= 0x3F; /*Каналы без каскадного соединения, E_CLK/128 */

 PWPOL= 0x0F; /*set pins high then low transition */

 DDRP = 0xFF; /*Порт PORT T на вывод */

 PWEN = 0x0F; /*Активизировать выход ШИМ */

 PWPER0 = 250; /*Установить частоту ШИМ 250 Гц */

 PWPER1 = 250;

 PWPER2 = 250;

 PWPER3 = 250;

 PWDTY0 = 0; /*начальная установка ШИМ на отсутствие движения*/

 PWDTY1 = 0;

 PWDTY2 = 0;

 PWDTY3 = 0;

}

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

/*pwm_motors: /*выполнение определенного поворота                   */

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

void pwm_motors(const char a) {

 for (i = 0;i<2000;i++) /*задержка на 3 мс чтобы позволить двигателю*/

 {                      /* отреагировать*/

 }

 switch(a) { /*определение вида поворота */

 case 0: /* движение вперед */

  PWDTY0 = 200; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 250;

  PWDTY2 = 250;

  PWDTY3 = 200;

  lcd_print("Forward\n");

  break;

 case 1: /*полуповорот налево */

  PWDTY0 = 0; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 250;

  PWDTY2 = 250;

  PWDTY3 = 125;

  lcd_print("Half Left\n");

  break;

 case 2: /*полуповорот направо*/

  PWDTY0 = 125; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 250;

  PWDTY2 = 250;

  PWDTY3 = 0;

  lcd_print("Half Right\n");

  break;

 case 3: /*поворот налево*/

  PWDTY0 = 125; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 250;

  PWDTY2 = 0;

  PWDTY3 = 125;

  lcd_print("Left Turn\n");

  break;

 case 4: /*поворот направо*/

  PWDTY0 = 125; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 0;

  PWDTY2 = 250;

  PWDTY3 = 125;

  lcd_print("Right Turn\n");

  break;

 case 5: /*задний ход*/

  PWDTY0 = 125; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 0;

  PWDTY2 = 0;

  PWDTY3 = 125;

  for(i=0; i<0xFFFF; i++) { /* Задержка в 1,25 с перед движением назад*/

   for(j=0; j<15; j++) {

    ;

   }

  }

  lcd_print("Back Up\n");

  break;

 default: /*по умолчанию движение вперед, малая скорость */

  PWDTY0 = 63; /*регистры коэффициента заполнения ШИМ */

  PWDTY1 = 250;

  PWDTY2 = 250;

  PWDTY3 = 63;

  lcd_print("Error\n");

  break;

 }

}

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

/*lcd_init(): инициализация режима работы ЖК дисплея                */

/*Последовательность команд инициализации определяется изготовителем*/

/*PORTA: магистраль данных, PORTB[2:1]: линия R/S, линия разрешения E*/

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

void lcd_init() {

 DDRA=0xff; /*порт PORTA на вывод */

 DDRB=0x06; /* порт PORTB [2:1] на вывод */

 /*последовательности команд для инициализации ЖК дисплея */

 putcommand(0x38);

 putcommand(0x38);

 putcommand(0x38);

 putcommand(0x38);

 putcommand(0x0f);

 putcommand(0x01);

 putcommand(0x06);

 putcommand(0x00);

 /*очистка дисплея, возврат курсора */

 putcommand(0x00);

}

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

/*putchar(char c): вывод символа на дисплей                         */

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

int putchar(char c) {

 PORTA=C;

 PORTB= PORTB |0x04;

 PORTB= PORTB |0x02;

 PORTB= PORTB&0xfd;

 for (i=0; i<100; i++); /*задержка на *150 мкс до того, как ЖКД */

                        /* сможет принять информацию */

 return с;

}

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

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

/*putcommand(char c): выдача команды управления для ЖК дисплея      */

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

int putcommand(char с) {

 PORTA= с;

 PORTB= PORTB&0xfb;

 PORTB= PORTB|0x02;

 PORTB= PORTB&0xfd;

 for (i=0; i<100; i++) /* задержка на *150 мкс до того, как ЖКД сможет*/

                       /*принять информацию */

 {

  ;

 }

 return c;

}

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

/*delay_25(): задержка на 2.5 с                                     */

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

void delay_25() {

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

  for (j=0; j<30; j++) {

   ;

  }

 }

}

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

/*lcd_print(): вывод строки символов на дисплей.                    */

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

void lcd_print(char *string) {

 putcommand(0x02); /*возврат курсора ЖКД */

 while (*(string) != '\0') {

  putchar(*string);

  string++;

 }

}

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

7.2. Лазерный проектор

В этом разделе, мы описываем разработку и построение встроенной системы управления для лазерного проектора. Вы вероятно видели такую систему, на концерте или в планетарии. Аналогичный подход может быть использован при разработке точного лазера для медицинских целей или для технологических установок, например, чтобы управлять лазером для точной гравировки.

7.2.1. Описание проекта

Система имеет семь образцов изображений, которые проектируются лазером на стену или киноэкран. Мы выбираем один из них для проекции, нажав соответствующую кнопку. Как только изображение выбрано, подсвечивается светодиод, соответствующий выбранному варианту. Затем система управления открывает лазерный затвор, позволяя лазерному лучу пройти на пару гальванометрических зеркал. Микроконтроллер 68HC12 генерирует сигналы управления, позволяющие изменять угол поворота зеркал, чтобы создать предварительно записанное в памяти изображение с помощью внешних по отношению к МК цифро-аналоговых преобразователей (ЦАП). Выбранное изображение выводится однократно при каждом нажатии кнопки. Конструкция системы приведена на рис. 7.8.

Рис.7.8. Встроенная система управления лазерным проектором

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.