avatar_kartal_0689

UART-USART Haberleşme

Başlatan kartal_0689, 28 Mayıs 2014, 14:04:53

kartal_0689

Merhaba Arkadaşlar,

Ana işlemcim DSPIC33EP512MU810. Bu işlemciye çevresel birimler bağlanıyor.
Bunlardan birisi de PIC16F886' lı Voltmetre ve Ampermetre 7 Segment Displayli gösterge paneli.

Ölçüm işlemleri ana işlemcide yapılıyor ve bu işlemciye 7'' TFT bağlı veriler bu ekrana aktarılıyor.
Birde PIC işlemci olan karta verileri UART/USART olarak gönderiyorum.

Software olarak UART hazırladım.(Hem alıcı hem verici için)

Uart_Error := Soft_Uart_Init(PORTC, 2, 3, 2400, 0);

verileri gönderiyorum sırayla. Ve alıyorum burada bir sıkıntı yok.

Mesela;

VERİCİ için;

Soft_Uart_Write(Volt_Lo8_Bit);
Soft_Uart_Write(Volt_Hi8_Bit);
Soft_Uart_Write(Amper_Lo8_Bit);
Soft_Uart_Write(Amper_Hi8_Bit);

Delay_ms(10);

ALICI için;

Volt_Lo8Bit_Read      := Soft_Uart_Read(Uart_Error);
Volt_Hi8Bit_Read      := Soft_Uart_Read(Uart_Error);
Amper_Lo8Bit_Read := Soft_Uart_Read(Uart_Error);
Amper_Hi8Bit_Read  := Soft_Uart_Read(Uart_Error);
Delay_ms(10);
______________________________________________

Verileri böyle gönderiyorum bir sıkıntı yok.
Ancak göründüğü üzere verilerin karışma ihtimali yüksek.
Bunu önlemek için VERİCİ' den önce bilgi dataları gönderiyorum. Yani;

Soft_Uart_Write(0xDD);

Bu datayı gönderiyorum ve alıcıya diyorum ki bu data gelirse arkasından gelecek olan veri
VOLT değerine ait. Yani

UartData  := Soft_Uart_Read(Uart_Error);

if (UartData = 0xDD) then
  begin
       Volt_Lo8Bit_Read      := Soft_Uart_Read(Uart_Error);
   end;


Bu şekilde yapınca kod çalışmıyor. Ben yanlış bişey mi yapıyorum anlayamadım.
Bilen arkadaşlar ya da başına gelen oldu mu daha önce?
Bu arada derleyicim MikroPascal...       

TURKEY/ANK

kartal_0689

Sanırım biraz konu farklı anlaşıldı kimse bişey yazmadı.
Farklı olarak tekrar sorayım ;(

Ben Seri bilgiyi gönderip şartlı işlem yaptıramıyor muyum?

Yani gelen data 0x0A ise sonraki gelen data için başka işlem yap gibi.

Örnek Verici;


Soft_Uart_Write(0x0A); // Bilgi Datası


Örnek Alıcı;

SoftReadByte := Soft_Uart_Read(Soft_Error); // UART' dan gelen verileri sürekli oku.

if (SoftReadByte = 0x0A) then
  begin
         SoftVoltRead := Soft_Uart_Read(Soft_Error); // 0x0A geldiyse hemen arkasından okunacak veri SoftVoltRead değişkenine yüklenecek.
  end
  else
if (SoftReadByte = 0x0B) then
  begin
         SoftAkimRead := Soft_Uart_Read(Soft_Error); // 0x0B geldiyse hemen arkasından okunacak veri SoftAkimRead değişkenine yüklenecek.
  end;

TURKEY/ANK

Powered by EzPortal