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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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, время: 03:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot