PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dioden brennen nicht entsprechend dem Programmmuster



Ausbilder 'Durchdrücker'
27.03.2005, 22:26
Hallo. Ich habe ein Programm für den 16f628 geschrieben, das die Dioden abhängig von einem Schalter an RB0 schaltet oder eben nicht. Jetzt brennen keine LEDs am Anfang. Drücke ich ein bißchen auf dem PIC rum brennen alle oder ein paar nur - aber nicht entsprechend dem Muster. Woran kann das liegen ?

P.S.: Die Diodenbeschaltung ist im Code integriert....

list p=16F628
include "P16F628.INC"

__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC

Hundert1 EQU 0x22
Hundert2 EQU 0x23
Zehn EQU 0x24


org 0x00 ;Hier startet der PIC
goto Beginn ;Zum Hauptprogramm

org 0x04 ;Interruptadresse
BCF INTCON,INTE
BCF INTCON,INTF ;An RB0 gab es keinen Interrupt
BCF INTCON, GIE
GOTO Entscheiden ;Fragen, ob der Schalter eingeschaltet
;oder ausgeschaltet ist



Ein
BCF STATUS, RP0 ;Bank0 aktivieren
BCF STATUS,RP0
BCF PORTB,7 ;Gruene Diode deaktivieren
BSF PORTA,2 ;Gelbe Diode aktivieren
;Record ein
CALL EineSekunde ;Warten drei Sekunden
CALL EineSekunde
CALL EineSekunde
;Record aus
CALL EineSekunde ;Warten eine Sekunde
;Pause ein
CALL EineSekunde ;Warten eine Sekunde
;Pause aus
BCF PORTA,2 ;Gelbe Diode deaktivieren
BSF PORTA,4 ;Rote Diode aktivieren
CALL EineSekunde ;Warten eine Sekunde
;Kanal ein
CALL EineSekunde ;Warten eine Sekunde
;Kanal aus
CALL EineSekunde ;Warten eine Sekunde
;Pause ein
CALL EineSekunde ;Warten eine Sekunde
;Pause aus
BSF INTCON,RBIE ;Portaenderungsinterrupt für RB0 aktivieren
BSF INTCON,INTE ;Externen RB0 Interrupt aktivieren
BSF INTCON, GIE ;Alle Interrupts aktivieren
SLEEP ;Schlafen


Aus
;Stop ein
BCF STATUS, RP0 ;Bank0 aktivieren
BCF STATUS,RP0
BCF PORTA,4 ;Rote Diode deaktivieren
BSF PORTB,7 ;Gruene Diode aktivieren
CALL EineSekunde
CALL EineSekunde
;Stop aus
BSF INTCON,RBIE ;Portaenderungsinterrupt für RB0 aktivieren
BSF INTCON,INTE ;Externen RB0 Interrupt aktivieren
BSF INTCON, GIE ;Alle Interrupts aktivieren
SLEEP ;Schlafen




Beginn
BCF STATUS, RP0 ;Bank0 aktivieren
BCF STATUS,RP0
BSF CMCON, CM0 ;Alles Digital
BSF CMCON, CM1
BSF CMCON, CM2

BCF INTCON, GIE ;Alle Interrupts deaktivieren

BSF STATUS,RP0 ;Bank1 aktivieren
BSF TRISB,0 ;Pin RB0 ist Eingang
CLRF TRISA
BCF STATUS,RP0
CLRF PORTA
CLRF PORTB
bsf INTCON, RBIE
bcf INTCON, RBIF ;RB Port hat sich nicht geändert
bsf INTCON, GIE ;Alle Interrupts aktivieren

Entscheiden
BCF STATUS, RP0 ;Bank0 aktivieren
BCF STATUS,RP0
BTFSS PORTB,0 ;Ist Bit 0 von PortB aktiviert ?
GOTO Ein
GOTO Aus

EineSekunde
MOVLW D'100'
MOVWF Hundert1
Warte
MOVLW D'100'
MOVWF Hundert2
Wart
MOVLW .10
MOVWF Zehn
Los
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
DECFSZ Zehn,F
GOTO Los
DECFSZ Hundert2,F
GOTO Wart
DECFSZ Hundert1,F
GOTO Warte
RETLW 0

end ;das Ende des Programms


P.S.:
1. Daß einige Bankänderungen nicht nötig sind, da ich bereits in der Bank bin, ist mir bekannt.

2. Kann man davon ausgehen, daß Success! und Verified! bei FPP auch wirklich für überprüften Erfolg stehen ?

28.03.2005, 01:32
Ich könnte den PIC erstechen ! Das Problem hat sich gelöst: Ich habe diese Braunautscheiße deaktiviert und es läuft ! Wofür braucht man den Schmarrn überhaupt ??

uwegw
28.03.2005, 15:33
Ich habe diese Braunautscheiße deaktiviert und es läuft ! Wofür braucht man den Schmarrn überhaupt ??

was benutzt du für eine stormversorgung? denn die brown-out-detection resettet den controller, wenn die betriebsspannung zu sehr sinkt...
evtl kann es sein dass bei einschalten der leds ein spannugnseinbruch vorkommt (sind es nen haufen superhelle?)... dagegen würde ein großer elko helfen...