Hoi,
ich hab da nen kleines Problem. Wollte mit meinem Programm den AD-Wndler testen, aber bis jetzt funktioniert nur die Simulation.
Bis jetzt hab ich einiges auf dem Programm herausgenommen, daß ich mir mittlerweile ziemlich sicher bin, daß es an den IF- Anweisungen hängt.
Code:
#include <avr/io.h>



//void adc_init(void);
void init_io(void);
void delay_ms (unsigned int ms);







int main(void)
{






//********************************************************
	/* A/D - Wandler Verwenden */
	init_io();
	//adc_init();
	unsigned int buffer = 0x1F4;  //initialisieren zu testzwecken mit Wert 500
	char i =1;

	while (1) //		//endlosschleife
	{	
	
		/* Wandlung starten */
		//ADCSRA |= (1<<ADSC);

		/* Warten bis die AD-Wandlung abgeschlossen ist */
		//while ( !(ADCSRA & (1<<4)) );
			
		PORTC &=~ (1<<7);		//LED PORT 7 an	

		/* AD-Wert auslesen */
		//buffer = (ADCH<<8) | ADCL;
		if (buffer < 0xCD )	
		{
			PORTC &= ~(1<<0);
			PORTC |= (1<<1)|(1<<2)|(1<<3)|(1<<4);
		}
		if (buffer < 0x19A && buffer > 0xCD)
		{
			PORTC &= ~(1<<1);
			PORTC |= (1<<0)|(1<<2)|(1<<3)|(1<<4);
		}
		if (buffer < 0x266 && buffer > 0x19A)	
		{
			PORTC &= ~(1<<2);
			PORTC |= (1<<0)|(1<<1)|(1<<3)|(1<<4);
		}
		if (buffer < 0x333 && buffer > 0x266)	
		{
			PORTC &= ~(1<<3);
			PORTC |= (1<<0)|(1<<1)|(1<<2)|(1<<4);
		}
		if (buffer < 0x400 && buffer > 0x333)	
		{
			PORTC &= ~(1<<4);
			PORTC |= (1<<0)|(1<<1)|(1<<2)|(1<<3);
		}

		else 
		{
		PORTC &=~ (1<<5);
		}
		
		
		//ADCSRA |= (1<<4);
			
			
		if (i%2 == 0)						//	LED mit jedem Schleifendurchlauf toggeln
		{
			PORTC |=(1<<6);
		}
		else
		{
			PORTC &=~(1<<6);
		}
			
		delay_ms(50);
		i++;
	}


}
//*********************************************************************
/* Analog/Digital Wandler initialisieren */
/*void adc_init(void)
{
	
	
	// Konfiguration AD-Wandler im ADC-Register
	ADMUX &= ~(1<<7);	// externe Vref
	ADMUX &= ~(1<<6); //""
	ADMUX &= ~(1<<5); //gewandelter Wert im Register rechts ausgerichtet
	ADMUX &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)); // Single endet Input ADC0 

	//Konfiguration AD-Wandler im ADC-Register
	ADCSRA |= (1<<7); // Ad-Wandler aktivieren
	ADCSRA &= ~(1<<5); // einmalig wandeln
	ADCSRA |= (1<<1)|(1<<2); */ // Prescaler auf 64 einstellen
	
	
	/* Spezialfunktionen ausschalten */
//	SFIOR = 0;
//}
//********************************************************************

// Ports initialisieren
void init_io(void)
{	
	
	DDRC |=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7); // Port C Pin 0-4 als Ausgänge für LED
	PORTC |= (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<7);
	DDRA &=~ (1<<0);
	PORTA |= (1<<0);
	

}
//*****************************************************************

void delay_ms (unsigned int ms)
{
	unsigned int zaehler;
	
	while (ms)
	{
		zaehler = 7372800/5000;

		while (zaehler)
		{
			asm volatile ("nop");
			zaehler--;


		}
		ms--;
	}
}
Das Programm läuft übrigens durch (LED6) blinkt. Und die LED 0 ist komischerweise auch an.
Sieht jemand nen Fehler an dem Programm? Beim simulieren mit AVR Studio läufts wie gewünscht.
Falls es hilt: ich verwende den ATMEGA16 und das STK500.

Jens