CCTSS Switch

Başlatan onurinci, 10 Aralık 2013, 06:26:14

onurinci

Hocam selam.
sabit sinus ton üreten bir entegreye dip switch yerine konforlu olsun diye LCD ve butonlarla bir şeyler tasarlamaya çalıştım,sonuçta aksamayla çalıştı tabiiki problemde beraberinde geldi.
38 adet posisyonumuz var
67.0 hz 'ten 250.3 'e kadar aşağı yukarı butonları ile hem displey'de görsellik sağlıyorum hemde 6 bitli binary çıkış elde ediyoruz.
devreye voltaj verdiğimizde önceden belirlenmiş olan 88.5 hz posizyonundan başlıyor,

artırma ve eksilme işlemi fena çalışmadı fakat sıkıntılı.
örnek 67.0 kadar indik yada 250.3 kadar çıktık ,yanlışlıkla butona fazladan basar isek ,o noktadan ileri yada geri dönemiyoruz.ne kadar yanlış bastık isek okadar ileri geri basmak gerekiyor.çok ilkel bir ifade oldu hocam kusura bakmayın fakat simule ederseniz olayı göreceksiniz.

ikinci problemim ,
her voltaj verdiğimizde mecburen start değeri olan 88.5hz 'den başlatıyorum.oysa nerede bırakır isem ertesi gün enerji verdiğimde oradan açılmasını istiyorum.sayenizde çat pat ortaya aksak timur bir şeyler çıkarabiliyorum .fakat dahili eproma yazmanın zerresini öğrenemedim.

http://www.dosya.tc/server20/FkRLjO/CCTSS.rar.html
@ DEVICE pic16F876, WDT_OFF, PWRT_ON, PROTECT_OFF, XT_OSC
DEFINE OSC 4

TRISA=%00000111 : PORTA=0
TRISB=%00000000 : PORTB=0
TRISC=%00000000 : PORTC=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
ADCON1 = 7
'CMCON = 7

SAYI VAR byte
SAYI=7

Start:
if  PORTA.0=0 then  SAYI=SAYI+1
   while PORTA.0=0 :wend

IF PORTA.1=0 THEN SAYI=SAYI-1
   while PORTA.1=0 :wend
   
IF PORTA.2=0 THEN SAYI=0

  SELECT CASE SAYI
    CASE 0  : LCDOUT $FE,$82,"Tone  67.0 Hz " :PORTC=%00111111
    CASE 1  : LCDOUT $FE,$82,"Tone  71.9 Hz " :PORTC=%00111110
    CASE 2  : LCDOUT $FE,$82,"Tone  74.4 Hz " :PORTC=%00011111
    CASE 3  : LCDOUT $FE,$82,"Tone  77.0 Hz " :PORTC=%00111100
    CASE 4  : LCDOUT $FE,$82,"Tone  79.7 Hz " :PORTC=%00101111
    CASE 5  : LCDOUT $FE,$82,"Tone  82.5 Hz " :PORTC=%00011110
    CASE 6  : LCDOUT $FE,$82,"Tone  85.4 Hz " :PORTC=%00001111
    CASE 7  : LCDOUT $FE,$82,"Tone  88.5 Hz " :PORTC=%00011100
    CASE 8  : LCDOUT $FE,$82,"Tone  91.5 Hz " :PORTC=%00110111
    CASE 9  : LCDOUT $FE,$82,"Tone  94.8 Hz " :PORTC=%00101110
    case 10 : LCDOUT $FE,$82,"Tone  97.4 Hz " :PORTC=%00010111
    case 11 : LCDOUT $FE,$82,"Tone 100.0 Hz " :PORTC=%00101100
    case 12 : LCDOUT $FE,$82,"Tone 103.5 Hz " :PORTC=%00001110
    case 13 : LCDOUT $FE,$82,"Tone 107.2 Hz " :PORTC=%00001100
    case 14 : LCDOUT $FE,$82,"Tone 110.9 Hz " :PORTC=%00110110
    case 15 : LCDOUT $FE,$82,"Tone 114.8 Hz " :PORTC=%00110100
    case 16 : LCDOUT $FE,$82,"Tone 118.8 Hz " :PORTC=%00010110
    case 17 : LCDOUT $FE,$82,"Tone 123.0 Hz " :PORTC=%00010100
    case 18 : LCDOUT $FE,$82,"Tone 127.3 Hz " :PORTC=%00100110
    case 19 : LCDOUT $FE,$82,"Tone 131.8 Hz " :PORTC=%00100100
    case 20 : LCDOUT $FE,$82,"Tone 136.5 Hz " :PORTC=%00000110
    case 21 : LCDOUT $FE,$82,"Tone 141.3 Hz " :PORTC=%00000100
    case 22 : LCDOUT $FE,$82,"Tone 146.2 Hz " :PORTC=%00111010
    case 23 : LCDOUT $FE,$82,"Tone 151.4 Hz " :PORTC=%00111000
    case 24 : LCDOUT $FE,$82,"Tone 156.7 Hz " :PORTC=%00011010
    case 25 : LCDOUT $FE,$82,"Tone 162.2 Hz " :PORTC=%00011000
    case 26 : LCDOUT $FE,$82,"Tone 167.9 Hz " :PORTC=%00101010
    case 27 : LCDOUT $FE,$82,"Tone 173.8 Hz " :PORTC=%00101000
    case 28 : LCDOUT $FE,$82,"Tone 179.9 Hz " :PORTC=%00001010
    case 29 : LCDOUT $FE,$82,"Tone 186.2 Hz " :PORTC=%00001000
    case 30 : LCDOUT $FE,$82,"Tone 192.8 Hz " :PORTC=%00110010
    case 31 : LCDOUT $FE,$82,"Tone 203.5 Hz " :PORTC=%00110000
    case 32 : LCDOUT $FE,$82,"Tone 210.7 Hz " :PORTC=%00010010
    case 33 : LCDOUT $FE,$82,"Tone 218.1 Hz " :PORTC=%00010000
    case 34 : LCDOUT $FE,$82,"Tone 225.7 Hz " :PORTC=%00100010
    case 35 : LCDOUT $FE,$82,"Tone 233.6 Hz " :PORTC=%00100000
    case 36 : LCDOUT $FE,$82,"Tone 241.8 Hz " :PORTC=%00000010
    case 37 : LCDOUT $FE,$82,"Tone 250.3 Hz " :PORTC=%00000000

   
    'SAYI=37
  END SELECT
    PAUSE 100
    GOTO Start
  END

ete

#1
Programında eksik olan şey SAYI değişkenine sınır getirmiş olmaman.
SAYI bir Byte değişkenidir. Artırdıkça 255 değerine kadar ulaşır ve artırmaya devam edersen sıfıra döner.
Senin sınırın 37 rakamıdır. Eski halinde program tuşa bastıkça Sayı değerini artırıyor ve 37 rakamını geçerek sınır dışına çıkıyor idi. Geri tuşuna bastıkça da tekrar sınır içine girmeye başlıyor idi. Artırma ve eksiltme kısmına sınır getirdim. Sayı 37'yi geçer se değeri hep 37 olsun, sayı sıfırdan aşağı düşerse (değeri 255 olur) değeri sıfırda kalsın diyerek sınırları çizmiş oldum. Böylece o problem ortadan kalktı.

Eprom kullanma meselesine gelince. Her bir sayı değiştirme (artırma yada azaltma yada sıfırlama) tuşlarından birine basıldığında değer değişmiş olacaktır. Bu nedenle bir DEGISTI isimli bir BIT değişkeni kullanarak değer değişmiş ise onu SET ettim. Programın sonunda GOTO BASLA etiketinden önce şayet DEGISTI=1 olmuş ise 10 nolu eprom adresine SAYI değerini kayıt ettirdim.

Program yeniden çalışırken 10 nolu adresteki değeri okuyup onu SAYI değeri olarak kabul ettim. ANcak henüz eproma bir şey kayıt edilmemiş ise okunacak değer 255 olacaktır. Bunu düşünerek okunan SAYI değeri 255 ise onu Sıfır yap şeklinde bir komut ekledim. Böylece istediklerin yerine gelmiş oldu.
Program aşağıdadır.

Ete
@ DEVICE pic16F876, WDT_OFF, PWRT_ON, PROTECT_OFF, XT_OSC
DEFINE OSC 4

TRISA=%00000111 : PORTA=0
TRISB=%00000000 : PORTB=0
TRISC=%00000000 : PORTC=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
ADCON1 = 7
'CMCON = 7

SAYI VAR byte
DEGISTI VAR BIT

READ 10,SAYI
IF SAYI=255 THEN SAYI=0

Start:

if  PORTA.0=0 then 
     DEGISTI=1
     SAYI=SAYI+1
     IF SAYI>37 THEN SAYI=37
     while PORTA.0=0 :wend
     pause 30
endIF   

IF PORTA.1=0 THEN
    DEGISTI=1
    SAYI=SAYI-1
    IF SAYI=255 THEN SAYI=0
    while PORTA.1=0 :wend
    pause 30
endIF
   
IF PORTA.2=0 THEN
    SAYI=0
    DEGISTI=1
ENDIF

  SELECT CASE SAYI
    CASE 0  : LCDOUT $FE,$82,"Tone  67.0 Hz " :PORTC=%00111111
    CASE 1  : LCDOUT $FE,$82,"Tone  71.9 Hz " :PORTC=%00111110
    CASE 2  : LCDOUT $FE,$82,"Tone  74.4 Hz " :PORTC=%00011111
    CASE 3  : LCDOUT $FE,$82,"Tone  77.0 Hz " :PORTC=%00111100
    CASE 4  : LCDOUT $FE,$82,"Tone  79.7 Hz " :PORTC=%00101111
    CASE 5  : LCDOUT $FE,$82,"Tone  82.5 Hz " :PORTC=%00011110
    CASE 6  : LCDOUT $FE,$82,"Tone  85.4 Hz " :PORTC=%00001111
    CASE 7  : LCDOUT $FE,$82,"Tone  88.5 Hz " :PORTC=%00011100
    CASE 8  : LCDOUT $FE,$82,"Tone  91.5 Hz " :PORTC=%00110111
    CASE 9  : LCDOUT $FE,$82,"Tone  94.8 Hz " :PORTC=%00101110
    case 10 : LCDOUT $FE,$82,"Tone  97.4 Hz " :PORTC=%00010111
    case 11 : LCDOUT $FE,$82,"Tone 100.0 Hz " :PORTC=%00101100
    case 12 : LCDOUT $FE,$82,"Tone 103.5 Hz " :PORTC=%00001110
    case 13 : LCDOUT $FE,$82,"Tone 107.2 Hz " :PORTC=%00001100
    case 14 : LCDOUT $FE,$82,"Tone 110.9 Hz " :PORTC=%00110110
    case 15 : LCDOUT $FE,$82,"Tone 114.8 Hz " :PORTC=%00110100
    case 16 : LCDOUT $FE,$82,"Tone 118.8 Hz " :PORTC=%00010110
    case 17 : LCDOUT $FE,$82,"Tone 123.0 Hz " :PORTC=%00010100
    case 18 : LCDOUT $FE,$82,"Tone 127.3 Hz " :PORTC=%00100110
    case 19 : LCDOUT $FE,$82,"Tone 131.8 Hz " :PORTC=%00100100
    case 20 : LCDOUT $FE,$82,"Tone 136.5 Hz " :PORTC=%00000110
    case 21 : LCDOUT $FE,$82,"Tone 141.3 Hz " :PORTC=%00000100
    case 22 : LCDOUT $FE,$82,"Tone 146.2 Hz " :PORTC=%00111010
    case 23 : LCDOUT $FE,$82,"Tone 151.4 Hz " :PORTC=%00111000
    case 24 : LCDOUT $FE,$82,"Tone 156.7 Hz " :PORTC=%00011010
    case 25 : LCDOUT $FE,$82,"Tone 162.2 Hz " :PORTC=%00011000
    case 26 : LCDOUT $FE,$82,"Tone 167.9 Hz " :PORTC=%00101010
    case 27 : LCDOUT $FE,$82,"Tone 173.8 Hz " :PORTC=%00101000
    case 28 : LCDOUT $FE,$82,"Tone 179.9 Hz " :PORTC=%00001010
    case 29 : LCDOUT $FE,$82,"Tone 186.2 Hz " :PORTC=%00001000
    case 30 : LCDOUT $FE,$82,"Tone 192.8 Hz " :PORTC=%00110010
    case 31 : LCDOUT $FE,$82,"Tone 203.5 Hz " :PORTC=%00110000
    case 32 : LCDOUT $FE,$82,"Tone 210.7 Hz " :PORTC=%00010010
    case 33 : LCDOUT $FE,$82,"Tone 218.1 Hz " :PORTC=%00010000
    case 34 : LCDOUT $FE,$82,"Tone 225.7 Hz " :PORTC=%00100010
    case 35 : LCDOUT $FE,$82,"Tone 233.6 Hz " :PORTC=%00100000
    case 36 : LCDOUT $FE,$82,"Tone 241.8 Hz " :PORTC=%00000010
    case 37 : LCDOUT $FE,$82,"Tone 250.3 Hz " :PORTC=%00000000   
    'SAYI=37
  END SELECT
    lcdout $fe,$c0,"SAYI=",dec2 SAYI  'sayı değerini görmek için ekledim gerekirse silersin

    IF DEGISTI=1 THEN
      WRITE 10,SAYI
      PAUSE 30
      DEGISTI=0
    ENDIF
     
    GOTO Start
  END

onurinci

hocam beni ihya ettiniz varolun.açıklamalarınıza her zaman hayranım kalın sağlıcakla.

Powered by EzPortal