Показать сообщение отдельно
Старый 03.03.2010, 04:35   #46
nrubanov
Старший Пользователь
 
Аватар для nrubanov
 
Регистрация: 11.01.2009
Возраст: 38
Город: Москва
Регион: 77, 97, 99, 177
Машина: Немецкий Ведроид, С25XE, АКПП, ГУР, АБС
Сообщений: 174
nrubanov is on a distinguished road
По умолчанию

С шумами вроде разобрался с помощью силиконового герметика.

Сейчас опять продолжил войну с контроллером . Симптомы болезни следующие - компьютер вырубает усилитель и перезагружается при включении следующих потребителей :
а) Дворников с брызгалкой
б) Дворников в прерывистом режиме
в) Нажатии кнопки открывания богажника
При всем при этом напряжение сети в норме - смотрю ее по мультитрониксу и конденсатору . Вопросы собственно к xDriver и пикокопателям .
Описалово контроллера тут :
http://www.compcar.ru/forum/showpost...3&postcount=37

А вот что я натворил с прошивкой :

'************************************************* ***************
'* Name : KVD.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 28.04.2008 *
'* Version : 2.0 *
'* Notes : *
'* : *
'************************************************* ***************
@ device pic12F675, intrc_osc, wdt_off, pwrt_on, mclr_off, protect_off

Include "modedefs.bas" ' Mode definitions for Serout

Define OSCCAL_1K 1 ' Calibrate internal oscillator
DEFINE ADC_BITS 8 ' Задаем число разрядов в результате преобразования АЦП
DEFINE ADC_CLOCK 3 ' Выбор источника тактового сигнала ( 3 = RC )
DEFINE ADC_SAMPLEUS 50 ' Задать время преобразования в микросекундах

;Временые константы сек * 1000
PSON_TIME CON 1 * 1000 ' Время удержания клавиши PS_ON (мл.секунды)
PWRONOFF_TIME CON 10 * 1000 ' Задержка до нажатия PS_ON после появления/пропадания АСС (мл.секунды)
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''
'Обычный интервал подходящий для всех от 5 до 30 секунд . У меня он равняется 10 , изначально был 5 секунд .
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''
REMOUTE_TIME CON 30 * 1000 ' Время включения доп устройств (мл.секунды)
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''
' То есть время включения усилителя - 30 секунд оптимально для всех
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''
SHUTDOWN_TIME CON 120 ' Время перед полным выключением после нажатия PS_ON (секунды)

ANSEL = %00000001 ' Настройка вывода (7) GP0/AN0 как аналоговый вход, остальные цыфровые.
CMCON = %00000111 ' Выключаем компаратор на входах GP0,GP1,GP2

P_PSON VAR GPIO.1 ' Сигнал PS_ON
P_POWER Var GPIO.2 ' Сигнал на включение БП
P_ACC Var GPIO.3 ' Сигнал АСС
P_REMOUTE VAR GPIO.4 ' Сигнал на включение доп устройств
P_BPPOWER VAR GPIO.5 ' Питание 12 вольт от компьютера

VBATT VAR BYTE ' Переменная для хранения значения АЦП напряжения АКБ
V_OK VAR BYTE ' Переменная хранения результата измерения напряжения АКБ
V_BPPOWER VAR BYTE ' Переменная хранения присутствия 12 вольт от БП компьютера
I VAR BYTE ' Временная переменная
N VAR BYTE ' Временная переменная

GOTO MAIN ' Поехали.....
'-------------------------------------------------------------------------------
'
' Процедура чтения показаний АЦП и их оценка
' Норма V_OK = 1 иначе V_OK = 0
'
'-------------------------------------------------------------------------------
GET_ADC:
' Преобразовать напряжение в канале 0 и поместьть результат в VBAT
ADCIN 0 , VBATT
; тут тоже можно было применить оптимизацию (см. ниже), но так наглядней
IF VBATT > 1 AND VBATT < 9999 THEN
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
' Изначально тут была строка
' IF VBATT > 138 AND VBATT < 188 THEN
' При этом контроллер работает в диапазоне от 10,9 вольт до 14,8 вольт ,
' а при занижении или завышении напряжения отрубает нагрузку , то есть
' блок питания. У меня железо мощное , большие просадки , контроль напряжения
' не нужен - так что IF VBATT > 1 AND VBATT < 9999 THEN , то есть от нуля
' до бесконечности , а по существу контроль отсутствует.
' Откуда берутся цифры 138 и 188 мне пока не понятно.
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
' Если напряжение в норме
V_OK = 1
ELSE
' Если напряжение не в норме
V_OK = 0
ENDIF
' Возврат
RETURN

'-------------------------------------------------------------------------------
'
' Процедура нажатия клавиши PS_ON
' Время нажатия в константе PSON_TIME
'
'-------------------------------------------------------------------------------
PS_ON_CLICK:
' Жмем
HIGH P_PSON
' Ждем
pause PSON_TIME
' Отпускаем
LOW P_PSON
' Возврат
RETURN

'-------------------------------------------------------------------------------
MAIN:
'-------------------------------------------------------------------------------
; Обнуляем переменную хранящую состояние БП компьютера
V_BPPOWER = 0
NO_GOOD_ADC:
' Выключаем питание PCCAR
LOW P_POWER

' Меряем напряжение
GOSUB GET_ADC
; Было так сначало написано:
; IF BP_ACC = 0 OR V_OK = 0 THEN NO_GOOD_ADC
; оказалоси очень много памяти жрет такая конструкция
; пришлось писать как ниже (оптимизация мать еЁ)
; хотя памяти хватало и на первую запись, ну все же ...
V_OK = V_OK + P_ACC

; Обнуляем переменную хранящую состояние БП если пропадал АСС
IF P_ACC = 0 THEN
V_BPPOWER = 0
ENDIF
' Смотрим если до включения компа 12 вольт на входе контролера
IF P_BPPOWER = 1 THEN
V_BPPOWER = 2
ENDIF

' Смотрим АСС и напряжение на АКБ если что то не в норме в начало цикла
IF V_OK < 2 THEN NO_GOOD_ADC

'Если комп отключили программно в V_BPPOWER сидит 1
' ничего не делаем пока не пропадет АСС просто крутимся в цикле
IF V_BPPOWER = 1 THEN NO_GOOD_ADC

PCCAR_ON:
' Включаем питание PCCAR
HIGH P_POWER
' Пауза перед нажатием кнопки PS_ON
pause PWRONOFF_TIME
GOSUB GET_ADC
' Если за это время пропал АСС или напряжение АКБ не в норме то в начало
V_OK = V_OK + P_ACC
IF V_OK < 2 THEN NO_GOOD_ADC

' Иначе нажимаем PS_ON
GOSUB PS_ON_CLICK

PAUSE 1000
' Проверяем включился БП компьютера если нет то в начало
IF P_BPPOWER = 0 THEN NO_GOOD_ADC
' Питание с компьютера идет, прописываем это состояние
V_BPPOWER = V_BPPOWER + 1

' Пауза перед включением доп. устройств
PAUSE REMOUTE_TIME
' Включаем доп. устройство
HIGH P_REMOUTE

' Рабочий цикл
WORK_LOOP:
' Меряем напряжение
GOSUB GET_ADC
' Проверяем АСС и напругу АКБ и напряжение с БП компьютера
' Если все в порядке ничего не делаем и крутимся в цикле дальше
V_OK = V_OK + P_ACC + P_BPPOWER
if V_OK = 3 THEN WORK_LOOP

' Если комп выключили программно (пропало питание с БП компа)
' снимаем питание с доп. устройств и в начало где снимем все питание
IF P_BPPOWER = 0 THEN
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
' Изначально тут было еще три строчки:
''''PAUSE 1000 ( Ждем 1 секунду )
''''LOW P_REMOUTE ( Усилитель отключаем )
''''GOTO NO_GOOD_ADC ( Компьютер вырубаем )
' Если их стереть , то пропадает контроль б.п. компьютера , что мне
' собственно было и нужно.
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
endIF

' Иначе подготавливаемся к выключению если пропал АСС или шалит АКБ
' Пауза перед нажатием кнопки PS_ON
pause PWRONOFF_TIME

' Меряем напряжение
GOSUB GET_ADC
' Проверяем АСС и напругу АКБ и напряжение с БП компьютера
' Если все вернулось в норму работаем дальше
V_OK = V_OK + P_ACC + P_BPPOWER
if V_OK = 3 THEN WORK_LOOP

' Нажимаем PS_ON
GOSUB PS_ON_CLICK

' Выключаем доп. устройство
PAUSE 1000
LOW P_REMOUTE

' Если на 2 ноге всегда плюс V_BPPOWER = 2
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
' Надо понять что такое 500 и 1000 - пока для меня это темный лес.
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
if V_BPPOWER = 1 then
N = 1000
ELSE
N = 500
ENDIF
; Обнуляем переменную хранящую состояние БП компьютера
V_BPPOWER = 0

' Пауза перед полным выключением питания
' крутимся в цикле если комп снял питание в начало
' иначе через SHUTDOWN_TIME секунд жесткое отключение питания
FOR I = SHUTDOWN_TIME TO 0 STEP -1
pause N
IF P_BPPOWER = 0 THEN NO_GOOD_ADC
NEXT

' В начало, там и выключаем питание PCCAR
GOTO NO_GOOD_ADC


Кто чего думает по этому воросу ??? В правильном ли направлении я иду ???
__________________
Первый проект "Accent" -http://pccar.ru/showthread.php?t=732...E0%ED%E3%E5%EB Продана
Второй проект - "Skoda Felicia Project" - http://pccar.ru/showthread.php?t=9401 Продана
Последний проект Daewoo Nexia 2 - http://pccar.ru/showthread.php?t=10827 Закрыт - машина разбита.
Скоро, на дорогах страны - ведроид 1.0 Alles in einem
nrubanov вне форума   Ответить с цитированием