Nybörjare - PIC16F887

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Zorander
Inlägg: 14
Blev medlem: 24 augusti 2008, 10:23:24
Ort: Knivsta

Nybörjare - PIC16F887

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

Inlägg av Icecap »

Har du aktiverat den interna pull-up?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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
Användarvisningsbild
Zorander
Inlägg: 14
Blev medlem: 24 augusti 2008, 10:23:24
Ort: Knivsta

Inlägg 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!
Senast redigerad av Zorander 24 augusti 2008, 12:10:21, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 ?
Användarvisningsbild
Zorander
Inlägg: 14
Blev medlem: 24 augusti 2008, 10:23:24
Ort: Knivsta

Inlägg av Zorander »

OK, har skrivit nollor i hela ANSELH, ingen skillnad.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

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

Inlägg 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.
Senast redigerad av sodjan 24 augusti 2008, 13:17:15, redigerad totalt 1 gång.
Användarvisningsbild
Zorander
Inlägg: 14
Blev medlem: 24 augusti 2008, 10:23:24
Ort: Knivsta

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

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

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

Inlägg 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
Användarvisningsbild
Zorander
Inlägg: 14
Blev medlem: 24 augusti 2008, 10:23:24
Ort: Knivsta

Inlägg av Zorander »

Allt funkar nu! Tack så mycket! :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
Användarvisningsbild
Zorander
Inlägg: 14
Blev medlem: 24 augusti 2008, 10:23:24
Ort: Knivsta

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