- 12V Akku mit 280 Ah bauen         
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

    Praxistest und DIY Projekte
    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
    52
    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
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad