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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите начинающему с АЦП MCP3421

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

...странно как-то...
omercury вне форума  
Сказали "Спасибо" omercury
KruBoHic (10.01.2012)
Непрочитано 10.01.2012, 09:25  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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,328
Сказал спасибо: 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,328
Сказал спасибо: 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.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
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, время: 18:22.


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