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.
Das Programm läuft übrigens durch (LED6) blinkt. Und die LED 0 ist komischerweise auch an.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--; } }
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







Zitieren
Lesezeichen