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

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

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

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

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

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

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

 
Опции темы

Помогите начинающему с АЦП MCP3421

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

Здраствуйте. Я новичок-любитель в МП-програмировании и пока что еще учусь, поэтому нужна помощь профи!!
Задача состоит в подключении АЦП (MCP3421) к ATMEGA8 и через I2C правильно считать информацию с АЦП. Но пока что не получаеться правильно отладить считывание данных.

Вот есть функции для использования I2C но не понятно что за переменные должны быть заместь unsigned char, на что и ругаеться компилятор (CodeVisonAVR). Подскажите как правильно это сделать или где это можно узнать.
Код:
         i2c_start();
         i2c_write(unsigned char);
         i2c_read(unsigned char);
         i2c_stop();
Прошу строго не судить.
Заранее спасибо.
Реклама:
KruBoHic вне форума  
Непрочитано 09.01.2012, 19:41  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

А что, CV AVR программу не написала?

...странно как-то...
omercury вне форума  
Сказали "Спасибо" omercury
KruBoHic (10.01.2012)
Непрочитано 10.01.2012, 09:25  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Сообщение от KruBoHic Посмотреть сообщение
unsigned char
Сюда .
omercury вне форума  
Сказали "Спасибо" omercury
KruBoHic (10.01.2012)
Непрочитано 10.01.2012, 21:24  
KruBoHic
Частый гость
 
Регистрация: 13.02.2011
Сообщений: 22
Сказал спасибо: 41
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
KruBoHic на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Исходя из
Цитата:
unsigned char i2c_read(unsigned char ack)
reads a byte from the bus.
The ack parameter specifies if an acknowledgement is to be issued after the byte was read.
Set ack to 0 for no acknowledgement or 1 for acknowledgement.
использовал следующий код
Код:
int t;
i2c_start();
t = i2c_read(1);
i2c_stop();
Но в результате с АЦП так не чего и не получил (пробовал i2c_read(1) и i2c_read(0) ).
Хотя на осцилографе пакет даных постоянно отправляеться.
Что не так делаю???
KruBoHic вне форума  
Непрочитано 11.01.2012, 00:59  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Сначала неплохо бы проинициализировать MCP3421, задать режимы работы, дать команду на считывание и уж потом пытаться что-то читать из неё...
Не всё, увы, так просто...
Вот здесь есть доки на АЦП и аппнот (AN1156) по использованию подобных АЦП...
Должно спасти положение.

P.S. А встроенного АЦП недостаточно?

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

В дейташите на MCP3421 на стр.20 приведён пример чтения микросхемы.
Так вот, для того, чтобы прочитать 3 байта результата преобразования (18-bit) нужно сделать следующее:
Код:
i2c_start(); - начало процедуры I2C
i2c_write(0xD1); - запись адреса АЦП + запрос на чтение
resH = i2c_read(1); - чтение старшего байта результата
resM = i2c_read(1); - чтение среднего байта результата
resL = i2c_read(0); - чтение младшего байта результата
i2c_stop(); - конец процедуры I2C
Но для получения результата надо сначала стартовать само преобразование в АЦП.
Для настройки и старта АЦП нужно записать определённый байт в регистр конфигурации MCP3421. Для этого нужно:
Код:
i2c_start(); - начало процедуры I2C
i2c_write(0xD0); - запись адреса АЦП + запрос на запись
i2c_write(config); - запись байта конфигурации + старт
i2c_stop(); - конец процедуры I2C
По истечении определённого времени АЦП-преобразование закончится и можно его считывать, как указано в начале поста.

Последний раз редактировалось Yurkin2007; 11.01.2012 в 01:40.
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
KruBoHic (12.01.2012)
Непрочитано 12.01.2012, 18:59  
KruBoHic
Частый гость
 
Регистрация: 13.02.2011
Сообщений: 22
Сказал спасибо: 41
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
KruBoHic на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Исходя из дейташит, выбрал config равный 10011111 = 0x9F. Пока что не уверен в правильности (хотя АЦП заработал и отсылает пакеты информации) потому как не могу проверить окончательный результат. Причина в том что не понимаю как получить из 3-х байт (resH, resM, resL) результата пребразования АЦП одно число!!!
Подскажите .
KruBoHic вне форума  
Непрочитано 12.01.2012, 19:10  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Код:
Result = ((0x03 & resH) ‹‹16) + (resM‹‹8) + resL;
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
KruBoHic (12.01.2012)
Непрочитано 15.01.2012, 17:50  
KruBoHic
Частый гость
 
Регистрация: 13.02.2011
Сообщений: 22
Сказал спасибо: 41
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
KruBoHic на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

Попробовал вывести результат Result на терминал через UART, но в итоге на выходе получил непонятно что (рис.1), хотя если выводить результирующие байты (resH, resM, resL) по отдельности, - получаються численные значения (но это тоже не к чему не привело). Перепробовал разные варианты вывода, разные конфигурации АЦП но в итоге одно и тоже. Может я не правильно понимаю какое значение должно быть в результате или его нужно еще как то конвертировать что бы получить свои вольты.
рис.1
рис.2
Код:
i2c_start(); // начало процедуры I2C
i2c_write(0xD0); // запись адреса АЦП + запрос на запись
i2c_write(0x90); // запись байта конфигурации + старт
i2c_stop(); // конец процедуры I2C        
while (1)
{        
i2c_start(); // начало процедуры I2C
i2c_write(0xD1); // запись адреса АЦП + запрос на чтение
resH = i2c_read(1); // чтение старшего байта результата
resM = i2c_read(1); // чтение среднего байта результата
resL = i2c_read(0); // чтение младшего байта результата
i2c_stop(); // конец процедуры I2C
Result = ((0x03 & resH) ‹‹16) + (resM‹‹8) + resL;          
t = Result;
a=t/1000000; // Виділити старший розряд t
b=(t-(a*1000000))/100000; // Виділити молодший розряд t
c=(t-(a*1000000)-(b*100000))/10000; // Виділити молодший розряд t
d=(t-(a*1000000)-(b*100000)-(c*10000))/1000; // Виділити молодший розряд t
e=(t-(a*1000000)-(b*100000)-(c*10000)-(d*1000))/100; // Виділити молодший розряд t
g=(t-(a*1000000)-(b*100000)-(c*10000)-(d*1000)-(e*100))/10; // Виділити молодший розряд t
j=(t-(a*1000000)-(b*100000)-(c*10000)-(d*1000)-(e*100)-(g*10))/1; // Виділити молодший розряд t

putchar(a+0x30); // Вивести на термінал старший розряд Т
putchar(b+0x30); // Вивести на термінал молодший розряд Т
putchar(c+0x30); // Вивести на термінал молодший розряд Т
putchar(d+0x30); // Вивести на термінал молодший розряд Т
putchar(e+0x30); // Вивести на термінал молодший розряд Т
putchar(g+0x30); // Вивести на термінал молодший розряд Т
putchar(j+0x30); // Вивести на термінал молодший розряд Т
putsf(" \r");
}
P.S.: Огромная благодарность Yurkin2007 за помощь и подсказки по даной теме.
KruBoHic вне форума  
Непрочитано 15.01.2012, 18:44  
jump
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,009
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

KruBoHic,
а в железе, на макетке, что получается?
jump вне форума  
Сказали "Спасибо" jump
KruBoHic (16.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, время: 09:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.