SPI на практике
|
|
MiXaS |
Дата: Пн, 29.08.2011, 19:21 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Здравствуйте товарищи! Никогда не думал, что буду задавать такой вопрос, но всё же до этого дошло. Стыдно жуть! Оказалось, что я совсем не понимаю как писать софт для SPI Дело в том, что с i2c работал, one-wire работал, думал и с spi прокатит,но не проперло. Я прощу Вас не написать за меня код, а научить или показать как это делается, так как по этому интерфейсу большое количество микрух вяжется. Для меня будет понятнее если разбирать какой-нибудь реальный пример, с реальными регистрами, битами конфигурации и так далее, потому что у меня есть несколько примеров этого интерфейса, но под какое оборудование?? Поэтому сразу ступор. Я прилагаю инструкцию модуля, с которым и хотел бы работать. Читал книгу Хилинского, но не разобрался с режимами. Короче говоря темный лес. Начинать я думаю нужно с самого начала. Заранее благодарю всех, кто примет участие! Критика приветствуется!
Сообщение отредактировал
MiXaS - Пн, 29.08.2011, 19:22
|
|
|
|
vladh |
Дата: Вт, 30.08.2011, 12:06 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
В Вашем прикреплении, файл программы (видимо) на Микропаскале? Вы обращаетесь к разделу форума про ПикБейсикПро. Вы не ошиблись? Если говорить о начале, то Вам наверное надо наведаться сюда: http://www.gaw.ru/html.cgi/txt/interface/spi/index.htm Так как уже давно не работаю с ПикБейсикПро, могу выложить свою последнюю работу взаимодействия МК 18F4458 с ЦАП MCP4922. Правда это уже на Протоне.
|
|
|
|
MiXaS |
Дата: Вт, 30.08.2011, 12:13 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Нет! Я не ошибся! Прикрепленные файлы действительно содержат куски проекта на микропаскале, но мне нужно освоить spi именно на picbasic! Там нужно смотреть регистры, на все остальное можно не обращать внимание. Спасибо за ссылку, но я с ней знаком. Если Вам не сложно выложите свой проект, они ведь похожи.
Сообщение отредактировал
MiXaS - Вт, 30.08.2011, 12:14
|
|
|
|
vladh |
Дата: Вт, 30.08.2011, 13:13 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Пожалуйста. Во вложении программа - обсуждаемая часть работы МК, работающая схема в Протеусе (вер. 7.8_2). И описание МС ЦАП.
Сообщение отредактировал
vladh - Вт, 30.08.2011, 13:43
|
|
|
|
MiXaS |
Дата: Вт, 30.08.2011, 13:27 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Спасибо! Но я что-то не вижу вложения.
|
|
|
|
vladh |
Дата: Вт, 30.08.2011, 13:45 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Пришлось редактировать. В первоначальном варианте был *.pdf файл в 3 мб и видимо его не попустили.
|
|
|
|
MiXaS |
Дата: Вт, 30.08.2011, 13:51 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Спасибо за "мыло". Чем смогу помогу.
|
|
|
|
holyuser |
Дата: Вт, 30.08.2011, 15:19 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Всем большое спасибо! Разобрался, вроде! Не так все и сложно. Добавлено (12.09.2011, 11.24.44) --------------------------------------------- По мере работы с интерфейсом появляются вопросы. Подскажите пожалуйста! Нужно ли ставить резисторы на шины данных? Если да, то зачем? И ещё. Видел несколько схем с интерфейсом spi. В некоторых резисторы стоят одной ногой на шине, другой ногой на "+" питания, а есть наоборот, одной ногой на шине, другой на "-". Заранее спасибо!! Добавлено (14.09.2011, 16.33.10) --------------------------------------------- Никто не знает?? Не верю!!!
|
|
|
|
bulat |
Дата: Вс, 26.04.2015, 21:09 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
15
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
48
Замечания:
±
На сайте с 23.12.2011
Статус:
Offline
|
MIXaS-резисторы не ставлю,без них работает.
|
|
|
|
MiXaS |
Дата: Чт, 30.04.2015, 09:31 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 ( ) Я написал так-работать будет? Попробуйте! Как не получится пишите. У Вас же контроллер с буквой ф, поэтому можно переписать в случае чего.
|
|
|
|