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;
}
}
}
Lesezeichen