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

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ů.

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

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