Stránka 2 z 2

Napsal: 14 bře 2011, 22:09
od Atlan
skus dat preč sleep...

Napsal: 15 bře 2011, 07:21
od abcdef
dakujem, že si aspoň niekto všimol moje obrovské problémy. Dám vedieť...

Napsal: 15 bře 2011, 07:45
od procesor
Treba si pozrieť obmedzenia pre simulátor týkajúce sa toho konkrétneho PICu. Nie všetko je dokonale simulované a podporované.
A rýchlosť simulácie je mnohonásobne pomalšia ako je reál. Možno stačí počkať...

Pre testovanie v simulátore uprav OPTION_REG
takto:
BSF STATUS, RP0
CLRF TRISB
; nasledujúce dve istrukcie skrátia SLEEP mod
MOVLW 0XF8
MOVF OPTION_REG ; delic WDT sa nastavi 1:1
;
BCF STATUS, RP0
.
.
.

Napsal: 19 bře 2011, 16:49
od abcdef
Dakujem Atlanovi a Procesorovi, že mi pomohli. Veľmi tazko sa mi to dostáva do hlavy. Najviac som prekvapený, že simulátor to nevie simulovať v reálnom čase.
Pri daľšej úlohe som mal experimentovať s preddeličkou (bity WDTPSx) v registri WDTCON. Tak som teda experimentoval, a funguje to(v kontaktnom poli).
Ale ako je možné, že to funguje, keď po "preštelovaní" WDTCON v Banke2 sa už nevrátim do Banky0 kde je PortB ???
A napriek tomu to funguje !!!

title "Projekt 3: Blikajuce svetlo podruhé"
LIST P=16F88
#INCLUDE <P16F88.INC>
;----------------------------------------------------
;NASTAVENIE KONFIG. SLOVA
;------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_ON & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;----------------------------------------------------
;VLASTNY PROGRAM
;-------------------------------------------------
CLRW ;mazem reg. W
TRIS 6 ;W do TRIS 6 je TRISB a je v Bank1
BSF STATUS, RP1 ;vyberam banku 2
BSF WDTCON, WDTPS0 ;nastavujem pomer preddeličky WDT na 1:64
LOOP
SLEEP
INCF PORTB, f
GOTO LOOP

END

Napsal: 19 bře 2011, 20:08
od procesor
Kde berieš inštrukciu TRIS???
PIC16F88 je nemá v zozname inštrukcií.
Keď inak nedáš.... prekladač pozná nejaké "makro" s názvom TRIS a vygeneruje niekoľko inštrukcií (cca 6 až 8 ), aby tvoju lenivosť nahradil.
Tebe by stačilo jednou inštruciou prepnút do banku1, zapísať do portu B a keď treba vrátiť sa do banku0.
Pozri si výpis preloženého programu (xxx.lst)
Môžeš zobrať na to jed, že PIC pracuje ako si ho naprogramoval. Nie vždy to naprogramované je to čo je úmyslom autora.
To sa ti iba zdá, že funguje poľa tvojej predstavy.
K veci:Prepínaš bity ovládajúce smer portu B(lebo nie si v banku0). Ledka môže veselo cvičiť, nie žeby sa menila úroveň na výstupe, ale sa prepína vstup/výstup.
A ešte, aby bolo jasné toto funguje iba náhodou, lebo PORTB,0 (kde máš ledku) nie je po resete definovaný(x = unknown). A aby to blikalo musí byť v tom registri LOG.1-v tom je tá náhoda- za nie taká aby sa to dalo využiť ako generátor náhody, viacmenej je to závislé kus od kusa.
Ešte jednu radu: Všetko je v datasheete pre PIC16F88, z inikadiaľ sa to nedá vycucať.

Napsal: 20 bře 2011, 07:23
od abcdef
inštrukciu TRIS kázal použiť autor kôli vyskúšaniu, aj keď sám písal že je zastaralá a pre 16F88 sa nepoužíva.
Tušil som, že som stvoril chujovinu a funguje to len silou vôle.
Najradšej by som s tým praštil.
Ale potom som napísal ešte jeden programík (lepšie povedané modifikoval), a ten by mal byť naozaj správny, ale nepáči sa mi ako som tam komplikovane riešil prepínanie medzi bankami.

title "Projekt 3: Blikajuce svetlo podruhé"
LIST P=16F88
#INCLUDE <P16F88.INC>
;----------------------------------------------------
;NASTAVENIE KONFIG. SLOVA
;------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF &

_WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON &

_WDT_ON & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;----------------------------------------------------
;VLASTNY PROGRAM
;-------------------------------------------------
BSF STATUS, RP0 ;vyberiem banku 1
CLRF TRISB ;piny na PoTRB ako výstupy
BSF STATUS, RP1 ;vyber banku 2
BCF STATUS, RP0 ;dokonci výber banky 2
BSF WDTCON, WDTPS0 ;nastavujem preddeličku WDT na 1:64
BCF STATUS, RP0 ;vyberiem banku 0, kvoli praci na PORTB
BCF STATUS, RP1 ;dokončenie vyberu banky 0
LOOP
SLEEP
INCF PORTB, f
GOTO LOOP

END


Keby ste vedeli nejaký jednoduchší spôsob prepínania baniek, tak to by bolo super

Napsal: 20 bře 2011, 08:31
od procesor
Toto je najjednoduchšie a dá sa ušetriť sem-tam jedna dve inštrukcie.
Ak si naštuduješ MacroAssembler da sa použiť aj inštrukcia makroasm "BANKSEL addrreg",
ale tá sa preloží vždy do dvoch inštr. Bc/sf podľa adresy registra.

Napsal: 10 srp 2011, 11:57
od abcdef
ahojte prosím Vás, dá sa nejako nastaviť simulátor že mám pripojené pull-up odpory na pinoch napr. PORTu B ?

Napsal: 12 srp 2011, 19:03
od Atlan
hmm .. nechces si nainstalovat program Proteus 7.8 umožnuje vytvoriť schemu s procesorom nejake ledky displej ...nahrať program a odsimulovať. Dokonca ma podporu v MP labe pri simulaciuii priamo otvori okno s proteom a spisti program v procesore pričom si vieš krokovat program v MPlabe

Napsal: 13 srp 2011, 16:36
od abcdef
dakujem Atlan moj. skúsim si pohladat ten program. Ale skoda ze MPLAB to nevie. Lebo program postupne prepína úroveň L na RB5 až RB8 (simulácia čítania maticovej klávesnice 4x4). A ked tam nie je aktívna úroveň L, tak program ten pin hneď prepne ako vstup.
Rezistor pull-up tam okamžite zabezpečí H.
Ale v simulátore tam vždy ostane úroveň L aj ked je pin ako vstup
Tak som si v simulátore (stimulus) vyrobil akože pomocné tlačítka ktorými tam našťukám H
Ale po najbližšej sekvenci programu mi tam zasa ostanú LLLL.
A preto tam potrebujem nasimulovať niečo také ako pull-up rezistory.
bol by som rád keby sa toto dalo vyriešiť v MPLABe.
Zaoberám sa dielom 35 v PE11/2010.

Napsal: 13 srp 2011, 18:22
od procesor
Pred prvým "step" si nahoď na každý pin kde je pull-up H úroveň a je to.