Показать сообщение отдельно
Старый 10.11.2008, 13:15   #27
NiMar
Старший Пользователь
 
Регистрация: 19.02.2007
Возраст: 45
Город: Уфа
Регион: 02
Машина: 2000\ваз\21102 - ПРОДАНО! 2003\Subaru\Forester 2.5 в процессе
Сообщений: 167
NiMar is on a distinguished road
По умолчанию Контроллер включения камеры заднего вида. stage1

Итак сваял простенький контроллер включения камеры заднего вида.
Пока первый вариант - при включении передачи переключается с VGA на AV1. При выключении преключается AV2->TV->VGA. Т.к. на моем мониторе AV2 нету, камера подключена на AV1.

Контроллер ATTINY2313. Исходник на Си:
Код:
#define  R_GEAR        D, 3, H    //    (нога 7) Вход задней передачи
#define  AV_BTN        D, 4, L    //    (нога 8) Кнопка AV на мониторе (ее тыкать)
#define  LED        B, 7, L    //    (нога 19) индикатор

void delay_s(int s)
{
    while(s--){
        delay_ms(250);
        delay_ms(250);
        delay_ms(250);
        delay_ms(250);
        }
}

void AV_click()
{
    direct(AV_BTN, O);
    on(AV_BTN);
    on(LED);

    delay_ms(100);

    off(AV_BTN);
    direct(AV_BTN, I);

    off(LED);// тыкаем AV
}

int main (void)
{
        int AV_mode=0; // режим монитора 0-VGA, 1-AV1, 2-AV2, 3-TV.
    // инициализируем таймер 0 (для функции delay_ms())
    timer0_init();

    // init ножек
    direct(R_GEAR, I);

    direct(AV_BTN, I);off(AV_BTN);

    direct(LED, O);
    off(AV_BTN);
    off(LED);

    // разрешаем прерывания
    sei();

    // тест:
    while(TRUE)
    {

        if( (signal(R_GEAR)) && (AV_mode == 0) ) // включили заднюю и мы на VGA
        {
            delay_s(1);
            // ждем секунду чтобы не тыкаться на автомате (рычаг всегда проходит через R)
            if(!signal(R_GEAR)) continue;// Уже нет задней - выходим

            // изначально думаем что монитор в режиме VGA
            AV_click();
            AV_mode=1; // мы в режиме AV1 - на камере;
            on(LED);
        }

        if( (!signal(R_GEAR)) && (AV_mode == 1) ) // выключили заднюю и мы на AV1
        {
            off(LED);
            delay_s(1);
            // ждем секунду
            if(signal(R_GEAR)) continue;// ложная тревога

            AV_click();
            AV_mode=2; // мы в режиме AV2
            delay_ms(150);

            AV_click();
            AV_mode=3; // мы в режиме TV
            delay_ms(250);
            delay_ms(250);
            delay_ms(250);
            // возможно надо будет задержку побольше.

            AV_click();
            AV_mode=0; // мы снова в режиме VGA

            off(LED);
        }

    }

    return 0;    // сюда не попадём
}
схемка:


собрано:


упаковано:


Далее планирую сделать контроллер посложнее:
1. с обратной связью по режиму монитора(чтоб он знал в каком режиме монитор сейчас)
2. чтоб сам управлял питанием камеры(чтобы камера выключалась не сразу как выключили заднюю, а через некоторое время - удобно при сложных маневрах)
3. подключение обгонной камеры для праворуких через сам контроллер - т.к. видео вход на мониторе только один.
NiMar вне форума   Ответить с цитированием