hallo,
ich lauf wider einmal im kreis. ich versuche die werte des adc auf der RN-Control 1.4 auf die UART auszugeben . die UART funktioniert aber die wert vom adc sind irgendwie nicht richtig glaub ich zumindest?
den Port c ist nur zur kontrolle ob der atmel läuft.
Jetzt hat jemand eine ahnung wieso ich solche ergebnise bekomme wie: adcval 5c spannung 1f ? aber am PA6 1,7V sind?
liegt es an der Konvertierung?
sind die werte des ADC falsch?
wenn ja wie sollte man den ADC auswerten?
mit result = ADCH;
oder result = ADCL + (ADCH << 8 );
hier mein quellcode:
bestendank für eure müheCode:#include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/signal.h> #include <string.h> #include "uart.h" #ifndef F_CPU #define F_CPU 16000000UL // 16MHz Taktfrequenz #endif /* 9600 baud */ #define UART_BAUD_RATE 9600 #define CR \r\n #define DELAY_LOOPS 50 // So viele Schleifendurchgaenge lang muss erledigt werden struct{ uint8_t bPin:1 ; // Aktuelles Signal am Pin (Taster) uint8_t bStatus:1; // Status des Tasters ob dieser beim voriegen durchlauf gedrückt war! } bportd; uint8_t nCounter; // Zähler wie oft der Taster gedrückt war uint8_t nKeyPress; // Schleifenzähler wie viele Schleifen der Taster schon gedrückt war! //Prototypen void init(void); uint16_t RADCC(uint8_t mux); int main (void){ // UART Initalisierung uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); //Interrupt enable sei(); // Initialisierung der Register DDRA = 0x00; PORTA = 0xff; DDRC = 0xff; DDRD = 0x00; PORTD = 0x01; // Initialisierung der Varialblen char buffer[15]; bportd.bPin =1; bportd.bStatus =0; nCounter =0; uint16_t adcval ; uint16_t spann; uart_puts("\n\r Test Prog V1.0 RS232 Start\n\r"); for(;;){ if(bit_is_clear (PIND,PIND0)){ // wenn der knopf gedrückt ist logisch 0 if(bportd.bPin){ // wenn der knopf nicht gedrückt war dann wird alles zurückgesetzt! nCounter =0; bportd.bPin =0; bportd.bStatus =0; } else if(!bportd.bStatus){ // wenn der knopf immer noch gedrückt if(++nCounter > DELAY_LOOPS){ nKeyPress++; //zähler erhöhen PORTC = nKeyPress; // ausgabe am Port c adcval = RADCC(6); // spann = (4,88*adcval)/255; itoa( adcval, buffer, 16); uart_puts("\n\r adcval "); uart_puts(buffer); itoa( spann, buffer, 16); uart_puts("\n\r spannung "); uart_puts(buffer); bportd.bStatus=1; // status merken } } } else { bportd.bPin = 1; } }} uint16_t RADCC(uint8_t mux){ uint8_t i; uint16_t result =0; // Initialisierung wichtig ADCSRA = (1<<ADEN) | (1<<ADPS1)| (1<<ADPS2)| (1<<ADPS0); //Prescaler 128 & ADC aktivieren ADMUX = mux; //Kanalwählen ADMUX |= (1<<REFS1) |(1<<ADLAR); //VCC = Referenz ADCSRA |= (1<<ADSC); //adc wandlung while(!ADCSRA & (1<<ADIF));//Warten for(i=0;i<4;i++) { ADCSRA |= (1<<ADSC); // adc wandlung while ( ADCSRA & (1<<ADSC) ); // Warten result += ADCH; // Wandlungsergebnisse addiern //result += ADCW; //einspricht ADCL + (ADCH <<8); } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren result /= 4; // arithm. Mittelwert return result; }
sg servusssss
Lesezeichen