Mikroc Kütüphanesi Kullanımı ?

Başlatan has_artvin_li, 30 Mayıs 2014, 01:37:39

has_artvin_li

Herkese Selamun aleyküm hayırlı iş bol ve bereketli kazançlar dilerim :D

Konu ile ilgilenen usta ve arkadaşlardan ricam...

MikroC gerçekten çok güzel çok kullanışlı ve kütüphaneleri olarakta mükemmele en yakın program desem sanırım hata etmiş olmam çünki :

MikroC for pic
MikroC for pic32
MikroC for AVR
MikroC for 8051
MikroC for ARM

Gibi bir çok alanda hizmet veren bir yapıya sahip Ben mikroC ye başlamadan önce A dan Z ye C isimli pusula yayıncılığın bir kitabını okumuş anlamaya çalışmıştım o kitap kesmedi ardından birkaç tane daha C dili ile ilgili kitaplar aldım onlar da kafamdaki soru işaretlerine cevap olamadılar yani anlattıkları konular açıklayıcı gelmedi Altaş yayıncılığın baskısı G. Murat TAŞBAŞI tarafından yazılan ileri C programlama adlı kitabı aldım onu okudum sonra nesne yönelimli C ile uğraştım C# kitapları vs derken pic ve mikro işlemcilere gelmeden C nin yapısını ve tabanını anlatan bir çok C kitabı okuduktan sonra

MikroC ve Pic18F4550
Yeni başlayanlar için MikroC ile pic programlama pic16F628A / pic16F648A
MikroC ile ARM programlama

İsimli kitapları aldım Gerçekleri söylemek gerekirse pic basic proton falan harbiden kütüphane olarak çok aşırı fazla zayıf...

Mikroe firması gerçekten her tarafa hizmet verebilecek çalışmalara adım atmış ve neredeyse bütün tanınmış bilinen işlemcilere programlar yazan derleyici programlar hazırlamış...

Arm kitleri aldım stm32f429 ve stm32f407 discovery kitler onlar ile programlar yazdım haricen 2x16 lcd ekran bağladım vs ince ince onlar ile de uğraşıp çözebilmeye başladım fakat işte asıl sorun burada başlıyor...

Çok güzel kütüphaneleri olmasına rağmen bana çok karışık geliyor takip etmesi zor geliyor...

Mesela ben pic basic ile serin serout komutları ile rf uzaktan kumanda yapmış çatır çatır çalıştırmıştım ama mikroC deki kütüphanesine bakıyorum "manchester" uygulama örneğini yapmış fakat ben bu örneğe bakıp aklımda neredeyse hiç birşey canlandıramıyorum...

Saydım toplamda 43 tane kütüphane dosyası var mikroc for pic içinde arm de de durum aynı sayılır 65 kütüphane dosyası da arm de var komut yapılarına bakıyorum örneğin yine manchester komutuna bakalım :

Arm için olan derleyicide ki örnek :

// LCD module connections
sbit LCD_RS at GPIOD_ODR.B2;
sbit LCD_EN at GPIOD_ODR.B3;
sbit LCD_D4 at GPIOD_ODR.B4;
sbit LCD_D5 at GPIOD_ODR.B5;
sbit LCD_D6 at GPIOD_ODR.B6;
sbit LCD_D7 at GPIOD_ODR.B7;
// End LCD module connections


// Manchester module connections
sbit MANRXPIN at GPIOE_IDR.B8;
sbit MANTXPIN at GPIOE_ODR.B9;
// End Manchester module connections

unsigned int error;
char ErrorCount, chr_counter, byte_rcvd;

void main() {

  ErrorCount = 0;
  chr_counter = 0;

  Lcd_Init();                                     // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                            // Clear LCD display

  Man_Receive_Init();                             // Initialize Receiver

  while (1) {                                     // Endless loop

      Lcd_Cmd(_LCD_FIRST_ROW);                    // Move cursor to the 1st row

      while (1) {                                 // Wait for the "start" byte
        byte_rcvd = Man_Receive(&error);          // Attempt byte receive
        if (byte_rcvd == 0x0B)                    // "Start" byte, see Transmitter example
          break;                                  // We got the starting sequence
        if (error)                                // Exit so we do not loop forever
          break;
        }

      do
        {
          byte_rcvd = Man_Receive(&error);        // Attempt byte receive
          if (error) {                            // If error occured
            Lcd_Chr_CP('?');                      // Write question mark on LCD
            ErrorCount++;                         // Update error counter
            if (ErrorCount > 20) {                // In case of multiple errors
              Man_Synchro();                      // Try to synchronize again
              //Man_Receive_Init();               // Alternative, try to Initialize Receiver again
              ErrorCount = 0;                     // Reset error counter
              }
            }

          else {                                  // No error occured
            if (byte_rcvd != 0x0E) {              // If "End" byte was received(see Transmitter example)
                                                  // do not write anymore received byte on LCD
              Lcd_Chr_CP(byte_rcvd);              // else write character on LCD
              chr_counter++;                      // Counts how many chars have been written on LCD
              if (chr_counter == 25) {            // If there were more then 25 characters
                                                  // synchronization is off
                Lcd_Cmd(_LCD_CLEAR);              // Clear the LCD of garbled communication
                Man_Synchro();                    // Try to synchronize again
              }
            }
            else
              chr_counter = 0;                    // reset chr_counter
          }

          Delay_ms(25);
        }
      while (byte_rcvd != 0x0E);                  // If "End" byte was received exit do loop
   }
}


________________________________________________________________________

// Manchester module connections
sbit MANRXPIN at GPIOE_IDR.B8;
sbit MANTXPIN at GPIOE_ODR.B9;
// End Manchester module connections

char index, character;
char s1[] = "mikroElektronika";

void main() {

  Man_Send_Init();                 // Initialize transmitter

  while (1) {                      // Endless loop
    Man_Send(0x0B);                // Send "start" byte
    Delay_ms(100);                 // Wait for a while

    character = s1[0];             // Take first char from string
    index = 0;                     // Initialize index variable
    while (character) {            // String ends with zero
      Man_Send(character);         // Send character
      Delay_ms(90);                // Wait for a while
      index++;                     // Increment index variable
      character = s1[index];       // Take next char from string
    }
    Man_Send(0x0E);                // Send "end" byte
    Delay_ms(1000);
  }
}

___________________________________________________________

Pic için olan derleyicideki örnek :

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections


// Manchester module connections
sbit MANRXPIN at RC0_bit;
sbit MANRXPIN_Direction at TRISC0_bit;
sbit MANTXPIN at RC1_bit;
sbit MANTXPIN_Direction at TRISC1_bit;
// End Manchester module connections

char error, ErrorCount, temp;

void main() {
  ErrorCount = 0;
  ANSEL  = 0;                                     // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                                   // Disable comparators
  C2ON_bit = 0;
  TRISC.F5 = 0;
  Lcd_Init();                                     // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                            // Clear LCD display

  Man_Receive_Init();                             // Initialize Receiver
 
  while (1) {                                     // Endless loop

      Lcd_Cmd(_LCD_FIRST_ROW);                    // Move cursor to the 1st row
       
      while (1) {                                 // Wait for the "start" byte
        temp = Man_Receive(&error);               // Attempt byte receive
        if (temp == 0x0B)                         // "Start" byte, see Transmitter example
          break;                                  // We got the starting sequence
        if (error)                                // Exit so we do not loop forever
          break;
        }
       
      do
        {
          temp = Man_Receive(&error);             // Attempt byte receive
          if (error) {                            // If error occured
            Lcd_Chr_CP('?');                      // Write question mark on LCD
            ErrorCount++;                         // Update error counter
            if (ErrorCount > 20) {                // In case of multiple errors
              temp = Man_Synchro();               // Try to synchronize again
              //Man_Receive_Init();               // Alternative, try to Initialize Receiver again
              ErrorCount = 0;                     // Reset error counter
              }
            }
          else {                                  // No error occured
            if (temp != 0x0E)                     // If "End" byte was received(see Transmitter example)
              Lcd_Chr_CP(temp);                   //   do not write received byte on LCD
              }
          Delay_ms(25);
        }
      while (temp != 0x0E) ;                      // If "End" byte was received exit do loop
   }
}
_____________________________________________________________________________

// Manchester module connections
sbit MANRXPIN at RC0_bit;
sbit MANRXPIN_Direction at TRISC0_bit;
sbit MANTXPIN at RC1_bit;
sbit MANTXPIN_Direction at TRISC1_bit;
// End Manchester module connections

char index, character;
char s1[] = "mikroElektronika";

void main() {

  ANSEL  = 0;                      // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                    // Disable comparators
  C2ON_bit = 0;

  Man_Send_Init();                 // Initialize transmitter

  while (1) {                      // Endless loop
    Man_Send(0x0B);                // Send "start" byte
    Delay_ms(100);                 // Wait for a while

    character = s1[0];             // Take first char from string
    index = 0;                     // Initialize index variable 
    while (character) {            // String ends with zero
      Man_Send(character);         // Send character
      Delay_ms(90);                // Wait for a while
      index++;                     // Increment index variable
      character = s1[index];       // Take next char from string
      }
    Man_Send(0x0E);                // Send "end" byte
    Delay_ms(1000);
  }
}

___________________________________________________________


hani uzun lafın kısası Bir değerli ustamız çıksa da şu kütüphaneleri biraz açıklasa kullanım şekilleri hakkında daha detaylı bilgiler paylaşsa Detaylı derken daha açıklayıcı bişiyler olsa ve baktığımız zaman aklımızda bişiyler canlansa çok güzel ve kalite üstü bişy olmuş olur diye düşünüyorum...

Powered by EzPortal