Kayan Yazı ve Mesaj Projeleri

Başlatan XNHCX, 05 Ocak 2003, 17:28:27

bzirapli

arslan74 ve picman arkadaşlara sonsuz teşekkürler. Bu devreleri yapıp deneyeceğim. bu foruma uzun zamandır takip ediyorum ama böyle çalıştıkları söylenen kayan yazılar bunlar oldu. Bundan önce böyle devre linklerini ben görememiştim.

sapkaliamca

Aslan hocam kodlar için çok teşekkür ederiz. Allah yolunuzu açık etsin başarılar dilerim.
ŞAPKALIAMCA MUTLULUKLAR DİLER

bzirapli

_PICMAN_  Arkadaşımaıza PC KONTROLLÜ AKAN YAZI PROJESİ için  bir kaç sorum olacak;

1. Ledlerin bulunduğu devrede 74164'ün 13 nolu ayağında kondansatör semblolü var ama açık şemada bu yok. bu nedir.


2. "7414 Her 10 sıra için bir tane invert kullanacaksınız. " devrenizde bu kapılar paralel bağlanmış bu kapıların hepsini paralelmi bağlayacağız. yoksa her ontane için bir adet seri mi bağlanacak?

3. Baskılı devreyi gönderebilirmisiniz.

gurhanmurat

cpu:16f628
saat gösterme
umarım sizlere fikir verir.
'****************************************************************
'*  Name    : DAHİLİ KAYAN YAZI.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2005 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17.04.2005                                        *
'*  Version : 1.0                                               *
'*  Notes   :74HC138 KULLANILDI                                                   *
'*          :                                                *
'****************************************************************
TrisA = %11111100
TrisB = 0
PortA = 0
PortB = 0
cmcon = 7
OPTION_REG = $55   
INTCON =$A0         

on interrupt goto kesme

buff       var byte[22]
ii         var byte
kk         var byte
aa          var byte
bb          var byte
cc          var byte
mm         var byte
oo          var byte
murat      var byte
ekran2     var byte
jj         var word

;;;;;; saat degiskenleri ;;;;;
ONE         var byte
TEN         var byte
HUND        var byte
saniye      var byte
dakika      var byte
dakika_1   var byte
saat      var byte
saat_1       var byte
dakika_h   var byte
dakika_l   var byte
saat_h      var byte
saat_l      var byte
ticks      var byte
hane      var byte
iki_nkt     var byte
mode      var bit
guncelle    var bit
;;;;;;;;;;; sabitler;;;;;;;;;;;;;;
T1CON.0=1


clear
guncelle = 1
mode = 1
gosub yukle

tekrar:
if PortA.3 = 0 then gosub art
if PortA.4 = 0 then gosub azal
if PortA.2=1 then
   for mm=0 to 11
       for kk=0 to 19
           for jj=0 to 75
               PortA.0 = 0
               For ii=0 to 15
                   portA.1=0
                   PortA.1=1
                   PortA.0=1
                   PortB = Buff[ii]
                   if PortA.2 = 0 then tekrar
                   pauseus 15
                   PortB = 0
               next    
           next
           gosub syf_blr      
       next
       cc=cc + 1
   next
   ekran2=ekran2 + 1
   if ekran2=2 then gosub saat_bas  ; if ekran2=2 OR ekran2=3 then gosub saat_bas
   if ekran2=2 then ekran2=0        ; kac ekran gosterirsen sifirla
cc=0
else
    gosub saat1
endif          
goto tekrar

saat1:
      for jj=0 to 150
          PortA.0 = 0
          For ii=0 to 15
              portA.1=0
              PortA.1=1
              PortA.0=1
              PortB = Buff[ii]
              pauseus 15
              PortB = 0
          next    
      next
   if guncelle = 1 then gosub saat_yaz
return

saat_bas:
   gosub saat_yaz
   for oo=0 to 150
      for jj=0 to 75
          PortA.0 = 0
          For ii=0 to 15
              portA.1=0
              PortA.1=1
              PortA.0=1
              PortB = Buff[ii]
              pauseus 15
              PortB = 0
          next    
      next
   if guncelle = 1 then gosub saat_yaz
   next
return
   
cevir:
asm
   CLRF   _TEN
   CLRF   _HUND      ; init registers

H1   
   MOVLW   0x64      ; 100
   SUBWF   _ONE,F      ; subtract 100 from number
   BTFSC   STATUS,C   ; negative result?
   GOTO   H2      ; no? goto H2
   GOTO   H3      ; yes? goto H3 (100's done)
H2   
   INCF   _HUND,F      ; increment HUND register
   GOTO   H1      ; & loop back for another test
H3   
   MOVLW   0x64      ; 100
   ADDWF   _ONE,F      ; add 100 back to number

TO1   
   MOVLW   0x0A      ; 10
   SUBWF   _ONE,F      ; subtract 10 from number
   BTFSC   STATUS,C   ; negative result?
   GOTO   TO2      ; no? goto T2
   GOTO   TO3      ; yes? goto T3 (10's done)
TO2   
   INCF   _TEN,F      ; increment TEN register
   GOTO   TO1      ; & loop back for another test
TO3   
   MOVLW   0x0A      ; 10
   ADDWF   _ONE,F      ; add 10 back to number
   MOVLW   0x00
endasm
return



syf_blr:
   select case ekran2
   case 0
      gosub yukle
   case 1
      gosub yukle_1
   ;case 2
;      gosub saat_bas   
   ;case 3
   ;   gosub yukle_3
;   case 4
   ;   gosub yukle_4
;   case 5
   ;   gosub yukle_5
   end SELECT
      
return

saat_yaz:
   ONE = saat
   gosub cevir
   saat_l = ONE
   saat_h = TEN
   
   ONE = dakika
   gosub cevir
   dakika_l = ONE
   dakika_h = TEN
   guncelle=0
   hane=0
   bb=saat_h * 6
   gosub saat_yukle
   hane=1
   bb=saat_l * 6
   gosub saat_yukle
   hane=2
   bb=dakika_h * 6
   gosub saat_yukle
   hane=3
   bb=dakika_l * 6
   gosub saat_yukle
return
saat_yukle:
   for aa=0 to 5
   lookup bb,[$3E,$51,$49,$45,$3E,$00,_    ;0
             $00,$01,$7F,$00,$00,$00,_   ;1
              $42,$61,$51,$49,$46,$00,_   ;2
             $22,$41,$49,$49,$36,$00,_   ;3
             $0F,$08,$08,$08,$7F,$00,_   ;4
             $67,$45,$45,$45,$7D,$00,_   ;5
             $3C,$4A,$49,$49,$38,$00,_   ;6
             $7E,$09,$09,$09,$7E,$00,_   ;7
             $36,$49,$49,$49,$36,$00,_   ;8
             $06,$49,$49,$29,$1E,$00],murat     ;9   
   if hane >=2 then
      if iki_nkt=0 then
      buff[aa+(hane*6)]=$00
      buff[aa+(hane*6)+1]=$14
      buff[aa+(hane*6)+2]=$00
      iki_nkt=1
   endif
      buff[aa+(hane*6)+3]=murat
   else                            
          buff[aa+(hane*6)]=murat                        
   endif
      bb=bb+1
     next
iki_nkt=0
return

art:
   dakika = dakika + 1
   if dakika >= 60 then
      dakika = 0
      saat = saat + 1
         if saat >= 24 then
            saat = 0
         endif
   endif
   guncelle = 1
return

azal:
   dakika=dakika-1
   if dakika >= 60 then
      dakika = 59
      saat=saat-1
         if saat >=24 then
            saat=23
         endif
   endif
   guncelle=1
return




yukle:

for aa=0 to 19
   bb=(aa+kk) + (cc * 20)
lookup bb,[$7F,$02,$0C,$02,$7F,$00,_
         $3F,$40,$40,$40,$3F,$00,_
         $7E,$09,$19,$29,$46,$00,_
         $7E,$09,$09,$09,$7E,$00,_
         $01,$01,$7F,$01,$01,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$08,$14,$22,$41,$00,_
         $3E,$41,$41,$41,$3E,$00,_
         $7F,$41,$41,$41,$63,$00,_
         $00,$00,$00,$00,$00,$00,_
         $42,$61,$51,$49,$46,$00,_
         $22,$41,$49,$49,$36,$00,_
          $00,$00,$03,$00,$00,$00,_
         $3E,$51,$49,$45,$3E,$00,_
         $0F,$08,$08,$08,$7F,$00,_
         $00,$00,$03,$00,$00,$00,_
         $42,$61,$51,$49,$46,$00,_
         $3E,$51,$49,$45,$3E,$00,_
         $3E,$51,$49,$45,$3E,$00,_
         $67,$45,$45,$45,$7D,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7E,$09,$09,$09,$7E,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7E,$09,$09,$09,$7E,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7E,$09,$09,$09,$7E,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7E,$09,$09,$09,$7E,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7E,$09,$09,$09,$7E,$00,_
         $00,$00,$00,$00,$00,$00,_
          $00,$00,$00],murat   

          buff[aa]=murat                        
         next
return                          


yukle_1:

for aa=0 to 19
   bb=(aa+kk) + (cc * 20)
lookup bb,[$00,$00,$00,$00,$00,$00,_
         $00,$01,$7F,$00,$00,$00,_
         $00,$01,$7F,$00,$00,$00,_
         $01,$71,$09,$05,$03,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $00,$00,$00,$00,$00,$00,_
         $7F,$49,$49,$49,$36,$00,_
         $00,$00,$00,$00,$00,$00,_
          $00,$00,$00],murat   
          buff[aa]=murat                           
      next
return                          


;;;;;;;;;;;;;;;; KESME Programi ;;;;;;;;;;;;;;;;;;;;;;;;;
disable
kesme:
   ticks = ticks+1
   if ticks < 61 then cik
      ticks=0
      saniye = saniye+1
      if saniye >= 60 then
           saniye = 0
           dakika = dakika+1
           guncelle=1
           if dakika >= 60 then
              dakika=0
              saat=saat+1
                if saat >= 24 then
                  saat = 0
                endif
          endif
       endif
cik:
   INTCON.2 = 0
resume
ENABLE
end

microman

Alıntı yapılan: "_PICMAN_"PC KONTROLLÜ AKAN YAZI PROJESİ

Tıklayın



bu şemada anlamadığım bir nokta var.

her bir sutün için bir tane 74hc164 shit register entegresi kullanılmış.
şimdi burada bütün 74hc164 entegrelerinin data ve clk pinleri bir biri ile bağlantılı peki nasıl oluyorda 1. sutüna farklı n. sutüna farklı bir data yazdırılabiliyor. yani data pininden seri olarak bir data gönderiliyor ve bütün 74hc164 entegreleri clock'lanıyor bu durumda bütün sutünlara aynı data yazılmış olmuyormu? acaba burada benim bilmediğim Qh ucunun farklı bir işlevimi var.

zeren51

Sayın arkadaşım sen anlaşılan sift register mantıgını bilmiyorsun birbirine takip ederek gider yani bir tane data dirişi olur ve birde clk olur data ucundan seri olarak 74174 lere seri olarak gier 74164 ün qh yani enson led cıkışı birsonraki74164 ün data girişine baglanarak istedigin karar uzuata bilirsin normal olarak 50 satır yap devreyi dogru yap bi sorun cıkmaz

vatandas30

arkadaşlar. satır tarama işleminde satır bilgisi shift registerlere nasıl gönderiliyor. diyelim ki 40 sütunlu bir devrede bir satırda 40 hanelik bir bilgiyi göndermemiz gerekmez mi. öyleyse bunu nasıl yapacağız.
    sutün taramada parlaklık sorunu yaşadığım için satır tarama yapacağım. yardımlarınızı bekliyorum

vatandas30

yok mu buraya bakan.
arkadaşlar ben hazır devre ve program aramıyorum. kendim yapmak istiyorum.sütun tarama yöntemini çözdüm. hemde klavye kontrollü.satır tarama da yatay olarak shift registerlere karakterleri nasıl yükleyeceğiz .  üstelik registerler birbirine bağlı. bu kadar çok sütunlu bir bilgiyi yüklemeyi bilmiyorum. yoksa bir tanesine yükleyeceğiz de ondan sonra kendiliğinden kayacak mı.
her satırda yükleyeceğimiz bilgi değişiyor. yani her satır için bilgileri tekrar yüklemek gerekiyor. karakter tablosunu nasıl oluşturmam lazım ki her satır taramasında buradan sonuna eklensin.
yardımlarınızı bekliyorum.

Lütfi AYYILDIZ

Çok sütun yüklemene gerek yok zaten 74164 ler sen her karakter girdiğinde clk ile beraber bir önceki veriyi ötelemiş olacak.Aynı satır tarama prensibine göre verilerini gönderiyorsun, mantık aynı fakat satır tarama derdi yok.

vatandas30

cevabınız için  teşekkür. mümkünse kısa bir örnek verebilir misiniz.

vatandas30

satır tarama da 1. satırın 1. bitini shift registere yükledik ve satırı açtık. 2 satıra geçtiğimizde ve satır bilgisini yüklediğimizde az önce yüklemiş olduğumuz bilgi de ötelenmiş olarak 2 satıra yansımaz mı.

Lütfi AYYILDIZ

Zaten 1. bit bir sonraki satıra ötelenmiş olacak arkadan gelen ise baştan ötelenerek devam edecek yani gönderdiğin karakterler Q7 de son buluncaya kadar bir dizi halinde devam edecek. Örnek bir program olarak  elimde hali hazırda bir kod yok fakat ben tarama prensibine göre çalışan bir kayan yazı kullanıyorum bunu da 74164 ler ile yapıyorum baştan 1 gönderiyorum bu 1 satır ları baştan sona kadar tarıyor umarım yardımcı olabilmişimdir.

TARAMA: 
PORTB=0  
HIGH PORTA.2
pulsout PORTA.3,1
PORTB=SUTUN5 
PAUSE 1 

PORTB=0
LOW PORTA.2 
pulsout PORTA.3,1
PORTB=SUTUN4
PAUSE 1 

PORTB=0
LOW PORTA.2  
pulsout PORTA.3,1
PORTB=SUTUN3
PAUSE 1

PORTB=0  
LOW PORTA.2
pulsout PORTA.3,1
PORTB=SUTUN2
PAUSE 1

PORTB=0  
LOW PORTA.2
pulsout PORTA.3,1
PORTB=SUTUN1
PAUSE 1
RETURN

SERRO EFE

vatandas30  bende su an satır tarama üzerine çalışıyorum.Mantığı kendi anladığım kadarı ile paylaşayım.
ilk olarak karakter bilgisini tuttuğun ve gösterecegin degişkenleri hazırlıyorsun. karakter degişkeninin ilk bitini gösterecegin degişkene atıyorsun.shiftout komutu ile gönderiyorsun.7 satır için aynısını yaptıktan sonra gösterdigin değişkenlerin bitlerini 1bit kayma yönünde kaydırıyorsun . daha sonra karakter değişkeninin 2. bitini göstereceğin değişkenin ilk bitine atıyorsun.aynı işlemleri tekrarlıyorsun.  
NOT ; 164 lerde kalan bilgiyi reset hattını şaseye çekerek temize.

vatandas30

cobra07
senin verdiğin sütun tarama değil mi. ben zaten onu yaptım. benim aradığım satır tarama. yinede verdiğin cevap için teşekkür.
serroefe
satır tarama da önce 1. satır , arkasından 2. satır........ taranmayacak mı.
şimdi 1. satırın en baştaki sütununun bitini gönderdik.ve satırı açtık.  buraya kadar tamam. hemen arkasından 2. satıra geçeceğiz. ikinci satırın bilgisini de gönderdik. 2. satırı açtığımızda 1. satırda yüklediğimiz bilgi otomatikmen bir kayacak. ve o da ikinci satırda gözükmez mi.
böyle olunca da yamuk yumuk birşey ortaya çıkmaz mı. yoksa 1. satırı açtıktan sonra resetleyip ondan sonra mı 2. satır bilgisini göndereceğiz.

SERRO EFE

Satırı  gösterdikten sonra   resetle diğer satıra o şekilde gec.Yada dataları göndemeden reset bilgisi gönder.(mantıklısı)