RB3 på pic16f88 funkar inte i min kod

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

RB3 på pic16f88 funkar inte i min kod

Inlägg 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
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Kollade du inte på bilden jag länkade till?
LVP: Disabled
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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)
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg 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)
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg 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!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Sodjan, vad är CODE och LKR?

Banksel ska jag köra med, det var fiffigt.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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
Skriv svar