mcp3201 и SPI интерфейс
|
|
marss70 | Дата: Среда, 08.05.2013, 23:18 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 80
Статус: Offline
| На днях баловался с SPI интерфейсом и нашёл ему применение для работы с АЦП mcp 3201. В проте вроде как работает. Вот код, если кому интересно:
'mcp3201 example $regfile = "m8def.dat" $crystal = 4000000 $hwstack = 40 $swstack = 16 $framesize = 32 $baud = 9600 Dim A As Byte 'hold each bit coming from the ADC Dim Temp As Byte 'each tick of the clock Dim T As Long Dim T1 As Single 'var that will hold result Config Portb.0 = Input Config Portb.2 = Output Config Portb.3 = Output
Clk Alias Portb.2 Cs Alias Portb.3
Set Cs 'begin with high
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 Config Lcd = 16 * 1 Cursor Off Cls Lcd "Volt" Waitms 200
Do
Reset Clk Reset Cs 'select chip
Gosub Pulse Gosub Pulse 'extra clock for sync
A = 0 : T = 0
For Temp = 1 To 15 'start a new measure
T = T * 2 'send the bit (i) one place to left
Gosub Pulse 'send a clock pulse
T = T + A 'grab the last bit
If Pinb.0 = 1 Then 'read a new bit A = 1 Else A = 0 End If
Next
Set Cs
Printbin T T1 = T * 1.0 T1 = T1 / 4000
Cls Lcd Fusing(t1 , "##.###" )
Waitms 200
Loop
End
Pulse: Set Clk Waitus 10 ' 10 us wait Reset Clk Return
|
|
| |
KolesikNN | Дата: Среда, 03.07.2013, 10:37 | Сообщение # 2 |
Группа: Пользователи
Сообщений: 14
Статус: Offline
| Жесть код, я такого еще не видел. Если он работает по SPI, почему его не настроил. Или оператор shiftin, чем не понравился? Есть пример, корявенький правда, но рабочий.
|
|
| |
marss70 | Дата: Среда, 03.07.2013, 22:54 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 80
Статус: Offline
| Ну судя по буржуйским коментам, код не совсем мой. Некоторые допилы мои. Кстати, на таком же принципе считывания у меня в железе и mcp3551 работает.
|
|
| |
pchela5 | Дата: Суббота, 22.11.2014, 13:46 | Сообщение # 4 |
Группа: Свой человек
Сообщений: 85
Статус: Offline
| '******* Управление ADC ******* Cs Alias Portc.2 D_in Alias Pinc.3 Clk Alias Portc.4 Set Cs
Dim Counter_cicle As Byte 'Счетчик цикла Dim Adcvolume As Word 'Выходное значение MCP3201 за цикл Dim Adc_mcp3201 As Word 'Итоговые данные с MCP3201
Declare Sub Metering
'*********** Metering ADC *********** Sub Metering ' обнуление переменных Adcvolume = 0 : Adc_mcp3201 = 0
For Counter_cicle = 0 To 15
Reset Cs : Waitms 5 : Bitwait D_in , Reset ' выбор кристалла - старт MCP3201 Set Clk : Waitms 2 : Reset Clk : Waitms 2 ' Set Clk : Waitms 2 : Reset Clk : Waitms 2 ' отправка начальных импульсов для инициализации MCP3201 Set Clk : Waitms 2 : Reset Clk : Waitms 2 '
Shiftin D_in , Clk , Adcvolume , 0 ' получение 16-ти разрядного слова Shift Adcvolume , Right , 4 ' сдвиг вправо для 12-ти разрядного числа Set Cs ' выбор кристталла - стоп MCP3201 Adc_mcp3201 = Adc_mcp3201 + Adcvolume ' накопление данных
Next Counter_cicle
Shift Adc_mcp3201 , Right , 4 'сдвиг вправо на 4 разряда - делим на 16 для усреднения результатов End Sub
|
|
| |
pchela5 | Дата: Суббота, 22.11.2014, 21:32 | Сообщение # 5 |
Группа: Свой человек
Сообщений: 85
Статус: Offline
| Ну и до кучи, что бы не потерялось у меня:
'* * * конфигурируем scl и sda пины Config Sda = Portc.4 ' I2C Data Config Scl = Portc.5 ' I2C Clock Const Mcp3221 = &H9B ' I2C Address Dim Reg1 As Byte ' 1' register Dim Reg2 As Byte ' 2' register Dim Result_1 As Word ' result of the conversion Dim Adc_out As Single 'Измеренное значение напряжения Dim Adc_string As String * 5 'Измеренное значение напряжения Declare Sub Conversion Multiplier = 0.001
'*********** Conversion ADC *********** Sub Conversion
I2cstart I2cwbyte Mcp3221 ' send the I2C address of the adc Waitms 1 I2crbyte Reg1 , Ack ' MSB of the conversion I2crbyte Reg2 , Nack ' LSB of the conversion I2Cstop
Result_1 = Reg1 ' Fist part of the conversion Shift Result_1 , Left , 8 Result_1 = Result_1 + Reg2 ' Add the lowest part of the conversion ' Shift Result_1 , right , 8 Adc_out = Multiplier * Result_1 Adc_string = Fusing(adc_out , "#.###")
End Sub
Прикрепления:
_2.dsn
(85.7 Kb)
Сообщение отредактировал pchela5 - Суббота, 22.11.2014, 21:37 |
|
| |