Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Kак связать 16F873a и MCP3201
Kак связать 16F873a и MCP3201
Ethno Дата: Вс, 29.09.2013, 20:19  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 91
Репутация: 2   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

Народ помогите ни как не могу передать на контролер данные с ацп

Dim Read_Adc Dword
Declare SCL_Pin PORTC.3
Declare SDA_Pin PORTC.4
TRISC = %00000110
Read_Adc = %10010000

 
main:
Print At 1,1, Dec Read_Adc
DelayMS 10
GoTo main

Прикрепления: 2455067.jpg (31.7 Kb)
ЯНДЕКС Дата: 29.09.2013
MiXaS Дата: Вс, 29.09.2013, 21:55  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Для начало нужно Вам прочитать даташит. Потом посмотреть как в басике происходит обмен данными по интерфейсу spi. В двух словах нужно сначало передать ацп команду на чтение канала (или команда отдать изременное значение н канала), а потом прочитать, что там измеренно. на этот ацп шит не смотрел, рабатал с други.Возможно придется еще и конфигурировать ацп. Короче, главное сейчас это даташит, временные диаграммы переданных данных. могу сказать однозначно, что это не сложно. Давайте так, вы узнаете хотя бы на пальцах как работать с микрухой,а я вам помогу программно обработат. обратите внимание, что микруха работает по spi, вы объявили декларации для i²c
---------------------------------------------
да и еще, переменная read_adc в формате дворд это 32 бита. потом Вы присваиваете переменной 8 битное значение.

Сообщение отредактировал MiXaS - Вс, 29.09.2013, 22:02
ivan_fd Дата: Пн, 30.09.2013, 13:22  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Я честно говоря вообще не пойму, что Вы хотели тем кодом, что дали прочитать с АЦП?
Там даже намека нету на чтение.
Ethno Дата: Пн, 30.09.2013, 14:15  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 91
Репутация: 2   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

Вот вроде так но не работает на экране 2303

Declare SCL_Pin = PORTC.3
Declare SDA_Pin = PORTC.4

Dim Read_Adc As Word
Read_Adc = %10010000

Loop:

BusOut Read_Adc
BusIn Read_Adc
Print At 1,1,Dec Read_Adc
DelayMS 400

GoTo Loop

не могу что то разобраться...
это дащит на MCP3201  http://www.farnell.com/datasheets/17404.pdf

Сообщение отредактировал Ethno - Пн, 30.09.2013, 14:18
Matrix252005 Дата: Пн, 30.09.2013, 14:39  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!!!

Ethno,  Вы читали этот шит или просто его для нас выложили???

Если бы читали, то Вы бы увидели, что там есть вывод CS (CS/SHDN(Chip Select/Shutdown)) и его перед считыванием, нужно подтягивать к массе...
Во вторых, я так и не увидел (если пропустил, то приношу свои извинения) что на нее можно что то слать... только считывать (DOUT (Serial Data output)).


THE TRUTH IS OUT THERE.

С уважением, Николай.
Ethno Дата: Пн, 30.09.2013, 15:14  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 91
Репутация: 2   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

читал но не смог разобраться по этому и прошу помощи
Сообщение отредактировал Ethno - Пн, 30.09.2013, 15:15
ivan_fd Дата: Пн, 30.09.2013, 16:29  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ethno,  извините но Вам уже говорили, что там протокол SPI, а не I2C.

Цитата  из даташита.!!!

Код
• SPI® serial interface (modes 0,0 and 1,1)


То есть Вам нужно что то типа Shout.
MiXaS Дата: Пн, 30.09.2013, 19:03  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Ethno,  Придется вам набраться терпения. Ща давайте на пальцах обсудим принцип работы. Для начала, АЦП работает по SPI, поэтому

Код
Declare SCL_Pin = PORTC.3  
  Declare SDA_Pin = PORTC.4


не канает! Так как эти декларации для IIC.

Далее, нужно определиться как идет обмен данными, какие команды надо слать в ацп или читать сразу. Читайте шит.
Так как SPI? то для него есть команда Shout и SHin. Про них написано в мануале на протон и в отличной книге Анатолия Медведева и Владимира Хилинского.

Нужно отметить особенность SPI. Так как слэйв устройства не имеют адреса, то производители сделали отдельный вывод Select Slave, в вашем случае CS - Chip select. Для того чтобы прочитать или послать что-то на slave device? нужно CS прижать к земле. После окончания обмена данными, нужно обратно вернуть в состояние 1 этот вывод. Смотрите свой шит FIGURE 1-1: Serial Timing. Лучше всего вывод CS подтянуть резистором 4,7кОм на + питания.

Добавлено (30.09.2013, 18:58)
---------------------------------------------
Накидал Вам на скорую руку рабочий код. Только он рабочий только для McP3001. Чтобы ВАш заработал правильно, нужно посмотреть даташит, а именно

FIGURE 6-1: SPI Communication using 8-bit segments (Mode 0,0: SCLK idles low).

И переделать код под себя. Просто у меня в протеусе не было McP3201.

Короче все проще чем я писал. Когда СЫ приживается к земле, ADC сразу шлет в порт измеренное значение, так как он абсолютно не конфигурится и выход только имеет, без входа данных.
Я хоть и быстро накидал, но надеюсь все ясно станет.

Добавлено (30.09.2013, 19:03)
---------------------------------------------
Не могу прикрепить файлы, соединение рвется. Вот ссылка1 и ссылка2
Если получится выложите содержимое на форум, а то ссылки не вечные, могу закрыть случайно

anatol Дата: Пн, 30.09.2013, 20:00  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

По просьбе выше
Прикрепления: adc_spi.bas.txt (3.6 Kb) · ADC__Ethno.dsn (87.7 Kb)
MiXaS Дата: Пн, 30.09.2013, 21:05  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

anatol, спасибо
Ethno Дата: Вт, 01.10.2013, 10:55  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 91
Репутация: 2   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

Огромное спасибо.... вроде разобрался..
Для MCP3201

adc_RES.11 = Res_High.5
adc_RES.10= Res_High.4
adc_RES.9 = Res_High.3
adc_RES.8 = Res_High.2
adc_RES.7 = Res_High.1
adc_RES.6 = Res_High.0
adc_RES.5 = Res_Low.7
adc_RES.4 = Res_Low.6
adc_RES.3 = Res_Low.5
adc_RES.2 = Res_Low.4
adc_RES.1 = Res_Low.3
adc_RES.0 = Res_Low.2

на экране 2047. это правильно?

А если передача идет по 12с что нужно изменить в коде.. Например MCP 3421 у него нет CS
Прикрепления: Untitled11111.hex (2.6 Kb) · ADC_Ethno.dsn (91.5 Kb)

Сообщение отредактировал Ethno - Вт, 01.10.2013, 19:22
ЯНДЕКС Дата: 01.10.2013
MiXaS Дата: Ср, 02.10.2013, 14:16  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата Ethnoadc_RES.11 = Res_High.5 adc_RES.10= Res_High.4 adc_RES.9 = Res_High.3 adc_RES.8 = Res_High.2 adc_RES.7 = Res_High.1 adc_RES.6 = Res_High.0 adc_RES.5 = Res_Low.7 adc_RES.4 = Res_Low.6 adc_RES.3 = Res_Low.5 adc_RES.2 = Res_Low.4 adc_RES.1 = Res_Low.3 adc_RES.0 = Res_Low.2

Нет! Не так. ADC_Res - это переменная результирующая, после преобразования. adc_RES.11- это самый старший бит, если посмотреть в даташит, то 11 бит данных идет после "0" бита.

Скорее это будет так:

adc_RES.11 = Res_High.4
adc_RES.10= Res_High.3
adc_RES.9 = Res_High.2
adc_RES.8 = Res_High.1
adc_RES.7 = Res_High.0
adc_RES.6 = Res_Low.7
adc_RES.5 = Res_Low.6
adc_RES.4 = Res_Low.5
adc_RES.3 = Res_Low.4
adc_RES.2 = Res_Low.3
adc_RES.1 = Res_Low.2
adc_RES.0 = Res_Low.1

Желательно это все причесать. Костыли какие-то. Ща качаю протеус. Попробую запустить модель 3201
Цитата Ethnoна экране 2047. это правильно?

Нет не правильно!
8 бит = 255
10бит=1023
12бит=4096
.....

2кол-во разрядов

2 - это основание система счисления.

212 = 4096

Цитата EthnoА если передача идет по 12с что нужно изменить в коде.. Например MCP 3421 у него нет CS

Совершенно другой интерфейс. Требует других деклараций и команд, slave i2с имеет программый адрес, поэтому не имеет вывода Selest Chip CS. Также требует подтяжек к линии даннх и тактам. Код нужно будет написать заново, с учетом этих изменений.

Все проверил работает. Макс значение 4095, так как счет идет от нуля

Скачать кучу протеусов 7.10 и не на один ключи не встали. Поставил 7.9 все поехало. Может потому что ХР

Да и еще. Старайтесь в протеус или bas или cof файлы совать, чтобы можно было в режиме отладки отслеживать куда Ваша прога улетела.
Прикрепления: adc_spi.bas (3.7 Kb) · 7905503.dsn (91.4 Kb)

Сообщение отредактировал MiXaS - Ср, 02.10.2013, 14:17
MiXaS Дата: Ср, 02.10.2013, 14:38  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Вот еще так можно упростить
Прикрепления: 1170375.bas (3.3 Kb) · 0953605.dsn (91.4 Kb)

Сообщение отредактировал MiXaS - Ср, 02.10.2013, 14:39
Ethno Дата: Чт, 03.10.2013, 12:29  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 91
Репутация: 2   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

Спасибо все работает...

тему можно выносить как пример, а то многие ищут как это применить на практике

Сообщение отредактировал Ethno - Пт, 04.10.2013, 00:19
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Kак связать 16F873a и MCP3201
  • Страница 1 из 1
  • 1
Поиск: