Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 16000000UL
- #include <avr/io.h>
- #include <math.h>
- #include <util/delay.h>
- #include <avr/interrupt.h>
- //Variables globales
- double Potenciometro, Pot_ADC_Escalado;
- //Serial
- void Serial_Init ()
- {
- unsigned int baudios; //9600 Baudios
- baudios = 103;
- UCSR0C = 0x06;
- UCSR0B = 0x28;
- UBRR0 = baudios;
- }
- //ADC
- void ADC_Init (unsigned int ADMUX_, unsigned int ADCSRA_, unsigned int ADCSRB_)
- {
- ADMUX = ADMUX_; //Aref = 5V, ADLAR = 1, Leemos ADC0
- ADCSRA = ADCSRA_; //ADC Enable, ADC start conversion, ADATE = 1, para Free running mode, preescale 168
- ADCSRB = ADCSRB_; //Free running mode
- //Es correcta la inicialización del ADC? ADATE = 1 para poder utilziar Free running mode
- }
- //Timer0 Compare
- void timers_TCCR0_init(unsigned int TCCR0A_, unsigned int TCCR0B_)
- {
- TCCR0A = TCCR0A_;
- TCCR0B = TCCR0B_;
- OCR0A |= 0x7D;
- // TIFR0 |= (1<<OCF0A);
- //Es necesario utilizar TIFR0?? Aunque este utilizando la interrupcion de timer?
- }
- //Interrupcion timer compare
- ISR (TIMER0_COMPA_vect)
- {
- //Cada 2 ms el valor del ADC es asignado a la variable Potenciometro.
- Potenciometro = ADC;
- }
- //Interrupcion envio Tx UDRE
- ISR (USART0_UDRE_vect)
- {
- //Valor de ADC escalado es enviado serial.
- UDR0 = Pot_ADC_Escalado;
- }
- int main(void)
- {
- //Inicializamos ADC
- ADC_Init(0x20, 0xE7, 0x0);
- //Inicializamos T0 Compare
- timers_TCCR0_init(0x02, 0x04);
- //Iniciamos Serial
- Serial_Init();
- //Puerto Tx como salida para envio
- DDRE |= (1<<PE1);
- //Puerto ADC como entrada
- DDRF |= (0<<PF0);
- DDRA |= 0xFF;
- sei();
- /* Replace with your application code */
- while (1)
- {
- //Escalando el valor de ADC
- Pot_ADC_Escalado = (Potenciometro * 2.56) / 1024;
- //Valor a sacar por puerto A
- PORTA = Pot_ADC_Escalado;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement