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

Thema: PIC12F683 mit CC5X Compiler | Interruptproblem

  1. #1

    PIC12F683 mit CC5X Compiler | Interruptproblem

    Anzeige

    Praxistest und DIY Projekte
    Habe folgendes kleines Programm geschrieben um Interrupts zu testen:
    Code:
    /*
    Soll Änderung an GPIO.1 erkennen und so aus Sleepmodus aufwachen um an GPIO.0 dauerzublinken
    */
    
    #include "C:\Programme\bknd\cc5x\int16CXX.H" // notwendig für Interruptps
    bit sender @ GPIO.0;
    bit kippschalter @ GPIO.1;
    bit zustand;
    
    void sendMsg(void);
    
    #pragma origin 4
    
    interrupt Senden(void)
    {
    	int_save_registers
    	if (GPIF)
    	{
    	sendMsg();
    	GPIF = 0;
    	}
    	int_restore_registers
    }
    
    void sendMsg(void)
    {
    	while(1)
    	{
    		sender = 1;
    		nop();
    		sender = 0;
    		nop();
    	}
    }
    
    void main(void)
    {
    	//----Konfiguration
    	#asm
    	BCF		STATUS,RP0 	// Bank 0
    	CLRF	GPIO		// Init GPIO
    	MOVLW 	b'000011'	// GP0-GP1 als
    	MOVWF 	CMCON0		// digital I/O
    	BSF 	STATUS,RP0	// Bank 1
    	CLRF 	ANSEL		// digital I/O
    	MOVLW 	b'111110'	// GP0 digitaler Ausgang, GP1 digitaler Eingang
    	MOVWF 	TRISIO
    	BCF 	STATUS,RP0	// Bank 0
    	#endasm
    	
    	GPIE = 1;
    	IOC = 0b.10;	// Interrupt on Change für GPIO.1
    	OSCCON = 0b.0001.0001;	// interner 125kHz Oszillator
    	OPTION = 0b.1000.0001;	// Vorteiler auf 4 ( 001 ), 1 an der Stelle von Bit7 für Weakpullupenable
    	WPU = 0b.00.0010;		// Weakpullup für GPIO.1
    	GPIO = 0b.00.0000;
    	
    	GIE = 1; // Global Interrupt Enable
    	//----EndeKonfiguration
    	
    	while(1) //endlosschleife
    	{
    		zustand = kippschalter; // einlesen des Wertes für Interruptreferenz
    		sleep();
    		nop();
    	}
    }
    als äußere Beschaltung ( sofern man davon reden kann *G* ) ist an die Versorgungsspannung ein Schalter geklemmt der die Spannung an GPIO.1 entweder auf Vdd legt oder eben Vss.
    Eigentlich sollte egal was ich mache, sobald ich den Schalter umlege das Programm in die Interruptroutine springen und dort dann in der Blinkschleife festsitzen. Leider tut sich aber garnichts =(
    Hab ich irgendwas Konfigurationstechnisches vergessen oder liegts an was anderem?

    Als Vorlage diente mir der CC5xkurs hier: http://cc5x.de/cc5x_1.htm
    dazu unterscheidet sich mein Code im groben durch den Sleep und die Interruptart.

    Jedenfalls scheint der PIC sich im sleepmodus zu befinden und daraus nicht mehr rauszukommen. ( Kein Clockoutsignal am entsprechenden Pin )
    Außerdem zieht der µC in diesem Betrieb 180µA. Hört sich wenig an, aber eigentlich läuft ja im Sleepmodus nicht viel oder etwa doch?

    Achja bevor ichs vergesse, als Configword bzw. als Einstellungen für das Configword wurde in MPLAB folgendes gewählt:
    Oszillator: Internak RC Clockout
    Watchdog Timer: Off
    Power Up Timer: Off
    Master Clear Enable: Internal
    Code Protect: Off
    Data EE Read Protect: Off
    Brown Out Detect: BOD Enabled, SBOREN Disabled
    Internal External Switch Over Mode: Enabled
    Monitor Clock Fail-Safe: Enabled

    Falls hilfreich Links zum Datenblatt u.a.:
    Datenblatt PIC12F683
    Übersicht und Links zu weiteren PDFs

  2. #2
    Hat keiner Ahnung vom Zusammenspiel, CC5X, Interrupt, MPLAB? Soll ich was genauer erläutern/hab ich was fürs Verständnis essentielles vergessen zu sagen?

Berechtigungen

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

12V Akku bauen