Gast
#1878644
Hallo ich habe die 8bit Ausgänge von externer adwandler an PORTC von Atmega16 angeschlossen.adwandler funktioniert gut das problem liegt daran wenn ich die 8bit werte aus dem PORTC lesen will und damit ein LED anschalte bleibt der LED an auch wenn ich den Wert überschreite. hiermit meine Source code: Danke im Voraus für die hilfe #define NR_SAMPLES 3 // Anzahl der Messungen, die gemittelt werden #define LED1 PD0 #define OE PD6 #define START PD7 #define C PA6 #define B PA5 #define A PA4 #define data PORTC unsigned char ADC0809(unsigned char channel); void init_ports(); int main() { unsigned char d; init_ports(); TIMER1_interrupt_init(); sei(); while( 1 ) { d=ADC0809(0); if ( d < 125 ) PORTD |= (1<<LED1); else PORTD &= ~(1<<LED1); } } void init_ports() { DDRD=0xFF; //PORTD als Ausgang PORTD =0x00; DDRC=0x00; //PORTC als Eingang PORTC =0xFF; } unsigned char ADC0809(unsigned char channel) { unsigned char adwert; unsigned char j; if ( channel == 0 ) { PORTA &= ~ ( 1 << A) | ( 1 << B) | ( 1 << C) ; } if ( channel == 1 ) { PORTA &= ~ ( 1 << B) | ( 1 << C) ; PORTA |= ( 1 << A); } if ( channel == 2 ) { PORTA &= ~ ( 1 << A) | ( 1 << C) ; PORTA |= ( 1 << B) ; } if ( channel == 3 ) { PORTA &= ~ ( 1 << C) ; PORTA |= ( 1 << A) | ( 1 << B) ; } PORTD |= ( 1 << START ); PORTD &= ~( 1 << START ); while( !(PINA & (1<<PINA3)) ) ; //check for EOC to go high for( j = 0; j < NR_SAMPLES; j++ ) { PORTD |= ( 1 << OE );//enable output data adwert += data; //read data PORTD &= ~ ( 1 << OE ); //disable adc } PORTD &= ~ ( 1 << OE ); adwert /= NR_SAMPLES; return adwert; //return data }