Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

ИК-локатор (баръер) на Atmega8

Непрочитано 04.05.2010, 13:46  
AVL
Временная регистрация
 
Регистрация: 12.06.2006
Адрес: Україна
Сообщений: 95
Сказал спасибо: 19
Сказали Спасибо 19 раз(а) в 9 сообщении(ях)
AVL на пути к лучшему
По умолчанию ИК-локатор (баръер) на Atmega8

Всем привет!
Задумал я для детишек сделать машинку-робота, которая б ездила по комнате объезжая препятствия.
Для начала реализовал робота, двигающегося на свет, без анализа препятствий. Сделал. Ездит.
Дальше упёрся в ИК-локатор. Перелопатил массу сайтов и решений, остановился на такой прогамной реализации:
Вот линк на сайт с которого я взял идею http://licrym.org/index.php/ИК_бампер

/************************************************** ***
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 24.02.2008
Author : Spiritus Sancti
Company : licrym.org
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/

#include ‹mega8.h›
#include ‹delay.h›
#define ADC_VREF_TYPE 0x40




bit ADC_complete;
int gADC_result;

interrupt [ADC_INT] void adc_isr(void) //обработчик прерывания по завершению преобразования АЦП
{
unsigned int adc_data;
adc_data=ADCW;
gADC_result=adc_data; //отсылаем считанное значение в глобальную переменную и устанавливаем флаг
ADC_complete=1;
}


int poll_sensor(void){ //процедура опроса сенсора
int delta;
PORTB.0=1; //включаем светодиод ИК подсветки
delay_ms(1); //ждем пока разгорится
ADCSRA|=0x40; //отсылаем бит, запускающий процедуру АЦП
while(ADC_complete!=1); //ждем пока не закончится АЦП
delta=gADC_result;
ADC_complete=0; //сбрасываем флаг

PORTB.0=0; //выключаем светодиод, и снова измеряем
delay_ms(1);
ADCSRA|=0x40;
while(ADC_complete!=1);
delta=gADC_result-delta;//вычисляем значение разности
ADC_complete=0; //сбрасываем флаг
return delta;
}

void main(void)
{
int razn;
//инициализация портов и т.д.
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8B;

// Global enable interrupts
#asm("sei")

while (1)
{
razn=poll_sensor();
//пример использования сенсора. Присвоим переменной значение разности,
// и в зависимости от полученного значения будем зажигать светодиоды на порту D
//можно просто запускать какой либо процесс, если разность превышает определенный порог

if(razn ›10) PORTD.0=1;
if(razn ›20) PORTD.1=1;
if(razn ›30) PORTD.2=1;
if(razn ›40) PORTD.3=1;
if(razn ›50) PORTD.4=1;
if(razn ›60) PORTD.5=1;
if(razn ›70) PORTD.6=1;
if(razn ›80) PORTD.7=1;
delay_ms(1);
PORTD=0;
};
}


Запустил симуляцию в Протеусе. И тут начались для меня непонятки.
Оговорюсь, что в програмировании я новичок, хотя читаю уже года 4 это дело и могу писать прстейшие програмки на Си, это для меня хобби.
Так вот, что у меня с Протеусом не ясно.
После запуска симуляции выскакивает масса одинаковых сообщений (порядка 400-т):
PC=0x00AC. [AVR AD CONVERTER] Reference value = 0.
PC=0x00BA. [AVR AD CONVERTER] Reference value = 0.
PC=0x00AC. [AVR AD CONVERTER] Reference value = 0.
PC=0x00BA. [AVR AD CONVERTER] Reference value = 0.
PC=0x00AC. [AVR AD CONVERTER] Reference value = 0.
PC=0x00BA. [AVR AD CONVERTER] Reference value = 0.
PC=0x00AC. [AVR AD CONVERTER] Reference value = 0.
PC=0x00BA. [AVR AD CONVERTER] Reference value = 0.
PC=0x00AC. [AVR AD CONVERTER] Reference value = 0.


Вот эти строки на которые ругается Протеус:
PC=0x00AC while(ADC_complete!=1); //ждем пока не закончится АЦП
PC=0x00BA while(ADC_complete!=1);
Ещё и такое выскакивает:
ADC_complete R-254 ¦элемент (1 байт 0xFFFFFF02) вне блока памяти (0x00000460 байт).
gADC_result R-64252:R-64251 ¦элемент(2 байт 0xFFFF0504) вне блока памяти(0x00000460 байт).


На 23 ногу проца я повесил переменный резистор, никакой индикации на PORTD НЕТ.
На 14-й ноге генерация есть.
Если запустить в железе это дело, то всё работает. Я ИК-датчик пока не пробовал вешать, но если касаться рукой АЦП-входа, то на выходе порта D появляются импульсы.

Что не правильно, почему не работает симуляция? Помогите, пожалуйста.
Реклама:

Последний раз редактировалось AVL; 04.05.2010 в 15:11.
AVL вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроллер на основе Atmega8 и его доработка Dreadlock Электроника - это просто 16 04.05.2010 19:01
ATMega8 VS USB SkyProc Микроконтроллеры, АЦП, память и т.д 28 28.04.2010 17:01
Передача данных с ATmega8 на COM порт ПК sergx1300 Микроконтроллеры, АЦП, память и т.д 32 20.04.2010 14:19
Котроллер дисплея на Atmega8 kosant Микроконтроллеры, АЦП, память и т.д 24 30.11.2009 20:57
proteus, atmega8, меняю ноги в hex - не работает digitest Микроконтроллеры, АЦП, память и т.д 3 08.10.2009 13:07


Часовой пояс GMT +4, время: 09:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.