Sida 1 av 1
RB3 på pic16f88 funkar inte i min kod
Postat: 13 juli 2008, 13:50:29
av victor_passe
Hej, jag lyckas inte styra bit 3 i PORTB.
Jag kör med denna kod
Kod: Markera allt
org 0x00 ; Start
bsf STATUS, RP0 ;
bcf STATUS, RP1 ; Går till bank 1
movlw 0x7E
movwf OSCCON ; Intern 8MHz
movlw 0x07
movwf CMCON ; Ingen komparator
movlw 0x00
movwf ANSEL ; Ingen analog
movlw 0x00
movwf TRISA ; Alla utgångar
movwf TRISB ; Alla utgångar
bcf STATUS, RP0 ;
bcf STATUS, RP1 ; Går till bank 0
movlw 0x04
movwf PORTA ; Aktiverar kolum 3
movlw 0xff
movwf PORTB ; Aktiverar alla rader
a goto a ; Loopa i all evighet
END
Bara som test. Allt funkar förutom just RB3. Jag har tagit bort alla förbindelser till benet och mäter En låg spänning <1V som ändras (ökar) när jag rör pinnen.
Det blir ju så på ingångar så kan den av någon anledning vara en ingång?
Configen:
http://i37.tinypic.com/2zh2r06.png
Men denn koden i c funkar fint:
Kod: Markera allt
void main(){
trisa=0x00;
trisb=0x00;
cmcon=0x07;
osccon=0x7e;
porta=0x04;
portb=0xff;
while(1){
}
}
Så det borde vara configen som är fel eller?
Edit: Bytte bild host
Postat: 13 juli 2008, 14:03:55
av Icecap
Enl.
DATABLADET sid 60, tabell 5-3, Note 3:
"Low-Voltage ICSP Programming (LVP) is enabled by default, which disables the RB3 I/O function. LVP must be disabled to enable RB3 as an I/O pin and allow maximum compatibility to the other 18-pin mid-range devices."
Översatt: välj bort LVP och den fungerar normalt.
Postat: 13 juli 2008, 14:06:11
av victor_passe
Kollade du inte på bilden jag länkade till?
LVP: Disabled
Postat: 13 juli 2008, 14:12:19
av sodjan
> Kollade du inte på bilden jag länkade till?
Nej, det ska man inte behöva.
Det är bara vanlig text så det ska ligga direkt i inlägget.
Dessutom så är det enkelt att ta med dina __CONFIG inställningar.
Skit i de inställningar som finns i IDE'n...
Dessutom kan det där inte vara hela din kod.
Det saknas t.ex #include av din device-fil...
LVP är naturligtsvis väldigt misstänkt...
Postat: 13 juli 2008, 14:15:42
av Icecap
Nej, jag gjorde inte det. Vet PIC'en om dessa inställningar? (en del programmeringsenheter har inte alltid lyckats skicka inställningarna efter vad jag vet)
Postat: 13 juli 2008, 14:17:11
av victor_passe
De 2 första raderna
P=p16f88
include p16f88.inc
De har ju ingen betydelse för felet så jag skippade dem.
Och kan jag ha bara LVP inställd i _CONFIG? Hur skriver jag då?
Jag har bara använt den inbyggda config-bit ändraren.
Jag la till
__config _LVP_OFF
Men får detta felmeddelande:
Error[126] C:\PROGRAM\MICROCHIP\PROJECT\MATRIS\MATRIS.ASM 3 : Argument out of range (not a valid config register address)
Postat: 13 juli 2008, 14:23:10
av Icecap
I P16F88.INC finns det längst ner följande:
_CONFIG1 EQU H'2007'
_CONFIG2 EQU H'2008'
;Configuration Byte 1 Options
_CP_ALL EQU H'1FFF'
_CP_OFF EQU H'3FFF'
_CCP1_RB0 EQU H'3FFF'
_CCP1_RB3 EQU H'2FFF'
_DEBUG_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_WRT_PROTECT_OFF EQU H'3FFF' ;No program memory write protection
_WRT_PROTECT_256 EQU H'3DFF' ;First 256 program memory protected
_WRT_PROTECT_2048 EQU H'3BFF' ;First 2048 program memory protected
_WRT_PROTECT_ALL EQU H'39FF' ;All of program memory protected
_CPD_ON EQU H'3EFF'
_CPD_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_MCLR_ON EQU H'3FFF'
_MCLR_OFF EQU H'3FDF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_EXTRC_CLKOUT EQU H'3FFF'
_EXTRC_IO EQU H'3FFE'
_INTRC_CLKOUT EQU H'3FFD'
_INTRC_IO EQU H'3FFC'
_EXTCLK EQU H'3FEF'
_HS_OSC EQU H'3FEE'
_XT_OSC EQU H'3FED'
_LP_OSC EQU H'3FEC'
;Configuration Byte 2 Options
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3FFD'
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'3FFE'
; To use the Configuration Bits, place the following lines in your source code
; in the following format, and change the configuration value to the desired
; setting (such as CP_OFF to CP_ALL). These are currently commented out here
; and each __CONFIG line should have the preceding semicolon removed when
; pasted into your source code.
;Program Configuration Register 1
; __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC
;Program Configuration Register 2
; __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
Postat: 13 juli 2008, 14:29:38
av victor_passe
Tack så mycket Icecap!
Nu funkar det!
Konstigt att alla andra inställningar funkade förutom LVP.
Aja, Tack till er båda ännu en gång!
Postat: 13 juli 2008, 14:30:47
av sodjan
> Nu funkar det!
Prefekt !
> Och kan jag ha bara LVP inställd i _CONFIG? Hur skriver jag då?
Gör inte det.
Sätt *alltid alla* CONFIG bitar så som du vill ha dom.
Se slutet av INC filen som Icecap visade.
> Jag har bara använt den inbyggda config-bit ändraren.
Och jag har *aldrig* använt den.

Finns ingen anledning.
Om inte CONFIG finns med i källkoden så är den inte komplett
och den blir svårare att läsa eftersom man inte vet CONFIG inställningarna.
Postat: 13 juli 2008, 14:34:35
av Icecap
Och sedan bara den siste biten:
Kod: Markera allt
org 0x00 ; Start
banksel OSCCON <----- TITTA HÄR
movlw 0x7E
movwf OSCCON ; Intern 8MHz
movlw 0x07
movwf CMCON ; Ingen komparator
movlw 0x00
movwf ANSEL ; Ingen analog
movlw 0x00
movwf TRISA ; Alla utgångar
movwf TRISB ; Alla utgångar
banksel PORTA <----- TITTA HÄR
movlw 0x04
movwf PORTA ; Aktiverar kolum 3
movlw 0xff
movwf PORTB ; Aktiverar alla rader
a goto a ; Loopa i all evighet
END
Detta sätt gör "exakt" det samma fast du ska aldrig hålla på att kolla vilken bank som behövs, kan det vara olika banker kastar man in en "banksel", man kan alltid rensa bort sedan.
Postat: 13 juli 2008, 14:38:55
av sodjan
Jag skulle byta ORG till CODE och slänga in en LKR i projektet också...

Så lär man sig lite modern kodning på köpet, så att säga...
Postat: 13 juli 2008, 14:41:57
av victor_passe
Sodjan, vad är CODE och LKR?
Banksel ska jag köra med, det var fiffigt.
Postat: 13 juli 2008, 14:56:05
av sodjan
> Sodjan, vad är CODE...
MPLAB -> Help -> MPASM Assembler -> Directives -> Code.
> och LKR?
MPLAB -> Help -> MPLINK Object Linker -> Linker Scripts -> Standard Linker Scripts.
Eller se :
http://www.jescab.se/Relocmode.html
http://www.jescab.se/abs_reloc.html