Överföra program till PIC i MPLAB?
180 ohm
Har provat att koppla både anod och katod mot PICen.
Men det spelar väl ingen roll om utgången ändå inte är hög?
ex. RB0 - resistor - anod på LED - VSS
Ersätter jag RB0 med VDD istället lyser ju LEDen så fint.
(För att säkerställa LEDens funktion dvs.)
>Förutsatt att pinnen är satt som *utgång*.
>Annars kan det bli lite vad som helst...
Jag mäter ca 2V från alla utgångar/ingångar.
Kan det vara så att inte PORTB konfigureras till utgångar som spökar?
Har provat att koppla både anod och katod mot PICen.
Men det spelar väl ingen roll om utgången ändå inte är hög?
ex. RB0 - resistor - anod på LED - VSS
Ersätter jag RB0 med VDD istället lyser ju LEDen så fint.
(För att säkerställa LEDens funktion dvs.)
>Förutsatt att pinnen är satt som *utgång*.
>Annars kan det bli lite vad som helst...
Jag mäter ca 2V från alla utgångar/ingångar.
Kan det vara så att inte PORTB konfigureras till utgångar som spökar?
> Fråga inte här, kolla i din kod...
Här sätts ju RB0 till output.
> Det kan inte vara den där koden, den är avsedd för en annan processor...
Enligt sidan skall det ju vara för 16F870. Eller hur??
Registeradresserna stämmer ju överens med mitt datasheet för F870!
Här sätts ju RB0 till output.
Kod: Markera allt
MOVLW b'00100000' ;Load W register so bank 1 will be set (see statusreg in datasheets)
MOVWF STATUS ;Move W into STATUS and now Bank 1 will be selected
MOVLW b'11111110' ;Load W with data direction for TRISB 1=input 0=output
MOVWF TRISB ;Move W into TRISB and RB0 will be an output
MOVLW b'00000000' ;Load W register so bank 0 will be set (see statusreg in datasheets)
MOVWF STATUS ;Move W into STATUS and now Bank 0 will be selected
Enligt sidan skall det ju vara för 16F870. Eller hur??
Registeradresserna stämmer ju överens med mitt datasheet för F870!
Sorry, jag kan ha blandat ihop det med någon annan tråd där någon hade en 16F627...
Om du faktiskt har en 16F870 så bör det väl vara OK...
De PORTB-pinnarna som är *ingångar*, hur är de anslutna ?
Kom ihåg, *inga* öppna ingångar !
Om de är "öppna", gör dom till utgångar...
Sen måste vara den sämsta metoden jag sett att switcha bank !
Man får hoppas att inte de andra STATUS-bitarna är allt för viktiga...
Om du faktiskt har en 16F870 så bör det väl vara OK...
De PORTB-pinnarna som är *ingångar*, hur är de anslutna ?
Kom ihåg, *inga* öppna ingångar !
Om de är "öppna", gör dom till utgångar...
Sen måste vara den sämsta metoden jag sett att switcha bank !

Man får hoppas att inte de andra STATUS-bitarna är allt för viktiga...

Ja! T.o.m jag som inte kan något om detta tyckte det verkade lite knasigt.
Det borde väl räcka att göra så här?:
(STATUS equ 03h samt TRISB equ 86h)
--------
> De PORTB-pinnarna som är *ingångar*, hur är de anslutna?
Var ben på PICen går till var sin kopplingsplint bredvid "breadboarden" på min programmerare.
Se HÄR. (Position 10 på bilden)
Så resten av in och utgångarna har ju ingen last eller så kopplat till dem, om det är det du menar med "öppen"?
Om jag får gissa borde ingångarna va kopplade till VSS annars?
Det borde väl räcka att göra så här?:
Kod: Markera allt
bsf STATUS,5 ;Switch to Bank 1
movlw 00h ;Set the Port B pins
movwf TRISB ;to output.
bcf STATUS,5 ;Switch back to Bank 0
--------
> De PORTB-pinnarna som är *ingångar*, hur är de anslutna?
Var ben på PICen går till var sin kopplingsplint bredvid "breadboarden" på min programmerare.
Se HÄR. (Position 10 på bilden)
Så resten av in och utgångarna har ju ingen last eller så kopplat till dem, om det är det du menar med "öppen"?
Om jag får gissa borde ingångarna va kopplade till VSS annars?
"Öppna" ingångar fångar upp störningar "ur luften", speciellt 50/100 Hz
brum från nätspänningen. Det blir betydligts värre om de dessutom
är kopplade till ledningar på krtetskortet som fungerar som antenner.
Absolut enklast är att sätta alla oanvända pinnar som *utgångar* via
TRISx registrena, bara ändringar i koden och ingen extra hårdvara.
Alternativet är att fysiskt koppla alla öppna ingångar till 5V eller jord.
Koden (för att clear'a TRISB) är inte helt bra. Något bättre är att skriva :Ändå lite bättre är :Bäst (sparar en instruktion) är att skriva:
Generellt, för STATUS och alla andra register som innehåller olika "bitar"
med olika funktioner, använd *ALDRIG* siffror för bitarna, utan enbart de
fördefinierade symbolerna (namnen) för bitarna.
Och för bankhanteringen, använd BANKSEL så finns det ingen risk att
du läser fel vilken bank ett visst register ligger i.
Dessutom, "bsf STATUS,5 ;Switch to Bank 1" stämmer inte.
Det ska ska stå "Switch to Bank 1 or 3", för det beror på hur RP1 är ställd !!
brum från nätspänningen. Det blir betydligts värre om de dessutom
är kopplade till ledningar på krtetskortet som fungerar som antenner.
Absolut enklast är att sätta alla oanvända pinnar som *utgångar* via
TRISx registrena, bara ändringar i koden och ingen extra hårdvara.
Alternativet är att fysiskt koppla alla öppna ingångar till 5V eller jord.
Koden (för att clear'a TRISB) är inte helt bra. Något bättre är att skriva :
Kod: Markera allt
bsf STATUS, RP0 ;Switch to Bank 1
movlw 00h ;Set the Port B pins
movwf TRISB ;to output.
bcf STATUS, RPO ;Switch back to Bank 0
Kod: Markera allt
banksel TRISB ;Switch to the right bank (whitch ever it is...)
movlw 00h ;Set the Port B pins
movwf TRISB ;to output.
banksel PORTB ;Switch back to Bank 0 (PORTx regs are always in bank 0...)
Kod: Markera allt
banksel TRISB ;Switch to the right bank
clrf TRISB ;Set all of PORTB to outputs.
banksel PORTB ;Switch back to Bank 0 (PORTx regs are always in bank 0...)
med olika funktioner, använd *ALDRIG* siffror för bitarna, utan enbart de
fördefinierade symbolerna (namnen) för bitarna.
Och för bankhanteringen, använd BANKSEL så finns det ingen risk att
du läser fel vilken bank ett visst register ligger i.
Dessutom, "bsf STATUS,5 ;Switch to Bank 1" stämmer inte.
Det ska ska stå "Switch to Bank 1 or 3", för det beror på hur RP1 är ställd !!