Stellaris Lm4F120 Launchpad — измерение температуры термодатчиком



Скетч для измерения температуры термодатчиком и выдачи её в последовательный порт.

// измерение температуры термодатчиком:

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/debug.h"
#include "utils/uartstdio.h"

#ifdef DEBUG
void__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif

#define LED_RED GPIO_PIN_1
#define LED_BLUE GPIO_PIN_2
#define LED_GREEN GPIO_PIN_3

#define ADC_SEQUENCER_LENGTH 1

//initializes the adc
void initADC(void) {
	//enable the adc0 peripherial.
	SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
	//set the speed to 1msps.
	//SysCtlADCSpeedSet(SYSCTL_ADCSPEED_1MSPS);

	SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS);

	//set the auto avergage to 64.
	ADCHardwareOversampleConfigure(ADC0_BASE, 64);
	//before setting up I must disable the sequence 3.
	ADCSequenceDisable(ADC0_BASE, 3);
	//set the sequence to use (adc0 sequence 3).
	ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
	//set up the sequence step.
	//set up the last step and start an interrupt when the conversion it's over.
	ADCSequenceStepConfigure(ADC0_BASE, 3, 0,
			ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
	//enable the sequence again!
	ADCSequenceEnable(ADC0_BASE, 3);
}

void initConsole(void) {
	//enable portA
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
	//configure the pin multiplexing
	GPIOPinConfigure(GPIO_PA0_U0RX);
	GPIOPinConfigure(GPIO_PA1_U0TX);
	//configure the type of the pins for uart tx/rx
	GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
	//init the console
	UARTStdioInit(0);
}

void initRGBled(void) {
	// Enable PORT F GPIO
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
	// set LED pins as outputs
	GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_RED | LED_BLUE | LED_GREEN);
}

int main(void) {

	//Variable to store the data from the sequencer.
	unsigned long ulADC0Value[ADC_SEQUENCER_LENGTH];
	unsigned long ulTemp_ValueC = 0;
	float ulTempValueC = 0;
	//Set the system clock to run at 40MHz.
	SysCtlClockSet(
			SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN
					| SYSCTL_XTAL_16MHZ);
	//I should initialize the adc!
	initADC();
	//init the console for serial use.
	initConsole();

	//initRGBled();

	while (1) {
		// set the red LED pin high, others low
		//GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_BLUE|LED_GREEN, LED_RED);
		//SysCtlDelay(SysCtlClockGet() / 24);

		//clear the interrupt flag
		ADCIntClear(ADC0_BASE, 3);
		//trigger the adc conversion process.
		ADCProcessorTrigger(ADC0_BASE, 3);
		//wait for the interrupt flag to get set!
		while (!ADCIntStatus(ADC0_BASE, 3, false)) {
		}
		//get the actual data samples from adc0 sequencer 3!
		ADCSequenceDataGet(ADC0_BASE, 3, ulADC0Value);

		// set the green LED pin high, others low
		//GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_BLUE|LED_GREEN, LED_GREEN);

		//convert the value!
		ulTempValueC = (1475 - ((2475 * ulADC0Value[0])) / 4096.)/10.;

		UARTprintf("%d\n", (unsigned long)(ulTempValueC*1000));
		//SysCtlDelay(SysCtlClockGet() / 24);
		SysCtlDelay(SysCtlClockGet() / 12);
	}
}

stellaris_print_temperature.c

По теме
Stellaris Lm4F120 Launchpad — отладочная плата на ARM Cortex M4 от Texas Instruments


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение музыка наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение