Перейти к содержанию

Lpc1788 Аналоговый Вход


Рекомендуемые сообщения

Всем привет :)

Как работать с аналоговыми портами в NXP LPC1788?? Знаю как в Arduino сконфигурировать аналоговый порт (объявляем и собственно работаем), а где почитать про данную тему для 1788 так и не нашёл. Хочу подключит датчик света.

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

так и не нашёл
В документации от производителя не пробовали поискать ?

Впервые связался с микроконтроллерами, просто не знаю что искать.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Даташит на проц, это же очевидно...

Для меня очевидно использовать фрагменты вместе с NavigationDrawer при разработке для Android, а здесь чип, среда разработки Keil, читаю Datasheet и ни одной команды. К сожалению примера по аналоговому входу нет, только работа с портами в цифровом режие.

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

Так может сначала разобраться, что же скрывается под "объявляем и собственно работаем" в ардуине? Точнее, в том контроллере, что туда запаян (ATmega328 вроде, но это зависит от конкретной платы), причем без ардуинской среды, а на чистом ассемблере хотя бы Си. Может, тогда по аналогии будет понятнее, как работать и с другими камнями.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Как-то разобрался, пример на просторах сети нашёл. Объясните пожалуйста, почему значение на порте регистрируется только при первом запуске приложения, далее данные одни и те же (данные передаются с помощью UART на компьютер)?:

/**********************************************************************
* $Id$ Uart_Autobaud.c 2011-06-02
*//**
* @file Uart_Autobaud.c
* @brief This example describes how to configure UART using auto-baud
* rate in interrupt mode
* @version 1.0
* @date 02. June. 2011
* @author NXP MCU SW Application Team
*
* Copyright(C) 2011, NXP Semiconductor
* All rights reserved.
*
***********************************************************************
* Software that is described herein is for illustrative purposes only
* which provides customers with programming information regarding the
* products. This software is supplied "AS IS" without any warranties.
* NXP Semiconductors assumes no responsibility or liability for the
* use of the software, conveys no license or title under any patent,
* copyright, or mask work right to the product. NXP Semiconductors
* reserves the right to make changes in the software without
* notification. NXP Semiconductors also make no representation or
* warranty that such application will be suitable for the specified
* use without further testing or modification.
**********************************************************************/
#include "lpc177x_8x_uart.h"
#include "lpc177x_8x_pinsel.h"
#include "debug_frmwrk.h"
#include "bsp.h"
#include "lpc177x_8x_gpdma.h"
#include "lpc177x_8x_adc.h"
/* Example group ----------------------------------------------------------- */
/** @defgroup ADC_DMA ADC DMA
* @ingroup ADC_Examples
* @{
*/
/************************** PRIVATE DEFINITIONS *************************/
/** DMA size of transfer */
#define DMA_SIZE 1
/************************** PRIVATE VARIABLES *************************/
uint8_t menu1[] =
"***********************************************************************\n\r"
" Hello NXP Semiconductors \n\r"
" ADC DMA example \n\r"
"\t - MCU: LPC177x_8x \n\r"
"\t - Core: ARM CORTEX-M3 \n\r"
"\t - Communicate via: UART0\1\2 - 115200bps \n\r"
" DMA testing : ADC peripheral to memory\n\r"
" Use ADC with 12-bit resolution rate of 400KHz\n\r"
" The ADC value is handled by DMA function\n\r"
" The content here is displayed by UART interface\n\r"
" Turn the potentiometer to see how ADC value changes\n\r"
"***********************************************************************\n\r";
/* Terminal Counter flag for Channel 0 */
__IO uint32_t Channel0_TC;
/* Error Counter flag for Channel 0 */
__IO uint32_t Channel0_Err;
/************************** PRIVATE FUNCTION *************************/
void DMA_IRQHandler (void);
void print_menu(void);
/*----------------- INTERRUPT SERVICE ROUTINES --------------------------*/
/*********************************************************************//**
* @brief GPDMA interrupt handler sub-routine
* @param[in] None
* @return None
**********************************************************************/
void DMA_IRQHandler (void)
{
// check GPDMA interrupt on channel 0
if (GPDMA_IntGetStatus(GPDMA_STAT_INT, 0))
{
// Check counter terminal status
if(GPDMA_IntGetStatus(GPDMA_STAT_INTTC, 0))
{
// Clear terminate counter Interrupt pending
GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, 0);
Channel0_TC++;
}
// Check error terminal status
if (GPDMA_IntGetStatus(GPDMA_STAT_INTERR, 0))
{
// Clear error counter Interrupt pending
GPDMA_ClearIntPending (GPDMA_STATCLR_INTERR, 0);
Channel0_Err++;
}
}
}
/*-------------------------PRIVATE FUNCTIONS------------------------------*/
/*********************************************************************//**
* @brief Print menu
* @param[in] None
* @return None
**********************************************************************/
void print_menu(void)
{
_DBG(menu1);
}
void GPIO_Configuration(void);
/*In <debug_frmwrk. H >file can choose to a serial port*/
int main(void)
{
GPDMA_Channel_CFG_Type GPDMACfg;
uint32_t adc_value, tmp;
debug_frmwrk_init();
_printf("Welcome to use Open1768 development board\r\n");
/* Initialize debug via UART0
*  115200bps
*  8 data bit
*  No parity
*  1 stop bit
*  No flow control
*/
debug_frmwrk_init();
// print welcome screen
print_menu();
/* Initialize ADC ----------------------------------------------------*/
/* Settings for AD input pin
*/
PINSEL_ConfigPin (BRD_ADC_PREPARED_CH_PORT, BRD_ADC_PREPARED_CH_PIN, BRD_ADC_PREPARED_CH_FUNC_NO);
/* Configuration for ADC :
* ADC conversion rate = 400KHz
*/
ADC_Init(LPC_ADC, 400000);
ADC_IntConfig(LPC_ADC, BRD_ADC_PREPARED_INTR, ENABLE);
ADC_ChannelCmd(LPC_ADC, BRD_ADC_PREPARED_CHANNEL, ENABLE);
/* GPDMA block section -------------------------------------------- */
/* Disable GPDMA interrupt */
NVIC_DisableIRQ(DMA_IRQn);
/* preemption = 1, sub-priority = 1 */
NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01));
/* Initialize GPDMA controller */
GPDMA_Init();
// Setup GPDMA channel --------------------------------
// channel 0
GPDMACfg.ChannelNum = 0;
// Source memory - unused
GPDMACfg.SrcMemAddr = 0;
// Destination memory
GPDMACfg.DstMemAddr = (uint32_t) &adc_value;
// Transfer size
GPDMACfg.TransferSize = DMA_SIZE;
// Transfer width - unused
GPDMACfg.TransferWidth = 0;
// Transfer type
GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_P2M;
// Source connection
GPDMACfg.SrcConn = GPDMA_CONN_ADC;
// Destination connection - unused
GPDMACfg.DstConn = 0;
// Linker List Item - unused
GPDMACfg.DMALLI = 0;
GPDMA_Setup(&GPDMACfg);
/* Reset terminal counter */
Channel0_TC = 0;
/* Reset Error counter */
Channel0_Err = 0;
/* Enable GPDMA interrupt */
NVIC_EnableIRQ(DMA_IRQn);
while (1)
{
// Enable GPDMA channel 0
GPDMA_ChannelCmd(0, ENABLE);
ADC_StartCmd(LPC_ADC, ADC_START_NOW);
/* Wait for GPDMA processing complete */
while ((Channel0_TC == 0));
// Disable GPDMA channel 0
GPDMA_ChannelCmd(0, DISABLE);
//Display the result of conversion on the UART
_printf("ADC value on channel "); _DBD(BRD_ADC_PREPARED_CHANNEL);
_printf(" is: "); _DBD32(ADC_DR_RESULT(adc_value));
 _printf("\r\n");
// Wait for a while
for(tmp = 0; tmp < 1000000; tmp++);
/* GPDMA Re-setup */
GPDMA_Setup(&GPDMACfg);
/* Reset terminal counter */
Channel0_TC = 0;
/* Reset Error counter */
Channel0_Err = 0;
}
ADC_DeInit(LPC_ADC);
return 1;
}
#ifdef DEBUG
/*******************************************************************************
* @brief Reports the name of the source file and the source line number
*	 where the CHECK_PARAM error has occurred.
* @param[in] file Pointer to the source file name
* @param[in] line assert_param error line source number
* @return None
*******************************************************************************/
void check_failed(uint8_t *file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while(1);
}
#endif
/*
* @}
*/

AD.zip

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

Разобрался. Программа работает исправно и датчик подключён правильно. Терминал, которым я пользовался, выводил UART буфер на экран слишком медленно, стал использовать терминал на планшете и всё полетело :dance2:

Изменено пользователем gc986
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

  Разрешено использовать не более 75 эмодзи.

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...