MikroC - USB HID - Kayan Yazı - Sorun

Başlatan Hadi, 29 Ağustos 2015, 22:57:17

Hadi

Arkadaşlar kaç gündür kayan yazı üzerinde çalışıyorum. Ama bir yerde tıkanmışım ve yardımınıza ihtiyacım var.

Yavuz Erol hocanın internette bir kayan yazı projesi var.

Ben o projeyi biraz kurcalayıp değiştirerek işin içine USB'i de kattım ve 16x8'den 32x8'e çıkardım.

Donanımda sıkıntı yok. Çünkü sabit yazıda (USB'den değil) sorunsuz çalışıyor.
MikroC – C# ve donanım arasındaki bağlantıda da sorunum yok. Çünkü kısa yazıları sorunsuz yazdırabiliyorum.

Sıkıntı USB ile uzun yazılarda. Şöyle ki bildiğiniz gibi her karakter 6byte (sütun sayısı) veriye ihtiyacı var. 10 karakterden uzun yazılar 64bytelık bir pakete sığmadığından ardarda bir kere den fazla veri gönderip o verileri PIC tarafında birleştirip işe devam etmem gerekirdi. Bu işi nedense beceremedim.  ;D

Bu yoldan vaz geçip böyle bir yol seçtim.

USB'deki 64bytelık veri ile PIC'e sadece yazmak istediğim karakterli gönderiyorum.

Bu şekilse:

Mesela "Hadi Hashemi" için

{  8, 1, 4, 9, 0, 8, 1, 19, 8, 5, 9, 0, 0, ... , 0}


PIC tarafında ise her karakter için 6bytelık bir dizi tanımlamışım ve sütun sayısını tutuyorum.
Bu şekilde:

unsigned char _Space[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
unsigned char char_A[] = { 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00 };
unsigned char char_B[] = { 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00 };
unsigned char char_C[] = { 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00 };
.
.
.
unsigned char char_Z[] = { 0x61, 0x51, 0x49, 0x45, 0x43, 0x00 };


Ve gelen veriye göre dizileri büyük bir dizide yan yana ekleyerek birleştiriyorum.
Bu şekilde:

void CreateArray() {
	
	for(i = 0; i < sizeof(readbuff); i++) {

		switch(readbuff[i]) {

			case 0:
			{
				for(j = 0; j < sizeof(_Space); j++)
				{
				text[txtLength] = _Space[j];
				txtLength++;
				}
				break;
			}

			case 1:
			{
				for(j = 0; j < sizeof(char_A); j++)
				{
				text[txtLength] = char_A[j];
				txtLength++;
				}
				break;
			}

			case 2:
			{
				for(j = 0; j < sizeof(char_B); j++)
				{
				text[txtLength] = char_B[j];
				txtLength++;
				}
				break;
			}
			
			.
			.
			.
			
			case 26:
			{
				for(j = 0; j < sizeof(char_Z); j++)
				{
				text[txtLength] = char_Z[j];
				txtLength++;
				}
				break;
			}
		}
	}
}



Ve bu diziyi başta da söylediğim gibi Yavuz hocanın yöntemiyle yazdırmak istiyorum.
Ama sıkıntı burda; olmuyor.

Main metodum bu şekildedir.

void main() {

    ADCON1 |= 0x0F;
	CMCON  |= 0x07;
	
	TRISB  = 0x00;
	TRISD  = 0x00;
	
	PORTB  = 0x00;
	PORTD  = 0x00;
	
	HID_Enable(&readbuff,&writebuff);
	
	while(1) {
					
		while(!HID_Read());
		
		CreateArray();
		
		while(1) {
		
			Display();
			
		}
	}
}


CreateArray() metodu her veri geldiğinde sadece 1 kere çalışması gerekir. Display() metodu ise bu şekildedir ve hep çalışması gerekir.

void Display() {
        
	for(i = 0; i <=31; i++) { temp[i] = 0x00; }
	
	for(shift = -31; shift <= txtLength; shift++) {
					
		for(i = 0; i <= 31; i++) {
						
			value = i + shift;
			
			if(value < 0) temp[i] = 0;
			if(value >= 0 && value <= txtLength -1) temp[i] = text[value];
			if(value > txtLength) temp[i] = 0;
		}
			
		for(j = 0; j < 50; j++) {
						
			for(i = 0; i < 31; i++) {
							
				PORTB = temp[i];
				PORTD = i;
				
				Delay_us(200);
			}
		}
	}
}


MikroC bilenler buna bir el atsalar çok memnun olacağım.

Bu arada yeni fikirler ve yöntemlerinize de açığım.

Şimdiden zaman ayıranlara teşekkürler.  :)

LukeSkywalker

Satir taramaliyla devam etmenizi tavsiye ederim.

Hadi

Öncelikle cevap için teşekkürler.  :)

Alıntı yapılan: LukeSkywalker - 29 Ağustos 2015, 23:07:29
Satir taramaliyla devam etmenizi tavsiye ederim.

74HC595 ile mi?

Satir taramada nette araştırdığıma göre her seferinde 32 LED yandığından LEDlerin işiği az oluyor.

Birde ona örnek bulamadım.  ::)


LukeSkywalker

Blogumda var. Sutun tarama uzun boylu sistemlerde problem cikartir.

Hadi

Alıntı yapılan: LukeSkywalker - 29 Ağustos 2015, 23:24:35
Blogumda var. Sutun tarama uzun boylu sistemlerde problem cikartir.

Aslında benim problem USB den kaynaklanır. Yoksa uzun yazıları rahat yazdırıyorum. Satır taramaya da geçsem yine veri gönderme de sorun yaşayacağım.  :)