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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » SPI интерфейс


SPI интерфейс

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

1

Давно хочу понять как им пользоваться , но что то не получается! Помогите пожалуйста.
Я чтобы разобраться в протеусе набросал схему термометра. Датчик ТС-72.Спй пробовал и хардварный и софтварный. В конце концов попробывал пример из баскома.
Есть команда    var=Spimove(byte) , uгде var - переменная, в которую счит-ся инфа из шины SPI, а Byte - константа или адрес( в моем случае это адрес регистра где храниться температура) -  я так понял. Пробовал использовать SPIIN - считывание из SPI, SPIOUT - передача в SPI. Но чтото никак не работает. по SPI дебаггеру вижу, что в шину отправляется байт с адресом, а обратно или нуль или 255 идет и все(

--------------------------------------------------------------------------------------------------------------------------------------
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128

'init the spi pins
Spiinit

Dim B As Byte , Bfromslave As Byte
B = &H02

Do
  'send 1 byte
  Bfromslave = Spimove(b)
  Print Bfromslave ; " received from slave"
  'as an alternative you can send data and display the last received value
  '  Spiout B , 1
  '  Print Spdr ; " received from slave"
  Wait 1
Loop
End
--------------------------------------------------------------------------------------------------------------------------------------
Адрес регистра с температурой в датчике &H02(старший байт - целое значение) регистр статуса вроде не требуется особо конфигурировать! Время преобразования 150мс
пробовал этот код:
----------------------------------------------------------------------------
Dim addres as byte, temperatura as byte
addres = &h02

spiinit
spiout addres, 1  'отправляю байт адреса регистра температуры
waitms 150
Spiin temperatura, 1 'получаю значение температуры
----------------------------------------------------------------------------

Тоже не работает, вобщем сижу туплю, не пойму никак.

увеличить

0

2

подтянуть на +5V  ножку SS

0

3

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

подтянуть на +5V  ножку SS

Ды тоже самое....255 показывает!

Может есть у кого готовый пример работы с каким нибудь датчиком с кодом и схемкой в протеусе? Или просто код..ЕЩе: на картинке правильно подключены соответствующие выводы!?

Отредактировано Роман (2010-12-10 16:07:56)

0

4

у atmela неважный SPI-интерфейс:
- не дает особых преимуществ по сравнению с программным не экономит время и код, разве что, когда нужно "щелкать" очень медленно;
- имеет гнусную функцию (неотключаемую), когда режим мастер переключается в слэйв самостоятельно по низкому уровню на линии SS.
т.е. эту линию нельзя использовать, как ты сделал, для выбора кристалла;
- наелся проблемами HW SPI еще с at89S53. никогда не применяю и не советую. Также как и как мастер режим I2C.

0

5

Ды  пробывал програмный тоже, нигде еще не найду нормальных примеров работы с каким либо датчиком по спи(...Когда в протеусе делаю пошагово выполнение программы, с  выхода датчика вообще нет сигнала.

Програмный так настроил:
Config Spi = Soft , Din = Pinb.0 , Dout = Portb.1 , Ss = Portb.2 , Clock = Portb.3

0

6

быстро работающее пишется на ассемблере

Код:
'----------------------------------------------
'записать два байта в регистр AD5543 из регистра Wadr
!Out_d2b:
    Lds R0 , {wadr + 1}
    Rcall Out_d1b                       'записать старший байт в регистр AD5543
    Lds R0 , {wadr}
                                        'записать младший байт в регистр AD5543
'записать байт в регистр AD5543 из регистра R0 старший вперед
Out_d1b:
$asm
    Ldi R30 , 8                         'ЧИСЛО БИТ
O_d1b0:
    Rol R0                              'ЦИКЛ ПЕРЕДАЧИ
    Brcs O_d1b1                         'СДВИГ
    Cbi Portd , 4                       'порт (линия SDD) в "0"
    Rjmp O_d1b2
O_d1b1:
    Sbi Portd , 4                       'порт (линия SDD) в "1"
O_d1b2:
    Sbi Portd , 3                       'ИМПУЛЬС НА ЛИНИИ SCD
    Dec R30                             '     --
    Cbi Portd , 3                       '    ¦  ¦
    Brne O_d1b0                         '----    ----
    Ret
$end Asm
'----------------------------------------------
'программа загрузки ЦАП
Ld_amp:
$asm
    CLI                                 'запретить прерывания, чтобы не было "паразитной" записи в прерывании
    Cbi Portd , 6                       'выбрать кристал ЦАП
    Rcall Out_d2b                       'записать два байта в регистр AD5543 из регистра Wadr
    Sbi Portd , 6                       'ИМПУЛЬС НА ЛИНИИ CS
    SEI
    ret
$end Asm

если скорость не критична

Код:
'---------------------------------------
'загрузить ЦАП AD5543 
Lo_daca:
    Reset Portb.2                       'CS1
    Shiftout Portb.0 , Porte.7 , Wadr , 0   'выдаём данные на ЦАП A (SD1, SC1)
    Set Portb.2                         'CS1
Return

считывать аналогично

+1

7

Ок, спасибо,а тогоже только с применением операторов Bascom для работы с SPI нету?

0

8

Роман: Ок, спасибо,а тогоже только с применением операторов Bascom для работы с SPI нету?

  Рома, а в чем проблемы? Я вот тоже с SPI раньше имел дело только в одном случае - при программировании в системе и вне.Сейчас осваиваю TFT-компаньон и работаю на программном SPI,но я - материалист в материальном и проверяю BASCOM-AVR 2.0.0.0 на макете и запоминающем осциллоскопе GDS-71062, поскольку у Марка Альбертса бывают ошибки, я лично нашел две. Все пашет, только нужно правильно установить фазировку сигналов - запоминание идет по нарастающему или спадающему фронту CLCK , ввод - по SPIIN(четко видны байты из девайса), вывод - по SPIOUT(четко видны байты в девайс).HARDSPI я не использую - при программировании в системе он вышибает все, что подключено к нему,кроме MK.

Отредактировано user2007 (2010-12-15 17:46:13)

0

9

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

у Марка Альбертса бывают ошибки, я лично нашел две

а конкретно в чем заключаются ошибки? примеры есть, или из пустого в порожнее?

0

10

Дак вот вся проблема похоже в том, что я не могу правильно построить алгоритм программы...Блин если не сложно так, помоги пожалуйсто, напиши пример  хотябы для работы  с датчиком температуры (ТС-72), чтоб мне разобраться как правильно работать с командами, и заодно в протеусе моделить...а дальше уж сам...Понимаю что балбес...но не найду дельного примера, даже в книге по баском нет....ото уже месяца 2 бьюсь над SPI...буду примного благодарен

0

11

попробуйте почитать это http://www.google.ru/search?ie=UTF-8&hl=ru&q=bascom spi&redir_esc=y&ei=cQEJTefVBYGZ8QPM3tU2

0

12

Здравствуйте дорогие формчаны. Чтобы не создавать новую тему (что я не умею) если никто не возражает, решил продолжать здесь.
   Очень нуждаюсь в помощи. Пожалуста помагите кто может. За ране всех блогадарю. Я не рускоязычный, по этому возможно я не коректно изложу саваю проблему, прозьба сильно не пиняйте. Понимаю что, пол ответа находится в правильно заданном вопросе. Нимного программировать научилсо в этомъ форуме. Особенно учился у sasha_1973  Александр.   За что ему агромнa блогадарю.
  Теперь у меня проблема. Пытаюсь программно связать две микросхеме по SPI протоколу, использовая PCINT18 на стране slave, использовая перривание по команде SPI. К славе подключон ЛСД дисплей. Что должно печатать принимаемые и передаваемые данные. Сам slave процессор атмега168p_32p далжно прибавить к принимаемые данные число, и отправить данные назад масдеру. Собствененно проблема в том когда славе уходит но перривание запутывает все. Наверно я сам за сто лет не смогу решить эту проблему. Спасибо всем !!! 
Вот схема и исходник
https://cloud.mail.ru/public/A1o7/uwXm9zeLY

0

13

Связь 2 МК по SPI, закинул Вам на mail.

Отредактировано sasha_1973 (2016-07-05 18:58:27)

0

14

Спосибо!!! Заработал super

0

15

Пожалуйста.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » SPI интерфейс