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 ?