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

 
 
> Программная реализация интерфейса
stalknr
сообщение Apr 11 2011, 18:04
Сообщение #1


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

Группа: Участник
Сообщений: 79
Регистрация: 19-01-08
Пользователь №: 34 241



Добрый вечер форумчане!!!!
Есть вот такая задачка
Необходимо программно реализовать интерфейс типа ARINC-429.
Последовательный интерфейс. По 1 проводу идут данные, по 2 проводу - синхросигнал (Частота 1,25 МГЦ).
Слово данных состоит из 22 разрядов -> 1...6 - адрес (1-младший бит адреса, 6 - старший бит адреса) + 7...22 - данные (7 - младший, 22 - старший).
Помогите реализовать выдачу и прием такого слова микроконтроллером. Желательно на ассемблере.
Заранее спасибо.
Если нужны уточнения пишите.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
stalknr
сообщение Apr 13 2011, 16:36
Сообщение #2


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

Группа: Участник
Сообщений: 79
Регистрация: 19-01-08
Пользователь №: 34 241



так ведет себя МАСТЕР. СЛАЙВ в этот момент принимает ПОСТОЕ СЛОВО и на его основе формирует ответ.

Код
//----------------------------------------------------------------------------
//                  Процедура     _peredacha_slova_PRD
//----------------------------------------------------------------------------
// передаем слово данных ведомому
_peredacha_slova_PRD:
    
//-------------------------------------------------
// выдаем на PORTB.0 6 младших разрядов байта ADRES_OUT
//-------------------------------------------------
_out_ADRES_OUT:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    ROR  ADRES_OUT                      //100ns  сдвигаем ADRES_OUT вправо причем SREG.C=ADRES_OUT.0
    BRCS C_1                    //150ns  Выдаем
    SBR  temp, (1<<PB1)            // если бит SREG.С=0 то выдаем в выдаем в порт только синхросигнал
    RJMP C_0
C_1:SBR  temp, (1<<PB1)+(1<<PB0)// если бит SREG.С=1 то выдаем в выдаем в порт  синхросигнал и сам бит
    NOP
C_0:NOP
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns
    NOP                             //600ns
    NOP                             //650ns
    CPI  Nraz, 0x06               //700ns и 750ns  считаем 6 умпульсов
    BRLO _out_ADRES_OUT               //800ns  Nrz < 6  переход по "меньше"
//-------------------------------------------------
    NOP

//-------------------------------------------------
// выдаем на PORTB.0 8 разрядов байта DATA_L
//-------------------------------------------------
_out_DATA_L:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    ROR  DATA_L                      //100ns
    BRCS C_3                    //150ns  Выдаем
    SBR  temp, (1<<PB1)            // если бит SREG.С=0 то выдаем в выдаем в порт только синхросигнал
    RJMP C_2
C_3:SBR  temp, (1<<PB1)+(1<<PB0)// если бит SREG.С=1 то выдаем в выдаем в порт  синхросигнал и сам бит
    NOP
C_2:NOP
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns
    NOP                             //600ns
    NOP                             //650ns
    CPI  Nraz, 0x0E               //700ns и 750ns  считаем 6+8 умпульсов
    BRLO _out_DATA_L               //800ns  Nrz < 6+8  переход по "меньше"
//-------------------------------------------------
    NOP

//-------------------------------------------------
// выдаем на PORTB.0 8 разрядов байта DATA_H
//-------------------------------------------------
_out_DATA_H:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    ROR  DATA_H                      //100ns
    BRCS C_5                    //150ns  Выдаем
    SBR  temp, (1<<PB1)            // если бит SREG.С=0 то выдаем в выдаем в порт только синхросигнал
    RJMP C_4
C_5:SBR  temp, (1<<PB1)+(1<<PB0)// если бит SREG.С=1 то выдаем в выдаем в порт  синхросигнал и сам бит
    NOP
C_4:NOP
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns
    NOP                             //600ns
    NOP                             //650ns
    CPI  Nraz, 0x16               //700ns и 750ns  считаем 6+8+8 умпульсов
    BRLO _out_DATA_H              //800ns  Nrz < 6+8+8  переход по "меньше"
//-------------------------------------------------    

//             КОНЕЦ ВЫДАЧИ СЛОВА     
    NOP
    OUT  PORTB, temp            // ставим на линию данных 0 и на линию синхро тоже 0
    CLR  Nraz                    // обнуляем счетчик разрядов
    INC  Nsl                    // увеличиваем счетчик слов на +1
    CLR  temp
    RET                            // Выход из процедуры _peredacha_slova_PRD   RET=4 маш. циклов
//----------------------------------------------------------------------------



//----------------------------------------------------------------------------
//                  Процедура     _peredacha_slova_PRM
//----------------------------------------------------------------------------
// передаем слово ведомому и принимаем от него информацию
_peredacha_slova_PRM:
    CLR  ADRES_IN
    CLR  DATA_L
    CLR  DATA_H
//-------------------------------------------------
// выдаем на PORTB.0 6 младших разрядов байта ADRES_OUT
// принимаем на PORTB.2 6 младших разрядов байта ADRES_IN
//-------------------------------------------------
_out_ADRES_OUT_and_in_ADRES_IN:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    ROR  ADRES_OUT                  //100ns  сдвигаем ADRES_OUT вправо причем SREG.C=ADRES_OUT.0
    BRCS C_7                    //150ns  Выдаем
    SBR  temp, (1<<PB1)            // если бит SREG.С=0 то выдаем в выдаем в порт только синхросигнал
    RJMP C_6
C_7:SBR  temp, (1<<PB1)+(1<<PB0)// если бит SREG.С=1 то выдаем в выдаем в порт  синхросигнал и сам бит
    NOP
C_6:LSR  ADRES_IN
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns  
    SBIC PINB, PB2                //600ns  если PINB.2=0 то пропускаем следующую команду
    SBR  ADRES_IN, (1<<7)               //650ns  ставим 1 в 7 разряде ADRES_IN
    CPI  Nraz, 0x06               //700ns и 750ns  считаем 6 умпульсов
    BRLO _out_ADRES_OUT_and_in_ADRES_IN             //800ns  Nrz < 6  переход по "меньше"
//-------------------------------------------------
    NOP

//-------------------------------------------------
// принимаем на PORTB.2 8 разрядов байта DATA_L
//-------------------------------------------------
_in_DATA_L:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    LSR  DATA_L                    //100ns
    NOP                            //150ns  
    NOP                            //200ns  выдаем в выдаем в порт только синхросигнал
    NOP                            //250ns
    NOP                            //300ns
    SBR  temp, (1<<PB1)            //300ns
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns
    SBIC PINB, PB2                //600ns  если PINB.2=0 то пропускаем следующую команду
    SBR  DATA_L, (1<<7)               //650ns  ставим 1 в 7 разряде DATA_L
    CPI  Nraz, 0x0E               //700ns и 750ns  считаем 6+8 умпульсов
    BRLO _in_DATA_L               //800ns  Nrz < 6+8  переход по "меньше"
//-------------------------------------------------
    NOP

//-------------------------------------------------
// выдаем на PORTB.0 8 разрядов байта DATA_H
//-------------------------------------------------
_in_DATA_H:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    LSR  DATA_H                      //100ns
    NOP                            //150ns  
    NOP                            //200ns  выдаем в выдаем в порт только синхросигнал
    NOP                            //250ns
    NOP                            //300ns
    SBR  temp, (1<<PB1)            //300ns
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns
    SBIC PINB, PB2                //600ns  если PINB.2=0 то пропускаем следующую команду
    SBR  DATA_H, (1<<7)            //650ns  ставим 1 в 7 разряде DATA_H
    CPI  Nraz, 0x16               //700ns и 750ns  считаем 6+8+8 умпульсов
    BRLO _in_DATA_H              //800ns  Nrz < 6+8+8  переход по "меньше"
//-------------------------------------------------    
    NOP
//             КОНЕЦ ПРИЕМА СЛОВА     
    
    OUT  PORTB, temp            // ставим на линию данных 0 и на линию синхро тоже 0
    CLR  Nraz                    // обнуляем счетчик разрядов
    INC  Nsl                    // увеличиваем счетчик слов на +1
    LSR  ADRES_IN
    LSR  ADRES_IN                // сдивагаем 2 раза чтобы получить 1р адреса в 0р байта (ПОДГОНЯЕМ ПОД ФОРМАТ)
    
    LDI  DATA_L, 0xAA

    LDI  YH, 0x01
    LDI  temp, 0x03
    MUL  temp, ADRES_IN
    MOV  YL, R0

    ST   Y+, ADRES_IN
    ST   Y+, DATA_L
    ST   Y+, DATA_H
    CLR  YL

;    CLR  ADRES_IN
;    CLR  DATA_L
;    CLR  DATA_H
    CLR  temp
    RET                            // Выход из процедуры _peredacha_slova_PRD   RET=4 маш. циклов
//----------------------------------------------------------------------------


ЭТО ЧУДО у меня в протеусе сегодня заработало

КОРОЧЕ в посылке у МАСТЕРА сначало 33 слово только на передачу (СЛАЙВ в это время принимает, складывает это все в ОЗУ и формирует ответ ввиде АДРЕС+2 ПУСТЫХ БАЙТА (НАХРЕНА НЕЗНАЮ)) далее перерыв в 300 мкс и МАСТЕР выдает еще 33 слова на передачу и прием (тоесть формирует для СЛАЙВА синхро сигнал и принимает от него данные) затем идет 6*1,28 мс пауза и все заново начинаеться
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- stalknr   Программная реализация интерфейса   Apr 11 2011, 18:04
- - kovigor   Цитата(stalknr @ Apr 11 2011, 21:04) Необ...   Apr 11 2011, 18:18
- - stalknr   А больше не чего реализовывать и не надо. Тупо про...   Apr 11 2011, 18:25
|- - kovigor   Цитата(stalknr @ Apr 11 2011, 21:25) И со...   Apr 11 2011, 18:36
- - stalknr   Шустрый AVR уже выбрал - ATmega88. Предельная част...   Apr 11 2011, 18:47
|- - kovigor   Цитата(stalknr @ Apr 11 2011, 21:47) Шуст...   Apr 11 2011, 18:57
- - rx3apf   Цитата(stalknr @ Apr 11 2011, 22:04) Необ...   Apr 11 2011, 18:51
- - stalknr   Это сильно урезанный и переделанный ARINC 429 разр...   Apr 11 2011, 18:55
|- - rx3apf   Цитата(stalknr @ Apr 11 2011, 22:55) а ес...   Apr 11 2011, 19:02
|- - zombi   Цитата(rx3apf @ Apr 11 2011, 23:02) Ну чт...   Apr 12 2011, 17:32
|- - rx3apf   Цитата(zombi @ Apr 12 2011, 21:32) Или я ...   Apr 12 2011, 17:45
|- - zombi   Цитата(rx3apf @ Apr 12 2011, 21:45) Начал...   Apr 12 2011, 17:54
|- - rx3apf   Цитата(zombi @ Apr 12 2011, 21:54) А что,...   Apr 12 2011, 17:57
|- - stells   Цитата(zombi @ Apr 12 2011, 21:54) Кстати...   Apr 12 2011, 18:10
||- - zombi   Цитата(stells @ Apr 12 2011, 22:10) кстат...   Apr 12 2011, 18:22
||- - stells   Цитата(zombi @ Apr 12 2011, 22:22) Пока н...   Apr 12 2011, 19:17
|- - ILYAUL   Цитата16 тактов на прием одного бита - сомнительно...   Apr 12 2011, 23:29
- - stalknr   есть согласующая схема на ее выходе ТТЛ сигнал Дан...   Apr 11 2011, 18:59
- - stells   16 тактов на прием одного бита - сомнительно, на г...   Apr 11 2011, 19:07
|- - nk@   Цитата(stells @ Apr 11 2011, 22:07) 16 та...   Apr 11 2011, 20:37
|- - rx3apf   Цитата(nk@ @ Apr 12 2011, 00:37) +1 вот-в...   Apr 11 2011, 21:38
|- - nk@   Цитата(rx3apf @ Apr 12 2011, 00:38) Как р...   Apr 12 2011, 04:20
|- - rx3apf   Цитата(nk@ @ Apr 12 2011, 08:20) Это если...   Apr 12 2011, 08:46
|- - nk@   Цитата(rx3apf @ Apr 12 2011, 11:46) На 11...   Apr 12 2011, 09:51
|- - rx3apf   Цитата(nk@ @ Apr 12 2011, 13:51) Вы возьм...   Apr 12 2011, 09:59
||- - nk@   Цитата(rx3apf @ Apr 12 2011, 12:59) Я не ...   Apr 12 2011, 11:16
||- - kovigor   Цитата(nk@ @ Apr 12 2011, 14:16) Когда ид...   Apr 12 2011, 11:34
||- - ILYAUL   Цитата(nk@ @ Apr 12 2011, 15:16) С SPI не...   Apr 12 2011, 11:56
||- - rx3apf   Цитата(nk@ @ Apr 12 2011, 15:16) Так вот ...   Apr 12 2011, 15:13
||- - 777777   Цитата(rx3apf @ Apr 12 2011, 19:13) Изнач...   Apr 13 2011, 09:51
||- - zombi   Цитата(777777 @ Apr 13 2011, 13:51) вынут...   Apr 13 2011, 11:09
||- - rx3apf   Цитата(zombi @ Apr 13 2011, 15:09) А какж...   Apr 13 2011, 12:07
||- - ILYAUL   Цитата(rx3apf @ Apr 13 2011, 16:07) Да та...   Apr 13 2011, 12:20
||- - stells   Цитата(rx3apf @ Apr 13 2011, 16:07) Набир...   Apr 13 2011, 12:38
||- - ILYAUL   Цитата(stells @ Apr 13 2011, 16:38) с тре...   Apr 13 2011, 12:45
|||- - stells   Цитата(ILYAUL @ Apr 13 2011, 16:45) Там и...   Apr 13 2011, 12:49
||- - rx3apf   Цитата(stells @ Apr 13 2011, 16:38) с тре...   Apr 13 2011, 12:52
|||- - stells   Цитата(rx3apf @ Apr 13 2011, 16:52) Откуд...   Apr 13 2011, 12:55
|||- - rx3apf   Цитата(stells @ Apr 13 2011, 16:55) а рег...   Apr 13 2011, 12:58
|||- - stells   Цитата(rx3apf @ Apr 13 2011, 16:58) Я пон...   Apr 13 2011, 13:05
||||- - zombi   Цитата(stells @ Apr 13 2011, 17:05) насче...   Apr 13 2011, 13:14
|||- - zombi   Цитата(rx3apf @ Apr 13 2011, 16:58) Я пон...   Apr 13 2011, 13:06
|||- - stells   Цитата(zombi @ Apr 13 2011, 17:06) О како...   Apr 13 2011, 13:09
|||- - rx3apf   Цитата(zombi @ Apr 13 2011, 17:06) О како...   Apr 13 2011, 13:18
||- - zombi   Цитата(stells @ Apr 13 2011, 16:38) по 22...   Apr 13 2011, 12:54
|- - =GM=   Цитата(nk@ @ Apr 12 2011, 08:51) 115200 в...   Apr 12 2011, 12:05
- - =GM=   Цитата(stalknr @ Apr 11 2011, 17:04) По 1...   Apr 11 2011, 22:24
- - 777777   Цитата(stalknr @ Apr 11 2011, 22:04) Посл...   Apr 12 2011, 07:24
- - stalknr   Здравствуйте товарищи!!!! Докладыв...   Apr 12 2011, 15:27
|- - zombi   Цитата(stalknr @ Apr 12 2011, 19:27) ЦЕЛЬ...   Apr 13 2011, 12:44
- - stalknr   Господин ZOMBIK временная диаграмма выложена мною ...   Apr 12 2011, 18:55
|- - zombi   Цитата(stalknr @ Apr 12 2011, 22:50) Госп...   Apr 12 2011, 18:59
- - ILYAUL   Вот код , по идее сможем поймать биты. Но посчитат...   Apr 13 2011, 06:17
|- - =GM=   Цитата(ILYAUL @ Apr 13 2011, 05:17) Вот к...   Apr 13 2011, 10:21
|- - ILYAUL   Цитата(=GM= @ Apr 13 2011, 14:21) По идее...   Apr 13 2011, 10:51
- - Kovrov   А почему не хотим внешний приемник данных организо...   Apr 13 2011, 11:26
|- - =GM=   Зачем нужен внешний, если есть встроенный сдвиговы...   Apr 13 2011, 11:48
|- - Kovrov   Цитата(=GM= @ Apr 13 2011, 15:48) Зачем н...   Apr 13 2011, 12:17
- - ILYAUL   Коллеги! Там ТЗ , как то поменялось уже - посм...   Apr 13 2011, 12:04
- - stells   в общем от контроллера нужно 3 ноги: MOSI, SCK, T0...   Apr 13 2011, 13:18
|- - 777777   Цитата(stells @ Apr 13 2011, 17:18) в общ...   Apr 13 2011, 15:52
|- - zombi   Цитата(777777 @ Apr 13 2011, 19:52) Счетч...   Apr 13 2011, 16:02
|- - stells   Цитата(zombi @ Apr 13 2011, 20:02) Действ...   Apr 13 2011, 16:15
- - zombi   Цитата(rx3apf @ Apr 13 2011, 17:18) А вни...   Apr 13 2011, 13:40
|- - kovigor   Цитата(zombi @ Apr 13 2011, 16:40) Может ...   Apr 13 2011, 13:49
|- - stells   Цитата(kovigor @ Apr 13 2011, 17:49) Или ...   Apr 13 2011, 14:05
|- - =GM=   Кто-то здесь подсчитал, что при использовании прер...   Apr 13 2011, 15:18
|- - zombi   Цитата(=GM= @ Apr 13 2011, 19:18) а при п...   Apr 13 2011, 15:29
|- - =GM=   Цитата(zombi @ Apr 13 2011, 14:29) Не был...   Apr 13 2011, 15:59
|- - zombi   Цитата(=GM= @ Apr 13 2011, 19:59) Ну отку...   Apr 13 2011, 17:39
|- - =GM=   Обсуждения не получилось, ну да ладно. Давайте пог...   Apr 14 2011, 13:05
|- - zombi   Цитата(=GM= @ Apr 14 2011, 17:05) Обсужде...   Apr 14 2011, 14:21
|- - =GM=   Цитата(zombi @ Apr 14 2011, 13:21) А как ...   Apr 14 2011, 16:25
- - stalknr   Привет Господа!!!! Смотрю пока я н...   Apr 13 2011, 16:18
|- - stells   Цитата(stalknr @ Apr 13 2011, 20:18) Вооб...   Apr 13 2011, 16:21
|- - _pv   Цитата(stalknr @ Apr 13 2011, 22:18) Вооб...   Apr 14 2011, 15:18
- - stalknr   Мне надо на один пин выдавать ДАННЫЕ (АДРЕС+ПУСТОЙ...   Apr 13 2011, 16:25
|- - stells   Цитата(stalknr @ Apr 13 2011, 20:25) Мне ...   Apr 13 2011, 16:27
|- - zombi   Цитата(stalknr @ Apr 13 2011, 20:36) ЭТО ...   Apr 13 2011, 17:14
- - stalknr   в начале пачки идет пустое слово (для синхроназаци...   Apr 13 2011, 17:29
- - stalknr   Интересно а как он узнает когда ему данные надо пр...   Apr 13 2011, 17:44
|- - zombi   Т.е. слейв тоже может формировать синхро? Нее шото...   Apr 13 2011, 17:46
- - stalknr   Может. МАСТЕР и СЛЕЙВ связаны линиями ПК1 и ПК2 ПК...   Apr 13 2011, 17:51
|- - zombi   Цитата(stalknr @ Apr 13 2011, 21:51) Може...   Apr 13 2011, 18:07
- - stalknr   Нет линии не двунаправленные ПК1 - 2 провода (синх...   Apr 13 2011, 18:10
|- - zombi   Цитата(stalknr @ Apr 13 2011, 22:10) Нет ...   Apr 13 2011, 18:17
- - stells   да уж, тем более, что от arinc 429 остался только ...   Apr 13 2011, 18:11
- - stalknr   По ПК1 МАСТЕР кидает данные и синхро СЛЕЙВУ а по П...   Apr 13 2011, 18:11
- - stalknr   ЦЕНТЕР-ГЕРЕНГУ Нас спалили переходим на нелегально...   Apr 13 2011, 18:29
|- - zombi   Цитата(stalknr @ Apr 13 2011, 22:29) Что ...   Apr 13 2011, 18:39
- - stalknr   да кстате Господа как сформировать сигнал длительн...   Apr 13 2011, 18:41
|- - zombi   Цитата(stalknr @ Apr 13 2011, 22:41) да к...   Apr 13 2011, 18:47
- - Hmm   О чем это все. Для 'ARINC-429' скорость ма...   Apr 14 2011, 14:27
- - zombi   Цитата(Hmm @ Apr 14 2011, 18:27) О чем эт...   Apr 14 2011, 15:00
|- - Hmm   Цитата(zombi @ Apr 14 2011, 18:00) Может ...   Apr 14 2011, 15:27
- - stalknr   Привет всем!!! Есть идея для слайва. П...   Apr 14 2011, 15:10
|- - zombi   Цитата(stalknr @ Apr 14 2011, 19:10) Прив...   Apr 14 2011, 15:42
- - stalknr   Только вот не очень хочется ставить 6шт кр555ИР16 ...   Apr 14 2011, 15:55
- - kovigor   Цитата(stalknr @ Apr 14 2011, 18:55) Толь...   Apr 14 2011, 16:01
2 страниц V   1 2 >


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

 


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


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