роботы робототехника микроконтроллеры


 Страниц (8): « 1 [2] 3 4 5 6 7 8 »   

> Без описания
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



ok попробую без транзистора только у остается проблема с прошивкой мк если какие-то мысли по программе папишите
(Добавление)
вроде все порты указаны правильно Улыбка
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Со светодиодом нужно смотреть, чтобы ток через него не превышал возможности микроконтроллера.

Я ничего из подключенного к микроконтроллеру не забыл?

Если нет, то впуть Ухмылка

Первая проверочная программа

CODE:

#include<avr/io.h>
#include <util/delay.h>

#define F_CPU 8000000UL /* частота в герцах, для кварцевого резонатора 8 MHz */

int main(void)
{

int i;

DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 2 */
/* PB1 */
/* PB2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<4); /* PB4 сконфигурировать как выход, индикаторный светодиод 2 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD |= (1<<6); /* PD6 сконфигурировать как выход, ИК-диод 1 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 2 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
/* PD6 */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */

/* ***** расчет временной задержки *****
1 / 36000 * 1000000 / 2 = 14
1 / 36000 * 1000000 * 20 = 555
************************************** */

while(1)
{

PORTB |= (1<<3); /* установить "1" PB3 */
PORTB &= (~(1<<4)); /* установить "0" на PB4 */

_delay_ms(1000); /* временная задержка */

PORTB |= (1<<4); /* установить "1" на PB4 */
PORTB &= (~(1<<3)); /* установить "0" на PB3 */

_delay_ms(1000); /* временная задержка */

} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */


Работает программе так: одну секунду горит один индикаторный светодиод, а другую - другой и так пока есть ток Улыбка

(Отредактировано автором: 23 Мая, 2010 - 18:03:21)

 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



прошил микроконтоллер и свето диоды примерно 8 секунд один горит 8 секунд другой
вот что пока получается на данный момент фото
(Добавление)
вроде ничего в программе не забыли все ok Улыбка
Прикреплено изображение
DSC01985ааа.JPG

(Отредактировано автором: 23 Мая, 2010 - 19:49:51)

 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Посмотрите в Makefile, там должны быть такие строчки

# Processor frequency
F_CPU = 8000000

За одно и это проверьте

# MCU name
MCU = atmega8

Если не так, исправьте, перекомпилируйте и перепрошейте.
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



в Makefile все так и установленно
F_CPU = 8000000
MCU = atmega8
(Добавление)
кажется понял в чем дело он работает от внутренего rc-генератора
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Измените Makefile

F_CPU = 1000000

CODE:

#include<avr/io.h>
#include <util/delay.h>

/* #define F_CPU 8000000UL частота в герцах, для кварцевого резонатора 8 MHz */

int main(void)
{

int i;

DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 2 */
/* PB1 */
/* PB2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<4); /* PB4 сконфигурировать как выход, индикаторный светодиод 2 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD |= (1<<6); /* PD6 сконфигурировать как выход, ИК-диод 1 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 2 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
/* PD6 */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */

/* ***** расчет временной задержки *****
1 / 36000 * 1000000 / 2 = 14
1 / 36000 * 1000000 * 20 = 555
************************************** */

while(1)
{

PORTB |= (1<<3); /* установить "1" PB3 */
PORTB &= (~(1<<4)); /* установить "0" на PB4 */

_delay_ms(1000); /* временная задержка */

PORTB |= (1<<4); /* установить "1" на PB4 */
PORTB &= (~(1<<3)); /* установить "0" на PB3 */

_delay_ms(1000); /* временная задержка */

} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */


Сколько времени светит один светодиод?
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



8 секунд
(Добавление)
сейчас попробую переставить фьюзы в ponyprog-е на внешнем кварце 8 мгц.
(Добавление)
решил не трогать фьюзы ,установил в Makefile 10Мгц но также 8 секунд один 8 секунд другой
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Манипуляции с фьюзами требуют хорошего понимания того, что делаешь, иначе ничем хорошим это не закончится.

Установите в Makefile частоту 1 Мгц

Попробуйте так

CODE:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{

int i;

DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 2 */
/* PB1 */
/* PB2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<4); /* PB4 сконфигурировать как выход, индикаторный светодиод 2 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD |= (1<<6); /* PD6 сконфигурировать как выход, ИК-диод 1 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 2 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
/* PD6 */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */

/* ***** расчет временной задержки *****
1 / 36000 * 1000000 / 2 = 14
1 / 36000 * 1000000 * 20 = 555
************************************** */

while(1)
{

PORTB |= (1<<3); /* установить "1" PB3 */
PORTB &= (~(1<<4)); /* установить "0" на PB4 */

_delay_ms(1000); /* временная задержка */

PORTB |= (1<<4); /* установить "1" на PB4 */
PORTB &= (~(1<<3)); /* установить "0" на PB3 */

_delay_ms(1000); /* временная задержка */

} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */


Для ИК-бампера на TSOPах очень важно точно определять время.
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



все ok Улыбка 1сек один 1сек другой выставил Makefile частоту 1 Мгц и запрограммировал микроконтроллер по последней программе
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



CODE:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{

int i;

DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 2 */
/* PB1 */
/* PB2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<4); /* PB4 сконфигурировать как выход, индикаторный светодиод 2 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD |= (1<<6); /* PD6 сконфигурировать как выход, ИК-диод 1 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 2 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
/* PD6 */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */


/* ***** расчет временной задержки *****

1 MHz
1 / 36000 * 1000000 / 2 = 14
1 / 36000 * 1000000 * 20 = 555

8 MHz
1 / 36000 * 8000000 / 2 = 111
1 / 36000 * 8000000 * 20 = 4444

************************************** */


while(1)
{


/* формирование пачки для TSOP 1 */
for(i=0;i<20;i++) /* цикл выполняется 20 раз */
{
PORTD |= (1<<6); /* установить "1" на PD6 */
_delay_us(14); /* временная задержка */
PORTD &= (~(1<<6)); /* установить "0" на PD6 */
_delay_us(14); /* временная задержка */
}



_delay_us(555); /* временная задержка */


/* формирование пачки для TSOP 2 */
for(i=0;i<20;i++) /* цикл выполняется 20 раз */
{
PORTB |= (1<<0); /* установить "1" на PB0 */
_delay_us(14); /* временная задержка */
PORTB &= (~(1<<0)); /* установить "0" на PB0 */
_delay_us(14); /* временная задержка */
}



_delay_us(555); /* временная задержка */


} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */


Эта программа должна мигать ИК-светодиодами. Мигать они должны очень быстро. Чтобы увидеть их свет нужно воспользоваться цифровым фотоаппаратом (даже с мобильного телефона сгодится). Заодно проверьте мои расчеты по задержкам.
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



видно только что светят но не поймешь мигают они или нет Замешательство видимо все ok главное что работают Улыбка
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Вот собственно и вся программа для ИК бампера на TSOP. Я надеюсь Ухмылка

CODE:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{

int i;

DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 2 */
/* PB1 */
/* PB2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<4); /* PB4 сконфигурировать как выход, индикаторный светодиод 2 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD |= (1<<6); /* PD6 сконфигурировать как выход, ИК-диод 1 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 2 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
/* PD6 */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */


/* ***** расчет временной задержки *****

Mk 1 MHz TSOP 36 KHz
1 / 36000 * 1000000 / 2 = 14
1 / 36000 * 1000000 * 20 = 555

Mk 8 MHz TSOP 36 KHz
1 / 36000 * 8000000 / 2 = 111
1 / 36000 * 8000000 * 20 = 4444

************************************** */


while(1)
{


/* формирование пачки для TSOP 1 */
for(i=0;i<20;i++) /* цикл выполняется 20 раз */
{
_delay_us(14); /* временная задержка */
PORTD |= (1<<6); /* установить "1" на PD6 */
_delay_us(14); /* временная задержка */
PORTD &= (~(1<<6)); /* установить "0" на PD6 */
}

/* проверка TSOP 1 */
if ( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<3); } /* установить "1" на PB3 */
else
{ PORTB &= (~(1<<3)); } /* установить "0" на PB3 */

_delay_us(555); /* временная задержка */


/* формирование пачки для TSOP 2 */
for(i=0;i<20;i++) /* цикл выполняется 20 раз */
{
_delay_us(14); /* временная задержка */
PORTB |= (1<<0); /* установить "1" на PB0 */
_delay_us(14); /* временная задержка */
PORTB &= (~(1<<0)); /* установить "0" на PB0 */
}

/* проверка TSOP 2 */
if ( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<4); } /* установить "1" на PB4 */
else
{ PORTB &= (~(1<<4)); } /* установить "0" на PB4 */

_delay_us(555); /* временная задержка */


} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */


Если к бамперу приближать белый лист бумаги, то индикаторные светодиоды должны на него реагировать.

(Отредактировано автором: 24 Мая, 2010 - 02:44:01)

 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



запрограммировал микроконтроллер по последней программе и к бамперу приблизил белый лист бумаги и 0 реакций Грустный проверил камерой ик-диоды вроде горят ик-приемник не греется значит правильно подсоединил
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



alex1991 пишет:
ик-приемник не греется значит правильно подсоединил
не обязательно :)
Проверте ИК приёмник в схеме. Тестером или осциллографом. Хотя бы тупо посветив в него каким нибудь пультом.
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



спасибо за совет nest Улыбка на пульт он реагирует а на ик-диод нет Грустный
 
 Top
Страниц (8): « 1 [2] 3 4 5 6 7 8 »
« Делаем роботов »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru