Jump to content
Sign in to follow this  
razor1703

Ацп-Цап В Микроконтроллерах Pic16Cxx. Выбор Мк Для Курсовой (Mplab)

Recommended Posts

Здравствуйте, господа. Без лишней лирики перейду сразу к делу.

Имеется задание на курсовой проект, где нужно принять два налоговых сигнала с амплитудой 0-5 В, пропустить их через АЦП, выполнить определенные операции и, пропустив через ЦАП, послать на выход получившиеся аналоговые сигналы.

Имеется также ряд вопросов:

1. Скольки разрядный АЦП стоит использовать (а соответственно и МК)? Какая точность в данной ситуации не покажется абсурдно низкой?

2. Можете привести пример использования ЦАП в одном из МК вышеуказанной серии? В гугле достаточно много информации по АЦП, а вот по ЦАПу я так и не смог найти ничего. Нужно принимать во внимание то, что среди операций

есть взятие корня, возведение в степень и деление, то есть, если отбрасывание дробной части результата не вариант, то нужно преобразование выполнять с числом немалой разрядности (кстати, как организована работа в МК с "дробными" числами).

3. Как организовать параллельный ввод двух сигналов и, соответственно, вывод?

Оговорюсь, что знания в плане микроконтроллеров у меня поверхностные, но курсовой-то делать надо. Поэтому в своих вопросах мог нести ахинею, не обессудьте.

Спасибо.

Edited by razor1703

Share this post


Link to post
Share on other sites

1 смотря какая точность и разрядность нужна.

2 ЦАП в 16 ПИКах по моему отсутствует. Использовать нужно ШИМ и потом фильтровать.

3 Использовать два входа АЦП и по очереди опрашивать. По сути, АЦП один , но имеет мультиплексор.

Если знания слабоваты - советую почитать литературу по микроконтроллерам.

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

Зачем городить мешок резисторов , если лучше использовать ШИМ ?

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

Все в пиках есть и ЦАП и АЦП и в 16 серии, смотрите типа 15хх, где есть 4 последние цифры после F. А принципе простой ЦАП можно на любом ШИМ организовать.

Share this post


Link to post
Share on other sites

Судя по тому что топикстартер в теме не появляется неделю - ему уже наши советы не нужны .

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By tishkanexx
      Продаю корпус для ЦАП (DAC) AK4490 / усилителя для наушников. Саму плату, если её нет, то можно купить на али ($36), фото платы прикладываю, могу дать ссылку на покупку.
      Корпус заказывал с завода breeze audio, минимально можно было заказать 2 корпуса ($30 два корпуса с доставкой), поэтому один продаю. Отдаю за $15, без наценки как есть. Если брать плату ЦАП-а и корпус, то получается $51, что дешевле, чем брать готовый ЦАП на том же ali за $60. Об этом писал здесь:
      На корпусе надпись: AKMDAC - HEADPHONE AMP (сделана по заказу вместо надписи breeze audio)
      Комплект: 4 силиконовые ножки, саморез для крепления "тюльпанов", 8 винтов для корпуса, сами части корпуса.
      Стоимость: 1000р или 15$. Пишите в лс.



    • By duty
      Привет, участникам форума! Подскажите, пожалуйста, как можно реализовать связь микроконтроллера pic с адресным ключом (ds2405 или ds2408) по 1-wire (на шине будут висеть несколько ключей)  для считывания pio ключа, во входном режиме, т.е на pio поступает сигнал  с магнитоконтактного датчика о срабатывание его или нет.    Datasheet читал, но мало чего понял.  Тестирование произвожу в proteus 8.6
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By n_angelo
      Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален.
      Используемая периферия: DAC, DMA, TIM4, CLK, GPIO
      Задача у программы такая:
      В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод.
      Проблема:
      Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом.
      Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается.
      Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг.
      Спасибо.
       
       
       
       
    • By artos5
      Приветствую всех на этом форуме!
      Есть необходимость измерять сигнал при помощи данного АЦП. С помощью этого АЦП можно измерять 4 аналоговых не дифференциальных сигнала . Схема следующая:
      Schematic_Temp_opto_sens_V2_20190817124112.pdf
      Картинками с более низким разрешением:
      библиотеку за основу взял эту:
      https://github.com/nsaspook/nidaq700/blob/master/supermoon/example/ADS1220.c
      Путем незначительного допиливания, получилась такая библиотека:
       
      Поправил только эти функции:
      void ADS1220SendByte(unsigned char Byte) { unsigned char Result = 0x01, i=0, flg=0; MOSI_LO; Delay_us(1); for(i=0;i<8;i++) { SCK_LO; //ADC_CLK=0 Delay_us(4); if (flg) MOSI_LO; Delay_us(1); SCK_HI; //ADC_CLK=1 Delay_us(1); if (Byte&Result){ MOSI_HI; flg=1; } else MOSI_LO; Delay_us(4); Result<<=1; } SCK_LO; //ADC_CLK=0 } unsigned char ADS1220ReceiveByte(void) { unsigned char Result = 0, i=0; for(i=0;i<8;i++) { Result<<=1; SCK_LO; //ADC_CLK=0 Delay_us(5); //Delay_us(5); SCK_HI; //ADC_CLK=1 Delay_us(3); if (MISO) Result++; Delay_us(2); } SCK_LO; //ADC_CLK=0 return Result; } И добавил эту функцию:
      void ADS1220Config_MUX_GAIN(uint8_t mux, uint8_t gain) { unsigned Temp; ADS1220ReadRegister(ADS1220_0_REGISTER, 0x01, &Temp); // clear prev value; Temp &= 0x0f; Temp |= gain; Temp |= mux; // write the register value containing the new value back to the ADS ADS1220WriteRegister(ADS1220_0_REGISTER, 0x01, &Temp); ADS1220ReadRegister(ADS1220_1_REGISTER, 0x01, &Temp); // clear prev DataRate code; Temp &= 0x1f; Temp |= (ADS1220_DR_600 + ADS1220_CC); // Set default start mode to 600sps and continuous conversions // write the register value containing the new value back to the ADS ADS1220WriteRegister(ADS1220_1_REGISTER, 0x01, &Temp); } ADS1220.h :
      в результате получаю такую осциллограмму :

      То есть , постоянно считывается 0.
      А вот регистры конфигурации:
      Задаю номер входа MUX и усиление :
       

       
      Читаю данные так:
      ADS1220Config_MUX_GAIN(ADS1220_MUX_0_G, ADS1220_GAIN_1); HAL_Delay(10); temp_[0] = ADS1220ReadData(); Это для 0 канала. 
      Пробовал и так:
      ADS1220SetChannel(ADS1220_MUX_0_G); ADS1220SetGain(ADS1220_GAIN_1); temp_[0] = ADS1220ReadData(); Результат аналогичный. Кто что подскажет? Может кто заметит какой косяк в коде? Уже голова дымит ..
×
×
  • Create New...