» Advertenties

Zo 5 Februari 2012, 12:57

Voorgaande
- De AVR
- RS232
- LCD

Inhoud
#1: ADC

Hardware
File #132
Het gebruik van de AVR's interne Analog to Digital Converter, deze hebben een resolutie van 10 bits. Als de referentie spanning 5 volt is, staat elk stapje voor 4,88mV. Voor berekeningen is het soms handiger om een externe referentiespanning te gebruiken, vb 4,096V. Dan is elk stapje 4mV, de MAX6241 is een voorbeeld van een IC dat als 4,096V referentiespanning kan worden gebruikt.

C code -
  1. #define F_CPU 8000000
  2.  
  3. #define LCD_LINES 4
  4. #define LCD_DISP_LENGTH 20
  5.  
  6. #define LCD_PORT PORTB   ///< port for the LCD lines
  7. #define LCD_DATA0_PORT LCD_PORT   ///< port for 4bit data bit 0
  8. #define LCD_DATA1_PORT LCD_PORT   ///< port for 4bit data bit 1
  9. #define LCD_DATA2_PORT LCD_PORT   ///< port for 4bit data bit 2
  10. #define LCD_DATA3_PORT LCD_PORT   ///< port for 4bit data bit 3
  11. #define LCD_DATA0_PIN 4   ///< pin for 4bit data bit 0
  12. #define LCD_DATA1_PIN 5   ///< pin for 4bit data bit 1
  13. #define LCD_DATA2_PIN 6   ///< pin for 4bit data bit 2
  14. #define LCD_DATA3_PIN 7   ///< pin for 4bit data bit 3
  15. #define LCD_RS_PORT PORTC     ///< port for RS line
  16. #define LCD_RS_PIN 7   ///< pin for RS line
  17. #define LCD_RW_PORT PORTC     ///< port for RW line
  18. #define LCD_RW_PIN 6   ///< pin for RW line
  19. #define LCD_E_PORT PORTC     ///< port for Enable line
  20. #define LCD_E_PIN 5   ///< pin for Enable line
  21.  
  22. #include "s/g.h"
  23. #include "s/rprintf.c"
  24. #include "s/lcd.c"
  25. #include "s/adc.c"
  26. #include "util/delay.h"
  27.  
  28.  
  29. //! main functie, start programma, moet altijd aanwezich zijn
  30. int main(void){
  31.   outb(DDRA, 0x0);
  32.  
  33.   uartInit(UART_FULL, 19200);
  34.   rprintfInit(uartSendByte);
  35.   rprintf("UART PRESENTn");
  36.  
  37.   lcdInit(LCD_DISP_ON);
  38.  
  39.   // adcInit(ADC_clokc_prescaleer, ADC_referentie);
  40.   // Prescalers: 128, 64, 32, 16, 8, 4, 2
  41.     // hoe groter de prescaler (128) hoe naukeuriger
  42.     // en stabieler de waarden zullen zijn
  43.   // Referentie: AVCC, AREF, interne 2.56V
  44.   adcInit(ADC_P128, ADC_AVCC);
  45.  
  46.   u16 adcWaarde;
  47.   u08 buffer[4];
  48.  
  49.   rprintf("ADC testn");
  50.   while(1){
  51.     // waarde van ADC channel 7 (PA7)
  52.     // op de Mega16 zijn 8 channels beschikbaar PA0..7
  53.     adcWaarde = adcGet(7);    
  54.  
  55.     // Via uart zenden
  56.     rprintf("ADC: %dn", adcWaarde);
  57.  
  58.     // op LCD tonen
  59.     lcdClr();
  60.     lcdPuts("ADC test");
  61.     lcdGotoXY(0, 1);
  62.     // decimaal
  63.     lcdPuts( itoa(adcWaarde, buffer, 10) );
  64.     lcdGotoXY(0, 2);
  65.     // binair
  66.     lcdPuts( itoa(adcWaarde, buffer, 2) );
  67.  
  68.     _delay_ms(500);  
  69.   }
  70.  
  71.   return 0;
  72. }


Mogelijke prescalers en referentie spanningen:
C code -
  1. ADC_P2     ///< -> CPU clk/2
  2. ADC_P4     ///< -> CPU clk/4
  3. ADC_P8     ///< -> CPU clk/8
  4. ADC_P16     ///< -> CPU clk/16
  5. ADC_P32     ///< -> CPU clk/32
  6. ADC_P64     ///< -> CPU clk/64
  7. ADC_P128   ///< -> CPU clk/128
  8.  
  9. ADC_AREF   ///< -> AREF pin, internal VREF turned off
  10. ADC_AVCC   ///< -> AVCC pin, internal VREF turned off
  11. ADC_256V   ///< -> Internal 2.56V VREF
Nog geen reacties.
Naam
a-z A-Z 0-9 _

 
E-mail
Wordt niet getoont.
  (niet verplicht)
 
Mail sturen als
(optie)
Smoerijf reageerd
Eender wie reageaard
Nooit
 
Mail sturen
(optie)
Enkel mailen bij eerste reactie
Bij elke reactie mailen
 
Reactie
Laatste wijziging: Wo 15 April 2009, 23:14