JayCool
03.03.2010, 20:48
Hi @ all,
ich habe gerade an einem 16F876 an alle Portpins LEDs mit Vorwiderstand mit GND verbunden und mit einem Programm lediglich alle Pins auf Ausgang geschaltet und diese eingeschaltet.
Alle LEDs sind an, bis auf RA4, obwohl ich wie bei Sprut alle Ausgänge auf digital umgeschaltet habe. Siehe beiliegendes Programm.
Kann mir jemand erklären, warum RA4 nicht leuchten will?
Hat das möglicherweise mit dieser Open-Drain-Geschichte zu tun, dass ich die LED mit Vdd verbinden müsste, weil bei Sprut da etwas steht von "Der Open-Drain-Ausgang kann sein Ausgangspin nur sauber auf Vss (0V) ziehen. "
Ist das so zu verstehen, dass das nur mit Pull Up-Widerstand funktioniert???
list p=16f876 ; list directive to define processor
#include <p16f876.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x7D ; variable used for context saving
status_temp EQU 0x7E ; variable used for context saving
pclath_temp EQU 0x7F ; variable used for context saving
;************************************************* *********************
ORG 0x000 ; processor reset vector
nop ; nop required for icd
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,w ; move pclath register into w register
movwf pclath_temp ; save off contents of PCLATH register
; isr code can go here or be located as a call subroutine elsewhere
movf pclath_temp,w ; retrieve copy of PCLATH register
movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
main
; remaining code goes here
BSF STATUS, RP0 ; auf Bank 1 umschalten
BCF ADCON1, PCFG3 ; PCFG3=0
BSF ADCON1, PCFG2 ; PCFG2=1
BSF ADCON1, PCFG1 ; PCFG1=1
BCF ADCON1, PCFG0 ; PCFG0=0
BCF STATUS, RP0 ; auf Bank 0 zurückschalten
bcf STATUS,6
bsf STATUS,5
movlw 0x00
movwf TRISA
movwf TRISB
movwf TRISC
bcf STATUS,5
movlw 0xFF
movwf PORTA
movwf PORTB
movwf PORTC
loop goto loop
ich habe gerade an einem 16F876 an alle Portpins LEDs mit Vorwiderstand mit GND verbunden und mit einem Programm lediglich alle Pins auf Ausgang geschaltet und diese eingeschaltet.
Alle LEDs sind an, bis auf RA4, obwohl ich wie bei Sprut alle Ausgänge auf digital umgeschaltet habe. Siehe beiliegendes Programm.
Kann mir jemand erklären, warum RA4 nicht leuchten will?
Hat das möglicherweise mit dieser Open-Drain-Geschichte zu tun, dass ich die LED mit Vdd verbinden müsste, weil bei Sprut da etwas steht von "Der Open-Drain-Ausgang kann sein Ausgangspin nur sauber auf Vss (0V) ziehen. "
Ist das so zu verstehen, dass das nur mit Pull Up-Widerstand funktioniert???
list p=16f876 ; list directive to define processor
#include <p16f876.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x7D ; variable used for context saving
status_temp EQU 0x7E ; variable used for context saving
pclath_temp EQU 0x7F ; variable used for context saving
;************************************************* *********************
ORG 0x000 ; processor reset vector
nop ; nop required for icd
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,w ; move pclath register into w register
movwf pclath_temp ; save off contents of PCLATH register
; isr code can go here or be located as a call subroutine elsewhere
movf pclath_temp,w ; retrieve copy of PCLATH register
movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
main
; remaining code goes here
BSF STATUS, RP0 ; auf Bank 1 umschalten
BCF ADCON1, PCFG3 ; PCFG3=0
BSF ADCON1, PCFG2 ; PCFG2=1
BSF ADCON1, PCFG1 ; PCFG1=1
BCF ADCON1, PCFG0 ; PCFG0=0
BCF STATUS, RP0 ; auf Bank 0 zurückschalten
bcf STATUS,6
bsf STATUS,5
movlw 0x00
movwf TRISA
movwf TRISB
movwf TRISC
bcf STATUS,5
movlw 0xFF
movwf PORTA
movwf PORTB
movwf PORTC
loop goto loop