Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include "lcd-routines.h"
- #include <util/delay.h>
- #include <stdint.h>
- void ADC_Init(void) {
- uint16_t result;
- ADMUX |= (1<<REFS1);
- ADMUX &= ~(1<<REFS0);
- ADCSRA = (1<<ADPS1) | (1<<ADPS0);
- ADCSRA |= (1<<ADEN);
- ADCSRA |= (1<<ADSC);
- while (ADCSRA & (1<<ADSC) ) {
- }
- result = ADCW;
- }
- uint16_t ADC_Read(uint8_t channel)
- {
- ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
- ADCSRA |= (1<<ADSC);
- while (ADCSRA & (1<<ADSC) ) {
- }
- return ADCW;
- }
- uint16_t ADC_Read_Avg(uint8_t channel, uint8_t nsamples)
- {
- uint32_t sum = 0;
- for (uint8_t i = 0; i < nsamples; ++i) {
- sum += ADC_Read(channel);
- }
- return (uint16_t)(sum / nsamples);
- }
- int main(void)
- {
- uint16_t adcval,wert;
- char val[100] = "";
- DDRD=(1<<DDD6)|(1<<DDD7);
- PORTD&=~(1<<PD6);
- lcd_init();
- ADC_Init();
- lcd_setcursor(0, 1);
- lcd_string("Spannung:");
- lcd_setcursor(0, 2);
- lcd_string(" mV");
- while(1)
- {
- adcval = ADC_Read_Avg(2, 10); // Kanal 2, Mittelwert aus 4 Messungen
- adcval *= 5000;
- wert = 5000/1024;
- adcval *= wert;
- sprintf(val,"%d",adcval);
- lcd_setcursor(0, 2);
- lcd_string(val);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement