-         

Ergebnis 1 bis 4 von 4

Thema: Simulation funktioniert, der Rest nicht!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.03.2006
    Beiträge
    22

    Simulation funktioniert, der Rest nicht!

    Anzeige

    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.03.2006
    Beiträge
    22
    .... ich habs. PORT C macht nicht mehr das was er soll. Hat ne macke. Verdammt!

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hast Du auch jtag abgeschaltet, es ist ein bekanntes Problem
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    08.03.2006
    Beiträge
    22
    jepp, habs jetzt gemacht. Jetzt funktioniert der Prot wieder "normal"
    Danke

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •