admin

Модуль АЦП на ADS1115

1 сообщение в этой теме

admin    2 272

Купить ADS1115 за ~2$
Ссылка на datasheet ADS1115

Дополнительные файлы с описанием микросхемы: ADS1115.pdf

Библиотека для модуля на микросхеме ADS1115: Adafruit_ADS1X15-master.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Caballero
      Друзья, в 2016 году уже обращался с просьбой, однако тогда все подзаглохло, потом необходимость отпала. Сейчас вот опять возникла, ниже привел кусок технического задания, чтобы было понятно, какое устройство мне нужно. Сделать нужно  в разумные сроки и само собой за деньги.
      Сразу оговорюсь (обычно с подобных вопросов начинается общение): я знаю о существовании аудио-интерфейсов, всяких дешевых приблуд с алиэкспресса и даже о кабелях для роксмит. Нужда в описываемом устройстве именно в том виде, о котором идет речь, продиктована рабочей необходимостью: я часто езжу, нужно что-то ультра-миниатюрное и т.п.
       
      Вот выдержка из ТЗ:
      ОПИСАНИЕ УСТРОЙСТВА 

      Принцип действия 
      Устройство предназначено для подключения к нему аналоговых монофонических музыкальных инструментов посредством разъема стандарта 1/4'' TRS. Сигнал, поступающий на вход устройства, разветвляется для получения двух идентичных ему сигналов. Один из полученных сигналов подается на выход устройства, также предназначенный для подключения к нему посредством монофонического разъема стандарта 1/4'' TRS. Второй из полученных сигналов необходимо перевести в цифровую форму, предназначенную для передачу в персональный компьютер через подключение к нему посредством USB через имеющийся на устройстве разъем. 
      Устройство получает питание через разъем USB. 


      ТРЕБОВАНИЯ К УСТРОЙСТВУ 

      Сигнал, передаваемых на выход устройства, должен максимально точно повторять сигнал, поступивший на вход устройства: не содержать слышимых искажений, не иметь явных отличий амплитудно-частотной характеристики, громкости и соотношению сигнал/шум. Сигнал, передаваемый на вход персонального компьютера, должен соответствовать по характеристикам (АЧХ, соотношение сигнал-шум, уровень искажений) сигналу, полученному при аналого-цифровом преобразовании с помощью современных компьютерных аудио-интерфейсов уровня Realtek ALC1150 или выше. Устройство не должно требовать установки дополнительных драйверов и ПО для подключения и функционирования с персональным компьютером под управлением операционных систем семейств Windows и macOS, для чего разработчику предлагается использовать соответствующий кодек (к примеру, Texas Instruments 27**, 29** и др.). 


      ТРЕБОВАНИЯ К ИЗГОТОВЛЕННЫМ ОБРАЗЦАМ 

      Образцы устройства необходимо выполнить на печатных платах с размещенными на них электрическими компонентами, в пластиковом корпусе. На корпусе устройств необходимо разместить монофонические гнездовые разъемы входа-выхода, а также гнездовой разъем USB. Тип разъема USB (Type A/B/Mini A/B/Micro A/B) выбирается разработчиком исходя из удобства компоновки схемы и размещения разъема на корпусе. 
      Печатная плата разрабатывается с учетом простоты и дешевизны изготовления и монтажа элементов, и минимизации размеров устройства и корпуса. 
      Качество печатной платы, монтаж элементов, качество корпуса и сборки устройства соответствует требованиям, предъявляемым к электронным общего назначения, функционирующим в стандартных бытовых условиях по температуре, влажности, вибрационным, ударным и прочим механическим нагрузкам. 


      Пишите, на любые вопросы по мере своих знаний отвечу.
    • Автор: serj280294
      Всем привет. Собираю вольтамперметр на микроконтроллере. Снимаю напряжение с шунта и усиливаю его с помощью ОУ. Развел плату, собрал, но при подключении к плате проводов, измеряющих напряжение самого источника питания и напряжение снятое с шунта, на последнем сильно проседает напряжение. Я понимаю, что ОУ при таком подключении не должен влиять на измеряемое напряжение. Я предполагаю, что проблема может скрываться в разнице потенциалов земель измеряемых напряжений и источника питания вольтамперметра. Вольтамперметр имеет отдельное питание. Если отключить контакты, измеряющие напряжение источника питания, амперметр работает как и задумано и напряжение на шунте падает в соответствии с измеренным при проектировании вольтамперметра. Подскажите пожалуйста, как правильно развести земли или изменить схему подключения.




    • Автор: oner
      Пишу программу для датчика освещенности, который должен по нажатию кнопки измерять напряжение на одном из портов своего АЦП и записывать измеренное значение (в вольтах) на SD-карту. При повторном нжатии на кнопку результат измерения должен записываться на карту в тот же файл, но на новую строку.
       
      Сопротивление фоторезистора в зависимости от освещенности изменяется пимерно от 0,5 до 25 кОм, поэтому в качестве второго резистора делителя напряжения, результат деления которого и замеряем, выбран 27 кОм, чтобы не перегружать вход АЦП.
      Собственно, а куда по схеме эту кнопку лучше ставить? На питание или на какой-нибудь порт?

       
      В коде отталкиваюсь от такого:
      #include <mega8.h> #include <stdio.h> #include <stdlib.h> #define ADC_VREF_TYPE 0x00 unsigned int result; unsigned int read_adc(unsigned char adc_input); // volatile unsigned int count; //счетчик скопированных данных { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } #asm("sei") ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x81; while (1) { result=read_adc(0); result=(result*500L)/1024; // Тут мы измерили напряжение на резисторе if(disk_initialize()==0) //инициализируем флешку { FILE *file; //Открываем текстовый файл с правами на запись file = fopen("light.txt", "w+t"); //Пишем в файл fprintf(file, result); //Закрываем файл fclose(file); getch(); pf_mount(0x00); //демонтируем фат } }  
    • Автор: Amiva
      Добрый день всем. Недавно начал изучать ардуино и основы работы с ним.  Вообщем в справочнике по работе с ним дошёл до работы с АЦП и тут возник вопрос, на который я пока не понимаю ответа. Когда я измеряю напряжение с входа, т.е подаю 5 В, все хорошо он их определяет и пишет 5 В соответственно, но когда я снимаю напряжение со входа, т.е ничего не подумаю, всё равно есть какие то измерения? Для себя я выделил 2 варианта ответа.
      1) Это случайные наводки, которые ловит вывод.
      2) Это из-за того, что измерение всегда производится относительно опорного напряжения, что вносит свои погрешности.
      Можете сказать, я думаю в правильном направлении?
    • Автор: oner
      Собираю устройство, которое на основании измеренного напряжения на резисторе своим АЦП на одном из своих портов выдает импульсы широтой, зависящей от измеренного напряжения. Широтой этого импульса задается ток, который, протекая через вышеупомянуты резистор, формирует вновь измеряемое напряжение. Пока результат такой. Зеленым цветом - сигнал на выходе контроллера, красным - напряжение на резисторе в цепи истока полевого транзистора, оно пропорционально току, протекающему через этот транзистор.Результат такой:

      Вопрос знатокам: почему это измеренное напряжение всегда застывает на одной и той же величине (0,8В)? Код:
      #include <mega8.h> #include <delay.h> #include <stdio.h> long result; long n=1; // Voltage Reference: AVCC pin #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (1<<ADLAR)) unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | ADC_VREF_TYPE; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=(1<<ADSC); // Wait for the AD conversion to complete while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); return ADCH; } void main(void) { // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // ADC initialization // ADC Clock frequency: 125,000 kHz // ADC Voltage Reference: AVCC pin // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE; ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); SFIOR=(0<<ACME); PORTB=0x00; DDRB=0x01; #asm("sei") while (1) { result=((read_adc(0)*5)/256.00); // Тут мы измерили напряжение на резисторе if (result>2) // и сравниваем, например, с 2В. В случае отклонения // измеренной величины от 2В меняем длительнось импульса n. { n=n-1; PORTB.0=1; delay_ms(n); PORTB.0=0; delay_ms(20); } if (result<2) { n=n+1; PORTB.0=1; delay_ms(n); PORTB.0=0; delay_ms(20); } }; }