Ses üretici yazılım Proton+ da çalışıyor PBP'da çalÄ

Başlatan hiddenman32, 21 Temmuz 2004, 23:58:52

hiddenman32

Hepinize Merhabalar;

Arkadaşlar aşağıda verdiğim proton+ ile yazılmış midi dosyalarını çalan ses yazılımını bir parçası aynen pbp'ya çevirdiğimde bir türlü çalıştıramıyorum. Hatam nerede olabilir.

Konu ile ilgilenen arkadaşlardan yardım istiyorum. Şimdiden teşekkürler.

Not:kodlar tam olarak okunamadığı için programları sadeleştirdim.

Ayrıca sanırım Timer1 kullanımında sorun yaşıyorum. Pause,sleep veya nap devrede iken interrupt'lar çalışıyormu? bu konuda bilgisi olan varmı?

proton+ ile yazılan orjinal kod
-----------------------------------

Device = 16F628
CONFIG HS_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_OFF    
      
XTAL = 4

Dim NOTE_COUNTER as Word SYSTEM        
Dim NOTE as Word SYSTEM
Dim TIMER1 as TMR1L.Word
Symbol GIE  INTCON.7

ON_INTERRUPT Goto NOTE_INT
Delayms 400
ALL_DIGITAL = True
Goto OVER_INTERRUPT

       
'----[INTERRUPT HANDLER]-------------
NOTE_INT:
TIMER1 = 65490              
       Inc NOTE_COUNTER
       If NOTE_COUNTER > NOTE Then
          PORTB = PORTB ^ 1
           Clear NOTE_COUNTER
       Endif
      Clear PIR1.0
       Retfie   FAST
       
'----[MAIN PROGRAM CODE]-------------
OVER_INTERRUPT:
       Output PORTB.0
       Clear NOTE_COUNTER
   T1CON = %00000001
      Clear PIR1.0    
      Set PIE1.0      
      INTCON =  %11000000
       

       NOTE = 0
       Repeat   
          Inc NOTE
           Delayms 50   
       Until NOTE = 1000
       Clear GIE
       Stop





pbp'ya cevirdiğim kod
-----------------------------------

@ DEVICE PIC16F88,HS_OSC,WDT_OFF,MCLR_OFF,PWRT_ON, BOD_OFF,LVP_OFF,CPD_OFF,PROTECT_OFF,CCPMX_ON
define OSC 20

; ilk açılışlar ve ayarları
ANSEL=0             ;analog mode disable select digital io
CMCON=%00000111     ;COMPARATOR DISABLE
ADCON0.0=0          ;disable a/d
T1CON = 0           ' Turn on TIMER1 OFF
PIE1=0
PIR1=0
PIE2=0              ;comparator int disable
PIR2=0              ;eeprom flag bits
OPTION_REG.7 = 0    ;portb pull-up enable
CVRCON.7 = 0        ;disable VREF, bit7

TRISA=0
TRISB=0
PORTA=0
PORTB=0
                             
NOTE_COUNTER var Word
NOTE var Word        
symbol TIMER1=TMR1L  
Symbol GIE = INTCON.7
       
ON INTERRUPT Goto NOTE_INT
pause 400                  

Goto OVER_INTERRUPT  

'----[INTERRUPT HANDLER]-----------
disable
NOTE_INT:
   TIMER1 = 65490  
   NOTE_COUNTER=NOTE_COUNTER+1  
   If NOTE_COUNTER >= NOTE Then
       toggle PORTB.0          
       NOTE_COUNTER=0  
   Endif
   low PIR1.0    
resume
enable  


       
'----[MAIN PROGRAM CODE]--------------------------------------------------      
OVER_INTERRUPT:        
   Output PORTB.0    
   NOTE_COUNTER=0    
   low PIR1.0        
   high PIE1.0      
   T1CON = %00000001
   INTCON =  %11000000

   NOTE = 5  
   Repeat    
       NOTE=NOTE+1
       pause 50
      Until NOTE = 1000
   low GIE
end

temha

ben bu konuda bilgi saibi değilim ama forumda gözüktüğü gibi yazdıysan
alt satıra geçtiğin için hata yapmış olabilirsin. komutları tek satırda yazmanı tavsiye ederim.
çünkü ben Orhan Altınbaşağın kitabındaki dijital saat programında böyle hatayla karşılaştım kitapta iki satırda yazılan komutu tek satırda yazdım sorun çözüldü.
analog sesi nasıl hexe çevirip pic'e yükleyebiliriz.  bilgi verirsen sevinirim. teşekkürler.

mmengi

dostum pbp ile proton+ arasında oldukça farklar var sen en basitinden proton+ da kullanılan hardware int. olayını pbp de software int. olarak kullanmışsın.Ayrıca pbp de yazdığın OVER_INTERRUPT: kısmında until komutu görünmüyor Ve 16f628 yerine 16f88 kullanmışsın bu geçişi yaparken bu iki chip arasındaki farkları göz önünde bulundurman gerekiyor. Bide niye illa pbp, proton+ ı kullansan olmuyormu.

hiddenman32

Alıntı yapılan: "mmengi"dostum pbp den kastın sanırım pic basic plus verdiğin kod buna benziyor. Ayrıca 16F628 için yazılmış kodu 16F88 e çevirmişsin doğrumu?
pbp dediğin proton+ dan başka bir şeymi onu anlayamadım eğer eski versiyonu ise hangi versiyonu.

Genelde kullanılan kısaltmaları kullandım
pbp = Pic Basic Pro 2.45

Proton+ = Proton Pic Basic

evet 88'in özellikleri 628'den daha üst seviyede

hiddenman32

Alıntı yapılan: "mmengi"dostum pbp ile proton+ arasında oldukça farklar var sen en basitinden proton+ da kullanılan hardware int. olayını pbp de software int. olarak kullanmışsın.Ayrıca pbp de yazdığın OVER_INTERRUPT: kısmında until komutu görünmüyor Ve 16f628 yerine 16f88 kullanmışsın bu geçişi yaparken bu iki chip arasındaki farkları göz önünde bulundurman gerekiyor. Bide niye illa pbp, proton+ ı kullansan olmuyormu.

Hardware int. PBP'da nasıl kullanılacak?

aktarırken UNTIL'i unutmuşum

chipler arası farklılıkları göz önünde bulundurdum.F88 20Mhz ile çalışıyor.Yapmakta olduğum sistemde de onu kullanıyorum.

Bu kodu bir yazılımın parçası olarak daha önceki yazılıma ilave edeceğim.Önceki yazılan kodu tamamen proton+'a çevirmem gerekiyor.Sadece bu kodu çevirmek daha kolay.

mmengi

dostum sıkıntının tam olarak hardware int. tanmı kaynaklandığını belirlemek gerekiyor eğer ondan dolayı oluyorsa pbp de bu özellik yok bunu ancak pbp nin içine asm kodları ilave ederek yapabilirsin.Sanırım bununla ilgili işlemler pbp nin manual inde anlatılıyordu.Pbp int. software olarak kontrol ediliyor, her basic komutu icra edildikten sonra pic int. varmı diye kontrol ediyor bu yüzden zaman gecikmeleri olabilir.Yaptırdığın basic işlemleri çok uzun zaman tutuyorsa burada yapmaya çalıştığın müzik olayı çok zor görünüyor.Sana tavsiyem tamamıyla proton a geç demek olacak ama ne yazıkki piyasadaki 2.1.3 versiyonu F88 i desteklemiyor ancak proton+ 2.14 piyasaya çıkmış onada bu destekler var fakat daha elime geçmedi.