Sida 1 av 2
Nybörjare - PIC16F887
Postat: 24 augusti 2008, 10:40:52
av Zorander
Hej! Jag har en fråga ang. min PIC16F887.
Jag är komplett nybörjare inom PIC-programmering (och inom elektronik), så jag ber er att ha tålamod
Jag skaffade mig en PIC-programmerare från Kjell o. Company. Denna fungerar fint och jag kan programmera PICen med den. Jag har lyckats köra enkla program som "blinkar" med LEDs anslutna till outputs.
Då jag upptäckte att outputs funkar tänkte jag ansluta en enpolig switch till min krets. En sladd går till jord och den andra till RB2, som ju har en intern pull-up. Problemet är att PICen inte förstår när jag trycker på switchen. Jag har skrivit enkla program med loopar som bygger på "btfss PORTB,2", men ingenting händer i programmet när jag slår på switchen. TRISB är satt till 1 rakt igenom.
Är det något speciellt med PIC16F887 som måste initieras innan inputs funkar ? Något annat jag behöver tänka på?
Tack på förhand!
Fredrik
Postat: 24 augusti 2008, 11:11:24
av Icecap
Har du aktiverat den interna pull-up?
Postat: 24 augusti 2008, 12:04:36
av sodjan
> Är det något speciellt med PIC16F887 som måste initieras innan inputs funkar ?
Ja.
> Något annat jag behöver tänka på?
Du säger ju inte vad du *har* tänkt på, så hur skulle någon kunna veta det !?
Men allt står i databladet. Börja där, och återkom om något är oklart.
Läs gärna även :
http://elektronikforumet.com/forum/viewtopic.php?t=6057
Postat: 24 augusti 2008, 12:05:32
av Zorander
Det här är min __CONFIG:
__CONFIG _CONFIG1, _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTOSCIO & _DEBUG_OFF
__CONFIG _CONFIG1, _WRT_OFF
Det här är min initieringskod:
bsf STATUS,RP0; Välj bank 1
movlw B'11111111'
movwf TRISB; Alla bitar i PORTB är inputs
movlw B'00000000'
movwf TRISA; Alla bitar i PORTA är outputs
bsf OPTION_REG,7; Slå på pull-ups
bcf STATUS,RP0; Välj bank 0
Saknas något?
Tack för ditt svar!
Postat: 24 augusti 2008, 12:10:10
av sodjan
> Saknas något?
Ja : Att du *LÄSER* databladet !
Vad står det i den lilla gråa rutan i kapitel 3.3 ?
Postat: 24 augusti 2008, 12:24:52
av Zorander
OK, har skrivit nollor i hela ANSELH, ingen skillnad.
Postat: 24 augusti 2008, 12:43:11
av Icecap
Och sedan läser du gråa rutan IGEN och ser vad det egentligen står... varefter du kommer på vad du har gjort fel...
Postat: 24 augusti 2008, 13:09:25
av sodjan
Koden ? Och använd code-taggarna för kod.
Använd de riktiga namnen för de individuella bitarna i FSR'er som t.ex
OPTION_REG. Aldrig t.ex "7" som i ditt exempel.
> bsf STATUS,RP0; Välj bank 1
Kommentaren stämmer inte riktigt, ska vara "Välj bank 1 eller 3".
Om det blir 1 eller 3 beror på hur RP1 är satt. Används BANKSEL istället.
> bcf STATUS,RP0; Välj bank 0
Samma sak, kan bli bank 0 eller 2 beroende på hur RP1 är satt.
Använd BANKSEL
Jag tror inte att din __CONFIG stämmer helt...
> bsf OPTION_REG,7; Slå på pull-ups
Instruktion och kommentar stämmer inte överens.
Rätta det som är fel.
Postat: 24 augusti 2008, 13:14:35
av Zorander
OK, tack.
Förresten så tänkte jag läsa databladet, men du postade medan jag skrev svaret till Icecap. Det var inte så att jag struntade in ditt inlägg.
Jag testar och återkommer!
Postat: 24 augusti 2008, 13:17:37
av Icecap
I den lilla gråa rutan tycker jag att det är ganska tydligt vad som menas men det står lite bakvänd så att säga.
Postat: 24 augusti 2008, 13:21:23
av sodjan
> Förresten så tänkte jag läsa databladet,
Du menar "läsa en gång till" eller hur ?

Jag vill inte gärna tro att du har frågat här på forumet
utan att läsa det alls...
Och det är inte ANSELH som är problemet just nu, utan WPU.
Postat: 24 augusti 2008, 13:22:36
av sodjan
> > Förresten så tänkte jag läsa databladet,
Detta kan kanske vara till lite hjälp:
http://www.jescab.se/Datablad.html
Postat: 24 augusti 2008, 20:15:05
av Zorander
Allt funkar nu! Tack så mycket!

Postat: 24 augusti 2008, 21:48:39
av sodjan
OK vad bra. Men...
Det anses normalt som god ton att även tala om vad problem/lösningen till slut var.
Någon annan kanske kan lära sig något av det dessutom.
Att bara säga "funkar nu" uppfattas ibland som lite dålig stil efter
att andra har lagt ner tid på tråden.
Postat: 24 augusti 2008, 23:25:58
av Zorander
Jag brukar vanligtvis skriva lösningen, men den här gången glömde jag av någon anledning. Jag var väl ivrig att fortsätta bygga och glömde förklara hur jag gjorde. Jag ber om ursäkt.
Problemet var att jag överskattade PORTB:s pull-ups. Jag löste det genom att koppla en resistor på 30.1Kohm mellan pinnen och Vdd och koppla switchen från pinnen till jord. På så sätt lyckades jag stabilisera ingången och lysdioden slog på/av som den skulle.