Ja, ich meinte sicherlich zwischen Vout des Sensors und der Ground.
Zwischen Vout des Sensors und Vin des Sensors kommen auch die richtigen 4.8V
hier nochmal der code in "sauber":
Code:#include <avr/io.h> #include <stdlib.h> #include <string.h> #include <avr/interrupt.h> #include "uart_komplett.h" //meine UART #include "timer1.h" //meine timer funktion, sorgt dafür dass die UART ausgabe nur alle 2 sekunden erfolgt (overflows halt) //Dinge definieren #define LED_DDR DDRC //definieren der LED DDR #define LED_PORT PORTC //defintion des genauen ports für die DDR #define LED_PORTPIN1 PC1 //definition der roten LED #define LED_PORTPIN0 PC0 //definition des gruenen LED //Variablen definieren uint16_t adc_wert = 0; //Wert des ADC volatile uint8_t overflowzahl = 0; //zaehlt die overflows, wichtig für den timer und die UART ausgabe (zwei sekunden takt halt) //Funktionen definieren void adc_init() { uint16_t result; //ergebnis variable festlegen, uint16 wegen 10 bit ergebnis ADMUX = (1<<REFS1)|(1<<REFS0); //die interne Referenzspannung nehmen ADCSRA = (1<<ADPS1)|(1<<ADPS0); // Frequenzvorteiler bei 8 ADCSRA |= (1<<ADEN); //ADEN "enabled" ADC ADCSRA |=(1<<ADSC); //analog zu digital wandlung aktivieren while (ADCSRA & (1<<ADSC)) // eine "sinnlos" Wandlung durchfuehren um den eventuellen Mist { // aus dem Wandler rauszuschmeissen } result = ADCW; // das ergebnis der wandlung steht in ADCL und ADCH (sind die Result Register) //dabei wird immer von ADCL nach ADCH gelesen/ //muss einmal gelesen werden, sonst wird das ergebnis der naechsten wandlung nicht gelesen } //Einzelne ADC Messung und "Lesung" des Wertes uint16_t adc_read (uint8_t channel) { ADMUX = (ADMUX & 0b11000000) | (channel & 0b00111111); //kanal waehlen ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while (ADCSRA & (1<<ADSC) ) { } // s.o. return ADCW; } //geb mir das ergebnis, ADCW is das selbe wie result = ADCL, zusaetzlich zu result += (ADCH<<8) int main(void) { LED_DDR |= (1<<LED_PORTPIN1)|(1<<LED_PORTPIN0); //PC1 und PC0 Pins als ausgang festlegen und einschalten LED_PORT = 0x01; //rote LED an DDRA = 0x00; //explizit den PortA als Eingang deklarieren uint16_t adc_wert; char buffer[20]; usart_init(); timer1_init(); adc_init(0); sei(); //interrupts aktivieren adc_wert = adc_read(0); //zuweisung der Wert - Variable der "Auslese-Funktion" while(1) { adc_wert = adc_read(0); //zuweisung der Wert - Variable der "Auslese-Funktion" if (overflowzahl==1) //UART Uasgabe nur wenn ein Overflow stattfinden { sprintf ( buffer, "ADC: %d\r\n", (int)adc_wert ); //string rausgeben, hier leider nur "ADC: 0 "endzeichen"" uart_puts( buffer ); //puts fuer den string overflowzahl=0; //die zählung der overflows wieder auf 0 setzen, in der ISR fuer den Timer steht drin: "overflowzahl++;", damit die // if-Bedienung dieser main-loop erfuellt wird } } }







Zitieren

Lesezeichen