Hallo,
Ik weet niet of hier PIC-specialisten zitten, maar ik probeer het toch maar.
Bij een programmeerproject met een PIC 16F88 loop ik tegen een volkomen maf probleem aan: een hoog-toestand op RB7 (pen 13) als ingang wordt niet herkend, wat ik ook probeer. Als ik RB7 als uitgang programmeer, doet hij hij het prima, en ook alle andere I/O-pennen doen precies wat ik wil.
Ik heb me helemaal suf gezocht naar wat dit kan veroorzaken -- een verkeerd draadje in de hardware, de configuratiewoorden, allerlei speciale functieregisters, en ik zal wel iets heel simpels verkeerd doen, maar ik kom er niet uit. De hardware varieert van een breadboardje tot een schakeling op een print, en de rest heb ik al vele malen nagekeken. Het enige wat er aan RB7 hangt, is een pull-down-weerstand van 10K.
Het onderstaande proefprogrammaatje doet het al niet goed, en dan met name de lus; deze moet ervoor zorgen dat een led (plus serieweerstand) op RB6 gaat knipperen zodra RB7 hoog wordt -- maar PORTB,7 wordt *altijd* als laag gezien, ongeacht wat ik er op aansluit, zelfs als ik de +5V direct op de pen van de chip houd. Zodra ik hetzelfde probeer met bijvoorbeeld PORTB,4 werkt alles wel zoals verwacht. Overigens wordt RB7 elektrisch gezien wel degelijk een ingang, want ik kan de spanning met hoogohmige weerstand zowel naar +5 volt als naar nul trekken (met de pull-down-weerstand uiteraard losgetrokken).
Iedere suggestie is welkom -- en hopelijk zit ik al die dagen over een hele domme fout heen te kijken, want dat zijn meestal de simpelste oplossingen ;-)
LIST P=PIC16F88
include "/usr/share/gputils/header/p16f88.inc
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CNTHI equ H'20' ; 2-byte teller CNTLO equ H'21'
org 0000 goto begin ; Interrupt-vector overslaan
; Initialisatie begin clrf PORTB ; Poort B laag bsf STATUS,5 ; Naar Bank 1 movlw H'BF' movwf TRISB ; Poort B6 uitgang, de rest ingangen movlw H'5C' movwf OSCCON ; Interne RC-oscillator op 2MHz bcf STATUS,5 ; Terug naar Bank 0
; *************** Het volgende gaat dus al niet goed: lus btfsc PORTB,7 ; RB7 laag? call led6 ; Nee: Een keer knipperen op RB6 goto lus
; *************** De led gaat nooit aan -- en met lus btfss PORTB,7 ; *************** blijft de led juist knipperen
led6 movlw H'40' ; Zet led op RB6 0,2 seconde aan movwf PORTB call del02s clrf PORTB ; Zet de led uit en wacht weer 0,2 seconde call del02s return
del02s movlw H'81' ; Vertragingslus van ~0,2 seconde movwf CNTHI dellp decfsz CNTLO,F goto dellp nexthi decfsz CNTHI,F goto dellp return
end
Richard Rasker