Без описания |
Поиск в теме | Версия для печати |
alex1991 |
Отправлено: 27 Мая, 2010 - 18:39:42
|
Генерал
Сообщений всего: 91
Дата рег-ции: Май 2010
|
простите за моею надаедливость но у меня снова проблема с бампером на тсор подключил в схему кварц на 8мгц до этого он роботал от внутренего rc на 1 мгц и после этого бампер стал работать неправильно то видит припятствия то не видит и светодиод которые стоят наPB3 PB4 едва светятся когда все-же он увидел приграду перед собой а от пульта ТВ светодиоды реагирует отлично может частоту свечение у ик-светодиода нужно поменять даже не знаю что делать подскажите пожалуйста не могу разобраться вот код который я использую
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz
volatile int modulation=200; // длина всей посылки (можно менять)
SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
TCNT0 = 0;
if(modulation<20) //длина пачки (можно менять)
{PORTB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 2 */
} //маска полезного меандра на порт В1 (хоть на какой)
else
{PORTB &= (~(1<<0));} /* PB0 сконфигурировать как выход, ИК-диод 2 */ //когда пачка заканчивается- маска паузы
if(modulation<20) //длина пачки (можно менять)
{PORTD |= (1<<6) ;} //маска полезного меандра на порт В1 (хоть на какой)
else
{PORTD &= (~(1<<6));} //когда пачка заканчивается- маска паузы
if(modulation<200) //для счета длины посылки
{modulation++;}
else
{modulation=0;}
}
void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 222;
TCCR0 = 111;
TIMSK = 1;
sei();
}
int main(void) //основная программа
{
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", включаем подтягивающий резистор */
_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)
init_timer0(); //инициализация таймера!!!
while(1)
{if ( !(PIND & (1<<5)) ); /* проверить "0" на PD5 */
if ( !(PIND & (1<<7)) ); /* проверить "0" на PD7 */
/* проверка TSOP 1 */
if ( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<3); } /* установить "1" на PB3 */
else
{ PORTB &= (~(1<<3)); } /* установить "0" на PB3 */
/* проверка TSOP 2 */
if ( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<4); } /* установить "1" на PB4 */
else
{ PORTB &= (~(1<<4)); } /* установить "0" на PB4 */
}
} |
|
|
ОЛЕГ |
Отправлено: 27 Мая, 2010 - 19:24:30
|
Супермодератор
Сообщений всего: 1732
Дата рег-ции: Нояб. 2008
|
ОЛЕГ пишет:Нужно
TCNT0 = 111;
А у Вас что?
CODE:{cli();
TCNT0 = 222;
TCCR0 = 111;
TIMSK = 1;
sei();
}
Так работать не будет. TCCR0- это предделитель счетчика. Значения 111 у него даже в природе не существует. Правильное значение 1. А TCNT0 = 111.
И потом, я же писал Вам как нужно:
CODE:SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
TCNT0 = 0;
if(modulation<20) //длина пачки (можно менять)
{
PORTB |= (1<<0);
PORTD |= (1<<6) ;
}
else
{
PORTB &= (~(1<<0));
PORTD &= (~(1<<6))
}
if(modulation<200) //для счета длины посылки
{modulation++;}
else
{modulation=0;}
}
А еще лучше вот так:
CODE:SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
if(modulation<20) //длина пачки (можно менять)
{
PORTB |= (1<<0);
PORTD |= (1<<6) ;
}
else
{
PORTB &= (~(1<<0));
PORTD &= (~(1<<6))
}
if(modulation<200) //для счета длины посылки
{modulation++;}
else
{modulation=0;}
TCNT0 = 0;
}
И уберите вот это, в начале основной программы, Вы меня не поняли. Вам это не нужно.
CODE:if ( !(PIND & (1<<5)) ); /* проверить "0" на PD5 */
if ( !(PIND & (1<<7)) ); /* проверить "0" на PD7 */ |
|
|
alex1991 |
Отправлено: 27 Мая, 2010 - 20:53:54
|
Генерал
Сообщений всего: 91
Дата рег-ции: Май 2010
|
переделал код вот-так ,но он серавно не фурычет но на рульт также реагирует
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz
volatile int modulation=200; // длина всей посылки (можно менять)
SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
if(modulation<20) //длина пачки (можно менять)
{
PORTB |= (1<<0);
PORTD |= (1<<6) ;
}
else
{
PORTB &= (~(1<<0));
PORTD &= (~(1<<6));
}
if(modulation<200) //для счета длины посылки
{modulation++;}
else
{modulation=0;}
TCNT0 = 0;
}
void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}
int main(void) //основная программа
{
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", включаем подтягивающий резистор */
_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)
init_timer0(); //инициализация таймера!!!
while(1)
/* проверка TSOP 1 */
{if ( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<3); } /* установить "1" на PB3 */
else
{ PORTB &= (~(1<<3)); } /* установить "0" на PB3 */
/* проверка TSOP 2 */
{if ( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<4); } /* установить "1" на PB4 */
else
{ PORTB &= (~(1<<4)); } /* установить "0" на PB4 */
}
}
}
подскажите что не так |
|
|
|
Поиск в теме | Версия для печати |
Страниц (8): « 1 2 3 4 [5] 6 7 8 » |
« Делаем роботов » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|