Разработка технического устройства, ведущего счет вошедших и вышедших посетителей супермаркета, на основе микроконтроллера ATtiny2313

Автор работы: Пользователь скрыл имя, 29 Марта 2011 в 21:35, дипломная работа

Описание работы

Счетчики посетителей обеспечивают сбор и анализ информации о количестве посетителей, находящихся в торговой точке в текущий момент и за прошедшие периоды. Этот тип статистической информации может быть использован для:
• оценки дизайна здания и инженерных сооружений с точки зрения удобства и безопасности посетителей;
• анализа тенденций посещений торгового центра;
• распределения персонала по "горячим" зонам в часы пик;
• принятия решений об открытии/закрытии дополнительных кассовых проходов и входов/выходов;
• проведения маркетинговых кампаний.

Содержание работы

Введение 3
1 Обзор литературы (имеющихся решений по аналогичным устройствам) 4
2 Основная часть 6
2.1 Описание предметной области 6
2.2 Постановка задачи 8
2.3 Функциональное требование 9
2.4 Используемые инструменты. 10
2.5 Функциональная схема 11
2.6 Алгоритм обработки информации микроконтроллером 12
3. Экспериментальные результаты 13
3.1 Выбор типа микроконтроллера 13
3.2.Выбор среды программирования микроконтроллера. 14
4. Заключение 15
5. Список используемой литературы 16
Приложение 1. Текст программы 17
Приложение 2. Принципиальные схемы 20

Файлы: 1 файл

Пояснительная записка.doc

— 357.00 Кб (Скачать файл)

2.4 Используемые инструменты.

Для выполнения данной работы использованы такие инструменты  и программное обеспечение как: 

  • Windows7
  • AVRStudio
  • Adobe Reader 9.0
  • WinDjView
  • Mozilla Firefox
  • Electronics Workbench Multisim
  • sPlan 6.0
  • ExpressPCB

2.5 Функциональная схема

 
 

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

Функциональная  схема 

    

 

 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.6 Алгоритм обработки информации микроконтроллером

 

 

 
 
 

 

 
 
 
 

 
 

 
 
 
 

 

 
 
 

 
 

 
 

 
 
 

 

 

3. Экспериментальные результаты

3.1 Выбор типа микроконтроллера

 

Исходя из структурной  схемы, рассмотрим необходимые технические  характеристики микроконтроллера:

  • Встроенной программируемой памяти Flash (2Кбайт);
  • Встроенной программируемой энергозависимой памяти данных EEPROM (128байт);
  • Внутреннего ОЗУ SRAM (128байт);
  • Один 8-разрядный таймер/счетчик с программируемым предделителем и режимом совпадения;
  • Один 16-разрядный таймер/счетчик с программируемым предделителем и режимом совпадения и режимом захвата;
  • Встроенный аналоговый компаратор;
  • Программируемый сторожевой таймер и встроенный тактовый генератор;
  • USART;
  • Напряжение питания 2,7-5,5В.
 

Выбор микроконтроллера осуществлялся из семейства AVR, производимого фирмой Atmel. Эти микроконтроллеры позволяют решать множество задач . Они отличаются от других распространенных в настоящее время микроконтроллеров большей скоростью работы, большей универсальностью. Быстродействие данных микроконтроллеров позволяет в ряде случаев применять их в устройствах, для реализации которых ранее можно было применять только 16-разрядные микроконтроллеры, что позволяет ощутимо удешевить готовую систему. 
 
 
 
 
 
 
 
 
 
 
 
 

3.2.Выбор среды программирования микроконтроллера.

Для микроконтроллеров семейства AVR существует множество компиляторов. Исходя из специфики задачи и сжатых сроков выполнения проекта, для реализации программы обработки сигналов, для микроконтроллера был выбран мощный язык программирования С (СИ). 
Из существующих СИ компиляторов, был выбран AVR Studio 4.

AVR Studio — интегрированная среда разработки (IDE) для разработки 8-битных AVR приложений от компании Atmel, работающая в операционных системах Windows NT/2000/XP/Vista/7. AVR Studio содержит ассемблер и симулятор, позволяющий отследить выполнение программы. Текущая версия поддерживает все выпускаемые на сегодняшний день контроллеры AVR и средства разработки. AVR Studio содержит в себе менеджер проектов, редактор исходного кода, инструменты виртуальной симуляции и внутрисхемной отладки, позволяет писать программы на ассемблере или на C/C++. В силу перечисленных достоинств AVR Studio может считаться удобной средой разработки приложений для микроконтроллеров AVR. 

4. Заключение

 
 

Для реализации технического средства на данном этапе  проделаны следующие виды работ:

  • Изучены микросхемы и микроэлементы, входящие в техническое устройство;
  • Изучено программное обеспечение AVRStudio;
  • Совершенствование языков программирования ассемблер и С;
  • Разработка алгоритма программного обеспечения для технического устройства;

            В этот комплекс входят:

  • Программы, ответственные за соединение оборудования с компьютером.
  • Прикладная программа — обеспечивают работу с уже поступившими данными.
 
  • Программирование  на микроконтроллере серии ATtiny2313;
  • Изучены общие принципы работы микроконтроллеров;
  • Прочтение научной литературы и различных статей.
 

Далее планирую реализовать сборку самого технического устройства. Провести отладку всех модулей и связать с программой. Довести до рабочего состояния для  представления демонстрации комиссии. 
 
 
 
 
 
 
 
 

5. Список используемой литературы

 

1. «Самоучитель по микропроцессорной технике». Белов А. В.2003 

2. «Программирование  на языке С для AVR и PIC микроконтроллеров».

    Сост. Ю.А. Шпак – К:  «МК-Пресс», 2006   -  400стр. 

3. «Микроконтроллеры   AVR  в радиолюбительской технике». Белов А. В. - СПб.: Наука и Техника, 2007  -  352стр. 

4. Интернет-ресурс: [Электрон.ресурс].- http://robozone.su/, http://infrared.h1.ru/, http://fi-com.ru/mcu/rc5 . 

5. «Применение микроконтроллеров AVR: схемы, алгоритмы, программы». – М.:    Издательский дом «Додэка - XXI», 2004  -  288стр. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение 1. Текст программы

 

#include <avr/io.h>  

#include <util/delay.h>

#include <stdio.h>

#include <avr/interrupt.h>  

/*===========================Инициализация  USART и его настройка==================*/ 
 
 

#define Fosc 8000000L

#define Baud 9600L

#define Ubrr (Fosc/(16*Baud)-1) 

/* UART Buffer Defines */

#define USART_RX_BUFFER_SIZE 32     /* 2,4,8,16,32,64,128 or 256 bytes */

#define USART_TX_BUFFER_SIZE 32     /* 2,4,8,16,32,64,128 or 256 bytes */

#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )

#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )

#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )

      #error RX buffer size is not a power of 2

#endif

#if ( USART_TX_BUFFER_SIZE & USART_TX_BUFFER_MASK )

      #error TX buffer size is not a power of 2

#endif 

/* Static Variables */

static unsigned char USART_RxBuf[USART_RX_BUFFER_SIZE];

static volatile unsigned char USART_RxHead;

static volatile unsigned char USART_RxTail;

static unsigned char USART_TxBuf[USART_TX_BUFFER_SIZE];

static volatile unsigned char USART_TxHead;

static volatile unsigned char USART_TxTail; 

/* Prototypes */

void USART_Init( unsigned int baudrate );

unsigned char USART_Receive( void );

void USART_Transmit( unsigned char data ); 
 

void USART_Init( unsigned int baud )

{

  unsigned char x=0;

/* Set baud rate */

UBRRH = (unsigned char)(baud>>8);

UBRRL = (unsigned char)baud;

/* Enable receiver and transmitter */

UCSRB = (1<<RXEN)|(1<<TXEN);

/* Set frame format: 8data, 2stop bit */

UCSRC = (1<<USBS)|(3<<UCSZ0); 

      /* Flush receive buffer */

      USART_RxTail = x;

      USART_RxHead = x;

      USART_TxTail = x;

      USART_TxHead = x;

}

/* Initialize USART */

/*void USART0_Init( unsigned int baudrate )

{

      unsigned char x=0

*/ 
 

      /* Enable UART receiver and transmitter */

/* UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) );*/  

      /* Set frame format: 8 data 2stop */

      //UCSRC = (1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);    //For devices with Extended IO

/* UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);//For devices without Extended IO

      */

      /* Flush receive buffer */

/* USART0_RxTail = x;

      USART0_RxHead = x;

      USART0_TxTail = x;

      USART0_TxHead = x;

}*/ 

/* Interrupt handlers */

ISR (SIG_UART_RECV)

{

      unsigned char data;

      unsigned char tmphead; 

      /* Read the received data */

      data = UDR;                

      /* Calculate buffer index */

      tmphead = ( USART_RxHead + 1 ) & USART_RX_BUFFER_MASK;

      USART_RxHead = tmphead;      /* Store new index */ 

      if ( tmphead == USART_RxTail )

      {

            /* ERROR! Receive buffer overflow */

      } 

       

      USART_RxBuf[tmphead] = data; /* Store received data in buffer */

} 
 

ISR (USART_UDRE_vect)

{

      unsigned char tmptail,un_volatile=USART_TxHead; 

      /* Check if all data is transmitted */

      if ( un_volatile != USART_TxTail )

      {

            /* Calculate buffer index */

            tmptail = ( USART_TxTail + 1 ) & USART_TX_BUFFER_MASK;

            USART_TxTail = tmptail;      /* Store new index */ 

            UDR = USART_TxBuf[tmptail];  /* Start transmition */

      }

      else

      {

            UCSRB &= ~(1<<UDRIE);         /* Disable UDRE interrupt */

      }

} 

/* Read and write functions */

unsigned char USART_Receive( void )

{

      unsigned char tmptail, un_volatile = USART_RxTail; 

      while ( un_volatile == USART_RxHead )  /* Wait for incomming data */

          ; 

      tmptail = ( USART_RxTail + 1 ) & USART_RX_BUFFER_MASK;/* Calculate buffer index */ 

      USART_RxTail = tmptail;                /* Store new index */ 

      return USART_RxBuf[tmptail];           /* Return data */

}

void USART_Transmit( unsigned char data )

{

      unsigned char tmphead;

      /* Calculate buffer index */

      tmphead = ( USART_TxHead + 1 ) & USART_TX_BUFFER_MASK;

        /* Wait for free space in buffer */

      while ( tmphead == USART_TxTail ); 

      USART_TxBuf[tmphead] = data;           /* Store data in buffer */

      USART_TxHead = tmphead;                /* Store new index */ 

      UCSRB |= (1<<UDRIE);                    /* Enable UDRE interrupt */

} 

unsigned char DataInReceiveBuffer0( void )

{

        unsigned char un_volatile = USART_RxHead;

      return ( un_volatile != USART_RxTail ); /* Return 0 (FALSE) if the receive buffer is empty */       

Информация о работе Разработка технического устройства, ведущего счет вошедших и вышедших посетителей супермаркета, на основе микроконтроллера ATtiny2313