vielen dank für die tipps!
mittlerweile scheint es u funktionieren, aber die 7-segment an der der wert ausgegeben werden soll, zeigt nur eine null an. (verzweiflung macht sich breit =) )
hier habe ich mal das gesamte programm:
Code:
#define F_CPU 16000000
#include <avr/io.h>
int16_t main ()
{
// port B und D werden als ausgang definiert
DDRA = 0x00;
DDRB = 0x1f;
DDRC = 0x00;
DDRD = 0xff;
//variablen
int y;
int hunderter;
int zehner;
int einer;
int16_t x;
ADMUX |= (1<<REFS0);
ADCSRA |= (1<<ADEN) | (1<<ADATE) | (1<<ADSC) | (1<<ADPS2) | (1<<ADPS0);
x = ADCW; // eingangswert wird der variable x übergeben
y=x/4; // x wird durch 4 geteilt (von 10 auf 8 bit)
// ----- 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;
}
return(0); //ende und neustart
}
wo liegt der da der fehler?
greetz
horsty
Lesezeichen