Sida 1 av 7

PIC, varför inte... går det....?

Postat: 2 april 2015, 20:30:23
av Erik M
Tjo!

Finn fem, eller sex, fel...

Denna snutt borde resultera i att:
Om PORTA,0 är låg så tänds PORTC,0 och PORTC,1 släcks etc.

Eller?

PORTA [0-6] är uppdragna med 4k7Ω. Dvs höga (?) som standard.

PORTC [0-6] har varsin LED, anod på port, katod på noll. (Inklusive motstånd etc.)

(Alla status, trisa, porta etc är versaler, egentligen.)

Varför händer det typ ingenting?

Kör jag simulering i Pic Simulator 2.0 så funkar allt som det är tänkt...

:wall:

Kod: Markera allt

include "p16f690.inc"

org 0

  bsf    status,rp0
  movlw  b'00111111'
  movwf  trisa
  movlw  b'11000000'
  movwf  trisc
  bcf    status,rp0
  goto main

main:

  btfsc  porta,0
  goto   not0
  bsf    portc,0
  bcf    portc,1
not0:

  btfsc  porta,1
  goto   not1
  bsf    portc,1
  bcf    portc,2
not1:

  btfsc  porta,2
  goto   not2
  bsf    portc,2
  bcf    portc,3
not2:

  btfsc  porta,3
  goto   not3
  bsf    portc,3
  bcf    portc,4
not3:

  btfsc  porta,4
  goto   not4
  bsf    portc,4
  bcf    portc,5
not4:

  btfsc  porta,5
  goto   not5
  bsf    portc,5
  bcf    portc,0
not5:

    goto main

  end

Re: PIC, varför inte... går det....?

Postat: 2 april 2015, 20:39:32
av Icecap
Har du stängd av alla analoga funktioner? Kolla efter ADSEL.

Re: PIC, varför inte... går det....?

Postat: 2 april 2015, 21:57:04
av CosSinSum
Precis som Icecap säger så måste du nog stänga av de adc'n. Vill mig minnas att 16F690an kräver det. :)

Re: PIC, varför inte... går det....?

Postat: 2 april 2015, 22:11:11
av Klas-Kenny
Inte nödvändigtvis stänga av ADC'n, men att konfigurera ingångarna till digitala, de är analoga som standard.

Registerna du söker heter ANSEL och ANSELH.

Re: PIC, varför inte... går det....?

Postat: 2 april 2015, 23:05:58
av sodjan
> Kör jag simulering i Pic Simulator 2.0 så funkar allt som det är tänkt...

Inte en susning om vad det är för något. Fungerar det i MPSIM?
Vad utvecklar du i? MPLAB/XC8? MikroC? Något annat?

Men ganska självklart så är problemet att pinnarna står som analoga I/O...

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 12:07:59
av Erik M
Pic Simulator 2.0 är en rakt på app till Android.
Den tar dessvärre inte sådant som cblock eller #define, så lite bökig.


PIC16F690 är den som kommer med PICkit 2 Starter Kit.
...och jag tycker inte jag gjort mer än lagt till input portar på PORTA och output portar på PORTC, på samma vis som introduktionslektionerna gör...

Men går jag ett steg till bland lektionerna så dyker, lite omotiverat och plötsligt, just ADCON(1) och ANSEL upp...

Kod: Markera allt

     bsf       STATUS,RP0     ; select Register Page 1
     movlw     0xFF
     movwf     TRISA          ; Make PortA all input
     clrf      TRISC          ; Make PortC all output
     movlw     0x10           ; A2D Clock Fosc/8
     movwf     ADCON1
     bcf       STATUS,RP0     ; back to Register Page 0

     bcf       STATUS,RP0     ; address Register Page 2
     bsf       STATUS,RP1     
     movlw     0xFF           ; we want all Port A pins Analoga
     movwf     ANSEL
     bcf       STATUS,RP0     ; address Register Page 0
     bcf       STATUS,RP1
...och tycker de ska vara med.
Även om det i tidigare lektioner inte förefallit nödvändigt. :humm:

Så frågan som dyker upp blir - vad är det för skillnad på analog och digital input...?

Och då menar jag input av typen High/Low, inte av typ "Vin versus Vref".

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 12:13:25
av Glenn
Grejen är ju att du måste tala om ifall du ska använda pinnen som analog eller digital, OM just den pinnen har båda funktionerna på just den PIC'en du tänker använda.

Ofta skippar man detta i början (på tutorials osv) och använder heldigitala pinnar, vilket längre fram blir lite förvirrande.

Men var inte ledsen för att du missade det, det är ett EXTREMT vanligt misstag, oavsett vilket språk du kodar i så kommer du att kunna googla fram en massa exempel på folk som gjort samma misstag :)

På PBP-forumet har nån gjort en include man kan använda som heter nåt i stil med "alldigital" som helt enkelt kollar vilken PIC det är, och sedan ställer in alla pinnar till digital, så kan folk om inte annat inkludera den som felsökning, men man vill ju vanligen ställa in manuellt så man vet hur det är satt.

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 12:19:49
av Erik M
Tack.

Men vad är den egentliga skillnaden mellan analog och digital?
Alltså om signalen är hög (≥4V) ELLER låg (≤1V).

Och det där med fåniga misstag...

I Pic Simulator måste ju alla variabler anges.
Och jag skrev tjugo stycken "ecu", istället för "equ"... Det var besvärligt. o_O

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 12:24:47
av Glenn
Ja, en digital pinna är antingen hög eller låg, en analog kan vara vad som helst, normalt sett går alla pinnat att använda som digitala, medans vissa även fungerar analogt.

Om du tex vill använda en tempsensor som ger kanske 1-2.5V ut beroende på temp så kan du ju mäda den via en analog pinne.

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 13:23:05
av Erik M
:humm:

Min hustru försöker oxå förklara.
...och lyckas ungefär lika bra. :vissla:

:P

Vad jag känner är att en digital port som får över 4V borde därmed vara hög.
Och samma port med under 1V blir då oxå låg.

Och bryr sig inte om den exakta spänningen som sådan.

:shock:

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 13:33:31
av Mr Andersson
Ja, om du använder en digital port fungerar det så.
Problemet kommer när du använder en port som kan vara antingen digital eller analog. Om den är inställd i analogt läge finns det inget hög/låg. Det finns bara ett analogt värde.

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 13:34:59
av Swech
Se på det hela så här:
Den digitala delen av porten är fysikt/ elektriskt bortkopplad då benet är
konfigurerat som analog pinne in. Så även om det kommer in en digital "1"a så
når den inte ända in i systemet

Swech

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 19:27:08
av Erik M
Thank you Mr Andersen, that was the one nailing it. :tumupp:

Jag förstår vad du menar Swech, men det är en pinne som är kopplad för digital jag tittar på.
Åtminstone tror och tänker att jag tittar på en sådan.

En analogt ställd port tar emot en analog signal (för klassificering till digitalt värde).
Japp, lugnt. :tumupp:

Men om jag inte går via ADCON1 & ANSEL, då borde allt som kommer in och är fyra, eller mer, volt vara en "etta"... Exempelvis:

V^ = 15V
V° = 0V

V^ - [1kΩ] - [22kΩ] - [PORTA,n] - [1kΩ] - V°≈0.6V ⇨ ≤1 ⇨ "0"

V^ - [1kΩ] - [PORTA,n] - [22kΩ] - [1kΩ] - V°≈14V ⇨ ≥4 ⇨ "1"

Borde...

Re: PIC, varför inte... går det....?

Postat: 3 april 2015, 21:18:41
av jako
Är pinnen "kopplad" digitalt inuti mikroprocessorn också? d.v.s har du initierat processorn innan ditt program går igång?

Läs databladet 3-10 ggr. så ska du se att du börjar förstå hur alla pinnar/portar beter sig vid power up / reset

mvh :)

Re: PIC, varför inte... går det....?

Postat: 4 april 2015, 10:51:13
av Erik M
Databladen säger b0 om d1.

Därtill är det koden här, en bit ovanför i början, som gör just det, initierar och definierar.

__CONFIG... gör diverse ovan det, mest stänger av saker.

Nå, jag startar min Åkerman å RRF & RLF vidare.

Vroooom....