Subversion Repositories HomeAutomation

Rev

Rev 639 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. /*
  2.  * LDR, Light Dependent Resistor
  3.  *
  4.  * Using ADC for reading sensor value.
  5.  *
  6.  * Author: Erik Larsson
  7.  * Date: 2007-04-26
  8.  *
  9.  */
  10.  
  11. /*-----------------------------------------------
  12.  * Includes
  13.  * ---------------------------------------------*/
  14. #include <avr/io.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17.  
  18. #include "ldr.h"
  19. #include <config.h>
  20. /*----------------------------------------------
  21.  * Functions
  22.  * --------------------------------------------*/
  23.  
  24. uint8_t LDR_SensorInit(void)
  25. {
  26. #if ADCHAN == 0
  27.     /* Enable ADC0 */
  28.     ADMUX &= ~((1<<MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<MUX3));
  29. #elif ADCHAN == 1
  30.     /* Enable ADC1 */
  31.     ADMUX |= (1<<MUX0);
  32.     ADMUX &= ~((1<<MUX1)|(1<<MUX2)|(1<<MUX3));
  33. #elif ADCHAN == 2
  34.     /* Enable ADC2 */
  35.     ADMUX |= (1<<MUX1)|;
  36.     ADMUX &= ~((1<<MUX0)|(1<<MUX2)|(1<<MUX3));
  37. #elif ADCHAN == 3
  38.     /* Enable ADC3 */
  39.     ADMUX |= (1<<MUX0)|(1<<MUX1);
  40.     ADMUX &= ~((1<<MUX2)|(1<<MUX3));
  41. #elif ADCHAN == 4
  42.     /* Enable ADC4 */
  43.     ADMUX |= (1<<MUX2);
  44.     ADMUX &= ~((1<<MUX0)|(1<<MUX1)|(1<<MUX3));
  45. #elif ADCHAN == 5
  46.     /* Enable ADC5 */
  47.     ADMUX |= (1<<MUX0)|(1<<MUX2);
  48.     ADMUX &= ~((1<<MUX1)|(1<<MUX3));
  49. //#error yo helt fel
  50. #elif ADCHAN == 6
  51.     /* Enable ADC6 */
  52.     ADMUX |= (1<<MUX1)|(1<<MUX2);
  53.     ADMUX &= ~((1<<MUX0)|(1<<MUX3));
  54. #elif ADCHAN == 7
  55.     /* Enable ADC7 (only for TQFP package) */
  56.     ADMUX |= (1<<MUX0)|(1<<MUX1)|(1<<MUX2);
  57.     ADMUX &= ~(1<<MUX3);
  58. #else
  59.     #error No adc defined
  60. #endif
  61.  
  62.     /* Enable AVcc as Voltage Reference */
  63.     ADMUX |= (1<<REFS0);
  64.     ADMUX &= ~(1<<REFS1);
  65.  
  66.     /* Right adjust the result */
  67.     ADMUX &= ~(1<<ADLAR);
  68.  
  69.     /* Wake up ADC and enable it */
  70.     PRR &= ~(1<<PRADC);
  71.     ADCSRA |= (1<<ADEN);
  72.  
  73.     /* Make the first conversion (takes 25 ADC clock cycles) and throw away */
  74.     LDR_GetData(0);
  75.    
  76.     return 0;
  77. }
  78.  
  79. /*
  80.  * Start reading sensor value
  81.  */
  82. uint32_t LDR_GetData(uint8_t sensor)
  83. {
  84.     uint32_t lightData;
  85.  
  86.     /* Start measurement (takes 13 ADC clock cycles) */
  87.     ADCSRA |= (1<<ADSC);
  88.  
  89.     while( ADCSRA & (1<<ADSC) ){ /* Wait for conversion to complete */ }
  90.  
  91.     /* Get the result and return */
  92.     lightData = ADCW; //>>2;
  93.  
  94.     return lightData;
  95.    
  96. }
  97.