Tek bir font dosyası ile farklı büyüklükte yazı basmak mümkünmüdür?

Başlatan Mucit23, 13 Temmuz 2013, 00:38:26

kotan04

merhaba mucit23 font büyütme işini masaüstü yazılımında çözmen daha mantıklı basit bir pc arayüzünde yazdığın yazı derlenip işlemciye yüklense istediğin fonttaki yazıyı kolayca elde edersin bence işin bu kısmına yoğunlaş p10 kontrol kartındada sistem bu şekilde işliyor
kkkkoootttaaannn000444

RaMu

@hasankara

Kısaca program hafızası, eeprom veya ram gibi kullanılabilir,
adı üzerinde flash program memory,
flash bellek dediğimiz usb belleklerden farklı değil yapısı,
eğer md. izin veriyorsa runtime (programın işlenmesi esnasında)
okuma yazma yapmak mümkün.
Fakat ram işlemleri gibi hızlı olamayız,
çünkü program hafızası okuma yazma esnasında
işlemi yapabilmek için bir fonksiyon yürütülür,
ama ram üzerinde direk işlem yaparız.
Neyse konuda daha teferrüat var ama
şimdilik bunlar yeterli sanırım.

Serdar çiçek ccs c ile pic programlama kitabının 15. bölümünde syf 311 anlatılıyor (16f877 için).
Bahsettiğim gibi eğer md. destekliyorsa program hafızasına(p.h.) yazma veya p.h.dan okuma yapılıyor.
runtime okuma yazma yapılacaksa md. konfigurasyonunda okunup yazılacak alan için yazma okuma koruması kaldırılmalı,
öncelikle program hafızasında işleyen programın kullanmadı bir bölge seçilir,
bu bölgenin adresleri dahilinde okuma yazma yapılır,
(mevcut çalışan programın bulunduğu alanda okunup yazılabilir,
aşağıdaki örnekte olduğu gibi,
fakat bu durumda mevcut işleyen programın üstüne yazma yapılmış olur
ve program artık düzgün çalışmayabilir, genelde çalışmaz)

Serdar Çiçek hocanın kitap için nette paylaştığı uygulamalardan
PIC16F877 ile Flash Program Hafızası Uygulaması
adlı örnek nasıl olduğunu gösteriyor,
uygulamalar isis simulasyonları ile beraber paylaşılmış durumda.

örnek olması açısından burayada kodu ekliyorum,
isis uygulaması ile beraber netten bulup deneyebilirsiniz,


/******************************************************
      PIC16F877 ile Flash Program Hafızası Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(a) //Port yönlendirme komutları A portu için geçerli

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c> // LCD.c dosyası programa ekleniyor

int16  adres=0,deger=0;

/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0x01);   // RA1 pini giriş

   lcd_init();         // LCD kurulumu yapılıyor

   printf(lcd_putc,"\fProgram Kodlari"); // LCD'ye yazı yazdırılıyor
   delay_ms(1000);
   printf(lcd_putc,"\fAdres       Kod"); // LCD'ye yazı yazdırılıyor

   while (!(adres==0x3FFF)) // Program kodu 0x3FFF değerine eşit oluncaya kadar döngüyü işle
                            // 0x3FFF Boş olan program bellek kodudur.
   {
      deger=read_program_eeprom(adres); // Program kod hafızasında belirtilen adresteki kodu oku
      lcd_gotoxy(1,2); // İmleç 1.sütun 2.satırda
      printf(lcd_putc,"\n%lx        %lx",adres,deger); // LCD'ye program kod hafızası adresini ve içindeki kodu yaz
      delay_ms(500);
      adres++; // adres değişkeni içeriğini 1 arttır

      if (input(pin_a0)) // Eğer RA0 girişindeki butona basılırsa
      {
         delay_ms(20);  // Buton arkını önlemek için
         write_program_eeprom(adres, 0x0000); // Belirtilen program kod hafızası adresine 0 bilgi yaz
      }
   }
   printf(lcd_putc,"\fProgram Bitti..."); // Programın sonuna geldiğini bildirir
}

[code/]
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

hasankara

bu kendi kendini silen program oluyor sanırsam. write_program_eeprom(adres, 0x0000); bu kodun içeriğini merak ettim doğrusu. eeprom modülü ile bir alakası var mı dır? bir adrese veri yazma süresi ne olur ? şeklinde benim sorularımın önünü alamayız bu gidişle. en iyisimi ben bu konuyu kendi çapımda biraz araştırayım. konu biraz amacının dışına doğru taştı benim yüzümden :) teşekkür ederim @Ramu bu bilgileri bizimle paylaştığın için.

RaMu

EEPROM la alakası yok,
onunda fonksiyonları ccs c de mevcut,
aslında ilgisi ancak şu,
eeprom=; Electrically Erasable PROgrammable Memory
elektrikle silinebilir programlanabilir hafıza,
senin bahsettiğin data eeprom, o ayrı,
bu program memory, buda eeprom, flash yapıda,
program hafızası dediğimiz bölge,
datasheetten (2. bölüm) memory organization bölümüne bakarsan daha net anlaşılır.


16f877 için datasheet 3. bölüm eeprom and flash program memory incelenebilir,
asm örneği mevcut,
ccs c de en az bu asm kodları kadar işler,
ccs c itam olarak ne yapıyor görmek için,
fonksiyonun asm karşılığı incelenebilir,
ccs c ile mplab ı bağlayıp wiev dan disassembler ile inceleyebilirsin.

Yada hızı ölçmek için sadece
fonksiyonu çalıştırmadan önce timer başlatıp,
fonksiyon bitiminde durdurarak bakabilirsin,
birçok şey var ne diyelim.



okuma;
    BSF     STATUS, RP1      ; 
    BCF     STATUS, RP0      ; Bank 2
    MOVLW   MS_PROG_EE_ADDR  ; 
    MOVWF   EEADRH           ; MS Byte of Program Address to read
    MOVLW   LS_PROG_EE_ADDR  ; 
    MOVWF   EEADR            ; LS Byte of Program Address to read
    BSF     STATUS, RP0      ; Bank 3
    BSF     EECON1, EEPGD    ; Point to PROGRAM memory
    BSF     EECON1, RD       ; EE Read
;
    NOP
    NOP                      ; Any instructions here are ignored as program
                             ; memory is read in second cycle after BSF EECON1,RD
;
    BCF     STATUS, RP0      ; Bank 2
    MOVF    EEDATA, W        ; W = LS Byte of Program EEDATA
    MOVWF   DATAL            ;
    MOVF    EEDATH, W        ; W = MS Byte of Program EEDATA
    MOVWF   DATAH            ;


yazma;

; This write routine assumes the following:
;
; 1. A valid starting address (the least significant bits = '00')is loaded in ADDRH:ADDRL
; 2. The 8 bytes of data are loaded, starting at the address in DATADDR
; 3. ADDRH, ADDRL and DATADDR are all located in shared data memory 0x70 - 0x7f
;
BSF STATUS,RP1 ;
BCF STATUS,RP0 ; Bank 2
MOVF ADDRH,W ; Load initial address
MOVWF EEADRH ; 
MOVF ADDRL,W ; 
MOVWF EEADR ; 
MOVF DATAADDR,W ; Load initial data address
MOVWF FSR ;     
LOOP MOVF INDF,W ; Load first data byte into lower
MOVWF EEDATA ;
INCF FSR,F ; Next byte
MOVF INDF,W ; Load second data byte into upper
MOVWF EEDATH ;
INCF FSR,F ;
BSF STATUS,RP0 ; Bank 3
BSF EECON1,EEPGD ; Point to program memory
BSF EECON1,WREN ; Enable writes
BCF INTCON,GIE ; Disable interrupts (if using)
MOVLW 55h ; Start of required write sequence:
MOVWF EECON2 ; Write 55h
MOVLW AAh ; 
MOVWF EECON2 ; Write AAh
BSF EECON1,WR ; Set WR bit to begin write
NOP ; Any instructions here are ignored as processor
; halts to begin write sequence
NOP ; processor will stop here and wait for write complete 
; after write processor continues with 3rd instruction
BCF EECON1,WREN ; Disable writes
BSF INTCON,GIE ; Enable interrupts (if using)
BCF STATUS,RP0 ; Bank 2
INCF EEADR,F ; Increment address
MOVF EEADR,W ; Check if lower two bits of address are '00'
ANDLW 0x03 ; Indicates when four words have been programmed 
XORLW 0x03 ;
BTFSC STATUS,Z ; Exit if more than four words,
GOTO LOOP ; Continue if less than four words
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

hasankara

anahtar kod sanırım burası oluyor;
Alıntı Yap"BSF EECON1,EEPGD ; Point to program"memory"
Alıntı Yapeeprom modülü ile bir alakası var mı dır?
diye sorarken "eeproma veri yazıp eepromdan veri okutma için kullandığımız özel değişkenleri mi kullanıyoruz" u kast etmiştim. sende direk yerden yere vurmuşsun :D tekrar teşekkür ederim vermiş olduğun bilgiler için.

Mucit23

Arkadaşlar Font dönüştürebileceğim bir program ne önerebilirsiniz.

istediğim boyutlarda font yapmak istiyorum. Elimde birkaç program var fakat boyut ayarlamıyor. Örneğin Arial_10 fontunu 12x16 büyüklüğünde yapabilmem lazım.