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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

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

Inlägg av Erik M »

Det känns fånigt, att det som är besvärligt är att sätta portarna på rätt vis.

Med en PIC12F629 tycker jag detta ska ge mig digital I/O på alla portarna GPIO<5:0> och <5:4> som output och <3:0> som input.

Kod: Markera allt

   bcf		STATUS,RP0	  ; Bank 0
	clrf	  GPIO		     ; Init GPIO
	movlw	 b'00111111'	 ; Set GP<5:0>
	movwf	 CMCON		    ; digital I/O
	
	bsf		STATUS,RP0	  ; Bank 1
	clrf	  ANSEL		    ; digital I/O
	movlw	 b'00001111'	 ; Set GP<5:4> as Output & 
	movwf	 TRISIO		   ; GP<3:0> as Input
	bcf		STATUS,RP0	  ; Bank 0
Men har jag fått ihop det rätt?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

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

Inlägg av lillahuset »

Folk tycker så mycket.
Själv tycker jag att man får skylla sig själv om man använder processorer från Microchip. Se där, nu tyckte jag också.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46956
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

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

Inlägg av TomasL »

Skulle vara intressant att veta vad du baserar det på?
Gissar att det beror på okunskap.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

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

Inlägg av lillahuset »

Gissa på du TomasL. Det verkar vara din starka sida.

Jag har använt PICar i otaliga projekt med början i 16C52. 16F84 var ett lyft. Men när idioterna på Microchip inte insåg att det var en oacceptabel "work around" att sänka matningsspänningen till 4V för att programmera om 16F877 (tror jag den hette) i ett system med typ 10000 processorer och dessutom ville ha mer än fyra gånger priset för en AVR pekade vi finger. Långa fingret.

Efter den upplevelsen hade jag en till näradödenupplevelse med Microchips finest. Efter det hänvisade jag mina kunder som ville ha PIC till Microchips återförsäljare i Sverige. Livet är helt enkelt för kort för att slösas på PICar. Ungefär som att det bara är idioter som betalar för att Microsoft ska pissa på dem. Just det, det är bara idioter som betalar för att Microsoft ska pissa på dem.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46956
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

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

Inlägg av TomasL »

Precis som jag befarade, okunskap, skygglappar och troligen brist på kompetens.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

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

Inlägg av lillahuset »

Såpass. Skönt att du verkar i Borås.
Användarvisningsbild
tecno
Inlägg: 27248
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

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

Inlägg av tecno »

Mycke snack och lite verkstad 'kojan'
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

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

Inlägg av lillahuset »

Fint att du är vaken tecno. Jag ska inte vädra mina fördomar om obildade sörmlänningar.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

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

Inlägg av Erik M »

Någon som har något att stötta upp med?
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

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

Inlägg av Magnus_K »

Du får verkligen ta detta inlägg med en nypa salt Erik M för jag kan inte assembler och jag är inget vidare bra på att programmera heller (varför svarar jag egentligen kan man undra...).

Det jag tror du vill göra är att:
  • - Stänga av den analoga modulen (ANSEL = 0)
    - Sätta TRISIO-registret så att du har digital ingång på port 0-3 och digital utgång på port 4-5 (TRISIO = b'00001111')
    - Sätta alla utgångar till låg efter reset, dvs GPIO = b'00000000'
I mina ögon ser det ut som att du direkt sätter portarna (GPIO) till 1 vilket kanske inte är vad du vill? Dvs att utgångarna ska slås på vid initieringen.

Om jag förstår databladet rätt så borde du sätta dom tre sista bitarna i CMCON-registret till 1, dvs slå av Komparatormodulen. Den ska vara default reset-mode, vad det nu innebär, men om du inte avser att använda den så är ju alltid "off" bra. :wink:

Hoppas jag inte rörde till det mer.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

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

Inlägg av Erik M »

Tack Magnus_K.
Och som vanligt är det med relevant diskussion och beskrivning man får ordning på saker å ting. :tumupp:

En aningen mysko grej med just P12F629 är att den inte har några analoga port-definitioner, ingen ANSEL.
Men låt oss titta igen:

Kod: Markera allt

    bcf     STATUS,RP0    ; Bank 0
    clrf    GPIO        ; Init GPIO
    movlw   0x07        ; Set RA<2:0> not comparator
    movwf   CMCON        ; (and perhaps as digital I/O)
Du har helt rätt i att ifrågasätta att jag ovan satte CMCON till 0011 1111, det ska bara vara <2:0> som ska vara satta (till 1). Det ska vara 0x07, inget annat.
Det är dock lite svårt förstå detta innebär att hela porten, GPIO, är satt till digital.

Nå, låt oss straska över till Register Bank (RP, inte RB?!) och ställa in annat:

Kod: Markera allt

    bsf     STATUS,RP0    ; Bank 1
Men vi kommenterar ut att pilla med ANSEL, då det inte finns någon på just denna PIC.
Inga portar som kan ställas analoga och ingen ANSEL.

Kod: Markera allt

;    clrf    ANSEL        ; digital I/O
Sedan ställer vi de numera(?) digitala I/O som Input eller Output...

Kod: Markera allt

   movlw    b'00001111'    ; Set GP<5:4> as Output &
   movwf    TRISIO         ; GP<3:0> as Input
   bcf      STATUS,RP0     ; Bank 0
...och går tillbaka till Register Bank 0.

Men om man nu måste tala om för GP<2:0> att de inte ska vara komparatordelar, måste man inte göra sammalunda med GP<5:3>...?

Vad dessa nu ska sägas till vad de inte ska vara, och om detta innebär att de då oxå blir digitala....?


Det känns som det vore bättre säga vad portar ska användas till, istället för vad de inte ska användas till... Det är bara en sak de kan vara, men det är många saker de inte ska vara, så att säga.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> En aningen mysko grej med just P12F629 är att den inte har några analoga port-definitioner, ingen ANSEL.

629'an saknar ADC, den har enbart komparator. 675'an har båda (och ANSEL register). Inget mysko alls.

> Men vi kommenterar ut att pilla med ANSEL, då det inte finns någon på just denna PIC.

Kolla CMCON istället.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

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

Inlägg av Kaggen »

> Men om man nu måste tala om för GP<2:0> att de inte ska vara komparatordelar, måste man inte göra sammalunda med GP<5:3>...?

Komparator modulen använder bara 3 pinnar, 2 ingångar och en utgång och dom pinnarna ligger på GP0-GP2. Det finns en pinout tabell i de flesta datablad som beskriver vilka pinnar som har vilka funktioner. Sid 6 i databladet för 16F629 t.e.x.


> Det känns som det vore bättre säga vad portar ska användas till, istället för vad de inte ska användas till... Det är bara en sak de kan vara, men det är många saker de inte ska vara, så att säga.

Man kan se det som t.ex att RP0 skall vara digital, utgång och sättas till hög. Eller se det som att RP0 skall vara: *inte* analog, *inte* ingång och *inte* låg. Är dock samma sak i slutändan. :)


Man kan dock diskutera hur bra default konfiguration är, men detta kommer ju iaf att skilja väldigt beroende på vad du skall göra med microcontrollern i fråga.

Fördelen med ATmega är att det finns färre varianter av dessa och de har ganska lika pinout och register. På PIC sidan finns det ett stort antal varianter som alla har ganska olika funktioner och register som skall ställas in, vilket också gör att det är klurigare att skriva bibliotek som funkar sömlöst med alla varianter.

Skulle också rekommendera att du börjar använda "banksel" istället för "bcf STATUS,RP0", speciellt om du skriver assembler till olika PIC modeller. Den sätter rätt bank bara du anger registret, t.e.x "banksel GPIO" konverterar assemblern till just "bcf STATUS,RP0" i ditt fall. Du behöver då inte bry dig om det är fler eller andra bankbitar som skall sättas på andra PIC modeller.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

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

Inlägg av Erik M »

OK, jo.

Dessvärre är jag en smula låst till just PIC16F630, därför att Scalextric använder den till sitt SSD.

Men i alla fall; i korthet ser programmet ut såhär:
(ANSEL åter utkommenterad eftersom det är en PIC16F630.)

Kod: Markera allt

#include <P16F630.INC>

    org 0
  
Start:

    bcf        STATUS,RP0    ; Bank    0
    clrf       PORTA        ; Init    PORTA
    movlw      0x05        ; Set    RA<2:0>    to
    movwf      CMCON        ; digital    I/O
    bsf        STATUS,RP0    ; Bank    1
;    clrf      ANSEL        ; digital    I/O
    movlw      0xFF        ; Set    RA<5:0>    as    inputs
    movwf      TRISA        ; 
    bcf        STATUS,RP0    ; Bank    0
    
    bcf        STATUS,RP0    ; Bank    0
    clrf       PORTC        ; Init    PORTC
    bsf        STATUS,RP0    ; Bank    1
;    clrf      ANSEL        ; digital    I/O
    movlw      0x00        ; Set    RC<5:0>    as    outputs
    movwf      TRISC        ;
    bcf        STATUS,RP0    ; Bank    0

Main:

    btfss        PORTA,0
    goto         $+3
    bsf          PORTC,0
    bcf          PORTC,5
    
    btfsc        PORTA,1
    bsf          PORTC,1
    
    btfsc        PORTA,2
    bsf          PORTC,2
    
    btfsc        PORTA,3
    bsf          PORTC,3
    
    btfsc        PORTA,4
    bsf          PORTC,4
    
    btfsc        PORTA,5
    bsf          PORTC,5
        
    goto    Main

    end
Och skulle funka enligt:
(Och det går genom (kompileras) MPLAB IDE 8.00 utan fel.)

IF PORTA,0 THEN PORTC,0 AND NOT PORTC,5
IF PORTA,1 THEN PORTC,1
IF PORTA,2 THEN PORTC,2
IF PORTA,3 THEN PORTC,3
IF PORTA,4 THEN PORTC,4
IF PORTA,5 THEN PORTC,5

Där PORTA har tryckkontakter mot V+ och på PORTC sitter det LED'ar mot V0.
Trycker jag på PORTA,0 så tänds PORTC,0 och släcks PORTC,5.
Trycker jag på någon av de andra så tänds motsvarande LED.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

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

Inlägg av Erik M »

Kaggen skrev: Sid 6 i databladet för 16F629 t.e.x.
Just här dock PIC12F629. Och jag hoppas att jag inte skrivit fel. :oops:

Men jag får byta tillbaka till PIC16F630, trots allt.
Som har samma problem som PIC12F629... dvs inga analoga portar.
Skriv svar