max7219 kütüphane

Başlatan mustafayilmaz, 03 Mayıs 2016, 20:44:37

mustafayilmaz

merhaba :)

arduino ilgili yapmam gereken bir proje ödevi var. internette bulduğum çoğu kütüphane eksik çalışıyor veya çalışmıyor..

basit bir kütüphane buldum, bu kütüphane ile tek harf basabiliyorum. projede 8x8 matrix ledlerden 8 adet kullanılması gerekiyor.
diğer max7219lara veri nasıl gönderebilirim?

yazınının sağa-sola kayması, durması ve yanıp sönebilir olması gerekiyor.

ekte ISIS simulasyon dosyası mevcuttur.


unsigned char i;
unsigned char j;

int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;

char yazi[] = "KAYAN YAZI";

unsigned char ascii[26][8] = {
{0x00, 0x00, 0x7E, 0x09, 0x09, 0x09,0x7E, 0x00}, // A
{0x00, 0x00, 0x7F, 0x49, 0x49, 0x49,0x36, 0x00}, // B
{0x00, 0x00, 0x3E, 0x41, 0x41, 0x41,0x22, 0x00}, // C
{0x00, 0x00, 0x7F, 0x41, 0x41, 0x41,0x3E, 0x00}, // D
{0x00, 0x00, 0x7F, 0x49, 0x49, 0x41,0x00, 0x00}, // E
{0x00, 0x00, 0x7F, 0x09, 0x09, 0x01,0x00, 0x00}, // F
{0x00, 0x00, 0x3E, 0x41, 0x49, 0x49,0x3A, 0x00}, // G
{0x00, 0x00, 0x7F, 0x08, 0x08, 0x08,0x7F, 0x00}, // H
{0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,0x00, 0x00}, // I
{0x00, 0x00, 0x20, 0x40, 0x40, 0x3F,0x00, 0x00}, // J
{0x00, 0x00, 0x7F, 0x08, 0x0C, 0x12,0x61, 0x00}, // K
{0x00, 0x00, 0x7F, 0x40, 0x40, 0x40,0x00, 0x00}, // L
{0x00, 0x00, 0x7E, 0x01, 0x7E, 0x01,0x7E, 0x00}, // M
{0x00, 0x00, 0x7F, 0x02, 0x1C, 0x20,0x7F, 0x00}, // N
{0x00, 0x00, 0x3E, 0x41, 0x41, 0x41,0x3E, 0x00}, // O
{0x00, 0x00, 0x7E, 0x09, 0x09, 0x09,0x06, 0x00}, // P
{0x00, 0x00, 0x3E, 0x41, 0x51, 0x61,0x7E, 0x00}, // Q
{0x00, 0x00, 0x7F, 0x09, 0x19, 0x29,0x46, 0x00}, // R
{0x00, 0x00, 0x26, 0x49, 0x49, 0x49,0x32, 0x00}, // S
{0x00, 0x00, 0x01, 0x01, 0x7F, 0x01,0x01, 0x00}, // T
{0x00, 0x00, 0x3F, 0x40, 0x40, 0x40,0x3F, 0x00}, // U
{0x00, 0x00, 0x0F, 0x30, 0x40, 0x30,0x0F, 0x00}, // V
{0x00, 0x00, 0x3F, 0x40, 0x3F, 0x40,0x3F, 0x00}, // W
{0x00, 0x00, 0x41, 0x22, 0x1C, 0x22,0x41, 0x00}, // X
{0x00, 0x00, 0x01, 0x02, 0x7C, 0x02,0x01, 0x00}, // Y
{0x00, 0x00, 0x61, 0x51, 0x49, 0x45,0x43, 0x00}, // Z
};

void Write_Max7219_byte(unsigned char DATA)
{
   unsigned char i;
   digitalWrite(Max7219_pinCS, LOW);
   for (i = 8; i >= 1; i--)
   {
   digitalWrite(Max7219_pinCLK, LOW);
   digitalWrite(Max7219_pinDIN, DATA & 0x80);
   DATA = DATA << 1;
   digitalWrite(Max7219_pinCLK,HIGH);
}
}

void Write_Max7219(unsigned char
address, unsigned char dat)
{
digitalWrite(Max7219_pinCS, LOW);
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
digitalWrite(Max7219_pinCS, HIGH);
}

void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00);
Write_Max7219(0x0a, 0x03);
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}

void setup()
{
pinMode(Max7219_pinCLK, OUTPUT);
pinMode(Max7219_pinCS, OUTPUT);
pinMode(Max7219_pinDIN,OUTPUT);
delay(100);
Init_MAX7219();
}

void loop()
{
for (j = 0; j < 26; j++)
{
for (i = 0; i < 8; i++)
{
Write_Max7219(i,ascii[j][i - 1]);
delay(50);
}
delay(1000);
}
}



ete

Kimse cevap vermiyor. Sebep sanırım normalde 8 adet 7 segment display sürmek için kullanılan bir entegre ile matrix display sürülmesi olsa gerek. Bu nedenle 8 adet display sürmek yerine matrix in 8 adet satır pinini sürebilyorsun. Peki diğerleri ne olacak? bu durumda her bir matrix için bir entegre kullanmak zorunda kalacaksın. Bütün entegreleri seri olarak bir birine bağlayacaksın. Zaten bu şekilde bağlamışsın. Bağlantı şemana bakarak şunu söyleyebilirim. En son matrix de görülecek bilgiyi seri olarak ilk entegreden gireceksin, ardından beklemeden sondan ikincideki bilgiyi ve bu şekilde bütün matrixlerde görülen bilgileri girdiğin zaman her bir dispayda gösterilecek bilgiler görülecektir. Ama bu kullanım şekli ile 74HC595 kullanmak arasında bir fark göremiyorum ben. O zaman neden 50 kuruşluk 595 yerine bu pahalı entegreyi kullanasınki?

Üstelik 7 tane entegreye bir seferde bilgi yüklemek BASIC de son derece basit yapılabiliyor. Ama C dilinde bu iş için kütüphaneye hendek atlatman gerekecek. Sanırım o kütüphanelerin tamamı 7 segment gösterecek şekilde düzenlenmiş olsa gerek. Kütüphanede tadilat yapılması gerekebilir.

Bence kısa yoldan 595 kullanmaya bak. Rahat edersin.
Ete


mustafayilmaz

teşekkür ederim.

Ete hocam (sonlu durum makinası ) ödevi olduğu için komponentleri değiştirme şansım yok.
sadece simulasyon ortamında kalacak bir devre zaten. hazır satılan birşeyi yapmakla vaktimi harcamak istemem.

anlamadığım nokta girilen data bir entegreden diğerine geçmiyor. yani bunun için ne yapmak gerekli bilemiyorum. bu kısmı çözebilirsem iyi olacak. ödevi yapamazsam da sorun olmaz..

belki basicten buraya adapte ederim :)

iyi çalışmalar dilerim.

ete

Bu entegreye ait aşağıdaki basit BASIC coduna bakacak olursak;
BASLA:
FRQDATA=1234
'ADDRESS=5 : X = FRQDATA DIG 0     : GOSUB AL : GOSUB MAXYAZ
ADDRESS=4 : X = FRQDATA DIG 0     : GOSUB AL : GOSUB MAXYAZ
ADDRESS=3 : X = FRQDATA DIG 1     : GOSUB AL : GOSUB MAXYAZ
ADDRESS=2 : X = FRQDATA DIG 2     : GOSUB AL : GOSUB MAXYAZ
ADDRESS=1 : X = FRQDATA DIG 3     : GOSUB AL : GOSUB MAXYAZ
GOTO BASLA
'-----------------------------------------------------------------
AL:    LOOKUP X,[126,48,109,121,51,91,95,112,127,123,99,78,128],datareg :RETURN
'-----------------------------------------------------------------
MAXYAZ:
shiftout DIN,CLK,1,[ADDRESS,DATAREG]
PULSOUT LD,2
return
END

entegreye iki parametre yükleniyor.
Birincisi Address yani sende satır bilgisi ve ardından segment bilgisi. Sonrada Load bacağına bir puls veriliyor ve bu bilgi çıkışa aktarılıyor
Sende yapılması gereken şu,
1. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
2. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
3. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
4. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
5. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
6. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
7. matrix 1. satır seçilecek (1) ve o satırda yer alacak 8 bitlik bilgi yollanacak.
Load pinine bir puls verilerek bu bilgilerin bütün displaylerin 1. satırında görülmesi sağlanacak.
1 ms beklenecek
Sonra aynı işlem sırası ile 2 ci satırlar seçilerek ve o satırlara ait bilgiler yollanarak yapılacak
sırası ile devam edilerek 8 satırlık bilgi bu şekilde displaylerde gösterilmiş olacak.
Bağlantı şeman doğru aslında çalışmıyor ise programa bu mantık açısından bak ve gerekirse kütüphane kısmını değiştir

Ete


mustafayilmaz

ilginize teşekkür ederim.

hocayla görüşüp yeni bir kütüphane edindim.
bu kütüphaneyi de adam etmek için yine uğraşmam gerekecek.
sanırım vazgeçiyorum bu işten, yeterli zamanım yok zaten.

Powered by EzPortal