Автор работы: Пользователь скрыл имя, 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
Для выполнения
данной работы использованы такие инструменты
и программное обеспечение как:
Прибор может работать
без персонального компьютера, так как
основные функции выполняет микроконтроллер.
Программой выполняются: анализ, счет
и преобразования входных данных, накопление,
а также осуществляется передача данных
по запросу с персонального компьютера.
Функциональная
схема
Исходя из структурной схемы, рассмотрим необходимые технические характеристики микроконтроллера:
Выбор микроконтроллера
осуществлялся из семейства AVR, производимого
фирмой Atmel. Эти микроконтроллеры позволяют
решать множество задач . Они отличаются
от других распространенных в настоящее
время микроконтроллеров большей скоростью
работы, большей универсальностью. Быстродействие
данных микроконтроллеров позволяет в
ряде случаев применять их в устройствах,
для реализации которых ранее можно было
применять только 16-разрядные микроконтроллеры,
что позволяет ощутимо удешевить готовую
систему.
Для
микроконтроллеров семейства
Из существующих СИ компиляторов, был
выбран 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.
Для реализации технического средства на данном этапе проделаны следующие виды работ:
В этот комплекс входят:
Далее планирую
реализовать сборку самого технического
устройства. Провести отладку всех
модулей и связать с
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стр.
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <avr/interrupt.h>
/*===========================
#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_
static volatile unsigned char USART_RxHead;
static volatile unsigned char USART_RxTail;
static unsigned char USART_TxBuf[USART_TX_BUFFER_
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<<
/* UCSRC = (1<<URSEL)|(1<<USBS)|(1<<
*/
/* 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_
/* 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];
}
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 */