 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
nostromo Član

Pridružen-a: Sob 24 Dec 2005 18:19 Prispevkov: 251 Aktiv.: 1.06 Kraj: Ljubljana
|
Objavljeno: Pet Feb 24, 2006 10:32 am Naslov sporočila: Zapomnitev tipke v EEPROM-u |
|
|
Pozdravljeni
Program dela naslednje: Nadzira 4 tipke in prižiga Ledice odvisno od stikala.....ta del programa dela tako kot mora!
Ko se mikrokontroler ugasne, si mora vpisati v EEPROM katera tipka je bila pritisnjena in ko se zažene glavna rutina mora prebrati, ter vklopiti ustrezno število Ledic.....
Pri Googlu sem iskal podobne programe pa sem našel samo približke, nato sem še iz datasheeta za 84a malo kopiral..........pa še vedno ne deluje kot sem si zamisli.
Nekaj sem se igral z mplab simulatorjem pa se mi zdi da se program ustavi tam kjer bi moral nehati zapisovati podatek v EEPROM in se vrniti v glavno rutino (tudi testna plošča to teorijo podpira=ko je pritisnjena tipka 1, prižge vse ledice in se ne odziva več) ?!?!
Ali lahko malo pogledate spodnji izsek iz programa...
P.S: Ali ima morda kdo od vas kaj primerov za vpis in branje iz eeproma??
Hvala za pomoč
; **********************************
; ** RESET : main boot routine **
; **********************************
RESET BSF STATUS,RP0 ;Switch to register bank 1
CLRF INTCON ;Disable interrupts
MOVLW B'11000000'
MOVWF TRISB ;RB7 & RB6 are inputs.
;RB5...RB0 are outputs(LEDICA)
MOVLW B'11111111' ;all RA ports are inputs(stikala)
MOVWF TRISA
BCF STATUS,RP0 ;Switch Back to reg. Bank 0
MOVLW B'00111111'
Movwf PORTB ;Vse na portuB se prižge
Call DELAY_ROUTINE
Call DELAY_ROUTINE
;*************************************************************************
;poglej v eeprom, katera tipka je bila nazadnje pritisnjena in vžgi ustrezne ledice
bcf STATUS,RP0 ;banka 0
movf 0x0c,w ;naslov
movwf EEADR ;iz w registra naloži naslov za eeprom
bsf STATUS,RP0 ;banka 1
bsf EECON1,RD ;spremeni bit za branje (RD=1)
bcf STATUS,RP0 ;banka 0
movf EEDATA,W ;iz spomina naloži v W register
movwf PORTB ;prižge se ustrezna LED
goto MENU
;*****************************************************************************
MENU
BTFSC PORTA,SW1 ;pogleda stikalo 1, in preskoči naslednji ukaz, če je bit (sw1)=0
GOTO EFFECT_1
BTFSC PORTA,SW2
GOTO EFFECT_2
BTFSC PORTA,SW3
GOTO EFFECT_3
BTFSC PORTA,SW4
GOTO EFFECT_4
GOTO MENU
;**************************************************************************************************
; DOGODKI NA TIPKAH
;***************************************************************************************************
EFFECT_1 BTFSC PORTA,SW1
GOTO EFFECT_1
E1 MOVLW B'00111111' ;OB PRITISKU NA TIPKO 1 SE PRIŽGE RB1-RB5
Movwf PORTB
;************************************************
;v spomin napiše da je vklopljena tipka 1
bcf STATUS,RP0 ;banka 0
movf B'00111111',w ;ta podatek vpiši v eeprom
movwf EEDATA ;podatke v eedata
movf 0x0c,w ;naslov kamor bo vpisal
movwf EEADR ;naslov v eeadr
bsf STATUS,RP0 ;banka 1
clrf EECON1 ;zbriše bite
bsf EECON1,WREN ;omogoči vpisovanje
movlw h'55'
movwf EECON2
movlw h'AA'
movwf EECON2
bsf EECON1,WR ;prične vpisovati
zanka btfsc EECON1,WR ;počakaj da zaključi z zapisovanjem (WR mora postati 1)
goto zanka
Call MENU
GOTO E1
;************************************************
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3358 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Pet Feb 24, 2006 11:35 am Naslov sporočila: Jaz bi naredil tako |
|
|
jaz bi naredil tako:
V eepromu bi imel nekje nastavitev stikal.
V glavni zanki bi stalno bral eeprom, in vsebino prenašal na porte za krmiljenje ledic, relejev, karkoli. Eeprom lahko bereš do onemoglosti, bo zdržal.
Potem bi tudi v glavni zanki odtipaval tipke, in če je katera pritisnjena oziroma prešla iz stanja nepritisnjena v pritisnjena, ugotovil, kaj je treba narediti, in ugotovitev zapisal v eeprom, tja, od koder prvi del zanke jemlje podatke.
Predno boš nabral milijon pritiskov na tipko, se pravi milijon zapisov v eeprom, bo trajalo, še tedaj (Če boš to dočakal živ) samo zamenjaš eeprom z novim.
_________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Feb 24, 2006 1:21 pm Naslov sporočila: |
|
|
bcf STATUS,RP0 ;banka 0
movf B'00111111',w ;ta podatek vpiši v eeprom
movwf EEDATA ;podatke v eedata
movf 0x0c,w ;naslov kamor bo vpisal
movwf EEADR ;naslov v eeadr
Želiš vpisati vrednost b'00111111" ali vsebino registra 0x3F (b'00111111')?
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
nostromo Član

Pridružen-a: Sob 24 Dec 2005 18:19 Prispevkov: 251 Aktiv.: 1.06 Kraj: Ljubljana
|
Objavljeno: Pet Feb 24, 2006 2:21 pm Naslov sporočila: |
|
|
Pozdrav
JA, Silvo, v EEPROM želim vpisati b'00111111' , ker potem (pri branju) bi to vrednost samo naložil v w register in v portb, s tem bi se pa prižgale ustrezne ledice RB0-RB6....
A sem preveč zakompliciral ?
LP
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Feb 24, 2006 3:25 pm Naslov sporočila: |
|
|
nostromo je napisal/a: |
Pozdrav
JA, Silvo, v EEPROM želim vpisati b'00111111' , ker potem (pri branju) bi to vrednost samo naložil v w register in v portb, s tem bi se pa prižgale ustrezne ledice RB0-RB6....
A sem preveč zakompliciral ?
LP |
Ampak ti vpisuješ vsebino registra na lokaciji b'00111111'
moral bi napisati MOVLW b'00111111'
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
nostromo Član

Pridružen-a: Sob 24 Dec 2005 18:19 Prispevkov: 251 Aktiv.: 1.06 Kraj: Ljubljana
|
Objavljeno: Ned Feb 26, 2006 10:39 am Naslov sporočila: |
|
|
Živjo Silvo,
sem bil zaseden pa nisem mogel takoj sprobat.......
Program sem spremenil:
E1 MOVLW B'00111111' ;OB PRITISKU NA TIPKO 1 SE PRIŽGE RB1-RB5
Movwf PORTB
;************************************************
;v spomin napiše da je vklopljena tipka 1
;************************************************
bcf STATUS,RP0 ;banka 0
movlw B'00111111' ;ta podatek vpiši v eeprom
movwf EEDATA ;podatke v eedata
movf 0x0c,w ;naslov kamor bo vpisal
movwf EEADR ;naslov v eeadr
bsf STATUS,RP0 ;banka 1
clrf EECON1 ;zbriše bite
bsf EECON1,WREN ;omogoči vpisovanje
movlw h'55'
movwf EECON2
movlw h'AA'
movwf EECON2
bsf EECON1,WR ;prične vpisovati
Kljub temu mi program pri vpisovanju nekje "zašteka" in mi noče skočit nazaj v glavni meni (call menu)!!?!? Preprosto se nekje "obesi" .......Sem tudi čez simulator spustil in odprl VIEW<EEPROM in tam se na nobeni lokaciji nič ne spremeni?!?!
Kaj naj še poizkusim?
P.S: Ima kdo kakšen enostaven in delujoč EEPROM primer za "posodit"?
P.S.2: Kako prilepite sliko programa? ne da ga popači, kot CTRL C
Hvala za pomoč, LP
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Ned Feb 26, 2006 10:45 am Naslov sporočila: |
|
|
Odgvor na drugi post scriptum: uporabi [code] tag; kodo oznaci, nato pritisni gumb Code zgoraj, ali pa preprosto napisi [code] tag na zacetek in na konec (tisti na koncu je s /, kot ostali UBB tagi).
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Feb 26, 2006 11:17 am Naslov sporočila: |
|
|
Citiram: |
P.S: Ima kdo kakšen enostaven in delujoč EEPROM primer za "posodit"? |
Če ne bo prišlo kaj vmes in bom "uspel priti" do delavnice, ti bom skušal popoldan ali zvečer spisati nekaj delujočega.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Feb 26, 2006 4:09 pm Naslov sporočila: |
|
|
Evo obljuba dela dolg - na hitro spisano ter testirano na testni plošči. Ne vem kateri pic uporabljaš. Sam sem vzel 16F628, ki je bil ravno pri roki. Če boš vzel katerega drugega, preveri (spremeni) banke, kjer se nahajajo registri za eeprom.
Koda: |
;-------------------------------------------------
;testni program
;branje tipk s porta ter shranjevanje
;le teh v eeprom indikacija led diode
;na portub
;PIC16F628
;Avtor: Straser Silvo
;Porta so vhodi z zunanjimi pullup upori
;------------------------------------------------
errorlevel -302
list P=16F628
#include "d:\asm\p16f628.inc"
#define TIPKA1 PORTA,0
#define TIPKA2 PORTA,1
#define TIPKA3 PORTA,2
#define TIPKA4 PORTA,3
#define LED1 PORTB,0
#define LED2 PORTB,1
#define LED3 PORTB,2
#define LED4 PORTB,3
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT
org 0x2100 ;pripravim zeljeno vrednost v eeprom
de .0
org 0x0
goto GLAVNI
org 0x05
;-------------------------------------------------
;glavna procedura
;-------------------------------------------------
GLAVNI
clrw
clrf PORTB ;obrisem lath portab
movlw b'111'
movwf CMCON ;izklop komparatorjev na portua
bsf STATUS,RP0 ;bank1
movlw b'11000000'
movwf TRISB ;pini RB0-RB5 so izhodi
bcf STATUS,RP0 ;bank0
call BERI_EE ;procedura izbede branje prve lokacije eeproma
movwf PORTB ;shranjeno stanje posljem na portb
G_ZANKA
btfsc TIPKA1 ;prva tipka pritisnjena?
goto TIP2
btfss TIPKA1 ;da je spuscena ?
goto $-1
movlw b'1'
movwf PORTB ;prizgem ustrezno ledico na portu
call VPIS_EE ;ter stanje pribelezim
TIP2
btfsc TIPKA2 ;druga tipka pritisnjena?
goto TIP3
btfss TIPKA2 ;da je spuscena ?
goto $-1
movlw b'10'
movwf PORTB ;prizgem ustrezno ledico na portu
call VPIS_EE ;ter stanje pribelezim
TIP3
btfsc TIPKA3 ;tretja tipka pritisnjena?
goto TIP4
btfss TIPKA3 ;da je spuscena ?
goto $-1
movlw b'100'
movwf PORTB ;prizgem ustrezno ledico na portu
call VPIS_EE ;ter stanje pribelezim
TIP4
btfsc TIPKA4 ;cetrta tipka pritisnjena?
goto G_ZANKA ;na zacetek zanke
btfss TIPKA4 ;da je spuscena ?
goto $-1
movlw b'1000'
movwf PORTB ;prizgem ustrezno ledico na portu
call VPIS_EE ;ter stanje pribelezim
goto G_ZANKA ;na zacetek zanke
;-----------------------------------------------------------------------------
;procedure za branje in pisanje v eeprom
;---------------------------------------------------------
;procedura ob klicu
;prebere 1. lokacijo eeproma ter jo vrne v W
;---------------------------------------------------------
BERI_EE
bsf STATUS,RP0 ;bank1
clrf EEADR ;lokacija eeproma (0x0)
bsf EECON1,RD ;izvedem branje
movf EEDATA,W ;
bcf STATUS,RP0 ;bank0
return
;---------------------------------------------------------
;procedura ob klicu vpise vrednost W
; na prvo lokacijo eeproma
;---------------------------------------------------------
VPIS_EE
bsf STATUS,RP0
; bcf INTCON,GIE ;izklop vseh prekinitev - sicer jih nisem uporabljal
; btfsc INTCON,GIE ;a ce se bi v nadaljavanju programa mogoce vkljucile
; goto $-2 ;so res izkljucene?
clrf EEADR ;lokacija 0x0
movwf EEDATA
bsf EECON1,WREN ;omogocim vpis
movlw 0x55 ;\
movwf EECON2 ; |
movlw 0xAA ; > magicna sekvenca
movwf EECON2 ;/
bsf EECON1,WR ;izvedem vpis
btfsc EECON1,WR ;je vpis koncan?
goto $-1 ;ne
; bsf INTCON,GIE ;vklucim prekinitve
bcf STATUS,RP0 ;bank0
return
end ;eof
|
Opis: |
|
 Download |
Ime datoteke: |
eeprom.zip |
Velikost datoteke: |
5.1 KB |
Downloadano: |
6 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
nostromo Član

Pridružen-a: Sob 24 Dec 2005 18:19 Prispevkov: 251 Aktiv.: 1.06 Kraj: Ljubljana
|
Objavljeno: Pon Feb 27, 2006 12:07 pm Naslov sporočila: |
|
|
Fantastično Silvo, najlepša HVALA za takle primer, bom takoj popoldne sprobal.......
Imam pa še eno vprašanje: namreč nisem se še srečal z ukazom GOTO $-1
A to pomeni da skoči en ukaz nazaj??
BTFSS TIPKA1 ;preskoči naslednji ukaz če je bit =1
GOTO $-1 ; ??......pojdi nazaj toliko časa dokler tipka ni spuščena...??
Hvala za pomoč,LP
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Feb 27, 2006 1:51 pm Naslov sporočila: |
|
|
Citiram: |
BTFSS TIPKA1 ;preskoči naslednji ukaz če je bit =1
GOTO $-1 ; ??......pojdi nazaj toliko časa dokler tipka ni spuščena...?? |
Pravilno sklepaš "$" je programski števec. Sam običajno za kratke skoke pri katerih lahko hitro preštejem vrstice, kam želim skočit , ter vmes ne bom več kaj vrival uporabljam tak način, kajti včasih nimam več ideje kako naj imenujem labelo
koda je enakovredna tej:
Koda: |
CITAJ_TIPKO1
BTFSS TIPKA1
goto CITAJ_TIPKO1
.....
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
nostromo Član

Pridružen-a: Sob 24 Dec 2005 18:19 Prispevkov: 251 Aktiv.: 1.06 Kraj: Ljubljana
|
Objavljeno: Tor Feb 28, 2006 10:57 am Naslov sporočila: |
|
|
DELAAAAAAA !!!!
Silvo, sem včeraj zvečer uporabil tvoj program in mi je končno uspelo sprogramirati softver za mojo prvo aplikacijo.....HVALA za pomoč.
LP
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|