PIC- začiatočník

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

PIC- začiatočník

#1 Příspěvek 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ď :)
Přílohy
Hello World.asm
Funkčný program
(2.25 KiB) Staženo 156 x
Uživatelský avatar
mat100
Příspěvky: 480
Registrován: 04 lis 2009, 00:00
Bydliště: Plzen-jih

#2 Příspěvek 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
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

#3 Příspěvek 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 :)
Uživatelský avatar
mat100
Příspěvky: 480
Registrován: 04 lis 2009, 00:00
Bydliště: Plzen-jih

#4 Příspěvek od mat100 »

Nemáš zač !

Každej musel nějak začít :wink:
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

#5 Příspěvek 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 :)
Přílohy
klávesnica.asm
(1.56 KiB) Staženo 123 x
Uživatelský avatar
mat100
Příspěvky: 480
Registrován: 04 lis 2009, 00:00
Bydliště: Plzen-jih

#6 Příspěvek 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
Přílohy
kl_vesnica_629 (1).asm
(1.48 KiB) Staženo 123 x
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

#7 Příspěvek 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 :)


:) :) :)
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#8 Příspěvek 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:
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#9 Příspěvek 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
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

#10 Příspěvek 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 ??
Uživatelský avatar
MiloPS3
Příspěvky: 279
Registrován: 07 srp 2010, 00:00

#11 Příspěvek 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
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

#12 Příspěvek 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 ?? :)
Uživatelský avatar
MiloPS3
Příspěvky: 279
Registrován: 07 srp 2010, 00:00

#13 Příspěvek 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/
Uživatelský avatar
Experience
Příspěvky: 11
Registrován: 30 čer 2011, 00:00

#14 Příspěvek 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
Uživatelský avatar
MiloPS3
Příspěvky: 279
Registrován: 07 srp 2010, 00:00

#15 Příspěvek 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/
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“