Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Implementacion ADC para atmega 328p, Apuntes de Señales y Sistemas

Codigo ADC para atmega, la implementacion se debe hacer en el programa de ardunio debido a que se usa la libreria seria, de otra forma toca programar el UART que trae el atmega328p

Tipo: Apuntes

2019/2020

Subido el 21/05/2020

napo-napo
napo-napo 🇨🇴

1 documento

1 / 10

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Pre informe conversión Analógica Digital
Nombres:
- Daniel Eduardo Ovalle Rosas
- Andrés Felipe Barreto
- Daniel Barandica
Profesor: Johana Florez
Pontificia Universidad Javeriana
Ingeniería Electrónica
Procesamiento De señales
Fecha: 22/08/2019
Programación de interrupción empleando un temporizador
Objetivo: Programar una interrupción a 250 Hz empleando el temporizador 0.
1 Código:
// Iniciar variables
boolean toggle = false; // Use la variable toggle como testigo de la acción de la interrupción.
void cambiarEstadoLED();
int main(){
DDRB|=(1<<5); //DEFINICION DE PIN DE SALIDA
// Programación de la interrupción por temporizador 0 a una tasa de 250 Hz.
SREG = 0;// 1. Deshabilite todas las interrupciones. Ver registro de estado (Status Register, SREG).
TCCR0A = 0;// 2. Inicie los registros de control del temporizador 0 (TCCR0A y B) en 0.
TCCR0B = 0;
TCCR0B|= ((1<<2)|(1<<0)|(0<<1));// Habilitar en 1 3. Programe los bits para pre-escalización del
reloj (CS00,1 y 2) de este registro.
TCCR0A|=(1<<1)|(0<<0);// preescalizacion de 1024
// 4. Programe los bits de modo generación de forma de onda del temporizador 0 (WGM00, 1 y 2)
en el modo borrar temporizador al comparar (CTC), ver Table 19-9.
TCNT0= 0;// 5. Inicie el registro de conteo del temporizador 0 (TCNT0) en 0.
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga Implementacion ADC para atmega 328p y más Apuntes en PDF de Señales y Sistemas solo en Docsity!

Pre informe conversión Analógica Digital

Nombres:

  • Daniel Eduardo Ovalle Rosas
  • Andrés Felipe Barreto
  • Daniel Barandica

Profesor: Johana Florez

Pontificia Universidad Javeriana

Ingeniería Electrónica

Procesamiento De señales

Fecha: 22/08/

 Programación de interrupción empleando un temporizador

Objetivo: Programar una interrupción a 250 Hz empleando el temporizador 0.

1 Código: // Iniciar variables boolean toggle = false; // Use la variable toggle como testigo de la acción de la interrupción. void cambiarEstadoLED(); int main(){ DDRB|=(1<<5); //DEFINICION DE PIN DE SALIDA // Programación de la interrupción por temporizador 0 a una tasa de 250 Hz. SREG = 0;// 1. Deshabilite todas las interrupciones. Ver registro de estado (Status Register, SREG). TCCR0A = 0;// 2. Inicie los registros de control del temporizador 0 (TCCR0A y B) en 0. TCCR0B = 0; TCCR0B|= ((1<<2)|(1<<0)|(0<<1));// Habilitar en 1 3. Programe los bits para pre-escalización del reloj (CS00,1 y 2) de este registro. TCCR0A|=(1<<1)|(0<<0);// preescalizacion de 1024 // 4. Programe los bits de modo generación de forma de onda del temporizador 0 (WGM00, 1 y 2) en el modo borrar temporizador al comparar (CTC), ver Table 19-9. TCNT0= 0;// 5. Inicie el registro de conteo del temporizador 0 (TCNT0) en 0.

OCR0A= 60;// 6. Inicie el registro de conteo de salida del temporizador 0 (OCR0A) en el valor apropiado para obtener la frecuencia de 250 Hz. TIMSK0= (1<<1);// 7. Habilite el bit apropiado de la máscara de interrupción del temporizador 0 (TIMSK0) al alcanzar el valor del registro de conteo de salida OCR0A. SREG = (1<<7);// 8. Habilite todas las interrupciones. while(1){ } } // Bucle principal void loop(){ // El procesador queda libre. } // Función testigo de la interrupción. void cambiarEstadoLED(void) void cambiarEstadoLED() { toggle = !toggle; // Cambia de estado la variable toggle cada vez que se produce una interrupción if(toggle){ PORTB |= (1 << 5);// PRENDER LED }else{ PORTB &= ~(1 << 5); // APAGAR LED } // Función de atención a la interrupción. ISR(TIMER0_COMPA_vect) } ISR(TIMER0_COMPA_vect){// interrupcion cambiarEstadoLED(); }

 Programación del conversor A/D en modo de muestreo libre (free running).

Objetivo Programar el conversor A/D a la máxima tasa recomendada con 10 bits de

resolución

2 código:

// Iniciar variables void cambiarEstadoLED(); boolean toggle = false; // Use la variable toggle como testigo de la acción de la interrupción. volatile boolean readFlag=false; // Almacenamiento de la conversión volatile int analogVal; // Iniciación int main(){ SREG = 0;// 1. Deshabilite todas las interrupciones. ADCSRA=0;// 2. Programe el reloj del conversor A/D (preescalización en el ADCPSR) a la máxima tasa posible, ADMUX=0; ADCSRA|= (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); //Sección 28.4. ADMUX|= (0<<REFS1)|(1<<REFS0)|(0<<ADLAR); // 3. Programe la referencia del conversor A/D (ADMUX) hacia AVCC. // 4. Programe el multiplexor de entrada (registro ADMUX) hacia ADC0. // 5. Programe el registro de datos del conversor A/D de modo que los 8 dígitos binarios menos // significativos (LSB) queden en ADCL y los 2 más significativos (MSB) en ADCH. ADCSRB=0;// 6. Programe el modo de inicio de la conversión en modo libre (free running) (registro ADCSRB). ADCSRA|=(1<<ADEN)|(0<<ADSC)|(1<<ADATE)|(1<<ADIE);// 7. Habilite e inicie la conversión A/D en modo libre (bits ADEN, ADSC y ADATE en ADCSRA) // 8. Habilite la interrupción del conversor A/D (bit ADIE del registro ADCSRA)

SREG|= (1<<7);// 9. Habilite todas las interrupciones. ADCSRA|=(1<<ADSC);// 10. Inicie la conversión A/D en modo libre (bit ADSC en ADCSRA) //11. Iniciar la bandera de conversión lista. readFlag = false; // Iniciar salida digital. DDRB|=(1<<5); //DEFINICION DE PIN DE SALIDA while(1){ // Leer el dato. if (readFlag) { readFlag=false; cambiarEstadoLED(); /* Medir el tiempo entre cambios de estados "toggles" */ } } } void cambiarEstadoLED(){ toggle = !toggle; // Cambia de estado la variable toggle cada vez que se produce una interrupción if(toggle){ PORTB |= (1 << 5);// PRENDER LED }else{ PORTB &= ~(1 << 5); // APAGAR LED } // Función de atención a la interrupción. ISR(TIMER0_COMPA_vect) } ISR(ADC_vect){

 Programación de conversión a tasa constante empleando interrupción del

temporizador

3 código:

// Programar el microcontrolador para que se haga conversión a una tasa fija de 250 Hz // Iniciar variables. volatile boolean readFlag=false; void configurAR_TIMER(); void configurar_adc(); void enviardato(); // Valor leído volatile int analogVal; void setup(){ SREG=0;// 1. Suspender interrupciones. configurAR_TIMER();// 2. Programar temporizador 0 para producir interrupciones a la tasa de muestreo de 250 Hz. configurar_adc();// 3. Programar conversor A/D para convertir a la máxima velocidad de reloj, pero empleando el //temporizador 0 como fuente de disparo (Timer/Counter0 Compare Match A). // 4. Configurar puerto serial para recibir datos a la tasa de muestreo. Serial.begin(9600); /velocidad maxima para que no interfiera con otros procesos/ while (!Serial) { ; // Esperar a que el puerto inicie } SREG=(1<<7); } void loop(){ // Se lee dato y envía hacia el puerto serial. if (readFlag) { readFlag=false;

enviardato(); } } void enviardato(){ Serial.println(analogVal); //Serial.print(" "); } void configurAR_TIMER(){ TCCR0A = 0;// 2. Inicie los registros de control del temporizador 0 (TCCR0A y B) en 0. TCCR0B = 0; TCCR0B|= ((1<<2)|(1<<0)|(0<<1));// Habilitar en 1 3. Programe los bits para pre-escalización del reloj (CS00,1 y 2) de este registro. TCCR0A|=(1<<1)|(0<<0);// preescalizacion de 1024 // 4. Programe los bits de modo generación de forma de onda del temporizador 0 (WGM00, 1 y 2) en el modo borrar temporizador al comparar (CTC), ver Table 19-9. TCNT0= 0;// 5. Inicie el registro de conteo del temporizador 0 (TCNT0) en 0. OCR0A= 60;// 6. Inicie el registro de conteo de salida del temporizador 0 (OCR0A) en el valor apropiado para obtener la frecuencia de 250 Hz. TIMSK0= (1<<1);// 7. Habilite el bit apropiado de la máscara de interrupción del temporizador 0 (TIMSK0) al alcanzar el valor del registro de conteo de salida OCR0A. } void configurar_adc(){ ADCSRA=0;// 2. Programe el reloj del conversor A/D (preescalización en el ADCPSR) a la máxima tasa posible, ADMUX=0; ADCSRB=0; ADCSRA|= (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); //Sección 28.4.

Imagen 4. Código 3