Mplab C18 de yazılmış programın osilatörünü değiştirmek?

Başlatan mmavis, 01 Mayıs 2011, 02:52:17

mmavis

Merhaba arkadaşlar.
İnterneten indirerek üzerinde değişiklikler yaptığım bir program var. Bu programda süreler 4MHz osilatöre göre ayarlanmış. Ben 10MHz hızda çalışmak istiyorum. Fakat bu seferde LCD çalışmıyor. Anladığım kadarıyla LCD ye yazma hızım arttığından görüntü alamıyorum. Bu konuda ne yapabilirim?

Tagli

LCD'nin R/W bacağı bağlı mı? LCD'yi sürmek için C18'in dahili kütüphanesi mi kullanılmış? Eğer öyle ise, kod içinde şu fonksiyonlara bak:
void DelayFor18TCY(void)    //18 cycle bekleme
void DelayPORXLCD(void)    //15 ms bekleme
void DelayXLCD(void)       //5 ms bekleme

Bu fonksiyonların ana program içinde, kullanıcı tarafından doldurulmaları gerekiyor. Kendi çalışma hızına göre, bu fonksiyonların içindeki bekleme kodlarını uygun şekilde değiştirmelisin.
Gökçe Tağlıoğlu

mmavis

Teşekkür ederim.

Söylediğiniz fonksiyonlarda değişiklik yapınca LCD den görüntü alabildim.

Bu fonksiyonlarda bulunan zaman gecikme işlemini, taktığım osilatöre göre nasıl hesap edebilirim.

Yani ;
Delay10TCYx(1);

dediğim zaman gerçekte bu süre ne kadardır.

Bu konuda da yardımcı olursanız sevinirim.

Tagli

C18'in dahili bekleme fonksiyonları işlemci hızına bağlıdır. Örneğin Delay10TCYx(1) komutu 10 cycle bekleme yapar ama bir cycle'ın ne kadar süreceği işlemci hızına bağlıdır.

Ben genelde hazır fonksiyonların yardımıyla kendi bekleme fonksiyonlarımı yazıyorum. Örneğin, 48 MHz'de (12 MIPS) çalışan bir 18F2550 için şuna benzer bir kod yazıyorum:
#include <delays.h>
#define MIPS 12ULL
void delayMs(unsigned int ms){
	while (ms > 0){
		Delay1KTCYx(MIPS);
		ms--;
	}
	return;
}
Bu elbette tam değer vermiyor. Ama bu şekilde istenilen bekleme değerine oldukça yakın bir bekleme yapabiliyorum. Ayrıca, PIC'in hızı değiştiğinde yapmam gereken tek şey yukarıda tanımlanmış olan MIPS değerini değiştirmek oluyor. Elbette bu değer bir tam sayı olmalı. Ama ara değerler için benzer mantıkla kendi fonksiyonlarını yazman mümkün.
Gökçe Tağlıoğlu

mmavis


Verdiğiniz bilgiler çok işime yaradı.

Düzeltme:
Program içerisinde verdiğiniz (#define MIPS 12ULL) satırı, (#define MIPS 12) olması gerek sanırım.


Tagli

Aslında şu durumda hiç fark etmiyor. Ama bu iyi bir alışkanlık. Bu başlığı bir incele.  ;)
Gökçe Tağlıoğlu