PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Simulation funktioniert, der Rest nicht!



tschensen
16.03.2006, 17:23
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.

#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

tschensen
17.03.2006, 09:35
.... ich habs. PORT C macht nicht mehr das was er soll. Hat ne macke. Verdammt!

izaseba
17.03.2006, 09:43
Hast Du auch jtag abgeschaltet, es ist ein bekanntes Problem

tschensen
17.03.2006, 13:30
jepp, habs jetzt gemacht. Jetzt funktioniert der Prot wieder "normal"
Danke