SPI на практике - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » SPI на практике
SPI на практике
MiXaS Дата: Пн, 29.08.2011, 19:21  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Здравствуйте товарищи! Никогда не думал, что буду задавать такой вопрос, но всё же до этого дошло. Стыдно жуть! sad Оказалось, что я совсем не понимаю как писать софт для SPI cry Дело в том, что с i2c работал, one-wire работал, думал и с spi прокатит,но не проперло.
Я прощу Вас не написать за меня код, а научить или показать как это делается, так как по этому интерфейсу большое количество микрух вяжется.
Для меня будет понятнее если разбирать какой-нибудь реальный пример, с реальными регистрами, битами конфигурации и так далее, потому что у меня есть несколько примеров этого интерфейса, но под какое оборудование?? Поэтому сразу ступор. Я прилагаю инструкцию модуля, с которым и хотел бы работать.
Читал книгу Хилинского, но не разобрался с режимами. Короче говоря темный лес.
Начинать я думаю нужно с самого начала.
Заранее благодарю всех, кто примет участие! Критика приветствуется!
Прикрепления: Lib_TR24A.zip(849Kb)

Сообщение отредактировал MiXaS - Пн, 29.08.2011, 19:22
ЯНДЕКС Дата: 29.08.2011
vladh Дата: Вт, 30.08.2011, 12:06  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

В Вашем прикреплении, файл программы (видимо) на Микропаскале? Вы обращаетесь к разделу форума про ПикБейсикПро. Вы не ошиблись?
Если говорить о начале, то Вам наверное надо наведаться сюда: http://www.gaw.ru/html.cgi/txt/interface/spi/index.htm
Так как уже давно не работаю с ПикБейсикПро, могу выложить свою последнюю работу взаимодействия МК 18F4458 с ЦАП MCP4922. Правда это уже на Протоне.
MiXaS Дата: Вт, 30.08.2011, 12:13  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Нет! Я не ошибся! Прикрепленные файлы действительно содержат куски проекта на микропаскале, но мне нужно освоить spi именно на picbasic! Там нужно смотреть регистры, на все остальное можно не обращать внимание. Спасибо за ссылку, но я с ней знаком.
Если Вам не сложно выложите свой проект, они ведь похожи.

Сообщение отредактировал MiXaS - Вт, 30.08.2011, 12:14
vladh Дата: Вт, 30.08.2011, 13:13  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Пожалуйста. Во вложении программа - обсуждаемая часть работы МК, работающая схема в Протеусе (вер. 7.8_2). И описание МС ЦАП.
Прикрепления: SPI.rar(276Kb)

Сообщение отредактировал vladh - Вт, 30.08.2011, 13:43
MiXaS Дата: Вт, 30.08.2011, 13:27  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Спасибо! Но я что-то не вижу вложения. surprised
vladh Дата: Вт, 30.08.2011, 13:45  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Пришлось редактировать. В первоначальном варианте был *.pdf файл в 3 мб и видимо его не попустили.
MiXaS Дата: Вт, 30.08.2011, 13:51  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Может я дам e-mail??

Добавлено (30.08.2011, 13.49.46)
---------------------------------------------
Всё! Вижу СПАСИБО!!!

Добавлено (30.08.2011, 13.51.32)
---------------------------------------------
Буду разбираться!!!

vladh Дата: Вт, 30.08.2011, 13:52  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Спасибо за "мыло". Чем смогу помогу.
holyuser Дата: Вт, 30.08.2011, 15:19  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 240
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Привожу тестовую програмку для управления по SPI цифровыми потенциометрами.
Двумя кнопками изменяется переменная, котороя записывается командой SHIFTOUT в регистр потенциометра и показывается на ЖКИ.

Code

'****************************************************************
'*  Name    : MCP41xxx_test.PBP
'*  Date    : 2/8/06
'*  Version : 1.0
'*  Notes   : PIC16F84A
'****************************************************************
'
' LCD should be connected as follows:
'       LCD     PIC
'       DB4     PortA.0
'       DB5     PortA.1
'       DB6     PortA.2
'       DB7     PortA.3
'       RS      PortA.4 (add 4.7K pullup resistor to 5 volts)
'       E       PortB.3
'       RW      PortB.2
'       Vdd     5 volts
'       Vss     Ground
'       Vo      20K potentiometer (or ground)
'       DB0-3   No connect

     include     "modedefs.bas"
      
  DEFINE    LCD_DREG    PORTA
  DEFINE    LCD_DBIT    0
  DEFINE    LCD_RSREG    PORTA
  DEFINE    LCD_RSBIT    4
  DEFINE    LCD_EREG    PORTB
  DEFINE    LCD_EBIT    3
  DEFINE    LCD_RWREG    PORTB
  DEFINE    LCD_RWBIT    2
  DEFINE    LCD_BITS    4
  DEFINE    LCD_LINES    2
  DEFINE    LCD_COMMANDUS    2000
  DEFINE    LCD_DATAUS    50

     define  BUTTON_PAUSE 50

'                    Digital POT connections:
cs_pin      var portb.0   ' pin 1 on MCP41XXX
clock_pin   var porta.1   ' pin 2 on MCP41XXX
data_pin    var porta.0   ' pin 3 on MCP41XXX

'           Control buttons:
up_button   var portb.4
dwn_button  var portb.5

'           LED indicators:
green_led   var portb.1

b0          var byte      ' BUTTON working variable
b1          var byte
position    var byte      ' default wiper position value
max_wip     var byte      ' maximum wiper position value
min_wip     var byte      ' minimum wiper position value
command     var byte                 
wiper       var byte   

operate     con     %11011111
shutdown    con     %11101111   

             wiper = 127
             b0 = 0
             b1 = 0
             min_wip = 0
             max_wip = 255
             command = operate
             high cs_pin
             pause 500

             goto display
              
begin:      pause 1
             button up_button,0,100,5,b0,0,continue
             if wiper < max_wip then
                 low green_led
                 wiper = wiper + 1
             else
                 high green_led
             endif
             goto display            
continue:   button dwn_button,0,100,5,b1,0,begin
             if wiper > min_wip then
                 low green_led
                 wiper = wiper - 1
             else
                 high green_led
             endif
display:    lcdout $FE,1,#wiper
             low cs_pin
             shiftout data_pin,clock_pin,1,[command,wiper]
             high cs_pin
             goto begin
             end
             
MiXaS Дата: Ср, 14.09.2011, 16:33  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Всем большое спасибо! Разобрался, вроде! Не так все и сложно.

Добавлено (12.09.2011, 11.24.44)
---------------------------------------------
По мере работы с интерфейсом появляются вопросы. Подскажите пожалуйста! Нужно ли ставить резисторы на шины данных? Если да, то зачем?
И ещё. Видел несколько схем с интерфейсом spi. В некоторых резисторы стоят одной ногой на шине, другой ногой на "+" питания, а есть наоборот, одной ногой на шине, другой на "-".
Заранее спасибо!!

Добавлено (14.09.2011, 16.33.10)
---------------------------------------------
Никто не знает?? Не верю!!!

bulat Дата: Вс, 26.04.2015, 21:09  |                                                                                                                Сообщение # 11
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 05.04.2015

Статус: Offline

всем привет!
тоже есть вопрос-есть ли программный spi в  PicBasicPro  ?
мне нужно отправлять 4 слова-
первое= 001101101111  00   потом дергаю STB - собственно опциональные установка
второе= 001001010110  11  потом дергаю STB-делитель частоты опорного кварца на шаг
третье=      00000001000011100 10  потом дергаю STB-первая частота
четвертое=00001000010011100 01  потом дергаю STB-вторая частота
первые два=14 бит,последние 2=19 бит,pic12f629,позже добавлю кнопочку

Добавлено (26.04.2015, 21:09)
---------------------------------------------
Я написал так-работать будет?
кнопки=плюс и минус частота1,вторая неизменна
в протеусе работает нормально,но сомневаюсь и потому спросил
Код
Device 12F629 
Reminders = OFF Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF ;No crystal, no reset Reminders = On Xtal 4 All_Digital = On
 ;----------------- Установки Портов ----------------------;
 TRISIO = %110000'все на вых
Dim vrem As Byte
Dim freg_l As Word                                    'частота1
Dim freg_2 As Word                            'частота2
Dim opcion As Word   'опция
Dim stepsint As Word  '
opcion=3948  'код 00              
 stepsint=1700     '21,25 : 0,0125 = 1700   код 11
freg_l=28800 '360мгц : 0,0125шаг = 28800   код 10
freg_2=29200 '365мгц : 0,0125шаг = 29200   код 01
;---------------- Переименнуем Порт ----------------------; 
'Symbol But = GPIO.0 ' Кнопка 1 'Symbol Led = GPIO.4 ' Св.диод 
Symbol Sdi = GPIO.0 
Symbol Sck = GPIO.1 
Symbol STB = GPIO.2
 ;---------------- Основная программа --------------------; 
main:
If GPIO.4=0 Then freg_l=freg_l+10
If GPIO.5=0 Then freg_l=freg_l-10
SHOut Sdi , Sck , LsbFirst , [ opcion \ 14]
STB = 1
DelayUS 1
STB = 0
vrem=3
SHOut Sdi , Sck , LsbFirst , [ stepsint\ 12]
SHOut Sdi , Sck , LsbFirst , [ vrem\ 2]
STB = 1
DelayUS 1
STB = 0
vrem=2
SHOut Sdi , Sck , LsbFirst , [ freg_l\ 16]
SHOut Sdi , Sck , LsbFirst , [ vrem\ 3]
STB = 1
DelayUS 1
STB = 0
vrem=4
SHOut Sdi , Sck , LsbFirst , [ freg_2\ 16]
SHOut Sdi , Sck , LsbFirst , [ vrem\ 3]
STB = 1
DelayUS 1
STB = 0
DelayMS 1000
GoTo main 
End

Сообщение отредактировал bulat - Вс, 26.04.2015, 21:17
Gysmi Дата: Ср, 29.04.2015, 20:59  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 47
Репутация: 0   ±
Замечания:   ±
На сайте с 23.12.2011

Статус: Offline

MIXaS-резисторы не ставлю,без них работает.
MiXaS Дата: Чт, 30.04.2015, 09:31  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата Gysmi ()
MIXaS-резисторы не ставлю,без них работает.
Спасибо, что откликнулись. В 2011г я мало чего знал про SPI. На сегодняшний день я полностью разобрался с этим интерфейсом. Теперь про резисторы. На схеме стоят резисторы 1,5к и 3,3к, они служат делителем напряжения, так как питание 18f452 = 5v, а SD card - 3.3v, при этом карта не толерантна к 5в на порту интерфейса. Делитель напряжения преобразует 5в логику в 3.3в. Резистор R7 = 10k на практике не дает ничего. Без него все работает аж до снижения питания 2,5в. 
Когда устройство толерантно к 5в лигике, например nrf24l01+, то делитель напряжения не нужен.
Цитата bulat ()
Я написал так-работать будет?

Попробуйте! Как не получится пишите. У Вас же контроллер с буквой ф, поэтому можно переписать в случае чего.
Форум Picbasic.ru » Программирование МК » PicBasicPro » SPI на практике
Страница 1 из 11
Поиск: