- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: Problem mit Programmcode Atmega16

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Problem mit Programmcode Atmega16

    Hallo,
    ich habe ein Spieler das ich mit dem unterten Programmcode steuere. Einmal ändert sich über eine PWM die Geschwindigkeit meines Spiels,
    mittels eines Lichtschrankenpaares soll der aktuelle Spielstand abgefragt werden und daraufhin LED's angesteuert werden.
    Es funktioniert alles soweit, ausser das in meiner Interrupt Routine der Controller zwar den PIN auf Low setzt den er soll, den anderen
    allerdings nur ganz kurz auf high und danach sofort wieder auf LOW.
    Bin ein wenig ratlos woran das liegt, vlt kann mir hierbei jemand weiterhelfen.

    Code:
    #include <avr/io.h> 
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    volatile uint8_t a=0;
    volatile uint8_t b=0;
    volatile uint8_t c=0;
    volatile uint8_t d=0;
    volatile uint8_t Eingang;
    
    enum {Spieler_1,Spieler_2,Spieler_3,Spieler_4};
    
    void set_output(void) 
    { 
    	
    	DDRB = 0x08; 
    	TCCR0 |= (1<<WGM00)|(1<<WGM01) |(1<<COM01)|(1<<CS00);
    	 
    	 }
    	 
    ISR(INT1_vect)
    {
    	if (~PINB & (1<<PB4)) 
    	{
    		Eingang=Spieler_1;
    		a++;
    	}
    	if (~PINB & (1<<PB5))
    	{
    		 Eingang=Spieler_2;
    		 b++;
    	}
    	if (~PINB & (1<<PB6))
    	{
    		 Eingang=Spieler_3;
    		 c++;
    	}
    	if (~PINB & (1<<PB7))
    	{
    		 Eingang=Spieler_4;
    		 d++;
    	}
    	switch (Eingang)
    	{
    		case Spieler_1:
    		switch (a)
    		{
    			case 1:
    			PORTA = (PORTA | (1 << PA4)) & ~(1 << PA0);
    			break;
    			case 2:
    			PORTA &= ~(1<<PA4);
    			PORTC |= (1<<PC7);
    			break;
    			case 3:
    			PORTC &= (1<<PC7);
    			break;
    			default:
    			break;
    		}
    		break;
    		case Spieler_2:
    		switch (b)
    		{
    			case 1:
    			PORTA = (PORTA | (1 << PA5)) & ~(1 << PA1);
    			break;
    			case 2:
    			PORTA &= ~(1<<PA5);
    			PORTC |= (1<<PC6);
    			break;
    			case 3:
    			PORTC &= (1<<PC6);
    			break;
    			default:
    			break;
    		}
    		break;
    		case Spieler_3:
    		switch (c)
    		{
    			case 1:
    			PORTA = (PORTA | (1 << PA6)) & ~(1 << PA2);
    			break;
    			case 2:
    			PORTA &= ~(1<<PA6);
    			PORTC |= (1<<PC5);
    			break;
    			case 3:
    			PORTC &= (1<<PC5);
    			break;
    			default:
    			break;
    		}
    		break;
    		case Spieler_4:
    		switch (d)
    		{
    			case 1:
    			PORTA = (PORTA | (1 << PA7)) & ~(1 << PA3);
    			break;
    			case 2:
    			PORTA &= ~(1<<PA7);
    			PORTC |= (1<<PC4);
    			break;
    			case 3:
    			PORTC &= (1<<PC4);
    			break;
    			default:
    			break;
    		}
    		break;
    	}
    	}
    
    int main(void)
     { 
    	 MCUCR |= (1<<ISC10)|(1<<ISC11);
    	 GICR |= (1<<INT1);
    	 DDRB = 0x00;
    	 DDRA = 0xFF;
    	 DDRC = 0xF0;
    	 PORTA = 0x0F;
    	 PORTC = 0x00;
    	 int max_value=5; 
    	 int value = 0;
    	 int max_value_2=5;
    	 int value_2 = 0;
    	 sei ();
    
    	while(1) 
    	{ 
    		value = (rand()%max_value); 
    		
    		switch (value) 
    		{ 
    			
    		case 1: set_output();
    		OCR0 = 64; 
    		break; 
    		
    		case 2: set_output(); 
    		OCR0 = 128;
    		break; 
    		
    		case 3: set_output(); 
    		OCR0 = 192; 
    		break; 
    		
    		case 4: set_output(); 
    		OCR0 = 255; 
    		break;
    		
    		default: 
    		break;
    		 
    		}
    		 
    		 value_2 = (rand()%max_value_2);
    		 
    		 switch (value_2)
    		 {
    			 case 1:
    			 _delay_ms(1000);
    			 break;
    			 
    			 case 2:
    			 _delay_ms(2000);
    			 break;
    			 
    			 case 3:
    			 _delay_ms(3000);
    			 break;
    			 
    			 case 4:
    			 _delay_ms(4000);
    			 break;
    			 
    			 default:
    			 _delay_ms(2500);
    			 break;
    		 }
    	}
     }
    Vielen Dank schon mal
    Taddus
    Geändert von radbruch (23.03.2014 um 23:50 Uhr) Grund: CODE-Tag eingefügt...

Ähnliche Themen

  1. AVR Einsteiger problem mit ATMega16
    Von Lenox im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 31.10.2006, 08:48
  2. ATMEGA16 komisches Problem mit LCD
    Von TMLL im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 10.08.2006, 08:23
  3. Problem mit AREF für ADC(ATmega16)
    Von Johnny6 im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 29.07.2006, 10:44
  4. Endloses Problem mit Schreiben in ATMega16
    Von Mark__B im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 13.04.2006, 18:13
  5. Problem SPI Kommunikation mit zwei ATmega16
    Von doctorbluex im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 13.07.2005, 08:27

Berechtigungen

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

Solar Speicher und Akkus Tests