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

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » К1233КТ1,К1233КТ2(CYFRAL, METAKOM)


К1233КТ1,К1233КТ2(CYFRAL, METAKOM)

Сообщений 1 страница 4 из 4

1

Может кто нибудь подсказать, как сформировать код из к1233кт1, кт2 на выходе МК (эмулировать)  . Если можно алгоритм и примерный код программы
http://s3.uploads.ru/t/pKmul.gif

0

2

pavel0905 написал(а):

К1233КТ1

помоему там 1-wire обычный. Либо по таймеру нужно слать. Этож ключ таблэтка ?

0

3

RN6LHC написал(а):

помоему там 1-wire обычный.


Нет, там не 1-wire, бит состоит из 0 и 1 разной длительности.
Да это ключи. Решил попробовать сам эмулятор ключей  сделать.
Я пока только так придумал, только длинна импульсов другая в протеусе получается. Может можно по другому как-то сделать?   

Код

$regfile = "m32def.dat"
$crystal = 12000000
$hwstack = 40
$swstack = 16
$framesize = 32
Ddrd = &B00100000                                           ' PD.5 - Выход

Dim Nword As Byte , Nbit As Byte                            'номер слова , номер бита в слове
Dim Words(14) As Byte                                       ' массив слов

Const Per = 150                                             ' период передачи 1 бита
Const Per13 = 50                                            ' 1/3 периода
Const Per23 = 100                                           '2/3 периода
'                                    код CYFRAL
Words(1) = &B00000001                                       'стартовое слово (0001)
Words(2) = &B00000111                                       '1 кодовое слово (0111=3)
Words(3) = &B00001011                                       '2 кодовое слово (1011=2)
Words(4) = &B00001101                                       '3 кодовое слово (1101=1)
Words(5) = &B00001110                                       '4 кодовое слово (1110=0)
Words(6) = &B00000111                                       ' -//-
Words(7) = &B00001110                                       ' -//-
Words(8) = &B00000111                                       ' -//-
Words(9) = &B00001110                                       '8 кодовое слово
'                                  код METAKOM
Words(10) = &B00000010                                      ' стартовое слово (010)
Words(11) = &B00010111                                      '1 кодовое слово (00010111)
Words(12) = &B01001110                                      ' -//-                    (01001110)
Words(13) = &B00000110                                      ' -//-                    (00000110)
Words(14) = &B10000010                                      '4 кодовое слово (10000010)
Do
    Gosub Metout
      Waitms 500
    Gosub Cyfout
      Waitms 500
Loop

End

Cyfout:                                                     ' передача кода CYFRAL
         For Nword = 1 To 9                                 'номер передаваемого слова
                For Nbit = 0 To 3                           ' номер передаваемого бита в слове
                        If Words(nword).nbit = 0 Then       ' если бит=0
                           Reset Portd.5
                           Waitus Per13
                           Set Portd.5
                           Waitus Per23
                        End If
                        If Words(nword).nbit = 1 Then       ' если бит=1
                            Reset Portd.5
                            Waitus Per23
                            Set Portd.5
                            Waitus Per13
                        End If
                Next Nbit
         Next Nword
Return

Metout:                                                     ' передача кода METAKOM
         Reset Portd.5                                      '
         Waitus Per                                         'синхронизирующий бит
         For Nword = 10 To 14                               ' номер передаваемого слова
                For Nbit = 0 To 7                           '  номер передаваемого бита в слове
                        If Words(nword).nbit = 0 Then       'если бит=0
                           Set Portd.5
                           Waitus Per13
                           Reset Portd.5
                           Waitus Per23
                        End If
                        If Words(nword).nbit = 1 Then      если бит=1
                           Set Portd.5
                           Waitus Per23
                           Reset Portd.5
                           Waitus Per13
                        End If
                        If Nword = 10 And Nbit = 2 Then     'конец передачи стартового слова
                          Exit For
                        End If
                Next Nbit
         Next Nword
Return

А как с помощью таймера сделать?

0

4

pavel0905 написал(а):

Нет, там не 1-wire, бит состоит из 0 и 1 разной длительности.
Да это ключи. Решил попробовать сам эмулятор ключей  сделать.
Я пока только так придумал, только длинна импульсов другая в протеусе получается. Может можно по другому как-то сделать?   

А как с помощью таймера сделать?


Если времянка  известная ее нужно выдерживать таймером. Могу поделится своим кодом. Это передатчик NEC протокола. эмулятор пульта с управлением по уарту. когда-то лепил голосовой пульт телевизора. помню код работал возможно он будет вам полезен.   

Код:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 9600
Config Portb.1 = Output
Config Portb.0 = Output
Config Portb.2 = Output

Config Timer0 = Timer , Prescale = 1
Config Timer1 = Timer , Prescale = 1
Config Timer2 = Timer , Prescale = 8


Dim I As Word
Dim J As Word
Dim K As Word
Dim L As Byte
Dim M As Byte
Dim A As Bit

Dim Ris As Bit
Dim Fall As Bit
Dim Circl As Byte
Dim Tick As Word


Dim Adress As Byte
Dim Command As Byte
Dim N_adress As Byte
Dim N_command As Byte
Dim Trx As Bit
Dim Ch As String * 2


Declare Sub Interval(byval Ris As Byte , Byval Fall As Byte , Byval Circl As Byte , Byval Tick As Word )
Declare Sub Start_bit
Declare Sub Preambula
Declare Sub Logic_1
Declare Sub Logic_0
Declare Sub Transmit
Declare Sub Bt_rx


$eeprom
Tv:
Data &B01000001 , &B10111110 , &B00100001 , &B11011110
Console_on:
Data &B00000001 , &B01111110 , &B10010001 , &B01101110
Av:
Data &B01000001 , &B10111111 , &B10100000 , &B01011111
Back_arrow:
Data &B00000001 , &B01111110 , &B10000001 , &B01111111
Menu:
Data &B00000001 , &B01111111 , &B11000000 , &B00111111
Arrows:
Data &B00000001 , &B01111110 , &B00110101 , &B11001010
Up:
Data &B00000001 , &B01111111 , &B10100000 , &B01011111
Lef:
Data &B00000001 , &B01111111 , &B00100100 , &B11011011
Ok:
Data &B00000001 , &B01111111 , &B01100000 , &B10011111
Righ:
Data &B00000001 , &B01111110 , &B10100101 , &B01011010
Down:
Data &B00000001 , &B01111111 , &B11100000 , &B00011111
Rew:
Data &B00000001 , &B01111110 , &B10110101 , &B01001010
Play:
Data &B00000001 , &B01111110 , &B01000001 , &B10111110
Fwd:
Data &B00000001 , &B01111110 , &B11100001 , &B00011110
Vol_up:
Data &B01000001 , &B10111110 , &B10000001 , &B01111110
Vol_down:
Data &B01000001 , &B10111111 , &B10000000 , &B01111111
Mute:
Data &B01000001 , &B10111111 , &B00100000 , &B11011111
Windows:
Data &B00000001 , &B01111110 , &B00001101 , &B11110010
Ch_up:
Data &B00000001 , &B01111110 , &B00110001 , &B11001110
Ch_down:
Data &B00000001 , &B01111110 , &B01110001 , &B10001110
Ch_1:
Data &B00000001 , &B01111111 , &B01010000 , &B10101111
Ch_2:
Data &B00000001 , &B01111110 , &B11010001 , &B00101110
Ch_3:
Data &B00000001 , &B01111111 , &B11010000 , &B00101111
Ch_4:
Data &B00000001 , &B01111111 , &B00110000 , &B11001111
Ch_5:
Data &B00000001 , &B01111110 , &B10110001 , &B01001110
Ch_6:
Data &B00000001 , &B01111111 , &B10110000 , &B01001111
Ch_7:
Data &B00000001 , &B01111111 , &B01110000 , &B10001111
Ch_8:
Data &B00000001 , &B01111110 , &B11110001 , &B00001110
Ch_9:
Data &B00000001 , &B01111111 , &B11110000 , &B00001111
Ch_0:
Data &B00000001 , &B01111111 , &B00000100 , &B11111011

$data


Enable Interrupts
Enable Timer2
Start Timer0
Start Timer1
Start Timer2

On Timer2 110ms

Rem {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{


 Do

Loop

Rem }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}




Rem * * * * * * * * * * * * * * * * * * * Интервалы * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *



  Sub Interval(byval Ris As Bit , Byval Fall As Bit , Byval Circl As Byte , Byval Tick As Word )
 ' A = Ris                                                   ' Portb.0 = Ris
  Timer1 = 0
  While I < Circl
  If Timer1 > Tick Then
  Incr I                                                    '65535 max

  Timer1 = 0
  End If
  If Ris = 1 Then Gosub Clk
  Wend
  I = 0
  'A = Fall                                                  'Portb.0 = Fall

  End Sub


 Sub Start_bit

 Call Interval(1 , 0 , 2 , 35700)                           '35700                '9ms       'фронт, спад, кол-во кругов таймера, кол-во тиков)
 Call Interval(0 , 0 , 1 , 35700)                           '35700               '4.5ms
 Call Interval(1 , 0 , 1 , 4100)                            '4100     '560uS
 Call Interval(0 , 0 , 1 , 4100)                            '4100     '560uS
 End Sub

 Sub Preambula
 Call Interval(1 , 0 , 2 , 35700)                           '35700       '9ms       'фронт, спад, кол-во кругов таймера, кол-во тиков)
 Call Interval(0 , 0 , 1 , 17850)                           '17850    '2.25ms
 Call Interval(1 , 0 , 1 , 4100)                            '4100    '560uS
 End Sub

 Sub Logic_1
 Call Interval(1 , 0 , 1 , 4100)                            '4100    '560uS
 Call Interval(0 , 0 , 1 , 4100)                            '4100    '560uS
 Call Interval(0 , 0 , 1 , 4100)                            '4100    '560uS
 Call Interval(0 , 0 , 1 , 4100)                            '4100    '560uS
 End Sub

 Sub Logic_0
 Call Interval(1 , 0 , 1 , 4100)                            '4100     '560uS
 Call Interval(0 , 0 , 1 , 4100)                            '4100     '560uS
 End Sub

Rem * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


Sub Transmit
Call Bt_rx
Call Start_bit

For M = 7 To 0 Step -1
Trx = Adress.m
If Trx = 0 Then Call Logic_0
If Trx = 1 Then Call Logic_1
Next M

For M = 7 To 0 Step -1
Trx = N_adress.m
If Trx = 0 Then Call Logic_0
If Trx = 1 Then Call Logic_1
Next M

For M = 7 To 0 Step -1
Trx = Command.m
If Trx = 0 Then Call Logic_0
If Trx = 1 Then Call Logic_1
Next M

For M = 7 To 0 Step -1
Trx = N_command.m
If Trx = 0 Then Call Logic_0
If Trx = 1 Then Call Logic_1
Next M

  Adress = 0
  N_adress = 0
  Command = 0
  N_command = 0
  End Sub




  Sub Bt_rx
  $timeout = 100
  Input Ch , Noecho

  If Ch = "01" Then
  Readeeprom Adress , Ch_1
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "02" Then
  Readeeprom Adress , Ch_2
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "03" Then
  Readeeprom Adress , Ch_3
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If


  If Ch = "04" Then
  Readeeprom Adress , Ch_4
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "05" Then
  Readeeprom Adress , Ch_5
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If


  If Ch = "06" Then
  Readeeprom Adress , Ch_6
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If


  If Ch = "07" Then
  Readeeprom Adress , Ch_7
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If


  If Ch = "08" Then
  Readeeprom Adress , Ch_8
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If


  If Ch = "09" Then
  Readeeprom Adress , Ch_9
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "00" Then
  Readeeprom Adress , Ch_0
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "10" Then
  Readeeprom Adress , Tv
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "11" Then
  Readeeprom Adress , Console_on
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "12" Then
  Readeeprom Adress , Av
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "13" Then
  Readeeprom Adress , Back_arrow
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "14" Then
  Readeeprom Adress , Menu
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "15" Then
  Readeeprom Adress , Arrows
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "16" Then
  Readeeprom Adress , Up
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

If Ch = "17" Then
  Readeeprom Adress , Lef
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "18" Then
  Readeeprom Adress , Ok
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "19" Then
  Readeeprom Adress , Righ
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "20" Then
  Readeeprom Adress , Down
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "21" Then
  Readeeprom Adress , Rew
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "22" Then
  Readeeprom Adress , Play
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "23" Then
  Readeeprom Adress , Fwd
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "24" Then
  Readeeprom Adress , Vol_up
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "25" Then
  Readeeprom Adress , Vol_down
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "26" Then
  Readeeprom Adress , Mute
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "27" Then
  Readeeprom Adress , Windows
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "28" Then
  Readeeprom Adress , Ch_up
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If

  If Ch = "29" Then
  Readeeprom Adress , Ch_down
  Readeeprom N_adress
  Readeeprom Command
  Readeeprom N_command
  End If



 Print Adress ; "   " ; N_adress ; "   " ; Command ; "    " ; N_command

    End Sub









Rem * * * * * * * * * * * * * * * * * * * * * * * Несущая Частота * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Clk:
 If Adress = 0 Then
 Portb.1 = 0
 Else
  Set Portb.1
  Waitus 8
  Reset Portb.1
  Waitus 12
 End If
 Return


Rem * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *



   110ms:
  Incr K
  If K = 175 Then Call Transmit
  If K = 345 Then Call Preambula
  If K = 730 Then Call Preambula
  If K = 730 Then
  K = 0
   End If
   Return

     End

Только не надо меня спрашивтаь как там что пашет. Я уже нефига не помню. года полтора назад было )))))) Но оно пахало понмю ))))

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » К1233КТ1,К1233КТ2(CYFRAL, METAKOM)