16F628A eproma konum kaydetme sorunu

Başlatan bytex, 07 Kasım 2010, 23:11:34

justice_for_all

ama sunu soylemeliyim bi pini cikis yapmak istiyosaniz opinin tris registerini sifirlamalisiniz giris yapmak istiyosanizda o zaman o pini high yapmalisiniz..bunlari duzeltip tekrar derlermisiniz ve yukarida sayin OG nin dediklerinide goz onunde bulundurun...


TRISByide duzeltin lutfen...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

OG

proton'dan çekinme, pbp ile temelde aynıdır.

Hangi konumda başlayacağını yazmayı da unutmuşsun,

DATA @20,1
veya
DATA @20,2
veya
DATA @20,3

gibi. Bu komut eeprom programlanırken 20 nolu adrese 1 veya 2 veya 3 yazar. Açılışta 20 noyu okuyor ya.

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

bytex

OG ustanın dediği gibi düzelttim son hal alttaki gibi

TRISA=%00000111
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
buton_kontrol:
READ 0,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
goto buton_kontrol

KONUM1:
gosub buton_birak
poz=1
WRITE 0,poz
PAUSE 10
KONUM11:
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
goto KONUM11

KONUM2:
gosub buton_birak
poz=2
WRITE 0,poz
PAUSE 10
KONUM21:
LOW PORTA.0
LOW PORTA.1
LOW PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM3
goto KONUM21

KONUM3:
gosub buton_birak
POZ=3
WRITE 0,poz
PAUSE 10
KONUM31:
PORTA=%00000100
PAUSE 200
PORTA=%00000010
PAUSE 200
PORTA=%00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
goto KONUM31

END

buton_birak:
for x = 1 to 100 
''' buton rutinipause 1
IF BUTON=0 THEN GOTO buton_birak
next
return

ama gördüğüm kadarıyla eproma peş peşe kaydediyor 03 01 02 03 gibi, stop yaptıktan sonra play yapıyorum pause yapıp debuga girince epromda böyle bilgi görüyorum konumlarda eproma yazmadan önce epromu silmekmi gerekiyor acaba ?

bytex

DATA @20,1
bunu nasıl kullanabilirm programda

yani write komutundan önce bunumu yazmam gerekir usta

OG

#34
Bunu derle ve proton ile kodları karşılaştır.

@ device pic16F628A, intrc_osc_noclkout, wdt_on, pwrt_on, protect_on, mclr_off, lvp_off

TRISA=%00000000
TRISB=%00000001

OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
w_1 var word
w_2 var word
buton_basildi var bit

DATA @0,1


buton_kontrol:
    READ 0,POZ
    IF POZ=1 THEN GOTO KONUM11
    IF POZ=2 THEN GOTO KONUM21
    IF POZ=3 THEN GOTO KONUM31

''''''''''''''''''''''''''''''
KONUM1:
    gosub buton_birak
    poz=1
    WRITE 0,poz
    PAUSE 10
KONUM11:
    PORTA=%00000111
    
    w_2 = 100 : gosub buton_bak
    if buton_basildi = 1 then KONUM2 

goto KONUM11

''''''''''''''''''''''''''''''
KONUM2:
    gosub buton_birak
    poz=2
    WRITE 0,poz
    PAUSE 10
KONUM21:
    
    PORTA=%00000000

    w_2 = 100 : gosub buton_bak
    if buton_basildi = 1 then KONUM3 
    
goto KONUM21

'''''''''''''''''''''''''
KONUM3:
    gosub buton_birak
    POZ=3
    WRITE 0,poz
    PAUSE 10
    
KONUM31:
    PORTA=%00000100
    
    w_2 = 200 : gosub buton_bak
    if buton_basildi = 1 then KONUM1 

    PORTA=%00000010
    
    w_2 = 200 : gosub buton_bak
    if buton_basildi = 1 then KONUM1     

    PORTA=%00000001
    
    w_2 = 200 : gosub buton_bak
    if buton_basildi = 1 then KONUM1     

goto KONUM31
''''''''''''''''''''


buton_birak:
    for x = 1 to 100
        pause 1 
        IF BUTON=0 THEN GOTO buton_birak
    next
return
'''''''''''''''''''''
buton_bak:
    buton_basildi = 0
    
    for w_1 = 1 to w_2
        pause 1
        
        IF BUTON = 0 THEN
            buton_basildi = 1
            return
        endif 
    next
return
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

bytex

ustam derlerken buton_basildi için hata veriyor

OG

Özür, buton_basildi değişkenini atamamışız düzelttim.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

bytex

özür ne demek usta, hakkını hellal et gecenin bi yarısı yardımınızı esirgemediniz. Son gönderdiğiniz şekli şöyle derledim

@ device pic16F628A, intrc_osc_noclkout, wdt_on, pwrt_on, protect_on, mclr_off, lvp_off
TRISA=%00000000
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
w_1 var word
w_2 var word
buton_basildi var bit

'DATA @0,1
buton_kontrol:   
READ 0,POZ   
IF POZ=1 THEN GOTO KONUM11   
IF POZ=2 THEN GOTO KONUM21   
IF POZ=3 THEN GOTO KONUM31

''''''''''''''''''''''''''''''

KONUM1:   
gosub buton_birak   
poz=1   
WRITE 0,poz   
PAUSE 10
KONUM11:   
PORTA=%00000111       
w_2 = 100 : gosub buton_bak   
if buton_basildi = 1 then KONUM2
goto KONUM11

''''''''''''''''''''''''''''''

KONUM2:   
gosub buton_birak   
poz=2   
WRITE 0,poz   
PAUSE 10
KONUM21:       
PORTA=%00000000   
w_2 = 100 : gosub buton_bak   
if buton_basildi = 1 then KONUM3     
goto KONUM21

'''''''''''''''''''''''''

KONUM3:   
gosub buton_birak   
POZ=3   
WRITE 0,poz   
PAUSE 10   
KONUM31:   
PORTA=%00000100       
w_2 = 200 : gosub buton_bak   
if buton_basildi = 1 then KONUM1     
PORTA=%00000010       
w_2 = 200 : gosub buton_bak   
if buton_basildi = 1 then KONUM1         
PORTA=%00000001       
w_2 = 200 : gosub buton_bak   
if buton_basildi = 1 then KONUM1     
goto KONUM31

''''''''''''''''''''

buton_birak:   
for x = 1 to 100       
pause 1         
IF BUTON=0 THEN GOTO buton_birak   
next
return

'''''''''''''''''''''

buton_bak:   
buton_basildi = 0       
for w_1 = 1 to w_2       
pause 1               
IF BUTON = 0 THEN           
buton_basildi = 1           
return       
endif     
next
return


'DATA @0,1 bu komut aktifken hep 1.konum da başlıyordu bunu çıkarınca konumları kaydedip tekrar başlattığımda keydeilmiş konumdan başlamaya başladı...program biraz kalabalıklaştı burada sanırım siz buton okumayı daha iyi hale getirdiniz ama ama konum okuma nasıl düzeldi onu anlamaya çalışacağım şimdi..

OG

#38
DATA @0,1

Eeproma 0 adresine 1 yazmak anlamına gelir ve  entegre yazılırken, yani 1 kere yüklenir. Açılışta program READ 0,POZ   ile bunu okur ve ilgili yere gider.

Sonra her butona basışta zaten bu değer değişir. Onu çıkarma. İstiyorsan başka değer ata.

DATA @0,2 veya
DATA @0,3 gibi.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

justice_for_all

sayin OG ama elektrik gitmeden once 0. adrese data atadik diyelim mesela 3.konum...

elektrik gitti ve devre tekrar calisti program osatira gelince 0.adrese 1 bilgisi yuklenir eski konum bilgimiz silinmezmi..

yani elektrik gitmeden 3.konumdu ama elektrik gelince 1.konum oldu bilgiler karismazmi...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

OG

#40
DATA @0,1 ( Proton karşılığı Edata)

komutu 1 defa çalışır, o da pic programlar iken ilgili adrese ilgili data. Yani programlama cihazı ile program yapmak dışında bu komut çalışmaz.  Bir dahaki  yazma işlemi ancak write ile (çalışma anında) gerçekleşir.

Yani Data ile Write farkı budur.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

justice_for_all

anladim yani okuma icin bu komut kullanilmaz dogrumudur...

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

OG

Hayır, pic enerjilendiğinde eeprom okunmak istenirse READ komutunu görmesi gerekir. DATA ile hiç ilgilenmez.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

justice_for_all

peki o komut satirini kullanmamizin amaci nedir...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

OG

Burada pek anlamı olmayabilir, ama değişik durumlarda değişik işler yapacağı malum. Sonuçta EEPROM'a birşeyler kaydediyorsunuz. Mesela ben ünite adresi kaydediyorum ve program içinde write komutu kullanmıyorum. Ünitenin adresine göre iş yapıyor.


Program şöyle olsa idi,

@ device pic16F628A, intrc_osc_noclkout, wdt_on, pwrt_on, protect_on, mclr_off, lvp_off
TRISA=%00000000
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
w_1 var word
w_2 var word
buton_basildi var bit

DATA @0,1

Goto Basla


Aradaki kodlar
.
.
.
.
.
.
.


Basla:   
READ 0,POZ   
IF POZ=1 THEN GOTO KONUM11   
IF POZ=2 THEN GOTO KONUM21   
IF POZ=3 THEN GOTO KONUM31

DATA @0,1 yukarıda olmasa idi burası dipsiz kuyu olurdu.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.