Kак связать 16F873a и MCP3201
|
|
Ethno |
Дата: Вс, 29.09.2013, 20:19 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
91
Замечания:
±
На сайте с 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
|
|
|
|
MiXaS |
Дата: Вс, 29.09.2013, 21:55 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Я честно говоря вообще не пойму, что Вы хотели тем кодом, что дали прочитать с АЦП? Там даже намека нету на чтение.
|
|
|
|
Ethno |
Дата: Пн, 30.09.2013, 14:15 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
91
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 11.12.2012
Статус:
Offline
|
читал но не смог разобраться по этому и прошу помощи
Сообщение отредактировал
Ethno - Пн, 30.09.2013, 15:15
|
|
|
|
ivan_fd |
Дата: Пн, 30.09.2013, 16:29 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ethno, извините но Вам уже говорили, что там протокол SPI, а не I2C.
Цитата из даташита.!!!
Код • SPI® serial interface (modes 0,0 and 1,1)
То есть Вам нужно что то типа Shout.
|
|
|
|
MiXaS |
Дата: Пн, 30.09.2013, 19:03 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
По просьбе выше
|
|
|
|
MiXaS |
Дата: Пн, 30.09.2013, 21:05 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
anatol, спасибо
|
|
|
|
Ethno |
Дата: Вт, 01.10.2013, 10:55 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
91
Замечания:
±
На сайте с 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
Сообщение отредактировал
Ethno - Вт, 01.10.2013, 19:22
|
|
|
|
MiXaS |
Дата: Ср, 02.10.2013, 14:16 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 файлы совать, чтобы можно было в режиме отладки отслеживать куда Ваша прога улетела.
Сообщение отредактировал
MiXaS - Ср, 02.10.2013, 14:17
|
|
|
|
MiXaS |
Дата: Ср, 02.10.2013, 14:38 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Вот еще так можно упростить
Сообщение отредактировал
MiXaS - Ср, 02.10.2013, 14:39
|
|
|
|
Ethno |
Дата: Чт, 03.10.2013, 12:29 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
91
Замечания:
±
На сайте с 11.12.2012
Статус:
Offline
|
Спасибо все работает...
тему можно выносить как пример, а то многие ищут как это применить на практике
Сообщение отредактировал
Ethno - Пт, 04.10.2013, 00:19
|
|
|
|