Stránka 1 z 2

PIC- začiatočník

Napsal: 30 čer 2011, 18:40
od Experience
Zdravím, nedávno som sa začal zaujímať o mikroprocesory PIC, a mám pár otázok ohľadom niektorých vecí. Doteraz som programoval tak, že som vačšinou upravoval programy, takže veci typu pokus- omyl, no chcel by som ich už začať sám tvoriť, no niesu mi jasné niektoré veci ohľadom registrov, začal by som ohľadom registru PORTC. Jedná sa o jednoduchý program Hello World, takže tu je funkčný program:


No nerozumiem 1 veci, to, že dám do TRISC nejakú hodnotu, mi je jasné, tým sa nastavujú I/O, ale prečo dám následne do PORTC tú istú hodnotu akurát znegovanú ?? Díky za odpoveď :)

Napsal: 30 čer 2011, 19:58
od mat100
Hoj

Vždyť je to úplně jasné !

bsf STATUS,RP0 ; select Register Page 1
bcf TRISC,0 ; make IO Pin C0 an output
bcf STATUS,RP0 ; back to Register Page 0


tím nastavíš PORTC jako výstupní

bsf PORTC,0 ; turn on LED C0 (DS1)


tím uvedeš PORTC do stavu vysoké úrovně

S negací to nemá nic společného

Napsal: 30 čer 2011, 20:07
od Experience
Aha, jasné :) čiže zápisom do TRISC nastavujem I/O a zápisom do PORTC priraďujem úrovne, super, díky moc :)

Napsal: 30 čer 2011, 20:18
od mat100
Nemáš zač !

Každej musel nějak začít :wink:

Napsal: 01 črc 2011, 21:46
od Experience
Zdravím, tak mám ďalší problém :) Snažím sa rozbehať zase v celku jednoduchý program, len si už neviem rady :) Jedná sa o zapojenie maticovej klávesnice a ledky, kde LEDka blikne toľkokrát, aké číslo na klávesnici stlačím. Inšpiroval ma tento link:

Kód: Vybrat vše

http://www.8bitu.cz/clanek/serial-pic16f84-14-maticova-klavesnice/

S ktorým som si môj program dokonca aj skontroloval, a niekoľko krát :) , no chybu som nenašiel. Program sa správa tak, že po naprogramovaný sa nič nedeje, ani po stisknutí tlačítka, keď som v programe dokonca nemal túto časť: clrf PORTA
clrf PORTC
MOVLW 0

Tak LEDka dokonca samá blikala, čomu som už že vôbec nechápal :) A hlavne nechápem, ako tá časť môže spôsobiť také zmeny, zvlášť, keď sa nachádza na začiatku programu.

Za akékoľvek rady vám vopred ďakujem :)

Napsal: 02 črc 2011, 20:04
od mat100
Hoj

Neměl jsem moc čas to kontrolovat, ale pár chyb jsem tě opravil.

Největší chyba byla, že jsi u názvů návěstí jsi psal dvojtečky a v programu jsi psal jen zázev bez dvojtečky ( neshodovaly se názvy)

Pak tam ještě byla nějaká, ale už si nezpomenu.

S pozdravem Matěj

Napsal: 31 črc 2011, 19:54
od Experience
Zdravím, mám vcelku jednoduchú otázku:

Je toto v programe :

MOVLW 0x03
MOVWF PORTC


To isté ako keby tam napíšem toto ??

clrf PORTC
BSF PORTC,0
BSF PORTC,1

Díky za odpoveď

Znie to možno divno, len problém je v tom, že som doteraz bol v tom, že to je to isté, len keď teraz píšem program pre PIC16F688, tak zisťujem, že mi tam BSF a BCF robí desný bordel :)


:) :) :)

Napsal: 31 črc 2011, 20:58
od Chenzee
Mělo by to provést to stejné. Co ti to dělá za bordel? Banky registrů přepínáš správně? Já tento způsob ovládání výstupů používám cela běžně bez problémů. :wink:

Napsal: 31 črc 2011, 21:05
od Atlan
ale nieje to to iste.... res može sa to chovať inač ako chces. Viac najdeš tu.... http://forum.mcontrollers.com/viewtopic ... ht=problem

Napsal: 01 srp 2011, 09:07
od Experience
Tak vyskúšal som teraz použiť tieňový register.

Kód: Vybrat vše

Start
   bsf     STATUS,RP0       ; Banka 1
   MOVLW   0x00
   MOVWF   TRISC
   MOVWF   TRISA
   bcf     STATUS,RP0       ; Banka 0
   clrf   PORTC
   BSF      PORTC_SHADOW,1
   MOVF   PORTC_SHADOW,W
   MOVWF   PORTC
   GOTO   Start
   END


A výsledok ?? Namiesto 1 LEDky, svietia 2, teda H je na pinoch RC1 aj RC2, čo robím zle teraz ??

Napsal: 01 srp 2011, 15:46
od MiloPS3
Cau, jako co mas nadefinovanej ten "PORTC_SHADOW" ?
co takle

Kód: Vybrat vše

Start
   bsf     STATUS,RP0       ; Banka 1
   MOVLW   0x00
   MOVWF   TRISC
   MOVWF   TRISA
   bcf     STATUS,RP0       ; Banka 0
Main
   clrf   PORTC
   BSF      PORTC,1
   MOVF   PORTC,W
   MOVWF   PORTC
   GOTO   Main
   END

jinak by to melo bejt takle za predpokladu ze ses v 1 bance a portc je nastavenej jako vystup a sou vyply periferie sdileny na tom porte

Kód: Vybrat vše

  clrf   PORTC_SHADOW
   BSF      PORTC_SHADOW,1
   MOVF   PORTC_SHADOW,W
   MOVWF   PORTC

Napsal: 01 srp 2011, 17:20
od Experience
Bolo to tým, zabudol som na clrf PORTC_SHADOW :oops: díky moc :)

Mal by som ešte 1 otázku, akým spôsobom je možné hodnotu z nejakého registra dostať na 7 segm. displej ?? :)

Napsal: 01 srp 2011, 17:41
od MiloPS3
Priklad: 7S se spolecnou katodou
pripojis si na port (treba PortC) 7S pres odpory samozrejme a to tak ze pin C0 na A 7S, C1 -> B, C2->C ..... C6->G, pro zobrazeni 8 na 7S (vsechny segmenty sviti) hodnota 01111111

Kód: Vybrat vše

movlw  0b01111111    ;8 sviti segmenty A+B+C+D+E+F+G
movwf  Segment
.
.
movf  Segment,W
movwf  PortC

pro zobrazeni 1

Kód: Vybrat vše

movlw  0b00000110    ;1 sviti segmenty B+C
movwf  Segment
.
.
movf  Segment,W
movwf  PortC

za predpokladu rozlozeni segmentu http://www.jet.ic.cz/other/disp.png

EDIT: tady ale se spolecnou anodou http://www.8bitu.cz/clanek/serial-pic16f84-23-zobrazovace-uvod-a-multiplexni-rezim/

Napsal: 01 srp 2011, 18:02
od Experience
Díky za odpoveď.

Tomu rozumiem, dám konkrétny príklad:
Mám Čítač, ktorý postupne inkrementuje nejaký register, ako by sa dalo spraviť počítanie tých impulzov na poviem príklad troch multiplexne zapojených 7 segm. Multiplexné zapojenie 7 segm mi je jasné, skôr ma zaujíma, čo musí byť medzi čítačom a 7 segm :) díky

Napsal: 01 srp 2011, 18:27
od MiloPS3
potrebujes prevect HEX na BCD napr. 255 na 3 cislice 2-5-5
http://www.8bitu.cz/clanek/prevodniky-z-10b-kodu-na-4-digity/