has_artvin_li ( TA3TCM )
Usta Üye
- Katılım
- 18 Ocak 2008
- Mesajlar
- 1,069
- Puanları
- 156
- Yaş
- 39
Herkese selamun aleyküm değerli arkadaşlar bir siteden 8 haneli 7 segment display ile max7219 un hazır halde yapılmış olanını satın aldım. Ürün bu
https://www.robiz.net/8dgt7segmentmax7219?search=max7219
kendi kurduğum pic16f877a devresi ile 3 kanallı soft spi iletişimi yapmaya çalıştım.
Pic devrem ile max7219 u bir türlü çalıştıramadım sonra dedim ki spi iletişim mi çalışmıyor acaba ve bunun üzerine usb lojik analizör cihazını bilgisayara bağladım pic den gelen dataları 7 sn boyunca bilgisayar üzerinde dinledim ve 3 hattın üçünde de sinyal var yani komut gönderimi mevcut.
Lakin max7219 un datasheet bilgileri ile ilgili yanlış yapmış olma ihtimalim yüksek olduğu için burada sormak istedim...
max7219 datasheet : https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
Aşağıda programı olduğu gibi yapıştıracağım ve program üzerinde neyi niçin yaptığım konusunda da açıklamalar yapacağım bana bu konuda bir el atmanız mümkün mü acaba ?
Uzun lafın kısası ben hangi registerin içini yada hangilerinin içini yanlış yapmışım anlayamadım şu anda sisteme enerji verdiğim zaman bütün dijitteki displaylar tamamen sönük duruyor...
https://www.robiz.net/8dgt7segmentmax7219?search=max7219
kendi kurduğum pic16f877a devresi ile 3 kanallı soft spi iletişimi yapmaya çalıştım.
Pic devrem ile max7219 u bir türlü çalıştıramadım sonra dedim ki spi iletişim mi çalışmıyor acaba ve bunun üzerine usb lojik analizör cihazını bilgisayara bağladım pic den gelen dataları 7 sn boyunca bilgisayar üzerinde dinledim ve 3 hattın üçünde de sinyal var yani komut gönderimi mevcut.
Lakin max7219 un datasheet bilgileri ile ilgili yanlış yapmış olma ihtimalim yüksek olduğu için burada sormak istedim...
max7219 datasheet : https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
Aşağıda programı olduğu gibi yapıştıracağım ve program üzerinde neyi niçin yaptığım konusunda da açıklamalar yapacağım bana bu konuda bir el atmanız mümkün mü acaba ?
Kod:
///////////////////////////////////soft spi iletişimi için gerekli ayarlamaları yaptım///////////////////
sbit Chip_Select at RB7_bit;
sbit SoftSpi_CLK at RB6_bit;
sbit SoftSpi_SDI at RB5_bit;
sbit SoftSpi_SDO at RB4_bit;
sbit Chip_Select_Direction at TRISB7_bit;
sbit SoftSpi_CLK_Direction at TRISB6_bit;
sbit SoftSpi_SDI_Direction at TRISB5_bit;
sbit SoftSpi_SDO_Direction at TRISB4_bit;
////////////////////////////////////////////////////////////////////////////////////////////
char sayi; //sayı adında değişken tanımladım.
void main() {
adcon1=7; //portları dijital olacak şekilde ayarladım.
trisb=0x00; // portb yi çıkış yaptım
portb=0x00; // portb nin içini temizledim.
////////////////////////////////
Chip_Select = 1; // DAC seçimini kaldırın
Chip_Select_Direction = 0; // CS # pinini Output olarak ayarla
Soft_SPI_Init (); // Soft_SPI'yi başlat
Chip_select=0;
soft_spi_write(0x0C); // Max7219 un 0x0c adresine
soft_spi_write(0x01); // 0x01 gönderdim buradaki amacım = max7219 normal operasyon modunda //çalışması için
Chip_select=1;
Chip_select=0;
soft_spi_write(0x09); //max7219 un 0x09 adresine
soft_spi_write(0x00); // 0x00 gönderdim yoğunluk kayıt formatıymış 1/32 de çalışsın diye
Chip_select=1;
Chip_select=0;
soft_spi_write(0x0B); // max7219 un 0x0b adresine
soft_spi_write(0x07); ////0x07 gönderdim Scan-Limit Register bütün dijitler aktif olsun diye
//ama burada yanlış yapmış olabilirim doğrusunu bilmiyorum.
Chip_select=1;
Chip_select=0;
soft_spi_write(0x0F); // Display-Test Register Format Adresine 00 gönderdim
soft_spi_write(0x00); // test değil de normal modda çalışması için
Chip_select=1;
Chip_select=0;
soft_spi_write(0x0A);
soft_spi_write(0x01);
Chip_select=1;
sayi=0;
while(1){
Chip_select=0;
soft_spi_Write(0x07); // işte ekranda görmek istediğim değerleri buraya yazdım ama muhtemel
// olasıkla yanlış adres çünkü tam adresini bilmiyorum
soft_spi_Write(sayi); // sayı adındaki registerin içini 0x07 adresine yani ekrana gösterme
// adresine yazmaya çalıştım ama burada yapmak istediğim şey şu : soldan sağa 7 dijit 0 göstersin en sağ en
// düşük değerli dijit sayı registerinin içini göstersin.
Chip_select=1;
sayi++;
if (sayi>9){
sayi=0;
}
delay_ms(250);
}
}
Moderatör tarafında düzenlendi: