Advertisement
OscarAHB

Codigo Mano.

Apr 15th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.79 KB | None | 0 0
  1. #define F_CPU 16000000UL
  2.  
  3. #include <avr/io.h>
  4. #include <math.h>
  5. #include <util/delay.h>
  6. #include <avr/interrupt.h>
  7.  
  8. //Variables globales
  9. double Potenciometro, Pot_ADC_Escalado;
  10.  
  11. //Serial
  12. void Serial_Init ()
  13. {
  14.     unsigned int baudios; //9600 Baudios
  15.     baudios = 103;
  16.     UCSR0C = 0x06;
  17.     UCSR0B = 0x28;
  18.     UBRR0 = baudios;
  19. }
  20.  
  21. //ADC
  22. void ADC_Init (unsigned int ADMUX_, unsigned int ADCSRA_, unsigned int ADCSRB_)
  23. {
  24.     ADMUX = ADMUX_; //Aref = 5V, ADLAR = 1, Leemos ADC0
  25.     ADCSRA = ADCSRA_; //ADC Enable, ADC start conversion, ADATE = 1, para Free running mode, preescale 168
  26.     ADCSRB = ADCSRB_; //Free running mode
  27.     //Es correcta la inicialización del ADC? ADATE = 1 para poder utilziar Free running mode
  28. }
  29.  
  30. //Timer0 Compare
  31.  void timers_TCCR0_init(unsigned int TCCR0A_, unsigned int TCCR0B_)
  32.  {
  33.      TCCR0A = TCCR0A_;
  34.      TCCR0B = TCCR0B_;
  35.      OCR0A |= 0x7D;
  36. //   TIFR0 |= (1<<OCF0A);
  37.     //Es necesario utilizar TIFR0?? Aunque este utilizando la interrupcion de timer?
  38.  }
  39.  
  40.  //Interrupcion timer compare
  41.  ISR (TIMER0_COMPA_vect)
  42.  {
  43.     //Cada 2 ms el valor del ADC es asignado a la variable Potenciometro.
  44.     Potenciometro = ADC;
  45.  }
  46.  
  47.  //Interrupcion envio Tx UDRE
  48. ISR (USART0_UDRE_vect)
  49. {
  50.     //Valor de ADC escalado es enviado serial.
  51.     UDR0 = Pot_ADC_Escalado;
  52. }
  53.  
  54. int main(void)
  55. {
  56.     //Inicializamos ADC
  57.     ADC_Init(0x20, 0xE7, 0x0);
  58.     //Inicializamos T0 Compare
  59.     timers_TCCR0_init(0x02, 0x04);
  60.     //Iniciamos Serial
  61.     Serial_Init();
  62.     //Puerto Tx como salida para envio
  63.     DDRE |= (1<<PE1);
  64.     //Puerto ADC como entrada
  65.     DDRF |= (0<<PF0);
  66.  
  67.     DDRA |= 0xFF;
  68.  
  69.     sei();
  70.  
  71.     /* Replace with your application code */
  72.     while (1)
  73.     {
  74.         //Escalando el valor de ADC
  75.         Pot_ADC_Escalado = (Potenciometro * 2.56) / 1024;
  76.  
  77.         //Valor a sacar por puerto A
  78.         PORTA = Pot_ADC_Escalado;
  79.  
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement