www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Zapomnitev tipke v EEPROM-u

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
nostromo
Član
Član



Pridružen-a: Sob 24 Dec 2005 18:19
Prispevkov: 251
Aktiv.: 1.06
Kraj: Ljubljana

PrispevekObjavljeno: Pet Feb 24, 2006 10:32 am    Naslov sporočila:  Zapomnitev tipke v EEPROM-u Odgovori s citatom

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..... Sad

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3357
Aktiv.: 14.17
Kraj: Dragomer

PrispevekObjavljeno: Pet Feb 24, 2006 11:35 am    Naslov sporočila:  Jaz bi naredil tako Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Feb 24, 2006 1:21 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
nostromo
Član
Član



Pridružen-a: Sob 24 Dec 2005 18:19
Prispevkov: 251
Aktiv.: 1.06
Kraj: Ljubljana

PrispevekObjavljeno: Pet Feb 24, 2006 2:21 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Feb 24, 2006 3:25 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
nostromo
Član
Član



Pridružen-a: Sob 24 Dec 2005 18:19
Prispevkov: 251
Aktiv.: 1.06
Kraj: Ljubljana

PrispevekObjavljeno: Ned Feb 26, 2006 10:39 am    Naslov sporočila:   Odgovori s citatom

Ž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"? Pray
P.S.2: Kako prilepite sliko programa? ne da ga popači, kot CTRL C

Hvala za pomoč, LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Ned Feb 26, 2006 10:45 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Feb 26, 2006 11:17 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Feb 26, 2006 4:09 pm    Naslov sporočila:   Odgovori s citatom

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



eeprom.zip
 Opis:

Download
 Ime datoteke:  eeprom.zip
 Velikost datoteke:  5.1 KB
 Downloadano:  6 krat


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
nostromo
Član
Član



Pridružen-a: Sob 24 Dec 2005 18:19
Prispevkov: 251
Aktiv.: 1.06
Kraj: Ljubljana

PrispevekObjavljeno: Pon Feb 27, 2006 12:07 pm    Naslov sporočila:   Odgovori s citatom

Fantastično Silvo, najlepša HVALA za takle primer, bom takoj popoldne sprobal....... Applause

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Feb 27, 2006 1:51 pm    Naslov sporočila:   Odgovori s citatom

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 Confused

koda je enakovredna tej:

Koda:
CITAJ_TIPKO1
       BTFSS TIPKA1
       goto CITAJ_TIPKO1
       .....

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
nostromo
Član
Član



Pridružen-a: Sob 24 Dec 2005 18:19
Prispevkov: 251
Aktiv.: 1.06
Kraj: Ljubljana

PrispevekObjavljeno: Tor Feb 28, 2006 10:57 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group