(098) 067-12-26 Киевстар (098) 067-12-26   Киевстар
(066) 142-24-48 Vodafone (066) 142-24-48   Vodafone
(098) 067-12-26 Lifecell (063) 642-36-59   Lifecell
 info@arduino.ua
График работы магазина:
Пн-Пт: 9.00 - 19.00
Сб: 10.00 - 19.00
Вс: выходной
г. Киев, ул. Васильковская, 30
ст.м. "Васильковская"
Каталог

Школа робототехники intRobots

Напиши статью и получи скидку!

Преобразователь АЦП/ЦАП PCF8591

код: AOC248

  • Доставка по Украине.
    Мы отправляем заказы "Новой Почтой" по Украине и курьером по Киеву. Также возможен самовывоз из нашего магазина.
  • 6 месяцев гарантии.

    Мы даем гарантию на любой товар приобретенный в нашем магазине:

    6 месяцев на товары, кроме батареек и аккумуляторов

    14 дней на батарейки и аккумуляторы.

    В случае наступления гарантийного случая товар бесплатно ремонтируется, меняется на аналогичный или возвращается полная сумма его стоимости.

    Внимательно ознакомьтесь с условиями гарантии.
  • Проконсультируем до и после продажи.
    Вы можете задавать вопросы письменно по контактному e-mail или телефону указанным в шапке нашего магазина
48 грн.

товар заканчивается

 

Купить в один клик

Добавить к сравнению

Добавить в "Список желаний"
14
голосовать
Нашли дешевле?
  • Преобразователь АЦП/ЦАП PCF8591
  • Описание
  • Отзывы (3)
  • Задать вопрос

Конвертер построенный на базе микросхемы PCF8591, имеет 4 аналоговых входа (АЦП, он же ADC), 1 аналоговый выход (ЦАП, он же DAC), разрешение каждого входа/выхода 8 бит. Управляется по шине I2C с помощью Ардуино, Raspberry Pi или другого контроллера поддерживающего этот протокол. Рабочее напряжение 2.5 - 6В.

Можно использовать, если не хватает аналоговых входов/выходов на микроконтроллере - вешаем платку на шину I2C (она же IIC или TWI) и получаем данные с датчиков. Если сравнивать с АЦП Ардуино, то данный модуль проигрывает по разрешению (у Ардуиновского АЦП 10-битное разрешение), зато можно сравнивать не просто поступающее напряжение как в Ардуино (от 0 и до 5В), а сравнивать между собой напряжения из разных источников (например для контроля уровня батарей), когда на один вход подается напряжение с одного источника, на второй - с другого и сравниваем результат (подробней можно почитать в даташите). Так же, можно замерить напряжение на всех 4 входах одновременно и затем получить 4 байта со значением по каждому входу (Ардуино так тоже не умеет).

Так же на плате расположены потенциометр (подстроечный резистор), термистор (датчик температуры) и фоторезистор (датчик освещенности), которые подключены к аналоговым входам с помощью перемычек. С ними можно поэкспериментировать для знакомства с платой, а потом снять перемычки и подать на входы другие источники. Джампер P4 подключает вход AIN1 к термистору, джампер P5 подключает вход AIN0 к фоторезистору, а джампер P6 подключает вход AIN3 к потенциометру 10 кОм. Так же на плате есть два светодиода - красный для индикации питания, зеленый для индикации сигнала на аналоговом выходе AOUT (чем ярче горит, тем выше напряжение на выходе).
В комплекте идут 4 провода мама-мама.

Ссылки:

Пример использования:

Выводим напряжение на AOUT


#include "Wire.h"
#define PCF8591 (0x90 >> 1) /* I2C адрес, может отличаться от вашего, запустите скетч I2Cscanner 
из примеров библиотеки Wire, чтобы получить правильный адрес*/
void setup(){
 Wire.begin();
}
void loop(){
 for (int i=0; i<256; i++) { //в цикле увеличиваем напряжение на AOUT
   Wire.beginTransmission(PCF8591); // начинаем передачу PCF8591
   Wire.write(0x40); // управляющая команда включающая ЦАП (бинарное 1000000)
   Wire.write(i); // значение, которое будет выдано на AOUT
   Wire.endTransmission(); // закончили передачу
 }
 for (int i=255; i>=0; --i) { //в цикле уменьшаем напряжение на AOUT
   Wire.beginTransmission(PCF8591); 
   Wire.write(0x40); 
   Wire.write(i); 
   Wire.endTransmission();
 }
}

Другой пример - выводим значение на всех аналоговых входах в терминал:


#include "Wire.h"
#define PCF8591 (0x90 >> 1) // I2C адрес
#define ADC0 0x00 // байт, где хранится адрес первого входа
#define ADC1 0x01 // байт, где хранится адрес второго входа
#define ADC2 0x02 // и так далее
#define ADC3 0x03
byte value0, value1, value2, value3;
void setup(){
 Wire.begin();
 Serial.begin(9600);
}
void loop(){
 Wire.beginTransmission(PCF8591); // начинаем передачу
 Wire.write(ADC0); // сообщаем модулю, что нас интересует первый вход
 Wire.endTransmission(); // завершаем передачу
 Wire.requestFrom(PCF8591, 2); //запрашиваем два байта от модуля
 value0=Wire.read(); //в первом байте будет прошлое значение датчика, оно нам не надо
 value0=Wire.read(); //а вот во втором текущее, его и будем выводить
 Wire.beginTransmission(PCF8591); // повторяем операцию для остальных входов
 Wire.write(ADC1);
 Wire.endTransmission();
 Wire.requestFrom(PCF8591, 2);
 value1=Wire.read();
 value1=Wire.read();
 Wire.beginTransmission(PCF8591);
 Wire.write(ADC2); 
 Wire.endTransmission();
 Wire.requestFrom(PCF8591, 2);
 value2=Wire.read();
 value2=Wire.read();
 Wire.beginTransmission(PCF8591);
 Wire.write(ADC3);
 Wire.endTransmission();
 Wire.requestFrom(PCF8591, 2);
 value3=Wire.read();
 value3=Wire.read();
 Serial.print(value0); Serial.print(" "); //выводим значения в монитор
 Serial.print(value1); Serial.print(" ");
 Serial.print(value2); Serial.print(" ");
 Serial.print(value3); Serial.print(" ");
 Serial.println();
 delay(200); //делаем паузу, чтоб не мельтешило
}

Отзывы покупателей о "Преобразователь АЦП/ЦАП PCF8591"

(24.04.2017)

Собираю проект на плате STM32F746GZ. Код пишу с использованием HAL. Столкнулся с проблемой, что не все модули АЦП передавали правильные данные, некоторые не работали вообще. Проблема оказалась в том, что частота шины I2C, которая была вполне нормальной для других устройств, отлично работающих на этой шине, (100 кГц) их не устраивала - была слишком высокая для них. Когда снизил значение частоты - все стало ОК.

Кстати, для тех, кто пишет код "ручками", или на HAL: адрес 0х48 - это 7 битный адрес без учета младшего бита. Этот младший бит определяет направление передачи данных. Такой 7 битный адрес будет использовать неверно! Нужно использовать полный 8 битный адрес. На передачу от МК к АЦП выглядит так: 0х90, а на прием от АЦП к МК - 0х91.

Для тех, кто планирует использовать модуль только на прием от 4 независимых каналов АЦП - это заводская настройка. Сразу можно читать 0, 1, 2, 3 ячейки памяти. Все отлично работает!

Внимание у всех модулей 1 адрес! Чтобы его изменить нужно выпаивать микросхему, разрушать дорожки на плате, припаивать микросхему обратно и подтягивать ножки к +, или - (см. даташит), но это реально!

Хочу особо отметить работу инженера, когда я сегодня обратился с рекламацией на "неисправные" модули АЦП - все культурно, со вниманием, терпеливо и профессионально! Респект! Спасибо!
Ответить

(12.12.2015)

Заказал пару пришли на следующий день. Но как показали тесты термистор (датчик температуры) на обоих платах показывает все время топовое значение 255 и на нагрев/охлаждение не реагирует никак. Еще у платы адрес статический 0x48 и использовать обе на одной шине увы не выйдет, а джамперов которые меняли бы адрес увы не предусмотрено.
Ответить

Сергей (11.02.2016)

" все время топовое значение 255 " - это потому что китайские друзья поставили на делитель резистор в 1 кОм в место 10 кОм.
Ответить
Новое сообщение:
Имя:
Текст:
 

Есть вопросы по Преобразователь АЦП/ЦАП PCF8591?

Ваше имя:

Email:

Вопрос:


Дорогие друзья! Мы стараемся держать на сайте информацию про наличие товаров и цены на них в АКТУАЛЬНОМ состоянии. Корректировки происходят постоянно. Если вы находите цену на товар завышенной, напишите нам про это с указанием ссылки на товар. Мы рассмотрим письмо и или обоснуем цену, или подкорректируем ее. Ассортимент магазина очень большой и иногда бывают ошибки в ценообразовании, особенно при скачках курса доллара. Благодарим за понимание.
оплата картами Visa и MasterCard