PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Разработка устройств (http://pccar.ru/forumdisplay.php?f=18)
-   -   Хитрое реле включения. Нужна помоЩь! (http://pccar.ru/showthread.php?t=1715)

mcf1 13.02.2007 01:27

пока не переделал, но пробывал в эту цепь засовывал один элемент от 561ой, те же яйца только в профиль
у меня возникает подозрение счетчик погорел от эксперементов

Beer100 13.02.2007 01:36

В 561 микрухе элемент не инвертирует!!!! А тебе надо инвертировать выход счетчика!!!! Сделай как я нарисовал.

Beer100 13.02.2007 01:39

как сгорела? А если 2 и 3 ноги отключить от 11, как ты делал, то работает?

mcf1 13.02.2007 01:45

утром буду пробывать:bye:

_SDY_ 13.02.2007 07:04

Вложений: 1
Цитата:

Сообщение от Beer100 (Сообщение 17892)
...Во втором варианте ты добавил триггер, но почему-то не заметил, что этот триггер у меня уже стоит, только я его взял в счетчике ИЕ5, он там незадействован. Зачем добавлять новую микруху? :dntknw:

А я новых микросхем и не добавлял... Там тоже три микросхемы. Только вместо ЛА3 у меня ЛЕ1. Кстати, судя по внутренней архитектуре ИЕ5 (я не знал как там внутри, думал - это просто счетчик, а тут как бы два счетчика) надо мою схему переделать (рисунок ниже).
Кстати, для гарантированного формирования импульса по спаду можно добавить два резистора R2 и R3. Если R1 - 1K, то R2 - 2K, R3 - 1K (вроде бы так). Тогда вход - 12В.

_SDY_ 13.02.2007 07:16

А есть еще один вариант (на современной элементной базе :-))). Один корпус ATTiny11 или ATTiny12.
Это - исходник прошивки:

8<----8<----8<----8<----8<----8<----8<----8<----

.include "TN11DEF.INC" ; include chip definition
;------------------------------
.def temp1=r16
.def temp2=r17
.def temp3=r18
.def PulseFlag=r19
.def Counter=r20
;------------------------------
rjmp RESET ; Reset Handle
rjmp INT0VECT ; External Interrupt0 Vector Address
rjmp NOVECT ; Pin change Interrupt Vector Address
rjmp OVF0VECT ; Overflow0 Interrupt Vector Address
rjmp NOVECT ; (EEPROM ready Interrupt Vector Address ATTiny12) Analog Comparator Interrupt Vector Address ATTiny11
rjmp NOVECT ; Analog Comparator Interrupt Vector Address ATTiny12
;------------------------------
RESET:
; init timer
ldi temp1, (1< out TCCR0, temp1
ldi temp1, (1< out TIMSK, temp1
; init int0
ldi temp1, (1< out GIMSK, temp1
ldi temp1, (1< out MCUCR, temp1
; init ports
ldi temp1, (1< out DDRB, temp1
; init val
ldi PulseFlag, 0
ldi Counter, 4
; enable interrupts
sei
;------------------------------
MAIN:
rjmp MAIN
;------------------------------
OVF0VECT:
in temp1, SREG ; Store the Status register in reg temp1
dec Counter
brne EX_OVF0VECT
ldi Counter, 4
; here's approx 1sec delay

tst PulseFlag
breq CLRPINB0
dec PulseFlag
mov temp3, PulseFlag
andi temp3, 1
breq CLRPINB0
sbi PORTB, PINB0
rjmp EX_OVF0VECT
CLRPINB0:
cbi PORTB, PINB0

EX_OVF0VECT:
out SREG, temp1 ; Restore Status register
reti
;------------------------------
INT0VECT:
in temp2, SREG ; Store the Status register in reg temp2

tst PulseFlag
brne EX_INT0VECT
ldi PulseFlag, 4

EX_INT0VECT:
out SREG, temp2 ; Restore Status register
reti
;------------------------------
NOVECT:
reti

8<----8<----8<----8<----8<----8<----8<----8<----

4-я нога - земля, 8-я нога - питание, на 6-ю ногу через резисторный делитель подать сигнал вкл/выкл заднего хода, с 5-й ноги снимать импульсы.

Итого - 3 детали :-) два резистора, одна микросхема (всего о восьми ногах), а не куча логики.

mcf1 13.02.2007 09:06

Цитата:

Сообщение от _SDY_ (Сообщение 17942)
А есть еще один вариант (на современной элементной базе :-))). Один корпус ATTiny11 или ATTiny12.

круто
программу сам написал?
где взять программатор?:dntknw:

_SDY_ 13.02.2007 09:24

Вложений: 1
Там писать нечего. ;-)
Программатор на COM порт:

_SDY_ 13.02.2007 09:30

Вложений: 1
Но, сначала исходник надо скомпилировать. Я использовал VMLAB.
Потом уже заливать объектный код в микроконтроллер. Я использую программу uniprof.

Здесь уже готовый для заливки скомпилированный объектный код:

mcf1 13.02.2007 14:11

а в программе можно будет подправить длинну импульсов и длительность паузы между ними?

mcf1 13.02.2007 17:56

купил Attiny 11,(12ого не было в диповском корпусе) программа его не определяет, появилось подозрение что и не должна, т.к. у одинадцатого нет MOSI и MISO :dntknw: :angry:
http://www.gaw.ru/im/atmel/avr/attiny11_p.gif

mcf1 14.02.2007 00:52

Вложений: 1
бл......, нашел список поддерживаемых устройств на сайте разработчика программы, там только двенадцатый.. твою мать... почему сразу это не увидел когда качал прогу.ууу..у.
завтра поеду искать tiny12 в дип-корпусе



вот фотка програматора

mcf1 14.02.2007 01:01

Beer100 ты уж извини, но твой проект пока отложен в сторону (на фотке его видно слева вверхнем углу). просто идея с микроконтроллером нескольео проще и стабильнее, чем логика.

_SDY_ 14.02.2007 05:11

Да, точно 11-й без SPI интерфейса. Я думал, что у всех есть... ;-(
Меняй на 12-й или какой другой более старший с SPI. Только более старшие могут быть с СОЗУ, там надо будет в программу добавить команды инициализации стека и поправить таблицу прерываний (если будут расхождения).

В программе есть переменная PulseFlag в строке 'ldi PulseFlag, 4' (4 - это два импульса) начальная инициализация по смене состояния на "входной" ноге. Где стоит комментарий 'here's approx 1sec delay' - там он и означает, что задержка примерно 1 сек, то есть код ниже этого коммента запускается примерно через 1 сек. Регулируется переменной Counter, ldi Counter, 4 - это примерно 1 секунда, если написать ldi Counter, 2 - то будет 0,5 сек, далее по аналогии. То есть по смене состояния на ноге INT0 на ноге PB0 возникает два импульса длительностью 1 сек с паузами между ними в 1 сек.
Можно переделать прогу, чтобы можно было настраивать отдельно паузы и длину.

_SDY_ 14.02.2007 06:55

Вложений: 1
Готова новая прога. Заранее ее сделал под ATTiny12 (можно и для ATTiny11, если получится зашить :-)

В ней есть константы:
1. .equ PulseQuantityInitVal=2
2. .equ BeforePulseDelayInitVal=0
3. .equ PulseLongInitVal=2
4. .equ PulseSpaceInitVal=4

1. Кол-во импульсов (в штуках)
2. Задержка до выдачи импульсов (в 1/4 секунд)
3. Длительность импульсов (в 1/4 секунд)
4. Длительность паузы между импульсами (в 1/4 секунд)

Все длительности в 0.25 секунды (примерно). Т.е. если 1 = 0.25 сек, 2 - 0.5 сек, 3 = 0.75 сек, 4 = 1 сек, итд до 255 = 63,75 сек. Это все в теории...

На практике есть маленькая проблема по моим расчетам обработчик прерывания OVF0VECT должен срабатывать примерно через 0.22 сек: 1200000 / 1024 = 1172 / 256 = 4.6 => 1 / 4.6 = .22 sec, в реальности (на Attiny26) и на эмуляторе работает медленнее в 2 раза, т.е. 0.44 сек.
Короче - хз, это вообще мой второй проект на МК :-). Первый здесь: http://www.pccar.ru/showthread.php?t=1721 Месяц назад я вообще ни разу не программировал эту хрень :-). Там все просто, если есть опыт программления на каком-нибудь другом ассемблере, то двух часов на изучение хватит, чтобы в основном разобраться. Но, вот как так получается с таймером - до сих пор не пойму.

Здесь исходник и прошивка:

Beer100 14.02.2007 14:44

Цитата:

Сообщение от mcf1 (Сообщение 18001)
Beer100 ты уж извини, но твой проект пока отложен в сторону (на фотке его видно слева вверхнем углу). просто идея с микроконтроллером нескольео проще и стабильнее, чем логика.

Ты что! Все ОК!
Водь на дворе уже 21 век! :smile1:
Это я так, по старинке на логике.....

mcf1 14.02.2007 19:31

Цитата:

Сообщение от _SDY_ (Сообщение 18012)
Готова новая прога. Заранее ее сделал под ATTiny12 (можно и для ATTiny11, если получится зашить :-)
..............
Здесь исходник и прошивка:

купил сегодня ATtiny 12, программой сразу же определился, без проблем прошился. но не заработал...
может я чегонить не так делаю?....
пробавал заливать этот файл и ипром и во флеш, и одновременно и туда и туда. не работает
вход 6ая нога (активный +4,8В, после делителя), выход пятая нога, остальные в воздухе.

PS первую версию тоже пробывал. ничего не происходит...

_SDY_ 15.02.2007 05:42

Вложений: 1
И не запустится, просто я не сказал еще про одну фигню. В datasheet есть слова: "When the RSTDISBL fuse is unprogrammed, this pin serves as external reset. When the RSTDISBL fuse is programmed, this pin is a general input pin." Короче, если ты с этим чипом ничего не делал, кроме прошивки, то 1-я нога по-умолчанию - вход сброса. Без его подачи при включении счетчик команд в неопределенном состоянии. На эту ногу сигнал начального сброса подается также, как и на все остальные процессоры - резистор + конденсатор.
Шить надо во флеш. EEPROM - это чисто для данных. Flash - память команд. В этой программе EEPROM не используется.

R1 - 100К
C1 - 1мкФ
R2 - 2К
R3 - 1К
Схема:

mcf1 15.02.2007 09:02

Вложений: 2
я так и думал что нужен reset,
делитель сделал по другому немного, R2 и R3 по одному килоому, и стабилитрон на 4,7В, так будет на входе всегда одно и тоже напряжение, и при десяти и при пятнадцати вольтах бортового напряжения.
http://pccar.ru/attachment.php?attac...1&d=1171515131
а это нормально то что после сброса (reset) на первой ноге будет постоянно висеть еденица?
просто на разных процессорах используется разный reset
http://pccar.ru/attachment.php?attac...1&d=1171515131
просто в программе uniprof используется первый вариант сброса, а ты предлогаешь второй

_SDY_ 15.02.2007 09:35

Читаем Attiny11-12.pdf. Страница 5: "Reset input. An external reset is generated by a low level on the RESET pin." Соответственно, низкий уровень - сброс, высокий - работа. На странице 7 есть схема Figure 5, там именно то, что надо. Таблица 29 на странице 57 как считаются значения R и C и комментарий: "R should be in the range 3-100K, and C should be at least 20pF."

_SDY_ 15.02.2007 09:41

Кстати, только что вычитал на стр. 7, что при использованиии внутреннего RC генератора вследствие его чувствительности к наводкам PB4 желательно использовать, как выход. В соответствии с этим, на всякий случай, строку в коде:
ldi temp1, (1< можно заменить на следующую строку:
ldi temp1, (1<
Хотя - можно и не делать, мы же не считываем оттуда никакой инфы.

В-общем - RTFM 8-)))

_SDY_ 15.02.2007 09:52

Кстати, а ведь действительно со стабилитроном луше будет.

Hamster 15.02.2007 10:57

2 Mcf1 и _SDY_:
Ребяты, просьбочка большая - как будет отлаженный вариант - поделитесь :) Темка актуальна для большинства обитателей нашей песочницы, которые хотят автопереключение на камеру заднего хода.

mcf1 15.02.2007 11:08

Цитата:

Сообщение от Hamster (Сообщение 18103)
2 Mcf1 и _SDY_:
Ребяты, просьбочка большая - как будет отлаженный вариант - поделитесь :) Темка актуальна для большинства обитателей нашей песочницы, которые хотят автопереключение на камеру заднего хода.

я уже писал что как будет отлаженный вариант обязательно выложу схему, а если понадобится так и котроллер запрограмирую (програматор уже работает)

mcf1 15.02.2007 16:59

а контроллер не хочет работать даже с reset`ом, не пойму ни как в чем дело.
интересные наблюдения:
при подаче питания на МК он потребляет 2 милиампера, после того пройдет reset от программы Uniprof он потребляет 4 мА. в плате где он должен уже поидее работать МК потребляет 2 мА, хоть с ресетом хоть без него, из чего хочется сделать вывод что он не запускается:angry:

_SDY_ 17.02.2007 15:43

Вложений: 2
Короче, я не поверил, что этот код не работает, не поленился, съездил в магазин, взял ATTiny15 (он был на 2 рубля дешевле ATTiny12 :-). Его отличие от 11-го и 12-го:
1. у него 1,6Мгц внутренний RC-генератор,
2. вход INT0 - 7-я нога (у 11 и 12 - 6-я нога),
3. у него есть 4-х канальный ЦАП, компаратор (пришлось добавить в таблицу прерываний лишние две команды)
4. и еще один таймер Timer1 (тоже, добавлена лишняя инструкция перехода на "пустое прерывание").
Итого: исходник практически не изменился, только добавлены 3 перехода на "пустой" обработчик прерывания, в схеме вход перешел с ноги 6 на ногу 7. Прога скомпилена, зашита и СРАЗУ заработала.
В-общем, ищи ошибку у себя.

PS. Длительности импульсов/пауз я не менял - кто захочет, тот пусть сам и настраивает (я уже указывал нужные константы).

_SDY_ 17.02.2007 15:59

Кстати, ты какой файл в МК заливаешь? Не asm случайно? 8-)

_SDY_ 17.02.2007 16:08

У меня есть предложение. Если в мониторе есть входы VGA, AV1, AV2, TV и индикация каждого режима сделана светодиодами, то можно ее использовать, как входной сигнал для контроллера переключения. Надо будет только прогу переделать.
Потому-что в текущей реализации (что на рассыпухе, что на одном МК) есть баг: допустим, я включу заднюю (контроллер начнет переключать монитор) и через секунду первую (или D на автомате) монитор останется в режиме "заднего вида". Если же сделать обратную связь с монитором (если индикация на светодиодах), то баги исключены и дае можно использовать для камеры заднео вида любой вход, хоть AV1, хоть AV2 и можно будет без проблем пользоваться режимом TV.

Beer100 17.02.2007 16:27

Да, кстати, даже в случае реализации на простой логике как предлагал ранее я, то включение "задней" на одну секунду (а такое при маневрировании бывает часто), режимы переключеия монитора будут нарушены.
Надо вводить обратную связь от монитора и самое главное, данное устройство должно постоянно опрашивать положение ручки КПП. Хотя бы с переодичностью в 0,1 сек. Впринципе это тоже не сложно сделать....

PS
Для машин с АКПП нужно добавить режим задержки в пол секунды.

_SDY_ 19.02.2007 07:02

Monitor switcher
 
Вложений: 1
Набросал тут примерный вариант переключателя монитора с обратной связью (себе скорее всего так и буду делать, как будет монитор :-)

1. Rear camera - входной сигнал со светодиода (или еще откуда), что включена камера заднего вида
2. Front camera - входной сигнал со светодиода (или еще откуда), что включена камера переднего вида (для машин с правым рулем :-)
3. VGA - входной сигнал со светодиода (или еще откуда), что включен комп
4. Gear - входной сигнал, что включена задняя передача
5. Source select button - выходной сигнал для кнопаря выбора источника сигнала на мониторе (ну, там через транзистор или как н-ть)

У входных сигналов 1-4 высокий уровень - активный. Т.е. если на 1-м входе единица, то выбрана камера заднего вида, если на 2-м, то - передняя камер, 3-м - комп, 4-м - включена задняя передача. Если на входах 1-3 низкий уровень, то считается, что включен TV.

Входные сигналы для источников сигнала - это либо светодиодные индикаторы режимов монитора (если есть), либо какая-нибудь мелкосхема внутри монитора с нужными уровнями (если нет светодиодов и найдете нужную мелкосхему :-).

Если до включения задней передачи был выбран какой либо источник, типа TV, передней камеры или компа, то после выключения задней передачи контроллер вернет монитор в предыдущее состояние.

Реализована задержка включения камеры заднего вида для АКПП (Beer100 подсказал), т.к. R находится между P и "передними" передачами, чтобы лишний раз не включалась задняя камера. (0,51 сек)

Реализована задержка выключения камеры заднего вида для маневрирований на стоянке и т. п., чтобы при частых переключениях между R и D лишний раз не переключался монитор. (6,8 сек)

_SDY_ 19.02.2007 07:05

Monitor switcher
 
Вложений: 1
Этот вариант я не собирал (пока что не для чего). Думаю, работать должен сразу, как и предыдущий, только правильно собрать и найти на мониторе нужные сигналы. Возможно еще придется подобрать длительности импульсов на кнопаре переключения монитора и задержки включения/выключения "заднего" монитора.

Здесь исходник:

eug_car 20.02.2007 19:36

Хитрое реле
 
Так и не понял, чем закончилась эпопея с кнопкой. НО!
Получил огромное удовлетворение от посещения http://avr.nikolaew.org :toomuch: ! На своем сайте что-то пытаюсь делать для популяризации программирования, но постоянно не хватает времени. NLM Респект!!!
SDY тоже молодец, но как-то все “томные” программы получаются, уж извини, что со своими советами лезу.
После подачи питания одновременно на LCD и на МК от тумблера ПК, МК сразу задерживается на 2_4 сек в длинном цикле –> потом включает ногу (“кнопку”) –> еще задерживается на 0.5_1сек –> выключает ногу -> и уходит на покой в бесконечный цикл. Все, 10-ть строк кода.
А с прерываниями легко нарваться на осложнения… и не прозрачно.
Проверь полярность работы кнопки, она может замыкаться на землю, а может и на +Vcc (внут. 3v или 5v), а лучше просто через оптопару параллельно кнопке. Rst вообще оставь в покое на воздухе.
Не поленился сие написать только из большой любви к программированию:smile1:.
Ведь эту задачу может решить и бипер в компе, он аккурат так и работает при включении.
Но все равно настоятельно рекомендую осваивать МК – это очень просто! :thumbup1:

_SDY_ 21.02.2007 06:00

2 eug_car: тот код, что ты описал (10 строк кода) - это для "Хитрого реле включения" :-) его просил сделать Wanted, тема уже давно ушла в сторону... А насчет кнопки, так mcf1 вроде бы сам должен разобраться, что к чему, схема, конечно не полная - все зависит от реализации кнопаря на мониторе.

mcf1 25.02.2007 01:13

Вложений: 1
купил ATTiny15, зашил, перепаял схему (вход на 7ую ногу), добавил микруху 4066 сделал правильный reset, и все заработало как надо
плату закрепил кЕтайскими соплями прмок плате управления

хотел изменить время импульсов и паузу между ними в меньшую сторону, но...... пока не судьба, attiny15 двенадцати вольт не выдержал (случайно не посмотрел что выставлено на блоке питания)
в понедельник куплю новый, буду пробывать именьшать

PS to SDY ATTiny12 так и не заработал, ппочему не понятно, но все равно огромное спасибо, жил бы ты несколько поближе купил бы тебе пиво:beer1:

mcf1 25.02.2007 23:57

схема заработала, переключает как надо, но радости нет:angry:
меня только что посетила мысль что для корректного использования камеры заднего вида нужно изображение перевернуть в зеркальное, наш NONAME этого не умеет.
каким внешним девайсом это можно сделать? а может бывают камеры с изначально зазеркаленным изображением на выходе? если не будет зеркального изображения смысл этой затеи равен нулю, т.к. пользоваться будет не возможно

aptm 26.02.2007 00:23

Цитата:

Сообщение от mcf1 (Сообщение 18783)
...а может бывают камеры с изначально зазеркаленным изображением на выходе?

конечно бывают

mcf1 26.02.2007 00:47

спасибо,

_SDY_ 26.02.2007 05:11

А ты второй вариант переключателя не хочешь попробовать собрать? Тот, который с обратной связью. Более корректное переключение, приемущества я уже расписывал... Только вот надо найти, какая мелкосхема переключает режимы монитора.

mcf1 26.02.2007 10:42

хочу, только не получится, там все по цифре управляется, т.е. нет там такого что бы еденичка или нолик на какой либо ноге появилась взависимости от выбранного входа.

_SDY_ 26.02.2007 11:53

Цитата:

Сообщение от mcf1 (Сообщение 18819)
хочу, только не получится, там все по цифре управляется, т.е. нет там такого что бы еденичка или нолик на какой либо ноге появилась взависимости от выбранного входа.

Странно... А "цифра" - это что, это не 0 или 1? Как это "по цифре"? В смысле, там код выставляется на каких-то ногах? Или последовательный интерфейс?


Часовой пояс GMT +4, время: 05:52.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot