Sida 1 av 2

16F887 - Känner ej av inputs.

Postat: 20 januari 2007, 13:45:02
av opatagio
Hej

Har ett problem med att känna av inputs, ex knapptryck. MCU är en 16F887 och jag har kört den i en egen krets för att försöka reda ut problemet. Men grejen är att input-portarna är konstant höga. Även om jag skriver bcf PORTA, x så är den hög. Men däremot fungerar alla portar jag sätter som outputs, de kan sättas låga eller höga utan problem.

Har kollat port initieringen, kollat MCLR, jordat LVP, matar korrekt med spänning till vdd och vss.

Börjar gå bet på problemet och undrar om någon haft samma problem eller har en lösning.

Tack

Postat: 20 januari 2007, 14:11:41
av sodjan
Kopplat bort analoga funktioner ?

Posta kortast möjliga "test-case" som visar fenomet.

Postat: 20 januari 2007, 14:37:05
av opatagio
Ok, kör med enklast möjliga kod från internet för att debugga.

Kod: Markera allt

;*** Disabling Periphals ***
       bcf        INTCON, 7        ; Disables Interrupts

       bcf        CM1CON0,7        ; Disables Comparator 1
       bcf        CM2CON0,7        ; Disables Comparator 2

       bcf        ADCON0,0        ; Disables AD convertor
                                         
       bcf        T1CON,0            ; Stops Timer1

       bcf        T2CON,2            ; Stops Timer2

       clrf    CCP1CON            ; Disables Enhanced Capture, 
                 
       clrf    CCP2CON            ; Disables Capture, Compare, PWM Module
               
       bcf        SSPCON,5        ; Disables MSSP module (I2C/SPI)

;*** Port Initialization ***
      banksel	PORTA
       clrf		PORTA
       banksel	TRISA
       movlw		b'11111111'
       movwf		TRISA
       banksel             PORTD            ;
       clrf                   PORTD            ; Initialize PORTD
       banksel             TRISD            ;
       movlw               B'00000000'        ; Set as all output
       movwf               TRISD            ;
       banksel             PORTD            ; bank0

MAIN  movlw	b'11111111'     ; släck alla LEDs, 2 st
        movwf	PORTD
        btfss		PORTA,0	    ; Nedtryckt = clear, icke-nedtryck = set
        bcf		PORTD,7	   ; Tänder LED.
       goto		MAIN

END

Postat: 20 januari 2007, 14:45:49
av sodjan
OK.
Går koden "rätt" när den simuleras (i MPSIM) ?
Om det gör det, så är det sannolikt något med din uppkoppling...

Sen vore det bra om du förklarar vad du förväntar dig att koden ska göra.

> Men grejen är att input-portarna är konstant höga...

Hur vet du det ?

Postat: 20 januari 2007, 14:57:21
av opatagio
Startar upp pic:en med brytaren nedtryck, alltså ska väl bcf PORTD,7 köras och LED:en lysa för att sedan hoppa tillbaka till Main. Men grejen är att porten blir hög direkt man startar pic:en = brytaren inte nedtryckt. Sedan är det 5V ut från input-portarna oavsett brytarens läge eller om jag i programmet sätter clrf PORTA eller bcf PORTA,x

japp, koden går rätt i MP SIM och animate läge.

Postat: 20 januari 2007, 15:21:41
av sodjan
> alltså ska väl bcf PORTD,7 köras och LED:en lysa

Visst, men hur länge lyser den ??
OK, det borde kanske lysa svagt...

> om jag i programmet sätter clrf PORTA eller bcf PORTA,x

*Och* sätter TRISA till utgångar ?

Hur som helst, det saknas en del i din beskrivning av vad du har gjort, så
det är svårt att säga något mer. T.ex hur knappaen är kopplad...

Postat: 20 januari 2007, 15:27:49
av opatagio
banksel TRISA
movlw b'11111111'
movwf TRISA

det sätter väl PORTA till ingångar?


knappen är kopplad GND -> brytare -> PORTA,x och en till +5V

Postat: 20 januari 2007, 15:33:37
av sodjan
> det sätter väl PORTA till ingångar?

Jo, men skulle du inte "testa" porten som utgång ?
Varför ska du annars ändra PORTA ?

> knappen är kopplad GND -> brytare -> PORTA,x och en till +5V

Jaha, och vad är "en" ??????

Postat: 20 januari 2007, 15:51:50
av opatagio
>Jo, men skulle du inte "testa" porten som utgång ?
>Varför ska du annars ändra PORTA ?

skulle jag? Vart ändrar jag porten? jag börjar tro jag fortfarande är lite insnöad i php mentaliteten.

> Jaha, och vad är "en" ??????

en kabel... glömde kabel.

Postat: 20 januari 2007, 16:01:22
av sodjan
Så du har en knapp kopplad mellan GND och I/O pinnen samt en
*KABEL* mellan *samma* I/O pinne och +5V !!!???

Alltså en *kortslutning* mellan 5V och I/O pinnen ???

Antingen har du beskrivet det dåligt eller så får du förklara tydligare
hur du har tänkt att *det* ska fugera...

> Vart ändrar jag porten?

T.ex när du gör : "clrf PORTA eller bcf PORTA,x "...

Postat: 20 januari 2007, 16:52:33
av opatagio
sodjan skrev:Så du har en knapp kopplad mellan GND och I/O pinnen samt en
*KABEL* mellan *samma* I/O pinne och +5V !!!???

Alltså en *kortslutning* mellan 5V och I/O pinnen ???

Antingen har du beskrivet det dåligt eller så får du förklara tydligare
hur du har tänkt att *det* ska fugera...

> Vart ändrar jag porten?

T.ex när du gör : "clrf PORTA eller bcf PORTA,x "...
Vss på pic:en och jord. Jag börjar få kortslutning i huvudet.. Inte Vdd utan Vss. Annars hade jag nog bränt 7805 hehehe

Hur ser en input pin ut om inget är kopplat till den. För som det är nu så är det 5V över alla PORTA pinnar.. utan att de ligger kopplade mot något. Och glöm det där med bcf PORTA, börjar blanda ihop grejer.

Postat: 20 januari 2007, 17:38:12
av bearing
Du får nog rita ett schema och lägga bilden på t.ex. http://imageshack.us/
Set är svårt att förstå hur du kopplat baserat på det du skrivit.

Postat: 20 januari 2007, 17:45:21
av Zyxel615

Postat: 20 januari 2007, 18:48:19
av sodjan
> Hur ser en input pin ut om inget är kopplat till den.

Om den är input så kan den ha i princip vilket "värde" som helst.

Ha *aldrig* ingångar oanslutna !!!
En grundregel...

I normala fall plockar de upp 50Hz "brum" från rummet...

Sen är jag inte med på hur "kabeln" är inkopplad...

Postat: 20 januari 2007, 23:23:02
av DragonOrb
Vad har du för oscillator ?
Watchdog timer ?

Vad har du för config inställningar ?