Hi @ all
Ich hab mich mal mit dem A/D Wandler beschäftigt. Leider fuktioniert das ganze nicht so wie ich mir das vorstelle.
Das ist einmal der Code:
Code:
#include <avr/io.h>
#include <stdlib.h>
#include "wintek2704.h"
void adc_init(void);
int get_adc (void);
void lcd_put_d(uint8_t dec);
int main (void)
{
DDRC &=~ _BV(PC0);
PINC &=~ _BV(PC0);
uint8_t ergebnis_display;
adc_init();
lcd_init(LCD_DISP_ON);
lcd_puts(" ADC -- Test\n");
while(1)
{
ergebnis_display = get_adc();
lcd_put_d(ergebnis_display);
}
return(0);
}
void lcd_put_d(uint8_t dec)
{
char buffer[6];
itoa(dec, buffer, 10);
lcd_puts(buffer);
}
void adc_init (void)
{
ADCSR = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2); //Prescaler = 64 TF = 125 kHz
}
int get_adc (void)
{
uint8_t i;
uint16_t ergebnis_adc;
ADMUX = 0; // Vreff = Vcc
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ergebnis_adc = 0;
for(i = 0; i < 5; i++)
{
ADCSRA |= (1 << ADSC);
while(!(ADCSRA & (1 << ADIF)))
ergebnis_adc += ADC;
}
ADCSRA &=~ (1 << ADEN);
ergebnis_adc = ergebnis_adc / 5;
return ergebnis_adc;
}
Am LCD bekomm ich nur Datdenmüll
Könnte mir da jaemand helfen???
Danke im Voraus
Gruß Robert
Lesezeichen