Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

PIC16F874 Nejde nastavit PORTD jako výstupní

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Seiten



Založen: Aug 11, 2010
Příspěvky: 3

PříspěvekZaslal: st srpen 11 2010, 21:55    Předmět: PIC16F874 Nejde nastavit PORTD jako výstupní Citovat

Zdravím.
Programuju zrovna výše zmíněný procesor a nejdou zapsat nuly do TRISD.
Zkoušel jsem tyto příkazy:
---------------------------
movlw 0x00
tris PORTD (Tohle vyhodí chybu už při kompilaci v MPLAB IDE)

--------------------------
movlw 0x00
movwf TRISD (MPLAB chybu nevyhodí, ale nefunguje to)
--------------------------
Nefunguje ani příkaz BCF

Zkoušel jsem i poslat nuly přímo na adresu, kde je TRISD, ale také bez úspěchu.
Podle datasheetu lze port D použít pro paralelní přenos, nebo jako I/O port. Implicitně je funkce portu D jako paralelního vypnutá. Před rokem jsem programoval PIC18F452 a u něho nebyl problém a taky má port D jako I/O, nebo paralelní.
Nevíte někdo, kde může být chyba?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
kony2807



Založen: Jul 29, 2007
Příspěvky: 305
Bydliště: Ostrava

PříspěvekZaslal: st srpen 11 2010, 22:21    Předmět: Citovat

Zkus místo tris příkazu použít přepnutí banky na správnou stránku registrů ( BSF INTCON,...) a náslené movlw a movwf . Nezapomeň se po initu vrátit zase zpět do banky 0 .
_________________
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Seiten



Založen: Aug 11, 2010
Příspěvky: 3

PříspěvekZaslal: st srpen 11 2010, 23:16    Předmět: Heuréka Citovat

Tak konečně to funguje. Dík moc za radu! Přepínání mezi bankami teda není moc user friendly. Nejdřív jsem si musel nadefinovat adresu STATUS registru a až potom jsem mohl použít BSF. Nějak tomu ale nerozumím. V INC souboru jsem sice našel přímo nadefinovanou "proměnnou?" RP0 na přepínání banky, ale když když sem chtěl použít BSF, tak MPLABu chyběla hodnota. Jak mu může chybět hodnota, když chci nastavit jeden bit na jedničku to nechápu. A tak jsem se podíval do INC pozorněji a byly tam vypsány všechny položky status registru pod sebou a každá měla svoji adresu. Jestli je to nadlouho, tak to nemusíš vypisovat. Jen by mě to zajímalo proč to tak je Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
kony2807



Založen: Jul 29, 2007
Příspěvky: 305
Bydliště: Ostrava

PříspěvekZaslal: čt srpen 12 2010, 7:15    Předmět: Citovat

Používáš na začátku
kód:
   LIST P=16F874, R=DEC
   INCLUDE<P16F874.INC>
?
R=DEC nahraď podle vkusu , já většinou v základu používám desítkovou soustavu , v případě že potřebuju binární číslo , používám zavedenou formu " B'ooooooo' " .
Nezaměnil si náhodou revizi procesoru ? (to áčko za názvem)

Ještě k tomu tris - odnauč se jej používat. Je to zastaralý příkaz z dob 16F84ky , u nových bývá funkční jen z důvodu zpětné kompatibility , sám výrobce však používání již nedoporučuje . Třeba u 16F887 by ti tris neprošel .

_________________
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
MartinOV



Založen: Apr 01, 2010
Příspěvky: 112

PříspěvekZaslal: čt srpen 12 2010, 9:32    Předmět: Citovat

Pokud se ti nechce sledovat který registr je v které bance, doporučuji používat předdefinované makro "banksel".
kód:
banksel REGISTR

Tohle se přeloží jako instrukce bcf nebo bsf příslušných RPx bitů ve Status. Pozor ale na jednu chybu v MPLABu. Když napíšeš makro hned na návěští, vyhodí to chybu "Illegal label":
kód:
 org 0
 goto Start
(...)
Start banksel 0 ;- takhle ne!
 movlw xx
 movwf TRISA


Pro nepřímé adresování se dá používat makro "bankisel". U některých procesorů ale vůbec není potřeba.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Chenzee



Založen: Jun 26, 2007
Příspěvky: 464
Bydliště: Vysočina

PříspěvekZaslal: pá srpen 13 2010, 19:46    Předmět: Citovat

citace:
V INC souboru jsem sice našel přímo nadefinovanou "proměnnou?" RP0 na přepínání banky, ale když když sem chtěl použít BSF, tak MPLABu chyběla hodnota


např. BSF STATUS,RP0 a musí to fungovat pokud máš dobře zaveden soubor XXX.INC.

_________________
Žádnej učenej z nebe nespadl ...


Naposledy upravil Chenzee dne pá srpen 13 2010, 20:52, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: pá srpen 13 2010, 20:22    Předmět: Citovat

Bez prepínania bank-ov sa ani nezaobídeš.
Pseudo inštrukcia banksel vygeneruje dve inštrukcie
kód:

    bsf/bcf  STATUS, RP0
    bsf/bcf  STATUS, RP1

Ja si to zjednodušujem
kód:

 #define _RP0_C      bcf   STATUS,RP0
 #define _RP0_S      bsf   STATUS,RP0

 #define _RP1_C      bcf   STATUS,RP1
 #define _RP1_S      bsf   STATUS,RP1
; a v programe píšem
   _PR0_S
....
....
   _RP0_C

Ak je v bankoch zmätok, robí to psie kusy.
V stránkovaní programu tiež je dobé používať nejaký systém.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Burajko



Založen: Aug 21, 2009
Příspěvky: 1811

PříspěvekZaslal: pá srpen 13 2010, 23:06    Předmět: Citovat

Pre toto pri vacsich softoch pouzivam c.99% pripadov padu softov bol bank...
A kaslem na cely microchip.

_________________
Už druhý krát strihám a furt je to krátke
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: po srpen 16 2010, 19:46    Předmět: Citovat

Banky jsou nutné zlo u těchto jednočipů. Při ruce je dobré mít vytištěný plánek registrů/bank z datasheetu.
Viděl jsem prima fintu, která zpřehlední program v .asm, je hned jasné kde, která banka je. Samozřejmě přepínání i zde zůstává na programátorovi.


BANK1 EQU 0x80 ; Reduce assembler whining
...
př.
banksel OSCCAL
movwf OSCCAL ^ BANK1
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Seiten



Založen: Aug 11, 2010
Příspěvky: 3

PříspěvekZaslal: st srpen 25 2010, 1:00    Předmět: Načtení registru do W Citovat

Opět po dlouhé době zdravím. Potřebuju teď poradit s něčím jiným.
Načtu do registru, jehož adresu jsem si nadefinoval v inicializaci nějakou hodnotu (Je to přijatý bajt z dálkového ovladače), např b'10101010'
Hodnotu toho bajtu chci vzít do W registru a pak ji poslat podprogramu, který ji vypíše na displej. Všechno funguje až na to, že hodnota toho bajtu co se vypíše na displej je vždy stejná i když by neměla.

Stalo se mi to už jednou, když jsem nastavil do registru hodnotu a pak na ni použil DECF a poté ji načetl do W registru a vypsal na displej. Tohle jsem dělal ve smyčce, takže by měli být hodnoty na displeji pokaždé o jedničku menší, ale nestalo se tak... hodnoty byly pořád stejné (byl to přesně tenhle bajt: 00100111 ), který se pořád vypisoval. Můžete někdo prosím poradit čím to je?

Zkoušel jsem ten program i v PIC simulátoru a tam to dělalo to samé, takže je zřejmě něco co musím do programu dopsat, jen nevím co.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
kony2807



Založen: Jul 29, 2007
Příspěvky: 305
Bydliště: Ostrava

PříspěvekZaslal: st srpen 25 2010, 5:10    Předmět: Citovat

Nepoužil si náhodou omylem pro načtení do W místo MOVF Nazev_Registru,0 třeba MOWLV Nazev_Registru ? Častá chyba . Prnví ti skutečně zkopíruje hodnotu , kdežto druhý příkaz ti do W registru veme adresu tebou nadefinovaného registru !
Ač to dobře vím , stejně se mi to u rozsáhlejších projektů někdy z únavy či blbosti stane a to je potom nadělení to najít Smile .

Pokud máš svůj registr nadefinovaný na adrese 27x0Fh , je diagnoza jasná .

_________________
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek


Naposledy upravil kony2807 dne čt srpen 26 2010, 11:35, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Chenzee



Založen: Jun 26, 2007
Příspěvky: 464
Bydliště: Vysočina

PříspěvekZaslal: st srpen 25 2010, 5:53    Předmět: Citovat

Co psal KONY je i můj případ. Pro přesnější pomoc bývá lepší sem dát program / část programu, kde ti to dělá neplechu ... ono se hned líp hledá. Dle tvého zadání je to spíše věštění ... důvodů může být XYZ. Např. mě se ještě stává, že si pro jednodužší simulaci programu do místa, kde se načítá nějaká hodnota "z venčí" zařadím movlw .xx a tím testuji ... no a po odladění ji někdy zapomenu odmazat Laughing ... někdy si to uvědomím hned, ale někdy na to koukám jak puk
_________________
Žádnej učenej z nebe nespadl ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: st srpen 25 2010, 6:23    Předmět: Citovat

Chenzee: na to si definujem

kód:

TESTx   EQU    1   ;  1..test, 0...neprekladaj

..

..

   if TESTx == 1 THEN
; test program
..
..
.
     endif

po odladení prepíšem iba jeden riadok.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Burajko



Založen: Aug 21, 2009
Příspěvky: 1811

PříspěvekZaslal: čt srpen 26 2010, 0:19    Předmět: Citovat

frpr666 napsal(a):
Banky jsou nutné zlo u těchto jednočipů. Při ruce je dobré mít vytištěný plánek registrů/bank z datasheetu.
Viděl jsem prima fintu, která zpřehlední program v .asm, je hned jasné kde, která banka je. Samozřejmě přepínání i zde zůstává na programátorovi.


BANK1 EQU 0x80 ; Reduce assembler whining
...
př.
banksel OSCCAL
movwf OSCCAL ^ BANK1


Ked volas prerusenia a niekde sa to zamota(prep bank reg.) mas co robit.Ked taka eventualita pride len raz za den...a + ked ma ten soft 5kB (v asm)a po zbernici canbus ovlada 2 dalsie uP....
Uz jednoznacne len C.Dnes nie je problem z vykonom uP(a cenou ide) ako pred 10r.

_________________
Už druhý krát strihám a furt je to krátke
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: čt srpen 26 2010, 19:24    Předmět: Citovat

citace:
Re: ...Uz jednoznacne len C...
. OK souhlasím, že C je velký přínos. O .asm versus .C na 8-bitech už bylo popsáno hodně diskuzí. Podle mě nikomu neuškodí:1/ když se podívá do datasheetu na podporované instrukce a 2/ když se občas podívá do disassembly .lst
Na druhou stranu v .asm lze dělat neuvěřitelné kousky. Tohle to dokázal borec na atmega88!!!


http://en.kendincos.net/video-hprnprhj-craft-by-lft.html

http://www.linusakesson.net/scene/craft/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.37 sekund