Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 15.01.2012, 22:53  
KruBoHic
Частый гость
 
Регистрация: 13.02.2011
Сообщений: 22
Сказал спасибо: 41
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
KruBoHic на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Цитата:
а в железе, на макетке, что получается?
Я пока что работаю только в Протеусе(тренируюся - что б потом знать что с железом делать).
Реклама:
KruBoHic вне форума  
Непрочитано 15.01.2012, 23:13  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

а если модель... того... с душком-с, то бишь, глючком-с? куда плыть будете?
jump вне форума  
Сказали "Спасибо" jump
KruBoHic (16.01.2012)
Непрочитано 15.01.2012, 23:22  
DK
Почётный гражданин KAZUS.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
DK на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

А просто через printf нельзя вывести?

И у меня есть подозрение, что t,a,b,c,d,e,g,j должны иметь тип int32
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.

Последний раз редактировалось DK; 15.01.2012 в 23:37.
DK вне форума  
Сказали "Спасибо" DK
KruBoHic (16.01.2012)
Непрочитано 16.01.2012, 03:37  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Ну, шо я могу сказать:
1. Если задаёте конфигурацию АЦП = 0х90, то результат будет 12-битный и микросхема выдаст только 2 байта данных при чтении: resM и resL. Если "стоп" не послан, то при дальнейшем чтении будет выдаваться только байт конфигурации.
Далее, при такой конфигурации процедура АЦП преобразования будет зациклена до бесконечности с частотой 240 раз в секунду, то есть каждые 4мс будет готов новый результат, при этом каждый раз стартовать не надо, стартует автоматически.
Далее, в Вашем случае входной диапазон напряжений от 0В до +2.047В. Для нуля результат = 0х00, для 2.047В результат = 0х7FF. Если подать вх. напряжение 2.97В, то результат всё равно будет = 0x7FF.

2. Для АЦП преобразования нужно какое-то время, МСР3421 довольно таки медленный прибор. 240 преобразований в сек - это очень медленно.
В Вашей программе после записи конфигурации MСP3421 и начала преобразования АЦП, Вы сразу же читаете результат, который ещё не готов, преобразуете и отсылаете на терминал. В бесконечном цикле без всяких задержек. Я не знаю, с какой скоростью эмулируется процессор, но чую успеет программа раз сто прочитать и отослать одни нули, пока не будет готов первый реальный результат АЦП.
В байте конфигурации для опроса готовности есть отличный бит /RDY, который падает в 0 при готовности результата, и сам(!) прыгает в 1 после прочтения готовых данных из микросхемы. После этого сидит в единичке до следующей готовности данных. Вот его и надо проверять в бесконечном цикле. Если =0, то считывать 2 байта, преобразовывать, отсылать и снова переходить на проверку /RDY .
Код:
int Result;
unsigned char config;

i2c_start(); // начало процедуры I2C
i2c_write(0xD0); // запись адреса АЦП + запрос на запись
i2c_write(0x90); // запись байта конфигурации: 12-бит,бесконечный цикл преобразований, 240 сэмплов в сек. + старт
i2c_stop(); // конец процедуры I2C   
     
while (1)
{        
  i2c_start(); // начало процедуры I2C  
  i2c_write(0xD1); // запись адреса АЦП + запрос на чтение
  i2c_read(1); // чтение среднего байта результата
  i2c_read(1); // чтение младшего байта результата
  config = i2c_read(1); // чтение байта конфигурации;

  while (config & 0x80) config = i2c_read(1); // чтение байта конфигурации до тех пор, пока результат АЦП не готов;

  i2c_stop(); // конец процедуры I2C

  i2c_start(); // начало процедуры I2C  
  i2c_write(0xD1); // запись адреса АЦП + запрос на чтение
  Result = i2c_read(1); // чтение среднего байта реального результата
  Result = (Result ‹‹ 8 ) + i2c_read(0); // чтение младшего байта реального результата
  i2c_stop(); // конец процедуры I2C

  printf("%d\n", Result);
}
PS. Если ещё немного почитать дейташит на МРС3421, то становится ясно, что результат АЦП представлен в two’s complement кодировке, и знаковый бит растянут до начала старшего байта. А это означает, что никакого побитного AND не надо делать со старшим байтом ...

Последний раз редактировалось Yurkin2007; 16.01.2012 в 13:45.
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
KruBoHic (17.01.2012)
Непрочитано 17.01.2012, 00:04  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Сообщение от jump Посмотреть сообщение
а если модель... того... с душком-с, то бишь, глючком-с?
"Наговариваете Вы на нашу семью..." - картинку смотрите.
Сообщение от Yurkin2007 Посмотреть сообщение
В Вашей программе после записи конфигурации MСP3421 и начала преобразования АЦП, Вы сразу же читаете результат, который ещё не готов, преобразуете и отсылаете на терминал. В бесконечном цикле без всяких задержек.
Вот это верно!!! Так жить нельзя.
Сообщение от Yurkin2007 Посмотреть сообщение
В байте конфигурации для опроса готовности есть отличный бит /RDY, который падает в 0 при готовности результата, и сам(!) прыгает в 1 после прочтения готовых данных из микросхемы. После этого сидит в единичке до следующей готовности данных. Вот его и надо проверять в бесконечном цикле.
А вот это при непрерывном цикле преобразования неэффективно. Тогда ему надо писать в конфиг не 0x90 - непрерывное преобразование, а 0x80 - единичное преобразование 12-ти битное, потом читать, пока не обнаружит 0 в старшем разряде конфиги, что означает - преобразование закончено и считанные в этом цикле данные достоверны. Иначе он рискует всегда получать из конфига 1 в старшем разряде и ждать достоверных данных до второго пришествия или обещанного индейцами апокалипсиса. Я нарочно включил вывод содержимого на терминал (картинка п).
Ну а топикстартеру еще и проектик во вложении.
ЗЫ Подумал, и добавил еще картинку 2 - все задержки закоментированы (убраны), а цикл в конфиг записал одиночный. Как видите, работает. Если б ТС сразу так сделал, то и этот топик нафиг не нужен был.
Миниатюры:
Нажмите на изображение для увеличения
Название: ScreenShot159.gif
Просмотров: 129
Размер:	52.6 Кб
ID:	30586   Нажмите на изображение для увеличения
Название: ScreenShot160.gif
Просмотров: 127
Размер:	24.4 Кб
ID:	30587  
Вложения:
Тип файла: rar MCP3421.rar (85.9 Кб, 125 просмотров)

Последний раз редактировалось Halex07; 17.01.2012 в 00:23.
Halex07 вне форума  
Сказали "Спасибо" Halex07
KruBoHic (17.01.2012)
Непрочитано 17.01.2012, 03:55  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Я не понял, почему читается config=0x90 при непрерывном преобразовании. По заявлениям Микрочипа бит готовности падает в 0 при завершении преобразования и лежит в нуле, пока мастер I2C не прочитает данные. При непрерывном после окончания одного преобразования сразу же стартует следующее. Только не говорите мне, что /RDY=0 только в течении одной сотой микросекунды между преобразованиями
Вопрос остаётся открытым: как отловить момент готовности данных? Всё-таки вставлять в цикл "delay_ms(500);" как-то неспортивно ...

Сообщение от Halex07 Посмотреть сообщение
все задержки закоментированы (убраны), а цикл в конфиг записал одиночный. Как видите, работает.
Тут бит готовности работает, как надо ! Видимо между стартом АЦП и чтением конфига выполняется парочка процедур, типа sprintf(str_out1,...); puts(str_out1); и времени для завершения преобразования достаточно ...
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
KruBoHic (17.01.2012)
Непрочитано 17.01.2012, 14:15  
KruBoHic
Частый гость
 
Регистрация: 13.02.2011
Сообщений: 22
Сказал спасибо: 41
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
KruBoHic на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Ув. Halex07, скажите пожалуйста, почему при изминении конфигурации АЦП на 14-битный режим, значения байтов результата (HB, LB) отличаються от 12-битного, и как это можно исправить???
И как это повлияет на 16- и 18-битный режимы???
KruBoHic вне форума  
Непрочитано 18.01.2012, 03:18  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Сообщение от Yurkin2007 Посмотреть сообщение
Я не понял, почему читается config=0x90 при непрерывном преобразовании.
Ну, это действительно небольшой глючок модели в Протеусе. Посмотрел немного поподробнее, она при непрерывном преобразовании неадекватно реагирует на
config=i2c_read(1);
видимо авторы модели не учли повторного чтения конфигурации с наличием ACK и построили перезапуск преобразования именно при ACK=0 в этом цикле от мастера, поэтому и происходит подвисание, а при ACK=0 в этой команде читается 1 в старшем разряде конфига. В реальности, конечно, ваш код с while (config & 0x80) должен работать, если верить даташиту.
Сообщение от Yurkin2007 Посмотреть сообщение
Всё-таки вставлять в цикл "delay_ms(500);" как-то неспортивно ...
Ну Вы уж палку не перегибайте, 500мс я тут вставил только чтоб строчки не так шустро летели в терминале, зрение берегу. Это ж так - тест на скорую руку. Но, согласитесь, что и гонять постоянно только одно АЦП, в программе тоже "неспортивно". У МК наверняка будет еще куча всякого обвеса, так что задержек и без делеев за глаза... Я вообще не сторонник бездумного применения Delay - это "деньги на ветер", так что они только для теста.
Сообщение от KruBoHic Посмотреть сообщение
скажите пожалуйста, почему при изминении конфигурации АЦП на 14-битный режим, значения байтов результата (HB, LB) отличаються от 12-битного, и как это можно исправить???
"Ну, Вы блин, даете..." Чего там исправлять, Вы хоть в даташит заглядывали? Раздел 4.5 Digital Output Code на стр.8 - все есть и формулы и таблицы. 12-ти разрядный режим самый "тупой" младший бит раве 1мВ, даже пересчитывать ничего не надо, все само получается. При 14-ти битах код для того же напряжения на входе будет уже в 4 раза больше, а цена младшего бита 250мкВ. Соответственно надо менять в программе перевод в десятичный формат, да и маску для старшего байта result сдвигать влево, т.е. вместо 0x07 будет уже 0x1F, ну и т.д. А для 18-бит добавлять еще и дополнительный старший третий байт при чтении и брать из него по маске только два младших бита. Только не запаривайтесь с 18-битным режимом в CodeVision, че-то мне помнится там были большие проблемы с long в каких то версиях, да и редко нужно такое разрешение в 15мкВ - помех больше нацепляете.

Последний раз редактировалось Halex07; 18.01.2012 в 03:23.
Halex07 вне форума  
Сказали "Спасибо" Halex07
KruBoHic (18.01.2012)
Непрочитано 18.01.2012, 04:46  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Сообщение от Halex07 Посмотреть сообщение
500мс я тут вставил только чтоб строчки не так шустро летели в терминале, зрение берегу. Это ж так - тест на скорую руку. ... Я вообще не сторонник бездумного применения Delay - это "деньги на ветер", так что они только для теста.
Я так и подумал. Полностью согласен с Вами.

Сообщение от Halex07 Посмотреть сообщение
маску для старшего байта result сдвигать влево, т.е. вместо 0x07 будет уже 0x1F,
Насколько я понял из даташита, выходной код АЦП - со знаком, и знаковый бит растянут до MSB старшего байта. Для положительных значений просто забиваются нулями неиспользуемые биты в старшем байте. Для отрицательных - забиваются единичками. Поэтому применение маски исказит отрицательные значения АЦП преобразования. Не надо маску, надо просто сложить байты со сдвигом ...
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
KruBoHic (18.01.2012)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите начинающему по ATmega8515 Vladlen23 Микроконтроллеры, АЦП, память и т.д 510 27.03.2012 06:08
помогите начинающему по WinAVR umkamaks Микроконтроллеры, АЦП, память и т.д 4 05.05.2010 21:01
Помогите начинающему! kolira Микроконтроллеры, АЦП, память и т.д 6 30.01.2010 15:22
Помогите начинающему с внешним АЦП VadimL Микроконтроллеры, АЦП, память и т.д 0 09.07.2009 15:03
Помогите начинающему!!!! sma-etu Микроконтроллеры, АЦП, память и т.д 2 13.12.2006 18:31


Часовой пояс GMT +4, время: 20:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot