- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 2 von 2

Thema: Interrupt Probleme mit PORTB

  1. #1

    Interrupt Probleme mit PORTB

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo erstmal an alle vl. könnt ihr mir weiter helfen bin ziemlich neu in Sachen programmieren von PIC´s.

    Also ich programmiere ein Simulationsprogramm wo man verschiedene LOW Flanken zeitlich verschieben kann und brauche eure hilfe.
    Ich nutze einen PIC16F628A und nutze zum verschieben von den Flanken 5 Taster die am PORTB des PIC´s liegen. Ich habe alle PORT´s am PORTB als Eingang.
    Wenn ich eine ganz normale if Abfrage im Hauptprogramm schreibe so das er eine Variable erhöht und dadurch die Zeit zb. von der ersten LOW Flanke hinausschiebt funktioniert das programm selber gut. Nur das Problem dabei ist das mir dann die andere Platine an der ich das Eingangssignal simuliere in Störung geht da es ein ständiges HIGH oder LOW bekommt. Die andere Platine ist auch mit dem selben PIC gesteuert und hat im Programm einige Fehlerabfragen die ich aber nicht ausprgrammieren soll.

    Ich dachte mir dann ich schreibe das ganze dann in einen Interrupt und erhöhe dort die Variable die die Zeit verschiebt. Dies funktioniert eigendlich ganz gut. Nur das Problem dabei ist das es den PIC jetzt egal ist welchen Eingang von RB4-RB7 ich auf GND lege. Obwohl ich eine if Abfrage hineingeschrieben habe wo klar drinn steht das nur hochgezählt werden soll wenn RB6 angesteuert wird. Vielleicht kann mir da wer weiter helfen??

    Hier steht der Interrupt:
    Code:
    void interrupt isr(void)
    {
    
    	GIE=0;
    	if(RBIF)
    	{	
    		if((PORTB & 0b01000000)== 0b01000000)
    		{
    			a=a+1;
    		}
    	}	
    	RBIF = 0;
    	GIE=1;
    
    }
    Ich würde mich freuen wenn mir wer weiterhelfen kann.

    MFG Daniel

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    05.09.2006
    Beiträge
    17
    Hallo komek,

    Du überprüfst in Deiner ISR nicht, ob der Pin low ist, sondern ob er high ist! Daher ist es dem Controller auch 'egal', welchen Pin Du auf low legst, solange RB6 auf high-Pegel liegt wird die Variable erhöht.
    Die richtige Bedingung für einen low-Pegel wäre ein if(PORTB & 0x40) == 0).
    Zumindest wenn PORTB das Port Register des Ports B ist (was ich nicht weiß, da ich die PICs nicht kenne...

    Viele Grüße

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad