Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

2x16 LCD Spectrum display

Başlatan Mucit23, 17 Şubat 2011, 17:56:56

Mucit23

Arkadaşlar peki ben bişey sorayım. karakter lcd lerin her bir pikselinin grafik lcd gibi kontrolü mümkünmüdür. İlla kendi hafızasındaki karakterlerimi göstermek zorunda. İnternette bazı videolar izliyorum. 20x4 lcd ile 20 kanal vumetre yapmış. Lcdde her sütün 1 kanalı temsil ediyor ve ses sinyaline göre sütünlar yukarı aşağı hareket ediyor. Bunun mantığı nedir. Özellikle karakter lcd ile bu işi nasıl yapıyorlar

Bununla ilgili bazı videolar ne demek istediğimi daha iyi anlatacaktır.








edit OG, youtube linkleri forum'un yeni formatına göre düzeltidi

JKramer


Mucit23

Teşekkürler Jkramer gerçketen merak ettiğim bir konuydu. İnceliyorum..

eseneren

#3
877 adc gırısıne pot baglı
unsigned char continous_value[]={14, 17, 19, 21, 25, 17, 14, 0,
									4, 12, 4, 4, 4, 4, 14, 0,
									14, 17, 1, 2, 4, 8, 31, 0,
									31, 2, 4, 2, 1, 17, 14, 0,
									2, 6, 10, 18, 31, 2, 2, 0,
									31, 16, 30, 1, 1, 17, 14, 0,
									6, 8, 16, 30, 17, 17, 14, 0,
									31, 1, 2, 4, 8, 8, 8, 0,
									14, 17, 17, 14, 17, 17, 14, 0,
									14, 17, 17, 15, 1, 2, 12, 0,
									0,0,0,0,0,0,0,0};

Bunu tanımlayıp
void def_char(const char sabit) // Karakter tanımlama;
{
RD6=0;
DelayUs(200);
PORTB=64; 		// CGRAM E GEC
RD7=1;
RD7=0;

RD6=1;
DelayUs(200);
for(i=0;i<20;i++)
{
DelayMs(wait);
PORTB=continous_value[sabit+i];//;continous_value[sabit+i]; 		// 2 line
RD7=1;
RD7=0;
}
RD6=0;
DelayMs(wait);
PORTB=128;
RD7=1;
RD7=0;
}//

Bu fonksıyonu

adc_v=(int)(adc()/14);
def_char(adc_v);

gibi çağırınca potu cevırdıkce lcd de 0 dan 9 a kadar pixel satır olarak yukarı cıkıyor.
0 da ıken acıcık cevırınce 0-1 yarım ondan yarım ondan gorunuyor.

Sadece pot mini hoparlor ile kasa, şifre, kilit gıbı bir devre yapmıs idim bu kod parcası ordan... 
Proton olmasada nasıl karakter tanımlanacagı hakkında fıkır verıyor...

@mucit, 8 karakter tanımlıyabılıyorsun bır karakterı  ekrana yazdırdın sonra ıcerıgını degıstırıp alt satıra yazayım dedıgınde ılk karakterde degısıyor.
Bunu ekranın bır cok yerınde aynı anda karakter degıstırmek ıcın kullanıyorlarlar ( bırcok ornekden bırı)
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

FUNKY

Alıntı yapılan: mucit23 - 17 Şubat 2011, 17:56:56
sütünlar yukarı aşağı hareket ediyor. Bunun mantığı nedir. Özellikle karakter lcd ile bu işi nasıl yapıyorlar


mucit23  ben de merak ediyorum aynı konuyu "yukarı aşağı" 
eseneren bir örnek vermiş  ama   basic veya proton  la yazılmış   olursa anlayabilirim..

Mucit23

Bende inceliyorum mantığını anlamaya çalışıyorum.

eseneren

karakter lcd de misal A harfi icin tanımlama yapılmıs bir 5x8 bellek var orada kayıtlı pıxel pıxel dıyelım.
HD44780 ıcın mısal 8 adet kendınızın tanımlayabılecegı karakterler var misal i icin
00100  bu yandaki gibi i harfini tanımlarsınız sız bunu cgramdaki 0. adresde kayıtlı
00000  sız bunu cgrama kaydeder sonra ıcerıgını degıstırırsenız ekrandakı karakter degısecektır.
00100
00100  Sunu demek ıstıyorum A harfını 0. cgrama kaydettınız sonra lcd de 0,0 bu karakterı yazdınız
01110  Daha sonra 0.cgram a A harfının ustune sapka koydunuz sız hıc bır sey yapmadan
lcd 0,0 konumunda sapkalı a yazılı olacaktır.

kugıl sızın ıcın su sekılde bır lınk buldurdu
LCD mantıgını anlatıyor gayet guzel anlatım bence
http://www.dinceraydin.com/lcdsunum/lcdsunum1.html
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

FUNKY

merhabalar  dik bar  yapmaya çalışıyorum   ama ters çalışıyor. bir de  lcd nin  istediğim satır ve sutunlarına    bu  denememi yazdıramadım  datasheetlerden ve de lcd simulatorden de birşey çıkaramadım  yardımlarınızı bekliyorum  Basıc ile olursa  anlayabiilrim  ..
[IMG]http://img580.imageshack.us/img580/6802/panoramaiq.jpg[/img]

0V  --       2,5V  -----  5V   böyle çıkıyor
Uploaded with ImageShack.us



basla:
     
     tempadc=ADIn 0
     DelayUS 20
     adc=tempadc*0.005859     '0,,,6 arası
     GoSub yaz
     GoTo basla
   
    yaz:
   
      Print 254,64 '   $FE, $40
          temp0=0
      For temp0= 0 To adc
           temp1 = LRead LCDbar + temp0
           Print temp1
        DelayUS 500
      Next
     
        temp2=0
        For temp2 = 0 To temp0-1
        temp3 = LRead LCDsil+temp2
        Print temp3
        DelayUS 500   
       
        Next
    Return

LCDbar:
LData  31 , 31 , 31 , 31 , 31 , 31 , 31
LCDsil:
LData  0 , 0, 0, 0 , 0 , 0, 0

frederic

FUNKY linkte aradığınızdan fazlası mevcuttur bir bakın çalışmanıza sonra devam edersiniz.

https://www.picproje.org/index.php?topic=14526.0

Maxim

#9
sanırım birşeyler çıkmaya başladı
frekansı nasıl tespit edicez, FFT olmadan olmazmı bu?

http://www.4shared.com/video/Pc1kqaw8/spectrum.html

[IMG]http://dc270.4shared.com/img/Pc1kqaw8/0.5225321281474561/spectrum.wmv[/img]


kodu unuttuk

Device=16F877A
Xtal = 4

Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_ON, PWRTE_ON, WDT_OFF, XT_OSC


Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTB.1
Declare LCD_RSPin PORTB.0

Declare Adin_Res 8
Declare Adin_Tad FRC
Declare Adin_Stime 50

Print $FE,$78,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F
Print $FE,$70,$00,$1F,$1F,$1F,$1F,$1F,$1F,$1F
Print $FE,$68,$00,$00,$1F,$1F,$1F,$1F,$1F,$1F
Print $FE,$60,$00,$00,$00,$1F,$1F,$1F,$1F,$1F
Print $FE,$58,$00,$00,$00,$00,$1F,$1F,$1F,$1F
Print $FE,$50,$00,$00,$00,$00,$00,$1F,$1F,$1F
Print $FE,$48,$00,$00,$00,$00,$00,$00,$1F,$1F
Print $FE,$40,$00,$00,$00,$00,$00,$00,$00,$1F

Dim GIRIS As Byte
Dim TEMP As Byte


Loop:
GIRIS = ADIn 0
TEMP = (GIRIS +1) / 16
TEMP = TEMP + 1
DelayMS 10

Select TEMP

Case 0 To 7
Print At 2,1,TEMP


Case 8 To 15
Print At 2,1,7
Print At 1,1,TEMP


EndSelect

Print At 1,10,"ADC:",Dec GIRIS,"  "
Print At 2,10,"SON:",Dec TEMP," "

GoTo Loop

Mucit23

Maxim güzel olmuş.
ileride bende videodakiler gibi bişey yapmayı planlıyorum. En azından bunun için uğraşıcam. Bunu 20 band yapsak çok güzel olucak. Merak ettiğim bazı konular var. Filtreden sonra her bir kanalı tek bir adc kanalından okumak mümkünmüdür. Yoksa 20 band bi audio analyser yapılacaksa her band için ayrı bir adc kanalımı kullanmak gerekir

Maxim

yok tek kanal ile yapılıyor
en kötü 2

Mucit23

Ozaman direk ses sinyalini adc ye girip filitre işinide yazılımsal olarak hallediyorlar.

Maxim

valla işte orasını bende bilmiyorum
biraz matematiksel şeyler var

FFT DFT gibi hesaplamalar kullanılıyor
evet yazılımsal yani

aslan_korhan

Yazılımsal yapıyorlar Filtre işini fakat Videolar da çalan müzik ile gösterge alakasız.
Hesaplamaları güzel yapamamışlar...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.