О сайте Группа в контакте RSS Годограф Volksturm Импульсные металлоискатели IB металлоискатели Пинпоинтеры Другие схемы Заказать Конструкции металлоискателей Полезные ссылки

Схемы металлоискателей MD4U

Сборка, настройка, обсуждение, теория и практика построения металлоискателей.
Текущее время: Вс: 05 май 2024 17:28

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему
 [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по работе Clone PI
СообщениеДобавлено: Чт: 08 апр 2010 17:40 
Не в сети

Зарегистрирован: Вт: 26 май 2009 8:42
Сообщения: 4
Откуда: Беларусь
Я пытаюсь под схематик Andy_F написать фирмварю для изучения предметной области. 2 Andy_F, если не затруднит - каким образом убирается влияние грунта? Этот момент есть в асмовом исходнике, но т.к. пишу на си, совершенно не могу понять как это реализовано.


Вернуться к началу
 Профиль  
 


Вы можете отключить эти сообщения.
 Заголовок сообщения: Re: Вопрос по работе Clone PI
СообщениеДобавлено: Чт: 08 апр 2010 20:15 
Не в сети
Аватара пользователя

Зарегистрирован: Вс: 06 ноя 2005 11:17
Сообщения: 4527
Откуда: С.-Петербург
vesago писал(а):
Я пытаюсь под схематик Andy_F написать фирмварю для изучения предметной области. 2 Andy_F, если не затруднит - каким образом убирается влияние грунта? Этот момент есть в асмовом исходнике, но т.к. пишу на си, совершенно не могу понять как это реализовано.

Влияние грунта не убирается никак.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе Clone PI
СообщениеДобавлено: Пт: 09 апр 2010 9:16 
Не в сети

Зарегистрирован: Вт: 26 май 2009 8:42
Сообщения: 4
Откуда: Беларусь
Меня интересует вот этот кусок:
Код:
;-- Перекладываем результат измерения в переменную --
   MOVFW   ADCResH            
   MOVWF   DeltaHH
   MOVFW   ADCResL      
   MOVWF   DeltaHL
;----------------------------------------------------

;-- 16-bit Subtraction-with-Borrow --
    MOVFW   SGndHL            ; Вычитаем старшие 16 бит усредненного значения из измеренного       
    SUBWF   DeltaHL, f
    MOVFW   SGndHH
    SKPC
    INCFSZ  SGndHH, w
    SUBWF   DeltaHH, f           
;------------------------------------

   CLRC                  ; На всякий случай (сброс флага переноса).
   CLRF   DeltaLH            ; Младшие байты очищаются
   CLRF   DeltaLL

;--- Сдвиг вправо для вичисления дельты медленного канала (канала "земли") ---

    MOVFW   AutoSpeed         ; Константа для автоподстройки
    MOVWF   CntInt               ; Задание значения счетчика разрядов сдвига
loop_D2:
    BTFSC   DeltaHH, 7          ; Если DeltaHH - не отрицательное число - пропустить
    SETC                      ; в противном случае - установить флаг переноса   
    RRF     DeltaHH, f          ; Сдвиг вправо всех 4 байт...
    RRF     DeltaHL, f          ; ... числа Delta ...
    RRF     DeltaLH, f        ; ... с учетом переноса. Перенос из младшего байта не учитывается (т.к. байт был обнулен)
    RRF     DeltaLL, f        ; ... с учетом переноса. Перенос из младшего байта не учитывается (т.к. байт был обнулен)
    DECFSZ  CntInt, f            ; Декремент счетчика цикла с проверкой на равенство 0
    GOTO    loop_D2
;----------------------------------------------------------------------------

;-- Вычисление усредненного значения "канала земли" --
    MOVFW   DeltaHH             ; Складываем старшие байты
    ADDWF   SGndHH, f          ; Перенос игнорируем
    MOVFW   DeltaHL             ; Складываем младшие байты
    ADDWF   SGndHL, f
    SKPNC                     ; Если при сложении младших разрядов перенос не произошел - пропустить следующую команду
    INCF    SGndHH, f          ; При переносе добавить "1" к старшему байту
    MOVFW   DeltaLH           ; Складываем "самые" младшие байты
    ADDWF   SGndLH, f
    BNC      sum_ll             ; Если при сложении младших разрядов перенос не произошел - пропустить следующую команду
    INCF    SGndHL, f          ; При переносе добавить "1" к старшему байту
    SKPNZ                  ; Если результат не 0 - пропустить следующую операцию
    INCF   SGndHH, f
sum_ll:   
   MOVFW   DeltaLL
   ADDWF   SGndLL, f   
    BNC     end_sum_gnd         ; В отсутствии переноса перейти к концу операции
   INCF   SGndLH, f      
   BNZ      end_sum_gnd
    INCF    SGndHL, f          ; При переносе - инкрементировать младший байт усредненного значения
    SKPNZ                     ; Если при инкременте результат не 0 - пропустить следующий оператор
    INCF    SGndHH, f          ; В противном случае инкрементировать старший байт
end_sum_gnd

Ну в начале понятно, на основе сэмпла наподобие скользящего среднего получаем, а дальнейшие манипуляции не могу понять. Какова роль константы AutoSpeed? Роль SGnd понятна - это фон грунта, который вычитается. Но не пойму как вычисляется..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе Clone PI
СообщениеДобавлено: Пт: 09 апр 2010 9:29 
SGnd += ((ADC << 16) - SGnd) >> AutoSpeed
Так PIC'овкий ассемблер хреново читается :)


Вернуться к началу
  
 
 Заголовок сообщения: Re: Вопрос по работе Clone PI
СообщениеДобавлено: Пт: 09 апр 2010 9:38 
Не в сети

Зарегистрирован: Вт: 26 май 2009 8:42
Сообщения: 4
Откуда: Беларусь
RabidRabbit писал(а):
SGnd += ((ADC << 16) - SGnd) >> AutoSpeed
Так PIC'овкий ассемблер хреново читается :)


Спасибо, так уже значительно лучше. Но не понятен сам принцип. Объясните, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе Clone PI
СообщениеДобавлено: Пт: 09 апр 2010 12:54 
Код:
FixedSpeed = 4
NormalSpeed = 9
SlowSpeed = 13
AutoSpeed = NormalSpeed

SGnd += ((ADC << 16) - SGnd) >> AutoSpeed
STarget += ((ADC << 16) - STarget) >> FixedSpeed

if ( STarget - SGnd ) > Барьер
{
   EnableSound()
   AutoSpeed = SlowSpeed
}
else
{
   DisableSound()
   AutoSpeed = NormalSpeed
}


Вернуться к началу
  
 
 Заголовок сообщения: Re: Вопрос по работе Clone PI
СообщениеДобавлено: Пт: 09 апр 2010 15:08 
Не в сети

Зарегистрирован: Вт: 26 май 2009 8:42
Сообщения: 4
Откуда: Беларусь
Спасибо! Буду разбираться..


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти: