Advertisement
Guest User

Untitled

a guest
Jan 6th, 2013
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.24 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include "lcd-routines.h"
  3. #include <util/delay.h>
  4. #include <stdint.h>
  5.  
  6.  
  7. void ADC_Init(void) {
  8.  
  9.   uint16_t result;
  10.  
  11.   ADMUX |= (1<<REFS1);
  12.   ADMUX &= ~(1<<REFS0);
  13.  
  14.   ADCSRA = (1<<ADPS1) | (1<<ADPS0);    
  15.   ADCSRA |= (1<<ADEN);                  
  16.  
  17.   ADCSRA |= (1<<ADSC);                
  18.   while (ADCSRA & (1<<ADSC) ) {        
  19.   }
  20.   result = ADCW;
  21. }
  22.  
  23. uint16_t ADC_Read(uint8_t channel)
  24. {
  25.     ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  26.     ADCSRA |= (1<<ADSC);
  27.     while (ADCSRA & (1<<ADSC) ) {
  28.     }
  29.     return ADCW;
  30. }
  31.  
  32. uint16_t ADC_Read_Avg(uint8_t channel, uint8_t nsamples)
  33. {
  34.   uint32_t sum = 0;
  35.  
  36.   for (uint8_t i = 0; i < nsamples; ++i) {
  37.     sum += ADC_Read(channel);
  38.   }
  39.  
  40.   return (uint16_t)(sum / nsamples);
  41. }
  42.  
  43.  
  44. int main(void)
  45. {
  46.     uint16_t adcval,wert;
  47.     char val[100] = "";
  48.  
  49.     DDRD=(1<<DDD6)|(1<<DDD7);
  50.     PORTD&=~(1<<PD6);
  51.     lcd_init();
  52.     ADC_Init();
  53.    
  54.     lcd_setcursor(0, 1);
  55.     lcd_string("Spannung:");
  56.     lcd_setcursor(0, 2);
  57.     lcd_string("     mV");
  58.    
  59.     while(1)
  60.     {      
  61.         adcval = ADC_Read_Avg(2, 10);  // Kanal 2, Mittelwert aus 4 Messungen
  62.         adcval *= 5000;
  63.         wert = 5000/1024;
  64.         adcval *= wert;
  65.         sprintf(val,"%d",adcval);
  66.         lcd_setcursor(0, 2);
  67.         lcd_string(val);
  68.     }
  69.    
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement