Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программная реализация интерфейса
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3
rx3apf
Цитата(stells @ Apr 13 2011, 16:38) *
с третьим байтом (17-22 биты) неувязка получится - он не заполнится и прерывание не сформируется. поэтому клок нужно еще на счетный вход завести - по 22 тику чтение 3-го байта

Откуда читать-то недопринятый байт ? И, главное, зачем ? Ну добьет его его синхронизация парой нулей или единиц, возьмем на два клока позже. Опять же момент старта - он произвольный, и где сколько битов - изначально непредсказуемо. Равно как и между словами.
zombi
Цитата(stells @ Apr 13 2011, 16:38) *
по 22 тику чтение 3-го байта

А попадет ли недозадвинутый байт в "READ DATA BUFFER" ?
stells
Цитата(rx3apf @ Apr 13 2011, 16:52) *
Откуда читать-то недопринятый байт ?

а регистр недоступен?
Цитата(rx3apf @ Apr 13 2011, 16:52) *
Ну добьет его его синхронизация парой нулей или единиц, возьмем на два клока позже.

это если синхросигнал непрерывный
rx3apf
Цитата(stells @ Apr 13 2011, 16:55) *
а регистр недоступен?

Регистр приема - недоступен. Доступен буферный, где лежит собранный байт.

Цитата
это если синхросигнал непрерывный

Я понял так, что синхра непрерывная. Если нет - то либо USI, либо программно, либо добивать самому через внешнюю логику (как вариант - монтажную).
stells
Цитата(rx3apf @ Apr 13 2011, 16:58) *
Я понял так, что синхра непрерывная. Если нет - то либо USI, либо программно, либо добивать самому через внешнюю логику (как вариант - монтажную).

насчет непрерывности непонятно, а насчет монтажного или я тоже хотел предложить вариант - контроллер сам добивает число клоков до 24
zombi
Цитата(rx3apf @ Apr 13 2011, 16:58) *
Я понял так, что синхра непрерывная.

О какой непрерывности синхро может идти речь если между словами и пачками есть паузы???
stells
Цитата(zombi @ Apr 13 2011, 17:06) *
О какой непрерывности синхро может идти речь если между словами и пачками есть паузы???

да и как старт обнаружить? нет, синхросигнал тоже на 22 такта... наверняка
zombi
Цитата(stells @ Apr 13 2011, 17:05) *
насчет непрерывности непонятно, а насчет монтажного или я тоже хотел предложить вариант - контроллер сам добивает число клоков до 24

Думаю можно, и паузы между словами оч. кстати.
stells
в общем от контроллера нужно 3 ноги: MOSI, SCK, T0. последние 2 замкнуты и сигнал на них подаем через резистор. по счетному входу считаем до 22, потом переводим его на выход и дергаем 2 раза
rx3apf
Цитата(zombi @ Apr 13 2011, 17:06) *
О какой непрерывности синхро может идти речь если между словами и пачками есть паузы???

В общем случае между этими моментами нет никакой связи, и наличию непрерывной синхронизации это никак не противоречит. А вникать в особенности конкретного интерфейса и протокола мне лениво. Если нет синхры - делать ее руками. Если есть - разгребать, что приходит.
zombi
Цитата(rx3apf @ Apr 13 2011, 17:18) *
А вникать в особенности конкретного интерфейса и протокола мне лениво. Если нет синхры - делать ее руками. Если есть - разгребать, что приходит.

Интересно сколько мы еще будем фантазировать???
Может лучше TSра дождаться
kovigor
Цитата(zombi @ Apr 13 2011, 16:40) *
Может лучше TSра дождаться


Или модератора, чтобы переместил эту тему в раздел для новичков, потому как по сути своей проблема примитивна до крайности ...
stells
Цитата(kovigor @ Apr 13 2011, 17:49) *
Или модератора, чтобы переместил эту тему в раздел для новичков, потому как по сути своей проблема примитивна до крайности ...

и это после Ваших слов:
Цитата(kovigor @ Apr 11 2011, 22:36) *
Пробуйте,только уж больно все это сомнительно выглядит ...

sm.gif
=GM=
Кто-то здесь подсчитал, что при использовании прерываний будет задержка не менее 7 тактов, а при программном опросе (поллинге) - 0-5. Как-то непонятно мне почему так, вроде бы цикл опроса занимает 3 такта, значит и погрешность задержки должна быть не более 3-х. Попробовал сам написать, получил задержку погрешности не более 2-х тактов. Интересно, можно ли довести до 1-го такта. Никто не пробовал?

Также интересно узнать количество тактов по занесению бита, принятого с любого пина порта, в байт, можно ли уложиться в один такт? Я уложился в два.
zombi
Цитата(=GM= @ Apr 13 2011, 19:18) *
а при программном опросе (поллинге) - 0-5.

Не было такого! Было 3-5.


Цитата(=GM= @ Apr 13 2011, 19:18) *
Попробовал сам написать, получил задержку погрешности не более 2-х тактов.

Код надеюсь не секретный? можно взглянуть?
777777
Цитата(stells @ Apr 13 2011, 17:18) *
в общем от контроллера нужно 3 ноги: MOSI, SCK, T0. последние 2 замкнуты и сигнал на них подаем через резистор. по счетному входу считаем до 22, потом переводим его на выход и дергаем 2 раза


Счетчик не нужен. Достаточно перед приемом дернуть SCK два раза, а потом принять три байта.
=GM=
Цитата(zombi @ Apr 13 2011, 14:29) *
Не было такого! Было 3-5. Код надеюсь не секретный? можно взглянуть?

Ну откуда 3-5, если чтение идёт каждые 3 такта?

Конечно покажу, чуть попозже, но хочется немного пообсуждать то, что уже показано.
zombi
Цитата(777777 @ Apr 13 2011, 19:52) *
Счетчик не нужен. Достаточно перед приемом дернуть SCK два раза, а потом принять три байта.

Действительно все гениальное просто! 777777 beer.gif
stells
Цитата(zombi @ Apr 13 2011, 20:02) *
Действительно все гениальное просто! 777777 beer.gif

да, согласен. и от меня пиво beer.gif
stalknr
Привет Господа!!!!
Смотрю пока я на работе был вы тут во всю обсуждаете.
Вообщем по SPI не кошерно такделать. Тобишь дергать ножкой до или после приема.
Во вторых Синхро прерывистый по 22 шт в слове
Мастера делаю на основе уже готового устройства. Мастер нужен для тестирования потом СЛАЙВА
Какие еще вопросы

ДА и еще как вы узнаете когда дергать надо
stells
Цитата(stalknr @ Apr 13 2011, 20:18) *
Вообщем по SPI не кошерно такделать. Тобишь дергать ножкой до или после приема.

ДА и еще как вы узнаете когда дергать надо

аргументы? дергать сразу после инициализации и после приема очередного слова
stalknr
Мне надо на один пин выдавать ДАННЫЕ (АДРЕС+ПУСТОЙ БАЙТ+ПУСТОЙ БАЙТ) в тут же с другого пина принимать
stells
Цитата(stalknr @ Apr 13 2011, 20:25) *
Мне надо на один пин выдавать ДАННЫЕ (АДРЕС+ПУСТОЙ БАЙТ+ПУСТОЙ БАЙТ) в тут же с другого пина принимать

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

Код
//----------------------------------------------------------------------------
//                  Процедура     _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 мс пауза и все заново начинаеться
zombi
Цитата(stalknr @ Apr 13 2011, 20:36) *
ЭТО ЧУДО у меня в протеусе сегодня заработало
Код
//                  Процедура     _peredacha_slova_PRM
// выдаем на PORTB.0 6 младших разрядов байта ADRES_OUT
// принимаем на PORTB.2 6 младших разрядов байта ADRES_IN
...
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns  
    SBIC PINB, PB2                //600ns  если PINB.2=0 то пропускаем следующую команду
...

Т.е. Вы полагаете что слейв успеет за 150нс детектировать синхро, принять бит данных и еще на передачу чето выдать? biggrin.gif biggrin.gif biggrin.gif
Может стоит начать работу с написания слейва? тогда не пришлось бы тратить время на написание мастера.
stalknr
в начале пачки идет пустое слово (для синхроназации)
тоесть получив такое слово СЛАЙВ в свои ADRES_OUT и DATA_L, DATA_H запишет значения которые надо передавать когда придет следующее слово от МАСТЕРА.
тоесть реально СЛАЙВ будет ждать прихода синхро сигнала

ПРИШЕЛ СИНХРО
OUT PORTB, temp //выдаем бит данных и бит синхро
IN temp, PIND //читаем что нам МАСТРЕ прислал
формируем бит для следующей посылки и обрабатываем принятую информацию
zombi
Цитата(=GM= @ Apr 13 2011, 19:59) *
Ну откуда 3-5, если чтение идёт каждые 3 такта?

Считал по коду своего Сообщения #28

Цитата(stalknr @ Apr 13 2011, 21:29) *
ПРИШЕЛ СИНХРО

biggrin.gif Ваш слейв собирается тратить время на анализ "ПРИШЕЛ СИНХРО" ?
stalknr
Интересно а как он узнает когда ему данные надо прочитать

_M1:
SBIS PORTD, PIN_SINX
RJPM _M1
OUT PORTB, temp //выдаем бит данных и бит синхро
IN temp, PIND //читаем что нам МАСТРЕ прислал
........
zombi
Т.е. слейв тоже может формировать синхро?
Нее шото я совсем запутался 01.gif
stalknr
Может. МАСТЕР и СЛЕЙВ связаны линиями ПК1 и ПК2
ПК1 синхро и данные от МАСТЕРА к СЛЕЙВУ
ПК2 синхро и данные от СЛЕЙВА к МАСТЕРУ
zombi
Цитата(stalknr @ Apr 13 2011, 21:51) *
Может. МАСТЕР и СЛЕЙВ связаны линиями ПК1 и ПК2
ПК1 синхро и данные от МАСТЕРА к СЛЕЙВУ
ПК2 синхро и данные от СЛЕЙВА к МАСТЕРУ

ОПУПЕТЬ! Т.е. линии двунаправленные?
Цитата(stalknr @ Apr 11 2011, 22:04) *
По 1 проводу идут данные, по 2 проводу - синхросигнал (Частота 1,25 МГЦ).

Мы Вам шо здесь телепаты ???
stalknr
Нет линии не двунаправленные
ПК1 - 2 провода (синхро и данные) от МАСТЕРА к СЛЕЙВУ
ПК2 - 2 провода (синхро и данные) от СЛЕЙВА к МАСТЕРУ
stells
да уж, тем более, что от arinc 429 остался только полный дуплекс:
http://ru.wikipedia.org/wiki/ARINC_429
stalknr
По ПК1 МАСТЕР кидает данные и синхро СЛЕЙВУ а по ПК2 принимает от СЛАЙВА данные и синхро
zombi
Цитата(stalknr @ Apr 13 2011, 22:10) *
Нет линии не двунаправленные
ПК1 - 2 провода (синхро и данные) от МАСТЕРА к СЛЕЙВУ
ПК2 - 2 провода (синхро и данные) от СЛЕЙВА к МАСТЕРУ

Алекс - Юстасу ( ПК1 и ПК2 это четыре провода)!
Согласитесь чтобы догадаться об этом (на основании Ваших сообщений) просто необходимо обладать хотябы минимальными телепатическими способностями!
stalknr
ЦЕНТЕР-ГЕРЕНГУ
Нас спалили переходим на нелегальное положение. lol.gif

Что то от темы отклонились
zombi
Цитата(stalknr @ Apr 13 2011, 22:29) *
Что то от темы отклонились

А что собственно интересует? Вроде на все уже ответили вдоль и поперёк.
stalknr
да кстате Господа как сформировать сигнал длительность 1,28 мс и периодом повторения 10,24 мс. Я так понимаю это надо делать на таймере подскажите как это на асме реализовать
zombi
Цитата(stalknr @ Apr 13 2011, 22:41) *
да кстате Господа как сформировать сигнал длительность 1,28 мс и периодом повторения 10,24 мс. Я так понимаю это надо делать на таймере подскажите как это на асме реализовать

А нужно ли оно на таймере? Если проц всеравно ниче не делает. Не проще ли сделать цикл на 25.600 и 204.800 тактов соответсвенно.
=GM=
Обсуждения не получилось, ну да ладно. Давайте поговорим о ловле начала синхронизации. Прежде всего надо условиться о терминологии. Вы согласны, что в вашем коде чтение синхроноги идёт каждые 3 такта?
Код
getsyn: sbis porta,synpin
        rjmp getsyn

То есть, после завершения кода можно сказать, что переход 0-1 наступил не позднее 3 тактов назад.
zombi
Цитата(=GM= @ Apr 14 2011, 17:05) *
Обсуждения не получилось, ну да ладно. Давайте поговорим о ловле начала синхронизации. Прежде всего надо условиться о терминологии. Вы согласны, что в вашем коде чтение синхроноги идёт каждые 3 такта?
Код
getsyn: sbis porta,synpin
        rjmp getsyn

То есть, после завершения кода можно сказать, что переход 0-1 наступил не позднее 3 тактов назад.

А как Вы считаете эти такты?
Hmm
О чем это все. Для 'ARINC-429' скорость максимум 100 кбод. Обязательно отклонение частоты, но не более 1%. Если это для отечественного применения, то необходимо "вкурить" РТМ1495 (изм.3). Реализуется программно без проблем.
zombi
Цитата(Hmm @ Apr 14 2011, 18:27) *
О чем это все. Для 'ARINC-429' скорость максимум 100 кбод. Обязательно отклонение частоты, но не более 1%. Если это для отечественного применения, то необходимо "вкурить" РТМ1495 (изм.3). Реализуется программно без проблем.

Цитата(stalknr @ Apr 11 2011, 22:04) *
Необходимо программно реализовать интерфейс типа ARINC-429.

Может слово типа не просто так?
stalknr
Привет всем!!!
Есть идея для слайва. Поставить внешний 22 разрядный сдвигающий регистр и с помощью него принимать информацию от МАСТЕРА а в контроллер загонять уже параллельный код.
_pv
Цитата(stalknr @ Apr 13 2011, 22:18) *
Вообщем по SPI не кошерно такделать. Тобишь дергать ножкой до или после приема.
Во вторых Синхро прерывистый по 22 шт в слове
Мастера делаю на основе уже готового устройства. Мастер нужен для тестирования потом СЛАЙВА
Какие еще вопросы
ДА и еще как вы узнаете когда дергать надо


если взять USART в синхронном режиме вместо SPI, у него в атмеге можно менять длину слова от 5 до 9 бит, то есть принять два байта по 8 бит, а потом поменять длину принимаемого байта на 6.
Hmm
Цитата(zombi @ Apr 14 2011, 18:00) *
Может слово типа не просто так?

Может и так скорее всего ... Плотно этим уЖе занимается 'ELCUS', а уж про "прикладным" задачам по авионике здесь "не место" (ИМХО), остальное - ширпотреб или очередной "курсовик" sm.gif
+
Кстати можно подумать о использовании MSPI режима ...
zombi
Цитата(stalknr @ Apr 14 2011, 19:10) *
Привет всем!!!
Есть идея для слайва. Поставить внешний 22 разрядный сдвигающий регистр и с помощью него принимать информацию от МАСТЕРА а в контроллер загонять уже параллельный код.

Аааа... Наконец то ...
Вам это во 2-м посте предложили.
stalknr
Только вот не очень хочется ставить 6шт кр555ИР16 может порекомендуете какой нибудь регистр. Требования: возможность последовательной и параллельной загрузки данных, выходы параллельных данных с третьим состоянием
kovigor
Цитата(stalknr @ Apr 14 2011, 18:55) *
Только вот не очень хочется ставить 6шт кр555ИР16 может порекомендуете какой нибудь регистр. Требования: возможность последовательной и параллельной загрузки данных, выходы параллельных данных с третьим состоянием


А я не случайно сразу написал: CPLD. Вы бы уже разобрались как там и чего за то время, что пытаетесь "превратить карася в порося" ...
=GM=
Цитата(zombi @ Apr 14 2011, 13:21) *
А как Вы считаете эти такты?

Ну как, по рабоче-крестьянски. Если synpin=0, то sbis выполняется за 1 такт, потом выполняется rjmp за 2 такта, опять читается, и опять, и опять. Т.о., чтение ноги осуществляется через каждые три такта, согласны? Можете сделать чтение через два такта?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.