Destruir PEST v1.0 | ElimatePests v1.0

2022-12-24   EN  

1. Propósito experimental

Enviar la información del sensor de temperatura interna recopilada a la máquina superior a través del puerto serie

2. Proceso experimental

1, configuración de registro

ADCCON1(0XB4)
ADC Control Register 1
BIT7: EOC ADC finaliza la posición del logotipo
0: la conversión de anuncios se realiza 1: la conversión de anuncios se completa
  bit6: st comienza manualmente la conversión de anuncios
0: Cerrar 1: Inicie la conversión del anuncio (necesita bit5: bit4 = 11)
  BIT5: Método de inicio de conversión de anuncios BIT4
00: disparador externo
01: Convertir la velocidad completa, no es necesario activar
10: se activa el canal T1
11: disparador manual
  bit3: bit2 bit de control del generador de números aleatorios de 16 bits
00: Modo normal (13x abierto)
01: Abra el reloj LFSR una vez (13x abierto)
10: Reserva
11:
ADCC0N2(0XB5)
secuencia Registro de control de conversión de anuncios 2
bit7: bit6 sref seleccione el voltaje de referencia de conversión de anuncios
00: Voltaje de referencia interno (1.25V)
01: Voltaje de referencia externo Ain7 Entrada
10: Voltaje de potencia de simulación
11: Voltaje de referencia externo Ain6-Ain7 Entrada diferencial
  bit5: bit4 establecer la resolución de conversión de anuncios
00: 64DEC, 7 dígitos son válidos
01: 128DEC, 9 bit Efectivo,
10: 256DEC, 10 bits efectivo
11: 512DEC, 12 bits válido
  BIT3:BIT2:BIT1:BIT0
Establezca el último canal de conversión de AD. Si el ADC se está ejecutando en el momento, comenzará inmediatamente después de completar la conversión de la secuencia de AD.
0000:AIN0
0001:AIN1
0010:AIN2
0011:AIN3
0100:AIN4
0101:AIN5
0110:AIN6
0111:AIN7
1000: Ain0-Ain1 diferencial
1001: Ain2-Ain3 Diferencial
1010: Ain4-Ain5 Diferencial
1011: Ain6-Ain7 Diferencial
1100:GND
1101: Reserva
1110: Sensor de temperatura
1111: 1/3 Voltaje de la fuente de alimentación de simulación
ADCCON3(0XB5)
Registro de control de conversión de anuncios de un solo canal 3
bit7: bit6 sref seleccione un solo canal AD Seleccione Voltaje de referencia
00: Voltaje de referencia interno (1.25V)
01: Voltaje de referencia externo Ain7 Entrada
10: Voltaje de potencia de simulación
11: Voltaje de referencia externo Ain6-Ain7 Entrada diferencial
  bit5: bit4 establece una resolución de conversión de anuncios de un solo canal
00: 64DEC, 7 dígitos son válidos
01: 128DEC, 9 bits efectivo,
10: 256DEC, 10 dígitos son válidos
11: 512DEC, 12 bits válido
  BIT3:BIT2:BIT1:BIT0
Establezca la conversión de anuncios en el canal final. Si el ADC se está ejecutando en el momento, comenzará inmediatamente después de completar la conversión de la secuencia del anuncio.
0000:AIN0
0001:AIN1
0010:AIN2
0011:AIN3
0100:AIN4
0101:AIN5
0110:AIN6
0111:AIN7
1000: diferencial Ain0-Ain1
1001: Ain2-Ain3 Diferencial
1010: Ain4-Ain5 Diferencial
1011: Ain6-Ain7 Diferencial
1100:GND
1101: Reserva
1110: Pasajero de temperatura
1111: 1/3 Voltaje de la fuente de alimentación de simulación
TR0(0x624B) bit0: conjunto 1 significa conectar el sensor de temperatura con ADC
ATEST(0x61BD) bit0: el lugar 1 indica que el sensor de temperatura está habilitado

2, código fuente

adc.h

#ifndef ADC_H_
#define ADC_H_

#include <ioCC2540.h>

#define uint unsigned int
#define uchar unsigned char

void AdcInit(void);//sensor de temperatura interna

uint GetAdcValue(void);//Obtenga un único valor de anuncio de conversión

uint TempDeal(uint TempAdValue);//El valor AD del sensor de temperatura se convierte en valor de temperatura, y se expande 100 veces

void ChanceValueToString(uint Data ,uchar *Buff);//Convierta el valor numérico en una cadena





#endif
#include "adc.h"


void AdcInit(void)//sensor de temperatura interna
{
  ADCCON1 = 0x33;//conversión de inicio de software
  ADCCON3 = 0x3e;//voltaje de referencia interna, resolución de 12 bits, seleccione la entrada del sensor de temperatura
  TR0 = 0x01;
  ATEST = 0x01;
//  ADCCON1 |= 0x40;//conversión de inicio de software
}

uint GetAdcValue(void)
{
  uint AdValue=0;
  
  ADCCON1 |= 0x40;
  while(!(ADCCON1 & 0x80));
  AdValue = ADCL >>4;
  AdValue |= ADCH <<4;
  
  return AdValue; 
}

uint TempDeal(uint TempAdValue)//El valor AD del sensor de temperatura se convierte en el valor de temperatura y la expansión de 100 veces
{
  float Tempruture;
  Tempruture = (TempAdValue-1367.5)/4.5+2.5; 
  TempAdValue = (uint)(Tempruture*100);
  return TempAdValue;
}

void ChanceValueToString(uint Data ,uchar *Buff)//Convierta el valor numérico en una cadena
{
  Buff[0] = (Data/10000)+0x30; 
  Buff[1] = ((Data/1000)%10)+0x30; 
  Buff[2] = ((Data/100)%10)+0x30; 
  Buff[3] = '.'; 
  Buff[4] = ((Data/10)%10)+0x30; 
  Buff[5] = (Data%10)+0x30; 
  Buff[6] = '\n'; 
  Buff[7] = '\0';
}

sysclock

#ifndef SYSCLK_H_
#define SYSCLK_H_

#include<ioCC2540.h>

void SysClkSet_32M(void);//Establezca el reloj del sistema 32MHz

#endif
#include "sysclk.h"


void SysClkSet_32M(void)//Establecer el reloj del sistema 32MHz
{
  CLKCONCMD &= ~0x40;
  while(CLKCONSTA & 0x40);    
  CLKCONCMD &= ~0x47;  
}

usart0

#ifndef USART0_H_
#define USART0_H_

#include<ioCC2540.h>

#define uint unsigned int
#define uchar unsigned char


void UartInit(void);//115200

void Uart0_SendByte(uchar Byte);//Enviar datos

void Uart0_SendString(uchar *Buff);//enviar una cadena



#endif
#include"usart0.h"

void UartInit(void)
{  
  P2DIR &= ~0xc0;//Ubicación de respaldo 1
  PERCFG &= ~0x01;//set Uart0 alta prioridad
  P0SEL |= 0x3c;//2 3 4 5 como periférico
  U0CSR = 0xc0;
  U0GCR = 11;  //Establecer la tasa de baudios, consulte la tabla correspondiente en la documentación china CC2530
  U0BAUD = 216; 
  EA=1;
  URX0IE=1;//Recibir interrupción URX0IF-Receive El logotipo de interrupción bit Utx0if-send la posición del símbolo
}

void Uart0_SendByte(uchar Byte)//enviar un personaje
{
  U0DBUF=Byte; 
  while(!UTX0IF);
  UTX0IF=0;
}

void Uart0_SendString(uchar *Buff)//Enviar una cadena de caracteres
{
  uchar *p;
  p=Buff;
  while(*p != 0)
  {
    Uart0_SendByte(*p);
    p++;
  }
}


#pragma vector = URX0_VECTOR   //Vector de interrupción
__interrupt void Uart0RxInt(void)
{
  URX0IF=0; 
  Uart0_SendByte(U0DBUF);
}

mian

#include<ioCC2540.h>
#include"sysclk.h"
#include"usart0.h"
#include"adc.h"

#define uint unsigned int
#define uchar unsigned char
void Delay(uint n);
uchar TempDis[8];

void main()
{
  SysClkSet_32M();//Establecer el reloj del sistema 32MHz
  UartInit();     //115200
  
  while(1)
  {
    AdcInit();      //Inicializar ADC
    ChanceValueToString(TempDeal(GetAdcValue()),TempDis);//Obtenga el valor de temperatura actual y reemplácelo en una cadena
    Uart0_SendString(TempDis);//Valor de temperatura de impresión
    Delay(1000);
  }
}



void Delay(uint n)
{
  uint i,j;
  for(i=n;i>0;i--)
    for(j=5000;j>0;j--);
}

reimpreso: https://www.cnblogs.com/bluemountain-haggendazs/p/4298381.html

source

Related Posts

HGAME-2019 Algunos RSA interesantes

juicio del diagrama de dos puntos (+coincidencia máxima) NYOJ 1015+239 HDU 2444JXR

Notas de desarrollo de Android para resolver el identificador único y sus problemas de autorización

[Resumen] (En Windows) Instalación de PylTP

Destruir PEST v1.0 | ElimatePests v1.0

Random Posts

[Oracle] Conocimiento relevante del disparador

Luo GU P4570 [BJWC2011] Elemento

Método de aprendizaje estadístico (2) -C cerca del modelo vecino

Qinzhe Excel Server-OA Sistema Excelserver

Ubuntu Install Docker, instale MySQL Resumen en Docker