Académique Documents
Professionnel Documents
Culture Documents
uint8_t Idx = 0;
__IO uint8_t SelectedWavesForm = 1;
__IO uint8_t WaveChange = 1;
void DAC_PreConfig(void);
Imagen 1. LM-35.
None
II. OBJETIVOS
int main(void)
{
1. Emplear las herramientas del entorno de
desarrollo IAR Embedded Workbench para
compilar y ejecutar el programa para producir DAC_PreConfig();
interrupciones.
2. Crear un espacio de trabajo (Workspace) poder Configuracion
crear cada uno de los códigos necesarios para RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,
obtener la onda seno. ENABLE);
Configuracion timer
III. MATERIALES
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
Computador con el programa IAR Embedded TIM_TimeBaseStructure.TIM_Period = 100; //Se
Workbench. define un periodo de 100
Tarjeta STM32FXX. TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
LM-35. //Prescala 0x0
Osciloscopio. TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode =
IV. RESULTADOS OBTENIDOS TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,
1. Código para la onda seno. &TIM_TimeBaseStructure);
while (1)
TIM_TimeBaseInitTypeDef {
TIM_TimeBaseStructure; /* If the wave form is changed */
DAC_InitTypeDef DAC_InitStructure; if (WaveChange == 1)
DMA_InitTypeDef DMA_InitStructure; {
Seleccion de forma de onda de acuerdo al swicht
3
DMA_DeInit(DMA1_Channel3); DMA_InitStructure.DMA_PeripheralBaseAddr
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_Address;
= DAC_DHR12R2_Address; DMA_InitStructure.DMA_MemoryBaseAddr =
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Escalator8bit;
(uint32_t)&Sine12bit; DMA_InitStructure.DMA_BufferSize = 6;
DMA_InitStructure.DMA_DIR = DMA_InitStructure.DMA_PeripheralDataSize
DMA_DIR_PeripheralDST; = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_MemoryDataSize =
DMA_InitStructure.DMA_PeripheralInc = DMA_MemoryDataSize_Byte;
DMA_PeripheralInc_Disable; DMA_Init(DMA1_Channel2,
DMA_InitStructure.DMA_MemoryInc = &DMA_InitStructure);
DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize /activacion del DMA1 po el canal 2
= DMA_PeripheralDataSize_HalfWord; DMA_Cmd(DMA1_Channel2, ENABLE);
DMA_InitStructure.DMA_MemoryDataSize = DAC_Cmd(DAC_Channel_1, ENABLE);
DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = /* Enable DMA for DAC Channel1 */
DMA_Mode_Circular; DAC_DMACmd(DAC_Channel_1, ENABLE);
DMA_InitStructure.DMA_Priority = }
DMA_Priority_High; /* DAC channel1 Configuration */
DMA_InitStructure.DMA_M2M = DAC_InitStructure.DAC_Trigger =
DMA_M2M_Disable; DAC_Trigger_T2_TRGO;
DMA_Init(DMA1_Channel3, DAC_InitStructure.DAC_WaveGeneration =
&DMA_InitStructure); DAC_WaveGeneration_Noise;
0x7FF0);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA
/* Enable DAC channel1 wave generator */ , ENABLE);
DAC_WaveGenerationCmd(DAC_Channel_1, /* Configure PA.04 (DAC_OUT1), PA.05
DAC_Wave_Noise , ENABLE); (DAC_OUT2) as analog */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |
/* Triangle Wave generator ------------------------ GPIO_Pin_5;
-----------------*/ GPIO_InitStructure.GPIO_Mode =
DAC_DeInit(); GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd =
/* DAC channel2 Configuration */ GPIO_PuPd_NOPULL;
DAC_InitStructure.DAC_Trigger = GPIO_Init(GPIOA, &GPIO_InitStructure);
DAC_Trigger_T2_TRGO; }
DAC_InitStructure.DAC_WaveGeneration =
DAC_WaveGeneration_Triangle;
#ifdef USE_FULL_ASSERT
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmpli
tude = DAC_TriangleAmplitude_1023; /**
DAC_InitStructure.DAC_OutputBuffer = * @brief Reports the name of the source file and the
DAC_OutputBuffer_Enable; source line number
DAC_Init(DAC_Channel_2, * where the assert_param error has occurred.
&DAC_InitStructure); * @param file: pointer to the source file name
* @param line: assert_param error line source
/* Enable DAC Channel2: Once the DAC number
channel2 is enabled, PA.05 is * @retval None
automatically connected to the DAC */
converter. */ void assert_failed(uint8_t* file, uint32_t line)
DAC_Cmd(DAC_Channel_2, ENABLE); {
/* User can add his own implementation to report the
/* Set DAC channel2 DHR12RD register */ file name and line number,
DAC_SetChannel2Data(DAC_Align_12b_R, ex: printf("Wrong parameters value: file %s on line
0x100); %d\r\n", file, line) */
}
WaveChange = !WaveChange; /* Infinite loop */
} while (1)
} {
} }
void DAC_PreConfig(void) }
{ }
GPIO_InitTypeDef GPIO_InitStructure;
/* DMA1 clock enable (to be used with DAC) */ En este programa, se logró generar la onda sinusoidal,
por medio de los canales de la tarjeta, primero se defino
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, el periodo que se va a utilizar, por medio de esto se pudo
ENABLE); observar que entre más periodo la frecuencia es más
pequeña, lo que quiere decir que es inversamente
/* DAC Periph clock enable */ proporcional.
Luego se definieron los canales que de la tarjeta que se
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, utilizaron para poder generar la onda. Por último se varió
ENABLE); el periodo para poder la onda con más claridad.
LCD_init();
GPIO_InitTypeDef GPIO_InitStructure; LCD_string("ADC1=", 0); //ADC1 tipo string con
ADC_InitTypeDef ADC_InitStructure; valor cero
Co
//int M0=0;
int main () { while (1) { //Condicional
int j; ADC_SoftwareStartConv(ADC1);
uint16_t M0=0; M0 = ADC1->DR; //M0 se la asigna el vaolor de
//uint32_t muestras = 0; ADC1
float temperatura = 0, conv=0,mil=0; conv = M0*500; //Multiplique M0 POR 500
(CONVOLUCION)
mil=conv/1023; //Se divide en valor de conv
Configuracion del reloj entre 1023
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AD temperatura=mil/10;
C1, ENABLE); for (j = 0; j<10000000; j++){}; // waste some
time
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA LCD_uInt16((int)temperatura, 0x06, 1);
, ENABLE);
Configuracion para el Puerto por el pin 6 // Se tomaron 16 muestras?
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //Pin // Se busca el promedio de 16 muestras
para la conección del LM-35 // Variables inicializadas para las siguientes
GPIO_InitStructure.GPIO_Mode = // muestras del conversor.
GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = M0 = 0;
GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure); };
CONCLUSIONES