seriál s PIC od p. Špringla občasný problém

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#16 Příspěvek od Atlan »

skus dat preč sleep...

Uživatelský avatar
abcdef
Příspěvky: 134
Registrován: 01 bře 2007, 01:00

#17 Příspěvek od abcdef »

dakujem, že si aspoň niekto všimol moje obrovské problémy. Dám vedieť...

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#18 Příspěvek 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
.
.
.

Uživatelský avatar
abcdef
Příspěvky: 134
Registrován: 01 bře 2007, 01:00

#19 Příspěvek 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

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#20 Příspěvek 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ť.

Uživatelský avatar
abcdef
Příspěvky: 134
Registrován: 01 bře 2007, 01:00

#21 Příspěvek 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

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#22 Příspěvek 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.

Uživatelský avatar
abcdef
Příspěvky: 134
Registrován: 01 bře 2007, 01:00

#23 Příspěvek 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 ?

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#24 Příspěvek 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

Uživatelský avatar
abcdef
Příspěvky: 134
Registrován: 01 bře 2007, 01:00

#25 Příspěvek 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.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#26 Příspěvek od procesor »

Pred prvým "step" si nahoď na každý pin kde je pull-up H úroveň a je to.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“