Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: bytex - 07 Kasım 2010, 23:11:34

Başlık: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:11:34
öncelikle herkese merhaba, pic basic ile yeni uğraşmaya başladım sayılır. Pic in dahili epromuna write komutu ile yazdırıp read ile okuyup epromdaki değere göre istenilen adrese gitmeyi hedefleyen bir programcık yazmak istedim ama bir türlü olmadı derlediğim hex i isiste simüle ettiğimde çalışmadığını gördüm, hatam nerde olabilir acaba ? yapmak istediğim 3 tane konum var bu daha fazlada olabilir, butona her bastığında diğer konuma geçmesi o konumda iken konumu kaydetmesi, elektrik kesilip geldiğinde hengi konumda ise o konumdan başlaması


TRISA=00000111
TRISB=00000000

BUTON VAR PORTB.0
POZ VAR BYTE
READ 20,POZ


IF POZ=1 THEN GOTO KONUM1
IF POZ=2 THEN GOTO KONUM2
IF POZ=3 THEN GOTO KONUM3

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


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

KONUM3:
POZ=3
WRITE 20,poz
PAUSE 10
PORTA=00000100
PAUSE 200
PORTA=00000010
PAUSE 200
PORTA=00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
PAUSE 100
IF BUTON=1 THEN GOTO KONUM3
PAUSE 100

END
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 07 Kasım 2010, 23:14:19
Alıntı Yapelektrik kesilip geldiğinde hengi konumda ise o konumdan başlaması

Koda bakmadım ama isis de enerjiyi nasıl kesiyorsun?

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


Kayıt yapmaktan entegrenin ömrünü yersin. her döngüde kayıt var.

Şöyle olmalı,
IF POZ=1 THEN GOTO KONUM11  '' değiştirildi
IF POZ=2 THEN GOTO KONUM21  '' değiştirildi
IF POZ=3 THEN GOTO KONUM31  '' değiştirildi

KONUM1:
poz=1
WRITE 20,poz
PAUSE 10
KONUM11:  ' eklendi
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
PAUSE 100
IF BUTON=1 THEN GOTO KONUM11  '' değiştirildi
PAUSE 100


diğerleri de aynı değişiklik ister
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:15:30
stop tuşuna basarak, daha önce yapılmış bazı devrelerde bu şekilde çalıştığını görmüştüm
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 07 Kasım 2010, 23:16:05
enerjiyi kesmek diilde reset atmak olur sanirim isiste...

eepromun icini gozlemliyosundegilmi simule ederken...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: Erol YILMAZ - 07 Kasım 2010, 23:16:25
KOdda sadece EEPROM A yazma ve okuma rutinlerini bırakırsan
EEPROM işlemlerinde hata olup olmadığını test edebilirsin.

EEPROM düzgün çalışıyorsa ondan sonra diğer kısımlara geçebilirsin.

Tabi ISIS ile Gerçek ortamda bazı farklılıklar olacaktır.

Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:19:06
isiste epromun içini nasıl gözlemleyebilirim, yani eproma yazılıp yazılmadığı isiste anlaşılabilirmi
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 07 Kasım 2010, 23:21:48
tabiki isiste debug menusun de pic eeprom memory var ilk once play tusuna basicaksin program calisinca ilerleme tusuna basicaksin yoksa o menu aktif olmaz...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 07 Kasım 2010, 23:23:39
bende sen stop butonuna basinca o eepromda bilgi kalmaz sonucta gercek bi pic yok bu yuzden EEPROM da yok bence durdurup calistirmak ise yaramaz pice reset atip denermisiniz bide...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 07 Kasım 2010, 23:23:51
Buton PORTB.0 giriş yapılmamış. Ve pull up yapmalısın.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 07 Kasım 2010, 23:27:38
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 rutini
pause 1
IF BUTON=0 THEN GOTO buton_birak
next

return


Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:36:59
TRISA=00000111
TRISB=00000000
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
READ 20,POZ


IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31

KONUM1:
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:
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:
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



Bu şekilde derledim ama yine olmadı isis dosyasını buraya eklemem gerekirmi ? buton içinde pullup direnci eklemiştim devrede konumu değiştiriyor bir problem yok sadece eproma kaydedip doğru konuma göndermeyi beceremedim
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 07 Kasım 2010, 23:38:56
peki dedigim eeprom memory den data kaydediliyomu die baktin mi arkadasim...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:43:19
ona nasıl bakacağımı bulamadım şu an onu inceliyorum ama anlamış değilim
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:46:37
ama eproma bişeyler kaydediyor sanırım, stop yaptıktan sonra bir daha play yapınca butona bassamda uzun süre konumlara geçmiyor uzun süre bekledikten sonra geçiyor
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 07 Kasım 2010, 23:48:21
http://img9.imageshack.us/img9/5995/adszxiks.jpg

bu resme bak
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 07 Kasım 2010, 23:49:20
Kaydeder merak etme, son verdiğim kodu kullan.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:50:50
dosyaları buraya yükledim

http://www.upload.gen.tr/d.php/s16/2pa9vhil/16f628_eprom.rar.html (http://www.upload.gen.tr/d.php/s16/2pa9vhil/16f628_eprom.rar.html)
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 07 Kasım 2010, 23:55:14
debug kısmına girdiğimde memory kısmı dektif görünüyor, aktif gözükmesi için bişey yapmam gerekiyormu
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 00:00:18
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...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 00:02:13
ama programi bastan calistirinca okuyunca bise yapmiyo yani kaldigi konumdan devam etmiyo...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 00:10:31
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
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 00:15:57
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
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 00:20:34
isiste bu şekilde görünüyor

http://i1011.hizliresim.com/2010/11/8/134.jpg
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 00:22:10
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...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: 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 ?
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 00:34:49
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
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: 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...

Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 00:41:01
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...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 00:48:17
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.....
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 00:51:38
"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
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 00:53:26
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...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 00:59:55
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.

Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 01:02:11
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 ?
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 01:03:30
DATA @20,1
bunu nasıl kullanabilirm programda

yani write komutundan önce bunumu yazmam gerekir usta
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 01:16:52
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
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 01:28:50
ustam derlerken buton_basildi için hata veriyor
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 01:30:19
Özür, buton_basildi değişkenini atamamışız düzelttim.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: bytex - 08 Kasım 2010, 09:27:31
ö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..
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 15:52:16
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.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 20:08:01
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...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 20:14:23
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.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 20:18:34
anladim yani okuma icin bu komut kullanilmaz dogrumudur...

Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 20:20:28
Hayır, pic enerjilendiğinde eeprom okunmak istenirse READ komutunu görmesi gerekir. DATA ile hiç ilgilenmez.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 20:24:18
peki o komut satirini kullanmamizin amaci nedir...
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: OG - 08 Kasım 2010, 21:04:40
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.
Başlık: Ynt: 16F628A eproma konum kaydetme sorunu
Gönderen: justice_for_all - 08 Kasım 2010, 21:11:36
simdi anladim saol OG hocam..