Описание: Рабочая частота, генерация, светодиод... |
Поиск в теме | Версия для печати |
ОЛЕГ |
Отправлено: 11 Сентября, 2009 - 04:00:40
|
Супермодератор
Сообщений всего: 1732
Дата рег-ции: Нояб. 2008
|
Shum, туда нужно воткнуть потенциометр. Переменный резистор.
С его помощью Вы будете прибавлять / убавлять яркость ИК-светиков, настраивая, таким образом, дальность обнаружения препятствий (разумеется, с погрешностью на их, в смысле, препятствий, отражающую способность).
Робот, описанный по приведенным выше ссылкам, при выкрученной на максимум чувствительности "видит" стену за 6 метров. Большего расстояния я у себя дома не нашел, чтобы проверить его глазастость.
Вернее, при выкрученной- это я громко сказал. Я почему-то сразу не поставил потенциометр и мне пришлось решать проблему навешиванием резисторов на соплях. |
|
|
amdei |
Отправлено: 03 Октября, 2009 - 21:20:52
|
Рядовой
Сообщений всего: 8
Дата рег-ции: Сент. 2009
|
Граждане!
Не дайте сойти с ума! Скажите, в какое место стены мне удариться головой, чтобы TSOP'а заработала?
Схема прилагается.
Вот программа:
Импульсы по 16 в пачке (игрался). Паузы между импульсами есть.
Скважность - примерно писят процентов.
CODE:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
static const uint8_t IR_LED = PB1; // Will use PWM.
static const uint8_t TSOP = PB3;
static const uint8_t STATUS_LED = PA2;
static const uint8_t PULSE_BUNGLE_SIZE = 15; // Counts from Zero.
static const uint8_t PULSE_INTERBUNGLE_PAUSE = 30; // In pulses. Counts from Zero.
// 64000000/16/(TOP_VALUE + 1) ~= XXx kHz.
//static const uint8_t TOP_VALUE = 132; // 30 kHz
//static const uint8_t TOP_VALUE = 120; // 33 kHz
//static const uint8_t TOP_VALUE = 110; // 36 kHz
static const uint8_t TOP_VALUE = 104; // 38 kHz
//static const uint8_t TOP_VALUE = 99; // 40 kHz
//static const uint8_t TOP_VALUE = 70; // 56 kHz
// 104/50 ~= 50 % duty. Good.
static const uint8_t PULSE_DUTY_VAL = 50; // OCR1A value.
void initIO(){
DDRA = (1 << STATUS_LED);
DDRB = (1 << IR_LED);
PORTB |= (1 << TSOP); // Eliminate Z state...
}
void initPWM(){
// Do Async operation.
PLLCSR = (1 << PLLE);
loop_until_bit_is_set(PLLCSR, PLOCK);
PLLCSR |= (1 << PCKE);
TCCR1A = (1 << PWM1A)|(1 << COM1A1)|(0 << COM1A0); // See table 35 on page 77
// PCK/16
// See table 34 on page 74
TCCR1B = (0 << CS13)|(1 << CS12)|(0 << CS11)|(1 << CS10);
OCR1C= TOP_VALUE;
TIMSK |= (1<<TOIE1); //Enable Timer1 OVF interrupt
}
static uint8_t curPulse = 0;
static uint8_t isPause = 0;
volatile static uint8_t mayMeasure = 0;
ISR(TIMER1_OVF1_vect){
curPulse++;
if(isPause){
mayMeasure = 1;
if(curPulse > PULSE_INTERBUNGLE_PAUSE){
curPulse = 0;
isPause = 0;
OCR1A = PULSE_DUTY_VAL;
}
}else{
mayMeasure = 0;
if(curPulse > PULSE_BUNGLE_SIZE){
curPulse = 0;
isPause = 1;
OCR1A = 0;
}
}
}
void main()
{
initIO();
initPWM();
PORTA = 0x00;
OCR1A = PULSE_DUTY_VAL;
sei();
while(1)
{
_delay_ms(1);
// Wait for a meaningful result...
if(mayMeasure){
// Check results...
if(PINB & (1 << TSOP)){
PORTA &= ~(1 << STATUS_LED);
}else{
PORTA |= (1 << STATUS_LED);
_delay_ms(500);
}
}
} // while(1)
}
Выдираю TSOP'у с платы - светодиод D3 радостно загорается.
Втыкаю - молчит как партизанин. Специально в программе "защелочку" поставил, чтобы не проморгать кратковременный импульс низкого уровня - ничего.
На всех возможных частотах попробовал, в надежде на то что мне ТСОПы на другую частоту продали. ....
Следующим шагом, чую, будет пентамация методом разбивания молотком имеющихся у меня 5-и ТСОП, чтобы посмотреть не закорочен ли там вход на выход намертво...
Если конечно, кто-нибуть свежих идей по тому как заставить ЭТО заработать не будет предложено.
ИК-диод обозван IRD.
Все конденсаторы - керамика.
(Добавление)
Транзистор между ТСОПой и МК выкидывать пробовал. Прикреплено изображение
(Отредактировано автором: 03 Октября, 2009 - 21:28:32) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): « 1 [2] 3 » |
« Электронная мастерская » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|