Zápis/čítanie z EEPROM PIC16F84, ako často zapisovať?

Ahoj, v tejto téme:
https://forum.mcontrollers.com/t/navrh-jednoducheho-stroboskopu-so-styrmi-ledkami/935/24
som sa pokúšal napísať program pre stroboskop, kde by som potreboval každý cyklus zapísať do EEPROM práve zvolený efekt, aby som ho nemusel vždy po vypnutí znova nastavovať. Ďakujem

:arrow_right: administrator: přejmenováno z "Zápis/čítanie z EEPROM PIC16F84"

No, zapisovat kazdej ciklus do EE asi neni moc dobrej napad, stacilo by kdyby si pamatoval jenom kterej efekt byl naposledy aktivni, napadly me 3 moznosti,
1)udelat 3ti TL (nebo pouzit obe) na vypinani, po zmacknuti se ulozi NECO do EE o stavu efektu kterej je aktivni , led zablikaji ze se vypina uC a pak padne treba do SPEEPu nebo do nekonecny smycky a pak to muzes vypnout
2)pouzit priznaky pro jednotlivy efekty , po startu se otestujou priznaky a podle nich zvoli efekt, nez se spusti zvolenej efekt ulozi se priznak do EE,
3)kazdymu efektu priradit cisko 1-5 (pro 5 efektu),nez se spusti zvolenej efekt ulozi se cislo do EE, po startu se precte a pricte k PCL a skoci na prislusny GOTO EFEKTx

je na tobe co si vyberes , pokud nekomu nebude jasny jak sem to myslel vysvetlim,nebo nekdo pride na lepsi a jednodussi napad

myslím že 3 možnosť by bola dobrá, len naozaj nemám ešte predsavu ako to bude celé vyzerať.
Dalo by sa napríklad že pri každom stlačení tlačidla pri pri skočení do dalšieho efektu zapísal hodnotu EFEKTU.

Ano, tak by to také šlo pokud nebudeš to tlačítko mačkat moc často.
Povolený počet zápisů do EEPROM je 1.000.000.

ANO , presne takle nak sem to myslel , ale jak rikal Petr pokud nebudes casto menit efekt,

tak sem neco sesmolil, je to v simulatoru funkcni tak si to skus, jeto jen pro ukazku , pokud to budes simulovat tak az dojedes na “NOP ;XXX” tak si vloz rucne do W registru hodnotu 1-5, udela se prislusnej skok,

[code] include<p16f84.inc>

;inicializace uC
;********************************************
START
CALL CTI_EE
NOP ;XXX ;PO NAVRATU Z CTI_EE JE HODNOTA V W (HODNOTA 1-5)
ADDWF PCL,F ;K PLC SE PRICTE HODNOTA ULOZENA V EE (1-5)
NOP ;PODLE NI SE UDELA POZADOVANY SKOK NA EFEKTx
GOTO EFEKT1
GOTO EFEKT2
GOTO EFEKT3
GOTO EFEKT4
GOTO EFEKT5
;*********************************************
EFEKT1 MOVLW .1 ;EFEKT1 PRIRAZENA 1,
CALL PIS_EE ;HODNOTA 1 SE ZAPISE DO EE
EFEKT_1 NOP ;PROGRAM PRO EFEKT1
NOP
GOTO EFEKT_1
;*********************************************
EFEKT2 MOVLW .2 ;EFEKT1 PRIRAZENA 2,
CALL PIS_EE ;HODNOTA 2 SE ZAPISE DO EE
EFEKT_2 NOP ;PROGRAM PRO EFEKT1
NOP
GOTO EFEKT_2
;*********************************************
EFEKT3 GOTO $
;*****
EFEKT4 GOTO $
;*****
EFEKT5 GOTO $
;*********************************************
PIS_EE RETURN ;PODPROGRAM ZAPSANI BITU DO EE
;*********************
CTI_EE RETURN ;PODPROGRAM CTENI BITU Z EE
;*********************

END[/code]

nejako to nefunguje, tekto som to napísal(len efekt1)

[code];inicializace uC
;***************************************************************
START
CALL CTI_EE
NOP ;XXX ;PO NAVRATU Z CTI_EE JE HODNOTA V W (HODNOTA 1-5)
ADDWF PCL,F ;K PLC SE PRICTE HODNOTA ULOZENA V EE (1-5)
NOP ;PODLE NI SE UDELA POZADOVANY SKOK NA EFEKTx
GOTO EFEKT1
GOTO EFEKT2
GOTO EFEKT3
GOTO EFEKT4
GOTO EFEKT5
;***************************************************************

EFEKT1 MOVLW .1 ; efekt1 priradená 1
CALL PIS_EE ; hodnota 1 sa zapíše do EE
EFEKT_1 MOVLW B’00001111’ ; presuň čísla do W registru
MOVWF PORTB ; presuň čísla do portu B
BTFSS TEST1 ; testuj tlačidlo TEST1
CALL TEST ; ak je stlačené(na vstupe log.0) tak vyvolaj podprogram, ak nie(na vstupe log.1) tak preskoč(NOP)
CALL CAKAJ ; vyvolaj podprogram
CLRF PORTA ; vynuluj port A
BTFSS TLAC0 ; testuj tlačidlo TLAC0
GOTO EFEKT_2 ; ak je stlačené(log.0) tak preskoč na riadok EFEKT2, ak nie(log.1) tak preskoč

MOVLW B'11111111'	; presuň čísla do W registru
    MOVWF PORTB		; presuň čísla do portu B
BTFSS TEST1		; testuj tlačidlo TEST1
CALL TEST		; ak je stlačené(na vstupe log.0) tak vyvolaj podprogram, ak nie(na vstupe log.1) tak preskoč(NOP)
    CALL CAKAJ		; vyvolaj podprogram
CLRF PORTA		; vynuluj port A
BTFSS TLAC0		; testuj tlačidlo TLAC0
GOTO EFEKT_2		; ak je stlačené(log.0) tak preskoč na riadok EFEKT2, ak nie(log.1) tak preskoč


    GOTO EFEKT_1

;***************************************************************
PIS_EE BSF STATUS, RP0 ;banka 1
BCF INTCON, GIE ;zákaz prerušenia
BSF EECON1, WREN ;povolenie zápisu do dátové EEPROM
MOVLW 55h ;povinná sekvecnia!!!
MOVWF EECON2 ; 55h musí byť zapísané ho EECON2
MOVLW AAh ;pre zahájenie sekvecnie zápisu
MOVWF EECON2 ;zápis AAh
BSF EECON1, WR ;nastav bit WR- odštartuje sekvenciu zápisu
BSF INTCON, GIE ;opätovné povolenie prerušenia

RETURN

;***************************************************************
CTI_EE BCF STATUS, RP0 ;banka 0
MOVLW ADDR ;adresa bunky EEPROM ktorú chceme čítať
MOVWF EEADR ;chceme čítať
BSF STATUS, RP0 ;banka1
BSF EECON1, RD ;odštartuj čítanie dát z EEPROM
BCF STATUS, RP0 ;banka 0
MOVF EEDATA, W ;W=EEDATA ze EEPROM

RETURN

;***************************************************************

END			;koniec programu[/code]

Cau, hot sem prosimte celej kod , fakt se my nechce resit 20 Eroru typu “Symbol not previously defined”,
co sem stacil kouknout, tak :
nevidim nikde co a kam zapisujes do EE, kdyz zapisujes do EE tak se prepnes do Banky 1 ale uz se navratis do B 0, a vetsinou se ceka na dokonceni zapisu testovanim WR,
EE.ASM (1.76 KB)

sorry, už bude nahadzovať kompletné programy
Upravil som to podla tvojich rád, ale vypisuje mi to chyby

Message[302] C:\DOCUME~1\DOKUME~1\MPLAB_~1\STROBE.ASM 48 : Register in operand not in bank 0. Ensure that bank bits are correct. Error[113] C:\DOCUME~1\DOKUME~1\MPLAB_~1\STROBE.ASM 68 : Symbol not previously defined (ADDR)

//opravené chyby v programe strobe.asm
strobe.asm (12.7 KB)

ohledne Message[302] sem ti uz psal co to znamena a jak to odstranit , tak se jukni do “Návrh jednoduchého stroboskopu so štyrmi ledkami”

Symbol not previously defined (ADDR) - nemas nadefinovanej symbol ADDR, asi si to prehlid , mam to hned pod ";inicializace uC ", urcuje na kterou adresu v EE se ti to zapise , si muzes vybrat 0-3f

a hot si ty definice “c1,c2” uplne do leva

a mas tam jednu chybu , schvalne ,Warning[202] I:\PIC\ZKOUSKA\EE_1.ASM 167 : Argument out of range. Least significant bits used.

a pro prehlednost se pouziva TABULATOR misto mezery mezi instrukci,symbolama,navestim

pokud mas vsechny smicky stajne dlouhy tak ti staci jenom jedna , CAKAJ,

:exclamation: pred naprogramovanim si rucne vynuluj adresu(0) v EE nebo nastav na 1-5,v programatoru, nebo ti to nepojede :exclamation:

opravil som všetky chyby ako si hovoril, odskúšal, ale aj tak to nejde.

co to dela nedela?

efekty normálne funguju aj s prepíínaním, ak odpojím od zdroja a znova pripojím tak ide zase od začiatku a nie od posledne zvoleného efektu

//hore v príspevku kde je môj program, tak som ho už opravil

tet sem si vsim , mas spatne skoky po testu TL., BTFSS TLAC0 -GOTO EFEKT_2, musis skocit na EFEKT2 ! na zacatek programu pro danej efekt kde se zapise hodnota do EE, u efektu 2,3,4,x ti chybi ten zapis do EEDATA a EEADR pred volanim PIS_EE,jako u EFEKT1,kouknu na to az zejtra,

EDIT: upraveno ci opraveno, pridal sem prednastaveni Efektu1 do EE takze staci jenom prelozit a naprogramovat,a oprav si to hlaseni Warning[202]
EE_2.asm (13.1 KB)

Upravil som podla tvojich posledných rád a už to konečne ide, vemi pekne ti ďakujem.
Ešte tam dorobím tie ostatné efekty. Musím si doštudovať tú pamäť EEPROM alebo štruktúru uP, lebo ak sa mám priznať tak vôbec som jej nepochopil.

Chcem sa ešte spýtať či sa oplatí investovať do PICKIT2
sos.sk/?str=371&artnum=55989

Ešte by som chcel spraviť modul pre možnosť priamej úpravy programu pomocou ICSP programovania. Na internete som našiel pár rád na také progrmamovanie. Neviem či je to tak dobre, alebo treba odpojiť bazy oboch Tr pomocou jumperov.

cau. to je dobre ze se to podarilo rozchodit , jinak studuj a studuj
co se tyce Pickitu tak je tu na foru napsano dost. ja ho mam ale s DE .

Ja ho asi zoberiem, už len z dôvodu že s ním môžem priamo pracovať v MPLABe, ešte by som sa chcel spýtať na tú schému čo som sem uploadol.

Rozhodně za tu cenu neváhej. ICD umožňuje využít téměř veškerý sortiment Microchipu (typy, které umí nebo neumí ICD zjistíš v MP-LAB). Na druhou stranu ICD má pár omezení, jako nutnost dvou drátů pro komunikaci a taky určitá omezení při krokování programu a práci s breakpointy. Ale jinak je to bezva :slight_smile:.

Pokud by jsi nechtěl investovat do originálu a chtěl ušetřit pár drobných, zde je link na amatérskou výrobu (já bych to ale asi nedělal):

mcu.cz/news.php?extend.1488.7

Vl.

áno toho klona som už niekde videl :smiley: radšej zoberiem orginál.

Inak je rozdiel ak by som chcel naprogramovať iný “modernejší a lacnejší” PIC v ASM? Mení sa len rozmiestnenie pinov, aké procesory sú cenovo a počtom volných I/O najvhodnejšie?

Dodik:
Není v tom nijak zásadní rozdíl, spousta typů ve stejném pouzdru má stejně zapojené nožičky. ZAtím jsem se nesetkal s typem co by to měl jinak.

Vnitřní struktura se liší akorát ve velikosti paměti FLASH a RAM. Také se liší množstvím různých periferií, které mají také svoje registry v paměti.
Všechno je v datasheetech velice dobře popsáno.

Já jsem už programoval asi 5 druhů PIC a nikdy nebyl problém. Jedinný kus co mě zatím trochu dostal tak PIC16F193x - dostal me jenom tím, že má paměť rozdělenou na velké množství bank.

Teď mi cenov nejlíp vyšel právě PIC16F1937 - DIL40, HW umí obsloužit spoustu věcí má hromadu paměti a stojí jen 55Kč.
Nejvíc jsem se naučil a vlastně stále učím na PIC16F877A, ale ten je strašně drahej - cca 150Kč.

Pokud se tomu programování chceš nějak víc věnovat tak osobně bych ti doporučil desku PVK40 od ASIXu.

Asi ze se to tu trosku rozjelo jinym smerem :confused:
Myslim ze s modernejsima PICama je to u nas trochu horsi , dostupnost je pak jedine mimo CR a to se pak odrazi na cene, ale zalezi jak co,
Pokud budes programovat pres ICSP tak je to jedno, kouknes do DS jak sou rozmlisteny vyvody napichnes ja a programujes, pokud je budes vyndavat tak je potreba naky udelatko. lisi se akorat podle pouzdra , jiny pouzdro jinak vyvody, A ktery sou nejvhodnejsi ? zalezi na co, na blikani ledkou 10fxx 6 pinu cena 20-30 kc nebo USB ,hodne pinu ,18fxx 64 pinu az 400kc, zalezi na aplikaci a na tobe