12F1822 PIC

Başlatan Firzen, 02 Nisan 2013, 21:47:19

Firzen

Merhabalar;
İnternetten projem için 12F1822 PIC aldım ve bunda bulunan ESUART modulünü kullanmak istiyorum.
Normal ESUART dan farkı nedir?
MikroC de nasıl yazılır bir fikri olan var mı acaba?
Birde bu çip 3Volt ile çalışır mı?
Datashette 2.8V-5.5V demiş ama ben yine de deneyenlere sormak istiyorum.

ben kütüphanedeki örneği yapmayı denedim ve durum bu;
[IMG]http://img476.yukle.tc/images/7814res.png[/img]
Kararsız...

Mr.Java

#1
#include "display.h"
#define led  RC5
void blink();
void sayici();
uchar data1[]="'LEDLER YAKILDI !'";
uchar data2[]="'DİSPLAY SAYICI BAŞLATILDI'";
uchar data3[]="'Bilinmeyen Komut'";
char uart_rd;
uchar datarx=0;

void interrupt(char i)
{
  if(PIE1.RCIF)
  {
      Blink();
      PIE1.RCIF=0;
  }

}

void main() {
  ADCON1|=0x0F;
  CMCON|=7;
  Board_Ayar();
  led=1;
  PIE1.RCIE=1;
  INTCON.PEIE = 1;
  INTCON.GIE = 1;
  PIE1.RCIF=0;
  UART1_Init(9600);               //UART modul 9600 bps
  Delay_ms(100);                  // UART Stabilizesi için beklemek gerek.

  while (1) {                     
    while(!UART1_Data_Ready()) {}     // Data Geldi mi ?
    Datarx=RCREG;
  if(datarx==49)
  {
     UART1_Write_text(data1);   //LEDLER YAKILDI
      Blink();
      UART1_Write(13);
       UART1_Write(10);
   }
 else if(datarx==50)             //SAYICI BAŞLATILDI.
  {
     UART1_Write_text(data2);
     led=0;
     sayici();
      UART1_Write(13);
       UART1_Write(10);
   }
 else                             //Bilinmeyen komut.
  {
     UART1_Write_text(data3);
      UART1_Write(13);
       UART1_Write(10);
   }
  }
 }

void blink()
{
     int i;
     for(i=0;i<4;i++)
     {
       PORTD=0x00;
       Delay_Ms(500);
       PORTD=0xFF;
       Delay_Ms(500);

     }
}
void sayici()
{
     uchar counter;

     for(counter=0;counter<9999;counter++)
     {
        DIS_NUM[0]=(uchar)(counter/1000);
        DIS_NUM[1]=(uchar)((counter%1000)/100);
        DIS_NUM[2]=(uchar)((counter%100)/10);
        DIS_NUM[3]=(uchar)(counter%10/1);
        LED_DISPLAY();
        if(datarx==49)break;
     }

}


Bu örnek kod.ASCII olarak 49(1) gönderdiğinde ledler 50(2) gönderdiğinde display sayıcı modunda başka sayı gönderdiğinde ise bilinmeyen numara diye yazıyor.Display sayarken 1 gönderirsen kesmeye gider.

Kolay gelsin..

mesaj birleştirme:: 02 Nisan 2013, 22:15:45

Bu arada o pic için lm117 3.3V iyi bir seçim olacaktır.

Firzen

Hocam interrupta falan gerek yok sadece en basit hali ile veri alıp versin versin yeter ama ben 12f1822 de UART değil USART olduğu ile ilgili bir yazı okudum şimdi sizdeki kod idrek çalıştı mı 12f1822 de?
ayrıca lm117 bağlama derken ne demek istediniz tam anlamadım?
Kararsız...

Mr.Java

Ben  haberleşmenin mantığını kavramanız için bende çalışan örnek kodu paylaştım.Kodlar sorunsuz çalışıyor bende.LM117 regülatör entegresi.o pic için 3.3V'da çalıştırıp olumlu sonuçlar alan olmuş nette bu nedenle regülatör tavsiye ettim.

biz asekron haberleşme yapacağız.

Bu arada paylaştığınız kodu alttaki gibi yapıp derleyiniz ve terminalde çalışmasını gözlemleyiniz.

  while (1) {                    
    if (UART1_Data_Ready()) {  
      uart_rd = UART1_Read();    
      UART1_Write(uart_rd);

Firzen

#4
teşekkür ederim zaten 3V luk batarya kullanacağım verdiğiniz düzeltmeyide deneyeceğim tek sorunum dediğim gibi UART ile EUSART aynı mı?
bildiğim akdarıyla aynı değil o yüzden sormuştum bende?İlk defa EUSART diye karşılıyorum daha önce UART yapmıştım zaten.

mesaj birleştirme:: 03 Nisan 2013, 00:03:54

Denedim derledi teşekkür ederim gerçekten şimdi bunun denemesini gerçek devre üzerinde yapacağım size de haber veririm.
tekrardan çok teşekkür ederim.
Kararsız...

yldzelektronik

Alıntı yapılan: Firzen - 03 Nisan 2013, 00:01:07
... UART ile EUSART aynı mı? ...

E eklentisi onun enhanced yani gelişmiş olduğunu gösterir.İlavesi olarak benim gördüklerimin arasında ilk hatırıma gelen auto baud olması.Yani baud hızını oto olarak düzenleyebiliyor olmasıdır.Daha önce 18f serisi bir denetleyicide bu donanımı kullanmıştım.Hiç bir farklılık yok.Kullanım açısından.Aynı şekilde kullanabilirsiniz.Şu yok değil.Enhanced özelliği için ayrıca registerler var olabilir.Ancak bu özelliği kullanmayacaksanız irdelemek ne kadar gereklidir?
Uart:
Universal Asynchorous Recevier/Transmitter.
Usart:
Universal Synchorus/Asynchorous Recevier/Transmitter.

Yani biri hem senkron hem asenkron mod desteği sunarken diğeri yalnızca asenkron mod desteği sunar.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Firzen

Alıntı yapılan: yldzelektronik - 03 Nisan 2013, 00:26:30
E eklentisi onun enhanced yani gelişmiş olduğunu gösterir.İlavesi olarak benim gördüklerimin arasında ilk hatırıma gelen auto baud olması.Yani baud hızını oto olarak düzenleyebiliyor olmasıdır.Daha önce 18f serisi bir denetleyicide bu donanımı kullanmıştım.Hiç bir farklılık yok.Kullanım açısından.Aynı şekilde kullanabilirsiniz.Şu yok değil.Enhanced özelliği için ayrıca registerler var olabilir.Ancak bu özelliği kullanmayacaksanız irdelemek ne kadar gereklidir?
Uart:
Universal Asynchorous Recevier/Transmitter.
Usart:
Universal Synchorus/Asynchorous Recevier/Transmitter.

Yani biri hem senkron hem asenkron mod desteği sunarken diğeri yalnızca asenkron mod desteği sunar.

Bu kadar sağlam açıklama için çok çok teşekkür ederim :)
Kararsız...