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

 
 
 
Reply to this topicStart new topic
> Протокол обмена данными с клавиатурой Satel CA-6 KLED, думаю что пригодится
MicronSys
сообщение Apr 1 2008, 14:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 12-05-05
Пользователь №: 4 946



Описание клавы сдесь http://satel.pl/rus/products/ca6manled.php
Цена очень интересная в Украине от 22 у.е.

рабочий код WinAvr Atmega32 7,3728 Мег



// данные на клаву
#define LED_KEY_ZONE_1 15
#define LED_KEY_ZONE_2 14
#define LED_KEY_ZONE_3 13
#define LED_KEY_ZONE_4 12

#define LED_KEY_ZONE_5 7
#define LED_KEY_ZONE_6 6
#define LED_KEY_ZONE_7 5
#define LED_KEY_ZONE_8 4


#define LED_KEY_ACDC 11
#define LED_KEY_MODEM 10
#define LED_KEY_TRABLE 9
#define LED_KEY_BUZZER 8

#define LED_KEY_GUARD_1 3
#define LED_KEY_GUARD_2 2
#define LED_KEY_ALARM_1 1
#define LED_KEY_ALARM_2 0

// Данные от клавы
#define ST_KEY_TAMPER 0

#define ST_KEY_ROW_1 1
#define ST_KEY_ROW_2 2
#define ST_KEY_ROW_3 3

#define ST_KEY_COL_4 4
#define ST_KEY_COL_3 5
#define ST_KEY_COL_2 6
#define ST_KEY_COL_1 7

#define ST_KEY_Z2_OK 8
#define ST_KEY_Z2_KZ 9

#define ST_KEY_Z1_OK 10
#define ST_KEY_Z1_KZ 11


#define ST_KEY_ADR_A 12
#define ST_KEY_ADR_B 13
#define ST_KEY_ADR_C 14
#define ST_KEY_ADR_D 15



#define LED_PORT PORTB
#define LED_DDR DDRB
#define LED_PIN PINB

#define CON_PORT PORTC
#define CON_DDR DDRC
#define CON_PIN PINC

#define MOD_DDR DDRD
#define MOD_PORT PORTD
#define MOD_PIN PIND

#define STON 0x01
#define STOFF 0x00

#define PIN_MODEM (1<<0)
#define PIN_VCC (1<<1)
#define PIN_SOUND (1<<2)
#define PIN_CONTROL (1<<3)
#define PIN_LEDS_1 (1<<4)
#define PIN_LEDS_2 (1<<5)
#define PIN_GROUP_1 (1<<6)
#define PIN_GROUP_2 (1<<7)


#define PIN_LED_CORE (1<<7)

#define PIN_KEY_DATA (1<<0)
#define PIN_KEY_CLK (1<<1)
#define PIN_KEY_IN (1<<2)



#define ON_KEY_CLK LED_PORT &= ~(PIN_KEY_CLK)
#define OFF_KEY_CLK LED_PORT |= (PIN_KEY_CLK)

#define ON_KEY_DATA LED_PORT &= ~(PIN_KEY_DATA)
#define OFF_KEY_DATA LED_PORT |= (PIN_KEY_DATA)


#define IS_KEY_DATA LED_PIN & PIN_KEY_IN





#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>
#include <inttypes.h>
#include <string.h>
#include <stdlib.h>
#include <avr\eeprom.h>
#include <mydef.h>

extern uint8_t out_m_buffer[MODEM_BUFFER];
extern void ModemSend(uint8_t *buf,uint8_t size);
//********************************************************************************
**************
extern uint8_t ReadEE(uint8_t addr); -- чтение eeprom

uint8_t key_data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // данные для отправки на клаву
uint8_t key_state[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // данные от клавы
uint8_t key_buffer[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // буфер нажатых клавиш

uint8_t table_leds [8] ={15,14,13,12,7,6,5,4};
uint8_t old_key = 'Z';
uint8_t key_data_index = 'Z';


void Init_Key(void);
void Read_Key(void);
void Write_Key(void);
void Work_Key(void);

void delay_key(uint8_t times)
{
for (uint8_t i = 0;i<times;i++)
{
asm("nop");
}
}
//********************************************************************************
**************
void Init_Key(void) //
{
OFF_KEY_DATA;ON_KEY_CLK;
for (uint8_t i = 0;i<16;i++)
{
OFF_KEY_CLK;delay_key(96);
ON_KEY_CLK;delay_key(96);
}
}
//********************************************************************************
**************
void Read_Key(void)
{
ON_KEY_DATA;ON_KEY_CLK;
for (uint8_t i = 0;i<16;i++)
{
OFF_KEY_CLK;delay_key(96);
key_state[i] = ~IS_KEY_DATA;
ON_KEY_CLK;delay_key(96);
}

}
//********************************************************************************
**************
void Write_Key(void)
{
ON_KEY_DATA;ON_KEY_CLK;
for (uint8_t i = 0;i<16;i++)
{
if (key_data[i] == 0) OFF_KEY_DATA; else ON_KEY_DATA;
OFF_KEY_CLK;delay_key(96);
ON_KEY_CLK;delay_key(96);
}
}

//********************************************************************************
**************
void Work_Key(void)
{
uint8_t inp_key = 'Z';
Read_Key();
Write_Key();
key_data[LED_KEY_BUZZER] = 0;

if (key_state[1])
{
key_data[LED_KEY_BUZZER] = 1; // ROW 1
if (key_state[7]) inp_key = '1';
if (key_state[6]) inp_key = '4';
if (key_state[5]) inp_key = '7';
if (key_state[4]) inp_key = '*';
}
if (key_state[2])
{
key_data[LED_KEY_BUZZER] = 1; // ROW 2
if (key_state[7]) inp_key = '2';
if (key_state[6]) inp_key = '5';
if (key_state[5]) inp_key = '8';
if (key_state[4]) inp_key = '0';
}
if (key_state[3])
{
key_data[LED_KEY_BUZZER] = 1; // ROW 3
if (key_state[7]) inp_key = '3';
if (key_state[6]) inp_key = '6';
if (key_state[5]) inp_key = '9';
if (key_state[4]) inp_key = '#';
}
if (old_key != inp_key)
{
old_key = inp_key;
if (inp_key !='Z')
{
key_buffer[key_data_index] = inp_key;
key_data_index ++;

if(key_data_index >15) key_data_index = 0;
if(inp_key == '*') key_data_index = 0; // сброс буфера *

if(inp_key == '#') // конец ввода #
{

// данные в буфере

memset(Core.Keys.data_buffer,0x00,16);
Core.Keys.data_index = 0;
}
}

}


if (key_state[ST_KEY_TAMPER]) // чтение состояния тампера

if (key_state[ST_KEY_ADR_A]) // чтение состояние адреса A
if (key_state[ST_KEY_ADR_B]) // чтение состояние адреса A
if (key_state[ST_KEY_ADR_C]) // чтение состояние адреса A
if (key_state[ST_KEY_ADR_D]) // чтение состояние адреса A




// Чтение 1 шлейфа

if( key_state[ST_KEY_Z1_OK]) // если 1 то в норме
if( key_state[ST_KEY_Z1_KZ]) // если 1 то короткое замыкание





if( key_state[ST_KEY_Z2_OK]) // Чтение 2 шлейфа
if( key_state[ST_KEY_Z2_KZ])



}

a14.gif пример рабочий
думаю что пригодится


применение

SIGNAL(SIG_OVERFLOW0)
{
TCNT0=76; // 25 ms
Work_Key();
}

int main(void)
{

TCNT0 = 0x7F; TCCR0 = 0x05; TIMSK|= (1<<TOIE0);

InitKey();

while(1)
{

}
}

Сообщение отредактировал MicronSys - Apr 1 2008, 14:58
Go to the top of the page
 
+Quote Post
revolution
сообщение Apr 1 2008, 20:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 21-06-06
Из: Рига, Латвия
Пользователь №: 18 255



Интересная информация. Работает только с CA-6 KLED?
А алгоритм протокола обмена в общем виде можете "расшифровать"?
Go to the top of the page
 
+Quote Post
MicronSys
сообщение Apr 2 2008, 08:29
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 12-05-05
Пользователь №: 4 946



Вот схема подключения ( вчера инет рубануло не успел wacko.gif )


по поводу протокола
там все очень просто smile.gif


Чтение состояния клавы
ON_KEY_DATA; - 1 на линии DATA
ON_KEY_CLK; - 1 на линии CLK
for (uint8_t i = 0;i<16;i++)
{
OFF_KEY_CLK; - 0 на CLK
delay_key(96); - ждемс
key_state[i] = ~IS_KEY_DATA; - читаем ответ от клавы
ON_KEY_CLK; - 1 на CLK
delay_key(96); - ждемс

} и так 16 раз

// Данные от клавы тут расписанно все 1111493779.gif
#define ST_KEY_TAMPER 0
...
#define ST_KEY_ADR_D 15

Запись в клаву
ON_KEY_DATA;- 1 на линии DATA
ON_KEY_CLK; - 1 на линии CLK
for (uint8_t i = 0;i<16;i++)
{
if (key_data[i] == 0) OFF_KEY_DATA; - если надо послать 0 то 0 - на линии DATA
else ON_KEY_DATA; если 1 то 1- на линии DATA
OFF_KEY_CLK; - 0 на CLK ( клава защелкнит данные)
delay_key(96);- ждемс
ON_KEY_CLK; - 1 на линии CLK
delay_key(96);- ждемс
}

// данные на клаву тут расписанно все 1111493779.gif
#define LED_KEY_ZONE_1 15
....
#define LED_KEY_ALARM_2 0

единственное не работайте в основном цикле проги будет шум на клаве ( чето она медленная)
произвольное мигание LED

a14.gif
Go to the top of the page
 
+Quote Post
revolution
сообщение Apr 2 2008, 13:33
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 21-06-06
Из: Рига, Латвия
Пользователь №: 18 255



Цитата(MicronSys @ Apr 2 2008, 10:29) *
по поводу протокола
Понятно!
А с клавиатурами от панелей DSC не работали?
Go to the top of the page
 
+Quote Post
MicronSys
сообщение Apr 2 2008, 15:12
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 12-05-05
Пользователь №: 4 946



Нет по причине отсутчтвия последней
Дайте мне ее в руки maniac.gif
я думаю не чего сложного
Если Ну очень надо то могу на следующей неделе попробовать ее взять и пороботать beer.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 2 2008, 15:42
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(revolution @ Apr 2 2008, 15:33) *
А с клавиатурами от панелей DSC не работали?

Я работал году в 97 или 98 - и "на себя" цеплял, и делал на макетке совместимую клавиатуру на каком-то тогдашнем AVR, дальше дело не пошло.
Это надо по старым компактам порыться, я забыл уже. Надеюсь, оно с дискет переписано было.

Но там подключение где-то такое же, как на приведенной в теме схеме CLK и двунаправленные данные, одновремённо идёт передача в клавиатуру и чтение из неё (по фронту CLK одно, по спаду другое, что где уже не помню), послыка 24 бита, туда - значения для светодиодов (до 16 зон + служебные и пискунчик). Назад в первом (кажется) байте передаётся состояние клавиатуры - 5 бит строчных и 3 бита столбцовых линий, при одной нажатой клавише два нуля, по одному в каждой группе.
Там просто на столбцовых линиях по базе транзисторов, при нажатии кнопки на соответствующей строке формируется "0" размером в напряжение база-эмиттер, а на соответствующем столбце "0" создаётся уже коллектором.

По первому CLK в клавиатуре заряжается конденсатор и после прекращения CLK через какое-то время разряжается и формируется строб перезаписи из сдвигового регистра CD4094 в хранящий.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
revolution
сообщение Apr 2 2008, 17:35
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 21-06-06
Из: Рига, Латвия
Пользователь №: 18 255



Цитата(MicronSys @ Apr 2 2008, 17:12) *
Если Ну очень надо то могу на следующей неделе попробовать ее взять и пороботать
Панели DSC у нас считаются "классикой" и поэтому более распространены, отсюда и интерес.
Цитата(ReAl @ Apr 2 2008, 17:42) *
... и делал на макетке совместимую клавиатуру на каком-то тогдашнем AVR..
Это интересный вариант! Тогда можно попытаться управлять сигнализацией с компа. Кстати, более сложная панель фирмы Satel - "INTEGRA", имеет на клавиатуре COM порт и может управляться с компа.
Go to the top of the page
 
+Quote Post
bloodden
сообщение Apr 8 2008, 08:06
Сообщение #8


Бывалый
***

Группа: Validating
Сообщений: 375
Регистрация: 19-10-05
Из: Kiev, UA
Пользователь №: 9 853



Кто знает протокол общения централи Satel CA-64 и т.п. с расширителями/клавиатурами?
Заранее спасибо.


--------------------
Заходите кому надо на мой сайт
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:18
Рейтинг@Mail.ru


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