Подписаться на получение новых статей на почту:

Шаг №42. Передача данных с AVR на ПК по UART. Калибровка частоты

Всем привет. В этой статье мы рассмотрим применение преобразователя UART-USB (статья№8) для передачи данных логгера (статья №39) или какого-либо устройства, например Doctor AVR (статья №7), используя настройки аппаратного УАПП микроконтроллера AVR (статья № 40). Также рассмотрим возможные варианты настройки модуля и синхронизации устройств.

Ниже представлен рисунок вывода информации на терминал устройства для восстановления микроконтроллеров Atmega fusebit Doctor AVR по формату протокола 4800/8-N-1. В данном устройстве настройки уже прописаны и преобразователь без проблем распознает и передает информацию на ПК в данном случае на скорости 4800 бод. Как видите в настройках терминала мы должны выбрать номер COM-порта, количество передаваемых битов, стоп-битов а также четнось либо ее отсутствие. На этом все настройки со стороны терминала закончены. На терминал выводится «состояние» контроллера, который мы «полечили».

 
USB-UART DoctoravrДалее рассмотрим настройку микроконтроллера. Выведем данные логгера, которые после записи на SD-карту, будут передаваться по UART на ПК.  Как Вы помните в предыдущей статье №41 мы рассмотрели передачу байта данных между контроллерами. Сегодня мы будем передавать строку. Здесь ничего сложного, просто в данном случае передаем массив. Ниже представлен алгоритм настройки модуля, функции передачи данных и калибровки генератора.

 

#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#define BAUD 9600 //Скорость (бод)
#define MYUBRR F_CPU/16/BAUD-1 //формула для вычесления значения регистра.
void usart_init (unsigned int ubrr) {
 /* устанавливаем скорость Baud Rate: 9600*/
       UBRRH=(unsigned char)(ubrr>>8);
       UBRRL=(unsigned char) ubrr;
       UCSRA=0×00;
 /* Разрешение работы передатчика*/
       UCSRB=(1<<TXEN);
 /*Установка формата посылки*/
      UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

  void uart_putc ( char c ) {
      /*ждем окончания передачи предыдущего байта*/
      while ( ( UCSRA & ( 1 << UDRE ) ) == 0 );
      UDR = c;
}

void uart_puts ( char *str ) {
      unsigned char c;
      while ( ( c = *str++ ) != 0 ) {
      uart_putc ( c );
   }
}

int main (void) {
     usart_init (MYUBRR);  //инициализация модуля
     sei ();
while (1) {
          OSCCAL = 165;
           uart_puts («Здесь передаем какую-либо информацию»);
           _delay_ms (500);
     }
}
USB-UART логгерНа рисунке слева представлен результат на терминале: температура, время и дата.  Как мы рассмотривали в других статьях данный протокол очень чуствителен к скорости. Т.е. в свою очередь от задающего источника частоты. Я в данном примере использовал внутренний RC-генератор на 1 МГц. Поэтому сначала на терминал выводились «крякозяблы». В данном случае необходима калибровка внутреннего генератора.  Для этого в микроконтроллере есть специальный регистр OSCCAL, чем больше значение данного регистра (от 0 до 255), тем больше частота генератора. Ниже приведена таблица зависимости  частоты генератора от содержимого регистра

OSCCAL
Fmin
Fmax
00
50
100
7F
75
150
FF
100
200

Значение регистра подбирается в цикле. Как только на терминал выводятся понятные символы, запоминаем значение OSCCAL. У меня при значении 165, на терминал начали выводится необходимые данные. Все же использование внутреннего генератора не рекомендуется.И данный материал больше для экспериментальной части. Поэтому ниже собраны и приведены некоторые рекомендации для использования и настройки протокола UART

-          Частой ошибкой, при первом использовании протокола является неправильное подключение. Должно быть так TXD – RXD ,  RXD-TXD, GND-GND. Обязательно соединяйте землю. Так частой причиной вывода на терминал только 0, есть отсутствие земли;
-          Для проверки работы преобразователя UART-USB необходимо замкнуть RXD и TXD. При отправке символа с терминала на него приходит тот же символ;
-          Часто при работе от внутреннего генератора на 8 МГц, забывают снять фьюз div8, который делит частоту. Данный момент зависит от программы, в который производите конфигурацию;
-          Вывод неправильных символов – выбирайте значения UBRR по таблице, статья №40.
-          Проверь в диспетчере устройства, должен появиться виртуальный COM-порт;
-          Для стандартной скорости передачи данных выбирайте кварц из ряда 1,8432 ; 3,6864; 7,3728; 11,0592; 14,7456 МГц.
-          Циклическая инициализация модуля (частая) при которой микроконтроллер отказывается функционировать. Достаточно одного раза, если не меняется конфигурация.
-          Иногда бывает что тактовый генератор заводится не на частоте кварца, а на какой-нибудь  из гармоник. Вследствие чего появляются проблемы со скоростями;
-          При присутствии в инициализации прерываний, должна быть их обработка;
-          Буфер вывода реализовывать на прерывании по UDRE;
-          Использовать калибровку внутреннего генератора AVR, рассматривали выше.

логгер вывод по UART логгер внешний вид

 

 

 

 

 

На этом шаге по передаче данных на ПК мы пока остановимся. Начиная со статьи №16 по №42 мы с Вами спроектировали контроллер сбора данных(Рис. выше справа). С возможностью сохранения данных на карту SD а также передачу на внешнее устройство по УАПП. В ходе этих шагов мы рассмотрели каждый датчик и протокол в отдельности и вместе, для чего писали код более универсальным и переносимым. Рассмотрели виртуальную работу датчиков и других схем в симуляторе(Рис. выше слева)  Единственный момент мы не рассмотрели и не интегрировали в логгер передачу данных по GSM. Данный этап отложим немного на будущее. В следующей статье мы рассмотрим еще один способ изготовления плат с помощью фоторезиста. После (статья №44) мы начнем разрабатывать приложение на ПК на языке java, где научимся работать с данными нашего логгера, а именно управление, сохранение в базу данных, передача другим пользователям. На этом на сегодня все. Всем пока.

Просмотрено 6498 раз.

Я на Google+

Шаг №42. Передача данных с AVR на ПК по UART. Калибровка частоты: 3 комментария

  1. Частота просмотра буфера должна быть чаще, чем частота с которой контроллер посылает данные в буфер, в противном случае буфер будет переполняться и данные будут теряться.

  2. Формирование репортов передачи и приема данных. Пересылка репортов между персональным компьютером и термометром.

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting