Stránka 1 z 1
Zpozdeni pri vycitani portu
Napsal: 19 lis 2007, 00:43
od vak
Dobry den,
prosim o radu, po jake dobe je mozne vycitat port u PIC 16F628 po prepnuti ze stavu vystupu na stav vstup? Mam v programu:
MOVLW 0x67 ;01100111
BSF STATUS,RP0 ;Banka1
MOVWF TRISB
BCF STATUS,RP0 ;Banka0
MOVF PORTB,W ;čtení
MOVF PORTB,W ;čtení
MOVF PORTB,W ;čtení
prijde mi to, ze cim delsi program mam, tim musim vicekrat vycitat PORTB. Omlouvam se za zacatecnicky dotaz, ale jsem jen zacatecnik.
Predem dekuji za jakoukoliv radu,
vak
Napsal: 19 lis 2007, 09:46
od jankop
Pouze tuším, o co ti jde. Stav portu je možné číst bezprostředně následující instrukcí. Ale... Pokud jsou na portech parazitní kapacity, pak obecně musíš čekat, až se stav ustálí. To je ovšem obvykle problém nevhodně navržené konstrukce. A pokud máš třeba pullupem neošetřené vstupy, tak se stav portu nemusí ustálit nikdy. Pro objektivnější posouzení by bylo třeba schéma a více podrobností.
Napsal: 19 lis 2007, 10:48
od vak
Diky za odpoved,
pouzivam vystupy RB0, RB1, RB2. Na nich jsou napojeny anody cislicovek a zaroven jsou zde tlacitka pres odpory 1k proti zemi. Katody jsou napojene na pos. registr 4094 a ovladany pres RB3 a RB4. Ostatni vystupy jsou odpojene.
Nastaveni OPTION_REG je:
MOVLW 0x05 ;00000101
MOVWF OPTION_REG ;předdělič /64 pro T0
takze pull-up odpory by mely byt pripojeny. Pri prvnim az cca tretim vyctenim portu je stav RB0-RB2 log0, az pri ctvrtem a dalsim je stav log1.
Toto se prodluzuje s delkou programu.
dekuji za jakykoliv napad,
vak
Napsal: 19 lis 2007, 16:49
od jankop
Nápad je jednoduchej. Nemáš správně definované logické úrovně na PB0- PB2. Žádný PullUp nepomůže, když ke vstupu připojíš diodu, která ti limituje vstupní logickou úroveň. A to je tvůj případ s displejem. Rozhodovací úroveň vstupů PIC je cca 1/2 Udd, tj běžně asi 2,5V. Jenže ty máš vstupní napětí sotva této úrovně dosahující. Pak se nesmíš divit, že jsou problémy.
Napsal: 19 lis 2007, 22:22
od vak
Pouzil jsem tohle zapojeni
http://www.cmail.cz/doveda/konstrukce/reg_rv2/index.htm , jen jsem nahradil 74HCT164 obvodem 4094, myslite ze je to tim? Cim mam tedy zmenit ty napetove urovne?
Diky,
vak
Napsal: 19 lis 2007, 23:10
od jankop
Nemyslím, že je problém v jiném IO. Problém je podle mě v chybně navržené konstrukci. Můžeš zkusit to ošetřit programově. Tj. do posuvného registru před čtením tlačítek nahrnout '11111111'B
Ale optimální to asi není. Mimochodem, proč se neobrátíš na autora?
Napsal: 20 lis 2007, 19:24
od MiLe
Zdravim,
neviem ci sa vyjadrim celkom presne a spravne ale:
ta 4094ka ti to LEDkovy displej "neutiahne"... a s tymi 330R odpormi v serii uz vobec nie... S tymto obvodom som robil pokusy ovladat nim LEDky - ako tak to da prud cca 1mA pre LEDky bez odporov. Pouzil som 0603 SMD /cervene/ LEDky. Ako tak svietili ale displej s tym asi moc nerozbehas...
Napsal: 26 lis 2007, 15:05
od vak
Dobry den,
diky za rady. Po naplneni pos. registru jednickami cteni klaves bezi. Funguje to jak s 74HCT164, tak s 4094 naprosto stejne. Ovsem problemy se presunuly na cteni snimacu. Autora jsem kontaktoval, ale nevi, kdy by mohl byt problem. Mohl bych poprosit o radu co zmenit v konstrukci, aby bylo vse spravne navrzeno a PIC se nechoval nevyzpytatelne?
Predem moc dekuji,
vak
Napsal: 26 lis 2007, 15:40
od jankop
Vůbec se nezmiňuješ, jakého charakteru jsou tvoje problémy se snímači. Dokonce tajíš o jaké snímače jde! Jakým programem je čteš?
Ostatně ta konstrukce je celkově velmi přitažená za vlasy, dík použitému softwarovému A/D převodníku. Každá druhá PIC má integrovaný 10bitový A/D a autor převodník pozoruhodně vlastnoručně "vyrábí". Důvod této skutečnosti mi zatím zůstal utajen.
Napsal: 26 lis 2007, 16:00
od vak
Tuhle vstupni cast nepouzivam, Port A mam cely odpojen, v budoucnu by tam mela byt jen 4 rele. Pouzivam snimace SMT 160-30 pripojene na RB5 a RB6. Cteni snimacu fungovalo v poradku do te doby, nez jsem zacal davat do posuvneho registru same jednicky. A funguje tak zahadne, ze volam 2x stejnou rutinu a prvni probehne a druha ne. Pokud prvni preskocim a oremuju ji, funguje druha. Pokud preskoceni necham a odremuju kod, prestane to behat. Prijde mi to, ze to je zavisle na delce programu. Zrejme se asi ta druha rutina nestaci vykonat. Ovsem kdyz vynecham cteni tlacitek, cteni snimacu funguje. Vypada to, ze jsou opravdu nejak spatne definovane urovne na portu B a tim se nejak zpozduje cteni celeho tohoto portu. Ale nevim co s tim udelat. Snad jsem to popsal dostatecne. Moc dekuji za jakoukoliv radu.
vak
Napsal: 26 lis 2007, 16:32
od jankop
Prostě je něco špatně. Nejspíš v programu, nebo stačí nižší napájecí napětí pro ten teplotní senzor. Pro rozbor je nezbytné skutečné schéma zapojení a skutečně použitý software. Jinak je to zbytečná ztráta času.
délka programu
Napsal: 16 pro 2007, 06:02
od spoj_alfa
Zmiňuješ se o různém chování programu při jeho rozdílné délce.
Neobsahuje program náhodou manipulaci s pozicí akt.instrukce pomocí PCL?
Pokud ano, jednoduchej fígl aniž by ses to snažil blíž pochopit je odpočítat si řádky s instrukcemi tak, aby funkční část tohoto kódu nebyla v blízkosti celých násobků 256-ti, tedy uložit tuto část tam, kde registr PCL nepřetéká.