16BITSADQSERIE
#include <lpc40xx.h>
#include <timer_lpc40xx.h>
unsigned char adq_serie_16bits (void);
void timer1_retardo_ms(unsigned int retardo_en_ms);
int main(void){
unsigned int b = 0;
char cadena[15];
while (1){
for (b = 0; b <= 15; b++){
cadena[b] = adq_serie_16bits();
LPC_GPIO2->SET = cadena[b];
if (b == 15){
LPC_GPIO1->SET = (1 << 2);
}
}
timer1_retardo_ms(50);
LPC_GPIO1->CLR = (1 << 2);
timer1_retardo_ms(50);
b = 0;
}
}
unsigned char adq_serie_16bits (void){
unsigned char i, byte = 0, dato;
for (i = 0; i < 16; i++){
while (LPC_GPIO0->PIN & (1 << 3));
while (!(LPC_GPIO0->PIN & (1 << 3)));
if (LPC_GPIO1->PIN & (1 << 0))
dato = 1;
else
dato = 0;
byte = (byte << 1) + dato;
}
return byte;
}
void timer1_retardo_ms (unsigned int retardo_en_ms){
LPC_TIM1->TCR = 0;
LPC_TIM1->PC = 0;
LPC_TIM1->TC = 0;
LPC_TIM1->PR = 60000 - 1;
LPC_TIM1->MR0 = retardo_en_ms - 1;
LPC_TIM1->MCR = 1;
LPC_TIM1->IR = 1;
LPC_TIM1->TCR = 1;
while ((LPC_TIM1->IR & (1 << 0)) == 0) {}
}
TERBUF60ADCMEDIA
#include <lpc40xx.h>
#include <timer_lpc40xx.h>
#include "glcd.h"
float medir_temperatura(void);
void TIMER0_IRQHandler(void);
int main(void){
glcd_inicializar();
glcd_borrar();
LPC_IOCON->P0_26 = 1;
LPC_SC->PCONP |= (1 << 12);
LPC_ADC->CR = (1 << 21) | (((PeripheralClock / 1000000) - 1) << 8);
LPC_TIM0->TCR = 0;
LPC_TIM0->PC = 0;
LPC_TIM0->TC = 0;
LPC_TIM0->MCR = 3;
LPC_TIM0->PR = PeripheralClock / 1000000 - 1; // VALOR DE PERIPHERAL
LPC_TIM0->MR0 = 1000 * (1000 - 1); // Retardo 1s
NVIC_ClearPendingIRQ(TIMER0_IRQn);
NVIC_SetPriority(TIMER0_IRQn, 0);
NVIC_EnableIRQ(TIMER0_IRQn);
__enable_irq();
LPC_TIM0->TCR = 1;
timer_inicializar(TIMER0);
timer_iniciar_ciclos_ms(TIMER0);
while(1);
}
float medir_temperatura(void){
LPC_ADC->CR = (LPC_ADC->CR & ~0xFF) | (1 << 3);
LPC_ADC->CR |= (1 << 24);
while (!LPC_ADC->GDR & (1 << 31));
return ((((LPC_ADC->DR[3] >> 4) & 0xFFF) * 330) / 1024);
}
void TIMER0_IRQHandler(void) {
float temperatura = 0;
float calcularmedia = 0, media = 0;
static uint32_t buffer_circular_temperatura[60];
static uint32_t indice_buffer = 0;
NVIC_ClearPendingIRQ(TIMER0_IRQn);
LPC_TIM0->IR = 1;
for(indice_buffer = 0; indice_buffer < 60; indice_buffer++){
temperatura = medir_temperatura();
buffer_circular_temperatura[indice_buffer] = temperatura;
calcularmedia += buffer_circular_temperatura[indice_buffer];
}
media = calcularmedia / 60;
glcd_xprintf(0, 0, WHITE, BLACK, FONT16X32, "Valor: %1.2f ºC y Media: %1.2fºC", temperatura, media);
if (indice_buffer > 59)
indice_buffer = 0;
}