- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Anfängerfrage Globale Variablen [Gelöst]

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2008
    Ort
    Kelheim
    Alter
    36
    Beiträge
    6

    Anfängerfrage Globale Variablen [Gelöst]

    Anzeige

    E-Bike
    Hallo... habe ein kleines Problem mit einer globalen Variablen
    Das Programm ist nur ein Versuch um die Interrupt Funktion zu testen.
    LED 1 soll leuchten wenn der Interrupt eintritt, zugleich soll die Variable a auf 1 gesetzt werden. Nun wird im Hauptprogramm die Variable a abgefragt, wenn sie 1 ist, soll LED 2 leuchten. Mein Problem: LED 2 leuchtet nicht. Woran könnte das liegen?

    Ich verwende MyAVR und einen Atmega 8.

    Wäre schön wenn mir jemand helfen könnte.

    Vielen Dank schonmal

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <inttypes.h>
    
    char a = 0;
    void init(void)				//Initialisierung
      {
      
        DDRD  = 0b11100000; //Pin 765 = Output 0-4 = Input
    	DDRC  = 0b00111000; //status LED ausgänge (Port C: 3,4,5)
    	
    	GICR|=(1<<INT0);  	//enables ext Interrupt (Pin 4, INT0)
        MCUCR = 0b00000011;	//Steigende Flanke an INT0 Löst aus
        sei (); 			//Global Interrupt enable
      }
    ISR(INT0_vect)
      {
        a = 1;					//setzte a auf 1
    	PORTC |= (1 << PC5);	//schalte 1. LED ein
      }
    void main(void)
      {
        init();
    	while (1);
    	{
    	  if (a == 1)			//wenn a = 1
    	  {
    	    PORTC |= (1 << PC4); //schalte 2. LED ein
    	  }
    	}
      }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Auf die Schnelle:
    deklariere char a mal als volatile oder schalte die Optimierung aus.
    Habe die Initialisierung jetzt nicht geprüft und zur Hardware kann ich natürlich auch nicht sagen...
    Gruß

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Genau wie Gock gesagt hat, sollte es an VOLATILE liegen. Im Hauptprogramm liest er einmalig die Variable aus dem RAM und dann prüft er nur noch das Register auf Deine '1'.
    Wird aber nun der RAM auf eine '1' gesetzt, übernimmt das Hauptprogramm diese nicht, da es nicht weiß, dass sich was geändert hat, so dass es die Variable nicht erneut aus dem RAM liest.

    Also einfach der Variablendeklaration ein VOLATILE vorsetzen, dann weiß der Compiler bescheid.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2008
    Ort
    Kelheim
    Alter
    36
    Beiträge
    6
    Erst mal danke euch beiden

    @Gock: was meinst du mit Optimierung ausschalten? wie macht man das?

    volatile Hat nichts bewirkt, gleiches Problem wie vorher

    EDIT: Hat sich erledigt. habe nach der while Schleife versehentlich ein Semikolon gesetzt. Jetzt funktionierts

Berechtigungen

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

Labornetzteil AliExpress