реклама на сайте
подробности

 
 
> SONAR, Как избавится от ...
ILYAUL
сообщение Aug 15 2012, 20:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



этой хрени.
Всем добрый вечер!

Вот уже неделю борюсь с этим датчиком. До сего момента никак не мог понять , почему в отладчике все замечательно. Прошиваю , запускаю в "свободное плавание"- он чётко определяет только одну дистанцию т.е. выдает 51см , хотя у него в прямой видимости только звёздное небо . Подключил осцил и в момент подачи питания увидел длинейшую пачку импульсов , аж в 100 ms. Что в переводе оказалось
Цитата
HRLV-MaxSonar-EZ0
PN:MB1003
Copyright 2011-2012
MaxBotix Inc.
RoHS 1.3c006 0512
TempI

R1000
R1000
R1000
R1001
R1001
R1005
R

Т.е выделенное , выдается всегда при вкл питания, о чём скромно умалчивает DS. Прога настроена на отлавливание R и 0D он есть хоть его и не видно. Так не хочется запускать таймер .... или крутить тупую задержку. Чего бы ещё придумать? smile3046.gif twak.gif help.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Артём_
сообщение Aug 15 2012, 22:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ILYAUL @ Aug 15 2012, 23:41) *
Т.е выделенное , выдается всегда при вкл питания, о чём скромно умалчивает DS. Прога настроена на отлавливание R и 0D он есть хоть его и не видно. Так не хочется запускать таймер .... или крутить тупую задержку. Чего бы ещё придумать? smile3046.gif twak.gif help.gif


Что-нибудь типа такого:
Код
#define SENSOR_MAX_BYTE_QTY 12
struct TSonarData {
    unsigned char RxState;
    volatile unsigned char RxCounter;
    volatile unsigned char Received;
    unsigned char RxBuffer[SENSOR_MAX_BYTE_QTY];
} SonarData;
void RxCompleteInterrupt()
{
    unsigned char new_byte=UDR;
    switch (SonarData.RxState) {
    case 0:
        if (new_byte=='R' && Received==0) {
            SonarData.RxState++;
            SonarData.RxCounter=0;
        }
        break;
    case 1:
        if (new_byte>='0' && new_byte<='9') {
            SonarData.RxBuffer[SonarData.RxCounter]=new_byte;
            if (++SonarData.RxCounter>=SENSOR_MAX_BYTE_QTY)
                SonarData.RxState=0;
        }
        else {
            if (new_byte==0x0D) {
                SonarData.Received=1;
            }
            SonarData.RxState=0;
        }
        break;
    }
}


Цитата(ILYAUL @ Aug 15 2012, 23:41) *
Так не хочется запускать таймер ....

P.S. Дополнительно по приёму первого символа строки ® можно бы запустить таймер на N миллисекунд, в прерывании которого сбросить приём, если байты почемуто перестали приходить.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 04:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.05106 секунд с 7
ELECTRONIX ©2004-2016