Problém s PIC12F1572

Tento typ PIC má i výstupní latche, nemělo by se zapisovat do nich?

Mělo,ale jde to i do PORTx.

[forum.mcontrollers.com/t/goto-nebo-bra-kdy-je-pouzit/3243/1)

Tak z toho nejsem ani trochu moudrej :astonished:)

Pokud to máš takhle tak používej bra dokud ti při kompilaci nenapíše error.

Ahoj, dal jsem BRA a kompilace i program je v pohodě. Prosím Tě a můžu používat BRA místo GOTO vždy. V pár programech mám i skoky s použitím dolaru a nerozumím téhle Tvé větě:

“Bacha na to!!!když skáčeš pomocí bra $+6 nebo bra $-6 tak to skočí o 3 řádky, ALE goto $+6 nebo goto $-6 skočí při líchém počtu instrukcí o 4.”

Nerozumím, proč skáče o jiný počet řádků, než je zadáno.
Děkuji

Já datasheet tohohle švába nečetl,ale to skákání pomoci $ se týká hlavně pro 18F.

Jde o to že PIC počítá po 2, nejde skákat po lichých číslech. když už dáš někam $ tak si to v simulaci ověř.

Bra $ + 10 není to samé jako goto $ + 10, ale není to pravda vždy.

Jsem po noční a nerad bych se do toho zamotal :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

No já používám GOTO $ +/- u PIC12F675 a jede to v pohodě. Je fakt že jsou to sudá čísla. Lichá jsem nikde nepsal, tak nevím.
Simulátor je teprve v plánu, zatím je to pro mě španělská vesnice, jako ostatně spousta dalších věcí. Zatím se učím a :slight_smile:
Tenhle PIC jsem chtěl vyzkoušet, protože je o 10,-Kč levnější než 675, pro mou aplikaci plně dostačující a má mnohem víc možností v oblasti časování WDT a pracovní frekvence.
Pracuji zrovna na bateriově napájeném snímači otáček a jde mi především o snížení spotřeby.
Děkuji za trpělivost :slight_smile:
L.

Ahoj tohle se týká 18F řady, ta funguje trochu jinak.
PIC12,16 pokud si vzpomínám dobře, tak má 14b programové slovo a jsou v skokách možné jak liché tak sudé adresy. U PIC18 je 16b programové slovo a tam si to zjednodušili v návrchu tak, že se skáče jen po sudých adresách, lichá je na půlku řádku a to nejde.

Na zápis do výstupních pinů si zvykni používat odpovídající LATx pokud to ten konkrétná PIC má. Do PORTx se nezapisuje, tam se jen čte stav vstupů. Ono to sice u některých brouků funguje, ale jen u některých, navíc se pak můžeš dostat do R-M-W pasti a tato chyba/ nedokonalost tě může pěkně ztrestat.

Osobně bych na začátek používal GOTO než BRA. BRA dosáhne jen 127 adres daleko, GOTO obsáhne celou paměť. Ale chápu kam tím Honza míří, šetří to paměť.

BRA $+2 je to stejné co GOTO $+2. Znak dolaru je aktuální adresa PC, takže $ + 2 skočí o 2 adresy dál.

Ahoj, děkuji za další rady.
Jen nerozumím této větě: *Na zápis do výstupních pinů si zvykni používat odpovídající LATx pokud to ten konkrétná PIC má. Do PORTx se nezapisuje, tam se jen čte stav vstupů.

Můžeš mi prosím upřesnit, kde mám tuto chybu?
Děkuji pěkně předem
L.*

Luba : v #DEFINE máš
#DEFINE LED1 PORTA,0
tam máš mít LED1 LATA,0

Mrkni do datasheetu na stranu 109, tam je port nakreslený jak je poskládaný. Většina PICů už to má takhle a u spousty novejších řad už zápisem do PORTx ne ti změna nepromítne na výstupní piny.

Ahoj
aha, už to chápu. No, používal jsem to tak u 675 a tak jsem to jen okopčil.
Opravím to. Děkuji :slight_smile:

No a pro všechny, komu by pomohlo mé nastavení 1572 v úvodu vlákna, tak si doplňte toto:

BANKSEL OPTION_REG
movlw 00H
movwf OPTION_REG

Na jednoduchém blikání LED to nebylo poznat, ale jak jsem dal složitější program, dělal mi psí kusy.
Je potřeba vynulovat OPTION_REG

Můžeš použít přímo CLRF OPTION_REG
Nicméně, nevidím jedinný důvod k tomu ho nulovat a na to co tam máš v assembleru nemá vliv.

Ahoj, Jj, taky varianta.
No, jestli jsem dobře četl v datasheetu, tak bez nulování OPTION_REG nelze povolit jednotlivé pull-upy - strana 115, jestli to správně chápu. V každém případě po tomto zápisu vše chodí jak má.
Děkuji za příspěvěk.

Ještě dodám… jak píšu v minulém příspěvku, tak s jednoduchým blikáním LED jak mám na začátku vlákna to chodilu dobře. To byl ale jen prográmek na rozběhnutí PIC. Teď tam píšu jiný, s infrasnímačem a Schmitt KO a tam mi to zlobilo.

Tak to jsi pochopil špatně. Z DS doslova:

Takže co se týče pull-upů, jde “jen” o bit /WPUEN toho registru, což je globální povolení všech pull-upů, které si pak můžeš pro jednotlivé piny ještě individuálně povolovat v registru WPUA.

Ahoj, děkuji za opravu. Máš pravdu. Napsal jsem to špatně. Pro pull-upy pravdu stačí nulovat jen bit WPUEN. Já ve svém programu ostatní funkce v tomto registru nepotřebuji, tak jsem jej vynuloval celý. Ale správně je to skutečně jak píše Mahoney.

Nepíšu to proto, že bych tě chtěl nějak buzerovat nebo si na tobě honit triko a podobně, ale pokud to chceš dělat, je třeba naučit se myslet přesně. Na každém bitu záleží, a na těch v SFR registrech obzvlášť. Ale:

Ještě jednu radu na závěr Ti dám, tedy pokud můžu: Měj na paměti, že na světě jsou i jiné a daleko důležitější věci, než elektronika, počítače a mobily. Je snadné elektronice propadnout a obětovat tomu moře času, ale žádoucí je přesně pravý opak, jinak život může brát, když člověk zapomene, proč tu na světě vlastně je (klasické “Člověk míní, život mění”, což byl i můj případ). Tedy všeho s mírou.

Ahoj, jasně, v pohodě, pochopil jsem že to nebylo myšleno zle. Jsem vděčný za každou radu, protože jak jsem už psal, s mikrokontrolery si hraju teprve asi rok.

Elektronika je koníček, ke kterému jsem se vrátil po více 32 letech-od školy a prvního bastlení. Jinak jsem silnoproudař, elektroniku jsme měli ve škole jen velmi okrajově a navíc počítač byl v té době nevídaný výkřik techniky :slight_smile:
O angličtině ani nemluvím… Proto se s tím tak peru, ale snažím se zas naučit něco nového… za dlouhých zminích dní. Teď přes léto na to zas mít čas nebudu :slight_smile:

1 Like