PIC-Würfel: Interrupt, Timer1 und Sleep Mode
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  PIC-Würfel: Interrupt, Timer1 und Sleep Mode « vorheriges nächstes »
Seiten: 1 [2] Nach unten Drucken
Autor Thema: PIC-Würfel: Interrupt, Timer1 und Sleep Mode  (Gelesen 10200 mal)
 
P.H.
Gast
« Antworten #15 am: Februar 25, 2011, 14:02:04 »

So hab die Software nochmal aktualisiert ( Zeitschleifen sind zum größten Teil raus, nur noch die 250ms und die 3s wegen der Tasterstandabfrage). Wobei es mir gerade eher hierum geht:

Code:
Initialisierung

banksel CMCON ; Bankauswahl CMCON
movlw B'00000111' ; Analog-Komparator aus
movwf CMCON ; Komparator Steuerregister
banksel TRISIO ; Bankauswahl TRISIO
movlw B'11101000' ; Defintion der IO-Ports
movwf TRISIO ;  " " "
banksel INTCON
    bsf INTCON, GIE   ; erlaube alle Interrupts
    bsf INTCON, PEIE   ; erlaube externe Interrupts
    bsf     INTCON, GPIE   ; erlaube Aufwachen durch
banksel GPIO ; Bankauswahl GPIO
clrf GPIO ; Löschen der Vorgeschichte
.
.
.
Schlafen

Sleep
nop

Welches Bit ist zu setzen um einen IOC an GP5 auszulösen und den PIC hier zuwecken?
Gespeichert
P.H.
Gast
« Antworten #16 am: Februar 28, 2011, 10:10:45 »

Code:
banksel CMCON ; Bankauswahl CMCON
movlw B'00000111' ; Analog-Komparator aus
movwf CMCON ; Komparator Steuerregister
banksel TRISIO ; Bankauswahl TRISIO
movlw B'11101000' ; Defintion der IO-Ports
movwf TRISIO ;   " " "
banksel INTCON
    bsf INTCON, GIE    ; erlaube alle Interrupts
    bsf INTCON, PEIE  ; erlaube externe Interrupts
    bsf     INTCON, GPIE    ; erlaube Aufwachen durch
    movlw B'00100000'
    movwf IOC
banksel GPIO ; Bankauswahl GPIO
clrf GPIO ; Löschen der Vorgeschichte

Habe jetzt den GP5 (hoffentlich) richtig als IOC konfiguriert. Allerdings wacht der PIC immer noch nicht auf. Unser Lehrer meinte, es könnte daran liegen, dass der WDT ausgeschaltet ist.
Gespeichert
Stephan
Jr. Member
**
Offline Offline

Beiträge: 88


Profil anzeigen
« Antworten #17 am: Februar 28, 2011, 13:24:21 »

    banksel IOC
Gespeichert
Stephan
Jr. Member
**
Offline Offline

Beiträge: 88


Profil anzeigen
« Antworten #18 am: Februar 28, 2011, 13:26:31 »

    banksel ANSEL
    clrf    ANSEL
Gespeichert
P.H.
Gast
« Antworten #19 am: Februar 28, 2011, 13:47:04 »

Jetzt leuchtet nur noch eine LED dauerhaft Grinsend
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #20 am: März 01, 2011, 01:50:12 »

Zitat
Habe jetzt den GP5 (hoffentlich) richtig als IOC konfiguriert. Allerdings wacht der PIC immer noch nicht auf. Unser Lehrer meinte, es könnte daran liegen, dass der WDT ausgeschaltet ist.
Dann hat der gute Mann offenbar keine Ahnung.

Ausserdem: Erst die ganzen Flags loeschen und dann die Interrutps global aktivieren.

Gruss,
Stefan
Gespeichert

Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #21 am: März 01, 2011, 03:18:12 »

Zitat
Dann hat der gute Mann offenbar keine Ahnung.

Trifft nach meiner Erfahrung leider auf einige (Berufsschul-) Lehrer zu...


Viele Grüße

Bernd
Gespeichert

P.H.
Gast
« Antworten #22 am: März 01, 2011, 07:46:24 »

Edit: Beitrag aus Versehen gelöscht. Edson
« Letzte Änderung: März 01, 2011, 09:01:42 von Edson » Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #23 am: März 01, 2011, 09:00:09 »

Zitat
Habe jetzt alle "alle" Flags gelöscht, von denen ich denke, dass sie gemeint sind (STATUS)

Leider falsch geraten. Das Status-Register ist nicht für Interrupts zuständig. Schau dir mal die Register INTCON und PIR1 bzw. PIE1 an, vielleicht fällt dann der Groschen.

Zitat
Dann hat der gute Mann offenbar keine Ahnung.
Trifft nach meiner Erfahrung leider auf einige (Berufsschul-) Lehrer zu...

Das habe ich auch schon erlebt, es wäre aber zu einfach hier den Berufschullehrern den schwarzen Peter zuzuschieben. Als Azubi hat man hinreichend Zeit um sich in neue Themen einzuarbeiten, ein Minimum an Interesse bleibt Grundvoraussetzung. Auch ein wenig Ehrgeiz sollte man zum Entwickeln mitbringen und nicht schon zufrieden sein wenn ein Programm nur irgendwie mit Schweiß und Tränen (und noch nicht mal den Eigenen) halbwegs zum Laufen gebracht wurde.


Grüße,
Edson
Gespeichert
P.H.
Gast
« Antworten #24 am: März 01, 2011, 09:38:32 »

Habe mir die Register mal angeguckt, das Register PIR1 gecleart (clrf PIR1, nach Bankauswahl) und das PIE1 Register komplett auf '0' gesetzt. Hat das EEIE Bit irgendwas mit dem EEPROM zu tun? Die anderen Bits brauch ich ja nicht, da ich weder auf AD Konverter, Timer Interrupt oder Komparator Interrupt zurückgreife.

Im INTCON Register habe ich die Bits: T0IF und INTF auf 0 gesetzt, da das letzte Bit das GPIF ja doch von uns benötigt wird (IOC).
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #25 am: März 01, 2011, 10:33:12 »

Hallo P.H.,

entschuldige bitte nochmals das versehentliche Löschen deines vorletzten Beitrags (ist mir zum ersten mal passiert).

Hat das EEIE Bit irgendwas mit dem EEPROM zu tun?

Ja, das steht auch in der Beschreibung im Datenblatt.

Im INTCON Register habe ich die Bits: T0IF und INTF auf 0 gesetzt, da das letzte Bit das GPIF ja doch von uns benötigt wird (IOC).

Die Endung -IF steht für Interrupt-Flag. Diese Flags werden von der CPU gesetzt wenn eine Interruptquelle auslöst. -IE steht für Interrupt Enable und repräsentiert einen Schalter, der festlegt, ob eine auslösende Interruptquelle zu einem globalen Interrupt führen soll.

Grüße,
Edson
Gespeichert
Hesselhoff
Gast
« Antworten #26 am: März 01, 2011, 10:38:31 »

Konnte mich dann doch nochmal mit meinem Account einloggen.

So siehts momentan bei mir in der Initialisierung aus:

Code:

 banksel PIR1
 clrf PIR1
 banksel PIE1
 movlw B'10000000'
 movwf PIE1
 banksel IOC
 movlw   B'00100000'
 movwf IOC
 banksel INTCON
 movlw B'11001001'
 movwf INTCON

Problem ist jetzt nur, dass alle LED's gleichzeitig leuchten.
Gespeichert
Hesselhoff
Gast
« Antworten #27 am: März 01, 2011, 10:58:39 »

Konnte mich dann doch nochmal mit meinem Account einloggen.

So siehts momentan bei mir in der Initialisierung aus:

Code:

 banksel PIR1
 clrf PIR1
 banksel PIE1
 movlw B'10000000'
 movwf PIE1
 banksel IOC
 movlw   B'00100000'
 movwf IOC
 banksel INTCON
 movlw B'1100100!1!'
 movwf INTCON

Problem ist jetzt nur, dass alle LED's gleichzeitig leuchten.

Haben den Fehler gefunden. Wir haben im INTCON Register das GPIF Flag gesetzt   Schweigend
Aber eins erledigt, passiert das neue. Sobald einmal geschüttelt wird, springt der PIC sofort wieder zum Startpunkt des Lauflichts. Wir wollten eigentlich nur einen Interrupt um ihn aus dem Sleep Mode aufzuwecken.
« Letzte Änderung: März 01, 2011, 11:07:40 von Hesselhoff » Gespeichert
Hesselhoff
Gast
« Antworten #28 am: März 02, 2011, 10:58:46 »

So Leute es ist gepackt, der Würfel würfelt, schläft und wacht wieder auf. Danke an alle die uns geholfen haben, durch Denkanstöße und direkte Hilfen. Auf bald.

Philipp Hess
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #29 am: März 02, 2011, 11:54:56 »

Hallo Philipp,

es wäre schön, wenn du einfach den ganzen Code postest. Dann haben alle Leser etwas davon.

Gruß
Stefan
Gespeichert

Seiten: 1 [2] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.038 Sekunden mit 17 Zugriffen.
 
Top! Top!