Für eine Spannungsauswertung, habe ich mich mal mit den ADC Funktionen eines ATMega8 befasst und habe anhand der ATmega8 Beschreibung mir ein GCC Prog "zusammengebaut" mit opt. Auswertung auf dem STK500.
Was ich aber nicht recht begriffen habe, ist der ADC-Wert in Bezug auf die am ADC0 Eingang anliegende Spannung zu konkretisieren. ich habe zwar zwei Zustände der beiden LED.
Vieleicht habe ich mich auch ganz hinten angestellt und nur einen "Schmitt-Trigger" gebastelt, mir ging es aber darum einen Wert zu erhalten, der mir Aufschluss auf den gemessenen Wert gibt.
Hier ist mal der Code:Vielleicht kann mir ja jemand helfen, der Source ist wie gesagt aus dem ATmega8-PDF und Recherchen im Web und meinen Büchern entstanden.Code:/* ========================================================================== */ /* */ /* adc_atm8_1.c */ /* (c) 2013 Gerhard Hinze */ /* */ /* Description */ /* ADC Test mit ATmega8 auf STK500 */ /* ========================================================================== */ #ifndef F_CPU #define F_CPU 3686400UL #endif #include <avr/io.h> #include <util/delay.h> //#include <avr/interrupt.h> void adc_init(); int main (void) { adc_init(); while(1) { ADCSRA |= (1<<ADSC); // starte conversion while(ADCSRA & (1<<ADSC)); //Warte bis fertig if (ADC <= 128) // Welcher Wert entsprechend dem Eingangswert , Messspannungsauswertung { PORTD |= (1<<PD4); // ADC-Wert nicht überschritten LED 4 PORTD &= ~(1<<PD5); } else { PORTD |= (1<<PD5); // ADC-Wert überschritten LED 5 PORTD &= ~(1<<PD4); } } } // Init ADC void adc_init() { DDRD = 0x30; //DDRD Pin 4,5 Ausgang ADCSRA |= (1 << ADEN); // Enable ADC ADMUX |= (1 << REFS0); // Set ADC reference to AVCC ADCSRA |= (1 << ADPS2) | ( 1 << ADPS0); // Prescaler 32 = ~115kHz ADC sample rate ADMUX |= (1 << ADLAR); // Left shift ADC result }
Ich danke mal schon für jede Hilfe.
Gruss Gerhard
PS. der Messwert soll später mal auf einem LCD oder LED Balken angezeigt werden
Lesezeichen