Advertisement
Guest User

Untitled

a guest
Dec 28th, 2012
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.64 KB | None | 0 0
  1. #define F_CPU 8000000UL
  2.  
  3. #include <util/delay.h>
  4. #include <avr/io.h>
  5. #include <avr/interrupt.h>
  6.  
  7. uint8_t i; // temp variable
  8. uint8_t al; // ADC low
  9. uint8_t ah; // ADC high
  10.  
  11. volatile uint8_t timer = 0;
  12.  
  13. uint8_t checksum = 255;
  14.  
  15. int main()
  16. {
  17. cli();
  18.     UBRR0H = 0;
  19.     UBRR0L = 1;
  20.     UCSR0B = 0b00001000;
  21.     ADMUX = 0b01000111; // Select A7
  22.     ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  23.  
  24.     TCCR2A = 0b010; // TOP = OCRA
  25.     TCCR2B = 0b100; // Div 32
  26.     OCR2A = 156;  // 138 = 905Hz interrupts
  27.     TCNT2 = 0;
  28.     TIMSK2 = 0b010; // OCIEA interrupt
  29.  
  30. sei();
  31.    
  32.     i = 0;
  33.  
  34.     UDR0 = 0x00; // Send a NULL to start
  35.  
  36.     for(;;) {
  37.        
  38.         ADMUX = 0b01000110; // A6
  39.         ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  40.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  41.         UDR0 = ah; // High byte first
  42.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  43.         UDR0 = al; // High byte first
  44.         while(ADCSRA & 0b01000000); // Wait for conversion to finish (should be done)
  45.         al = ADCL;
  46.         ah = ADCH;
  47.         checksum -= al;
  48.         checksum -= ah;
  49.        
  50.         ADMUX = 0b01000101; // A5
  51.         ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  52.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  53.         UDR0 = ah; // High byte first
  54.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  55.         UDR0 = al; // High byte first
  56.         while(ADCSRA & 0b01000000); // Wait for conversion to finish (should be done)
  57.         al = ADCL;
  58.         ah = ADCH;
  59.                 checksum -= al;
  60.         checksum -= ah;
  61.  
  62.  
  63.         ADMUX = 0b01000000; // A0
  64.         ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  65.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  66.         UDR0 = ah; // High byte first
  67.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  68.         UDR0 = al; // High byte first
  69.         while(ADCSRA & 0b01000000); // Wait for conversion to finish (should be done)
  70.         al = ADCL;
  71.         ah = ADCH;
  72.         checksum -= al;
  73.         checksum -= ah;
  74.  
  75.        
  76.         ADMUX = 0b01000001; // A1
  77.         ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  78.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  79.         UDR0 = ah; // High byte first
  80.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  81.         UDR0 = al; // High byte first
  82.         while(ADCSRA & 0b01000000); // Wait for conversion to finish (should be done)
  83.         al = ADCL;
  84.         ah = ADCH;
  85.         checksum -= al;
  86.         checksum -= ah;
  87.  
  88.         ADMUX = 0b01000010; // A2
  89.         ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  90.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  91.         UDR0 = ah; // High byte first
  92.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  93.         UDR0 = al; // High byte first
  94.         while(ADCSRA & 0b01000000); // Wait for conversion to finish (should be done)
  95.         al = ADCL;
  96.         ah = ADCH;
  97.         checksum -= al;
  98.         checksum -= ah;
  99.  
  100.        
  101.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  102.         UDR0 = ah; // High byte first
  103.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  104.         UDR0 = al; // High byte first
  105.  
  106.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  107.         UDR0 = checksum; // High byte first
  108.         checksum = 255;
  109.        
  110.         while(timer == 0); // Hold here to enforce 900Hz reading rate
  111.         timer = 0;
  112.  
  113.         ADMUX = 0b01000111; // A7      
  114.         ADCSRA = 0b11000110; // Enable ADC, single conversion, f/64 = 125kHz
  115.         while(!(UCSR0A & 0b00100000)); // Wait for buffer to be empty
  116.         UDR0 = 0x00; // NULL start
  117.  
  118.         while(ADCSRA & 0b01000000); // Wait for conversion to finish (should be done)
  119.         al = ADCL;
  120.             ah = ADCH;
  121.         checksum -= al;
  122.         checksum -= ah;
  123.  
  124.        
  125.        
  126.     }
  127.     return 1;
  128. }
  129.  
  130. ISR(TIMER2_COMPA_vect)
  131. {
  132.     timer=1;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement