Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip MPLAB C serisi => Microchip C18 => Konuyu başlatan: mmavis - 01 Mayıs 2011, 02:52:17

Başlık: Mplab C18 de yazılmış programın osilatörünü değiştirmek?
Gönderen: mmavis - 01 Mayıs 2011, 02:52:17
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?
Başlık: Ynt: Mplab C18 de yazılmış programın osilatörünü değiştirmek?
Gönderen: Tagli - 01 Mayıs 2011, 03:23:02
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.
Başlık: Ynt: Mplab C18 de yazılmış programın osilatörünü değiştirmek?
Gönderen: mmavis - 01 Mayıs 2011, 12:59:28
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.
Başlık: Ynt: Mplab C18 de yazılmış programın osilatörünü değiştirmek?
Gönderen: Tagli - 01 Mayıs 2011, 15:39:41
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.
Başlık: Ynt: Mplab C18 de yazılmış programın osilatörünü değiştirmek?
Gönderen: mmavis - 01 Mayıs 2011, 19:06:21

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.

Başlık: Ynt: Mplab C18 de yazılmış programın osilatörünü değiştirmek?
Gönderen: Tagli - 01 Mayıs 2011, 19:29:52
Aslında şu durumda hiç fark etmiyor. Ama bu iyi bir alışkanlık. Bu başlığı (https://www.picproje.org/index.php/topic,32584.0.html) bir incele.  ;)