Guest User

Untitled

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