hallo,
das mit ADLAR war ein guter tipp!! danke
das ganze funktioniert jetzt auch soweit, allerdings wieder nur jeweils einmal. anscheinend funktioniert die schleife nicht....
Code:#define F_CPU 16000000UL #include <avr/io.h> #include <stdint.h> int main(){ //variablen int y; int hunderter; int zehner; int einer; // port B und D werden als ausgang definiert DDRB = 0x1f; DDRD = 0xff; ADMUX |= (1<<REFS0) | (1<<ADLAR); //AVCC als Referenzspannung wählen //Prescaler auf 128 einstellen und ADC aktivieren ADCSRA = (1<<ADPS0) | (1<<ADPS2) | (1<<ADEN); while (1){ ADCSRA |= (1<<ADSC); while(ADCSRA & (1<<ADSC)){ ;//Konvertierung abwarten } y=ADCH; // eingangswert wird der variable y übergeben // ----- ab hier wird die 8-bit zahl auseinander genommen // die hunderter stelle hunderter=y/100; hunderter=hunderter%10; switch (hunderter) { case 1: PORTD |= (1<<PD3) | (0<<PD4) | (0<<PD5) | (0<<PD6); break; case 2: PORTD |= (0<<PD3) | (1<<PD4) | (0<<PD5) | (0<<PD6); break; // abschaltung der hunderter stelle bei kleineren zahlen durch schalten auf high default : PORTD |= (1<<PD3) | (1<<PD4) | (1<<PD5) | (1<<PD6); break; } zehner=y/10; zehner=zehner%10; // abschaltung der zehner stelle wenn hunnderter und zehner gleich 0 ist if (hunderter==0 && zehner==0) { PORTB |= (1<<PB4); PORTD |= (1<<PD0) | (1<<PD1) | (1<<PD2); } else{ switch (zehner) { case 0: PORTB |= (0<<PB4); PORTD |= (0<<PD0) | (0<<PD1) | (0<<PD2); break; case 1: PORTB |= (1<<PB4); PORTD |= (0<<PD0) | (0<<PD1) | (0<<PD2); break; case 2: PORTB |= (0<<PB4); PORTD |= (1<<PD0) | (0<<PD1) | (0<<PD2); break; case 3: PORTB |= (1<<PB4); PORTD |= (1<<PD0) | (0<<PD1) | (0<<PD2); break; case 4: PORTB |= (0<<PB4); PORTD |= (1<<PD0) | (0<<PD1) | (0<<PD2); break; case 5: PORTB |= (1<<PB4); PORTD |= (0<<PD0) | (1<<PD1) | (0<<PD2); break; case 6: PORTB |= (0<<PB4); PORTD |= (1<<PD0) | (1<<PD1) | (0<<PD2); break; case 7: PORTB |= (1<<PB4); PORTD |= (1<<PD0) | (1<<PD1) | (0<<PD2); break; case 8: PORTB |= (0<<PB4); PORTD |= (0<<PD0) | (0<<PD1) | (1<<PD2); break; case 9: PORTB |= (1<<PB4); PORTD |= (0<<PD0) | (0<<PD1) | (1<<PD2); break; default: PORTB |= (1<<PB4); PORTD |= (1<<PD0) | (1<<PD1) | (1<<PD2); break; } } // anzeige der einer stelle einer=y%10; switch (einer) { case 0: PORTB |= (0<<PA0) | (0<<PA1) | (0<<PA2) | (0<<PA3); break; case 1: PORTB |= (1<<PA0) | (0<<PA1) | (0<<PA2) | (0<<PA3); break; case 2: PORTB |= (0<<PA0) | (1<<PA1) | (0<<PA2) | (0<<PA3); break; case 3: PORTB |= (1<<PA0) | (1<<PA1) | (0<<PA2) | (0<<PA3); break; case 4: PORTB |= (0<<PA0) | (0<<PA1) | (1<<PA2) | (0<<PA3); break; case 5: PORTB |= (1<<PA0) | (0<<PA1) | (1<<PA2) | (0<<PA3); break; case 6: PORTB |= (0<<PA0) | (1<<PA1) | (1<<PA2) | (0<<PA3); break; case 7: PORTB |= (1<<PA0) | (1<<PA1) | (1<<PA2) | (0<<PA3); break; case 8: PORTB |= (0<<PA0) | (0<<PA1) | (0<<PA2) | (1<<PA3); break; case 9: PORTB |= (1<<PA0) | (0<<PA1) | (0<<PA2) | (1<<PA3); break; default: PORTB |= (1<<PA0) | (1<<PA1) | (1<<PA2) | (1<<PA3); break; } } }







Zitieren
Lesezeichen