16F628A eproma konum kaydetme sorunu

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

OG

Kaydeder merak etme, son verdiğim kodu kullan.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.


bytex

debug kısmına girdiğimde memory kısmı dektif görünüyor, aktif gözükmesi için bişey yapmam gerekiyormu

justice_for_all

ben calistirdim arkadasim eeproma yaziyo 20. adrese...

yukardada soyledigim gibi direct olarak play tusuna basarsaniz menu pasif gorunur..

program calismaya basladiktan sonra media da bisonraki tus anlamina gelen butona basin o zaman adim adim calisir program ve menu aktif olur...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

justice_for_all

ama programi bastan calistirinca okuyunca bise yapmiyo yani kaldigi konumdan devam etmiyo...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bytex

OG usta programı alta sizin dediğiniz gibi copy pass yaptım sonuç aynı


TRISA=00000111
TRISB=00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
READ 20,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 20,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 20,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 20,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

justice_for_all  usta dediğin gibi yapıp cpu eprom bilgisine baktım il başlangıçta 03 01 02 03 ff ff ff ...diye devam ediyo, konum değişsede bu sayılar değişmiyor

bytex

ustalar şimdi anca görebildim debug kısmında PIC CPU EPROM memory e baktığımda 10 le başlaya satırda FF FF FF FF ortada bolünmüş çizgiden sonra 03 FF FF FF var, konum deiştiğinde 01, 02 ve 03 oluyor burası, bu olduğuna göre çalışmasımı gerekiyor acaba


justice_for_all

arkadasim ust satirda yazdigimi okumadin mi?

o gordugun 10  demek 10luk sistemde 16 dir degisen kisim ise 20. adresdir.yani programin calisiyo ama okumada bi sorun sikartiyo...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bytex

okumada bi yanlışlık var derken bulduğum örneklerde READ komutu aynı şekilde kullanılmış gördüğüm kadarıyla nasıl bir hata olabilir acaba ?

OG

Bir hata daha var,
TRISA=00000111
olmaz çünkü binary sayı öyle yazılmaz, aksi halde o değer 111 olur, aşağıdaki gibi olmalı
TRISA=%00000111

Aynı şekilde
PORTA=00000100  değil
PORTA=%00000100

Bahane ile Proton'a geçersin
Device 16F628A 
   Config INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_ON , CP_ON, DATA_CP_OFF, MCLRE_OFF , LVP_OFF , BODEN_OFF 
   Declare Xtal 4 

CMCON=7  

TRISA=%00000000
TRISB=%11111111

OPTION_REG=%00001111

Dim BUTON As PORTB.0
Dim POZ As Byte
Dim x As Byte
Dim w_1 As Word
Dim w_2 As Word
Dim buton_basildi As Bit



EData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0




'''''''''''''''''
POZ = ERead 20


If POZ = 1 Then KONUM11
If POZ = 2 Then KONUM21
If POZ = 3 Then KONUM31


'''''''''''''''''''''''''''''''''
KONUM1:
    GoSub buton_birak                     '' buton sıçramaları için
    POZ=1
    EWrite 20, [POZ]
    DelayMS 10
KONUM11:
    PORTA = 7

    w_2 = 100 : GoSub buton_bak           '' 100ms bekle bu arada butonu gözle
    If buton_basildi = 1 Then KONUM2      '' buton basıldı ise diğer konuma git

GoTo KONUM11

''''''''''''''''''''''''''
KONUM2:
    GoSub buton_birak
    POZ=2
    EWrite 20, [POZ]
    DelayMS 10
KONUM21:
    PORTA = 0

    w_2 = 100 : GoSub buton_bak           '' 100ms bekle bu arada butonu gözle
    If buton_basildi = 1 Then KONUM3

GoTo KONUM21

''''''''''''''''''''''''''''
KONUM3:
    GoSub buton_birak
    POZ=3
    EWrite 20, [POZ]
    DelayMS 10
KONUM31:
    PORTA=%00000100 
    
    w_2 = 200 : GoSub buton_bak           '' 200ms bekle bu arada butonu gözle
    If buton_basildi = 1 Then KONUM1

    PORTA=%00000010
    
    w_2 = 200 : GoSub buton_bak           '' 200ms bekle bu arada butonu gözle
    If buton_basildi = 1 Then KONUM1
    
    PORTA=%00000001
    
    w_2 = 200 : GoSub buton_bak           '' 200ms bekle bu arada butonu gözle
    If buton_basildi = 1 Then KONUM1
    
GoTo KONUM31



''''
buton_birak:
    For x = 1 To 100  ''' buton kontak rutini
        DelayMS 1
        If BUTON = 0 Then buton_birak
    Next
Return

''''''''''''' butona bu dongu içinde bakar ki basıldığını çabuk anlasın
buton_bak:
    buton_basildi = 0

    For w_1 = 1 To w_2
        DelayMS 1
        
        If BUTON = 0 Then 
            buton_basildi = 1
            Return
        EndIf   
         
    Next
Return


:100000003B2883169B0083161C141A089B0A37286A
:1000100083169A001C1555309D00AA309D009C1433
:100020009C1810281C119B0A3728A301A200FF303E
:10003000A207031CA307031C37280330A100DF30ED
:1000400023201728A101E83EA000A109FC30031CD1
:100050002C28A00703182928A0070000A10F292891
:1000600020183228A01C36280000362808008313E8
:1000700083120313080007309F0083168501FF30A9
:1000800086000F308100143083120120A40001305B
:100090002402031D4C28612802302402031D51282C
:1000A000762803302402031D56288A28A620013012
:1000B000A400143083169B008312240808200A3001
:1000C0001520073085006430A800A901B5202A1C3E
:1000D0006A286B286128A6200230A40014308316F9
:1000E0009B008312240808200A3015208501643003
:1000F000A800A901B5202A1C7E287F287628A620E2
:100100000330A400143083169B00831224080820B7
:100110000A30152004308500C830A800A901B52098
:100120002A1C9328562802308500C830A800A9014F
:10013000B5202A1C9C28562801308500C830A8000C
:10014000A901B5202A1CA52856288A280130A50017
:10015000653025020318B428013015200618B1288F
:10016000A628A50A031DA82808002A100130A60009
:10017000A70127082902031CCD28031DC328260830
:100180002802031CCD28013015200618C9282A147E
:0E0190000800A60A0319A70FB9280800CE28F8
:02400E00101F81
:1042000000000000000000000000000000000000AE
:10421000000000000000000000000000000000009E
:10422000000000000000000002000000000000008C
:0242300000008C
:00000001FF


Tüm dosyalar http://www.upload.gen.tr/d.php/s16/lknzmkwb/16f628_eprom.rar.html
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

justice_for_all

size birinci sormam gereken A PORTu  cikis olarak kullaniliyosa TRISA registerine neden TRISA=00000111 neden boyle bir deger atanmis.

ikincisi ledlerin yanma mantigi neye gore belirleniyo

ucuncusu butonun gorevi nedir...

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

justice_for_all

Alıntı yapılan: bytex - 08 Kasım 2010, 00:27:29
okumada bi yanlışlık var derken bulduğum örneklerde READ komutu aynı şekilde kullanılmış gördüğüm kadarıyla nasıl bir hata olabilir acaba ?


derledigin koda baktim TRISB=%00000000 hepsi cikis olmus en sondaki biti 1 olmasi gerekiyo duzeltip tekrar deneyiniz lutfen...

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

bytex

Alıntı yapılan: justice_for_all - 08 Kasım 2010, 00:37:30
size birinci sormam gereken A PORTu  cikis olarak kullaniliyosa TRISA registerine neden TRISA=00000111 neden boyle bir deger atanmis.

ikincisi ledlerin yanma mantigi neye gore belirleniyo

ucuncusu butonun gorevi nedir...

TRISA=00000111 yapmamın nedeni porta.1 porta.2 ve port.a3 ü çıkış yapıp led bağlamak, ledler birinci konumda hepsi yanık ikinci konumda hepsi sönük 3. konumda sırayla yanıyor, buton ise konumları değiştirmeye yarıyor, ben konum değiştiğinde bunu eproma kaydedip pice tekrar enerji verdiğimde hangi konumda ise o konumda başlatmak istiyorum, ama tabi bi türlü beceremedim, ama isiste debug yaparken eproma kayıt edilen verileri görmeyi öğrendim bu arada usta saol, OG usta pic basic öğrenmeye çalışırken protana geçmek çok zor olur heralde benim için daha çok basit şeyleri bile picbasicte aşamıyorum :( ama biraz yol aldıktan sonra inaşllah.....

bytex

"TRISA=00000111
olmaz çünkü binary sayı öyle yazılmaz, aksi halde o değer 111 olur, aşağıdaki gibi olmalı
TRISA=%00000111

Aynı şekilde
PORTA=00000100  değil
PORTA=%00000100

"

burada dediğiniz hataları düzelttim hala aynı sonuç, yazmada bi problem yok anladığım kadarıyla ama niye okuyamadığımı hala anlıyamadım