Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

UART veri göndermek ?

Başlatan bulut_01, 14 Aralık 2017, 00:56:00

bulut_01

Alıntı yapılan: makine_terbiyecisi - 15 Aralık 2017, 10:51:59
İlk olarak, TX ucunda hep 5V olması gayet doğal. Doğal çünkü stop biti TRUE yani lojik 1 dir. Lojik-1 demek 5V demek. Veri iletimi olmadığı zaman hep 5V seviyesinde olur.

İkincisi, data yollasan bile multimetre ile bunu görme şansın olmayabilir. Osiloskop yardımıyla verinin gidip gitmediğini anlayabilirsin.
Her bir veri gönderiminde tx ucu lojik-0 'a çekilir. Yani 0V olur. Veri iletimi bitince tekrar 5V a çıkar. Yani veri iletimi esnasında osiloskopta bir kare dalga görürsün.

Üçüncüsü, veriyi nereye gönderiyorsun?

iyi çalışmalar.
Similasyonu proteusda yapıyorum virtual terminaldan da osiloskop da baktım veri gitmiyor yani hep 5 volt var hiç bir tepki yok tx pininde onun için gitmiyor dedim
YENİLMEZ..

makine_terbiyecisi

set_tris_b(0b00000010);


Bu şekilde düzenle bakalım. Burada pin_B1 rx olduğu için input olmalı. Belki sorun budur.
# ÖĞRENELİM, ÖĞRETELİM #

bulut_01

Alıntı yapılan: makine_terbiyecisi - 15 Aralık 2017, 15:04:00
set_tris_b(0b00000010);


Bu şekilde düzenle bakalım. Burada pin_B1 rx olduğu için input olmalı. Belki sorun budur.
Alakası yok "%s"  yerine "%c" yazınca veri göndermeye basladı bu sefer 34 43 gibi saçma sapan göndermeye başladı C. 8 göndermesi lazımken buffer daki veriyi neden farklı veri gidiyor olabilir?
YENİLMEZ..

mehmet

Göndermeden önce bu veriyi nasıl almak istediğinizi
belirleseniz daha iyi olmaz mı?
Gönderdiğiniz veri nereden başlayacak, nerede bitecek?

Alıcı kısımın senkron olacağı bir durum vermek zorundasınız.
Veri yolu asenkron ama siz veri iletimi yaparken senkron
durumu yakalayacak bir veri bloğu yollamalısınız...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

bulut_01

#19
Memet hocam en basta yazdıgımı burayada yazayım elimde 110 byte ascii kodlar var karşı tarafa bozulmadan bu dataları aynen iletmem lazım bu kodları com portan dinlediğim kodlar ibus hattındaki veriler bu verileri teype yollayıp teyp acılısını sağlıyorum bunu pc den yapıyorum kücük kart yapıp uartan yollayıp teyp aktif etmek istiyorum kodlar bunlar;

C8 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D8 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D 68 09 3B 23 62 30 54 45 53 54 3D 68 09 3B 23 62 30 54 45 53 54 3D
YENİLMEZ..

mehmet

Yazarken de anlaşılamıyorsunuz. Noktalama işaretleri
kullansanız da söylediklerinizi anlasam?
Acele etmeden sakin sakin anlatın.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

omereliusuk

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=4000000)

#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,errors)
volatile const int veri[]={  
                  0xC8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54, 
                  0x45,0x53,0x54,0x3D,0xD8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,
                  0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,
                  0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,
                  0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,
                  0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,
                  0x54,0x3D};    
                       

void main()              
{                  
   while(TRUE)
   {                         
    for(int i=0;i<110;i++)
    printf("%X ",veri[i]);
    printf("\n");                        
   delay_ms(200);
   }
   }


fide

@omereliusuk güzel program yapmış.
F628 gibi giriş seviyesi piclerle çalışırken, aynı zamanda düzgün kod yszabilmek için değişmeyecek değerlerin const olarak tanımlanması;  efektif hafıza kullanımı için önemli.
Umarım konuyu açan da aradığı cevabı bulmuştur.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

bulut_01

Ömer hocam saolasın burda printf("\n"); komutu ne iş yapıyor? Ayrıca neden delay 200 ms kullandınız senkronu saglamak için mi bu süre?
YENİLMEZ..

bulut_01

iyi aksamlar arkadaslar ömer arkadasımızın yazdıgı kodlar proteusda çalısıyor şöyle bir sorun var gercek devrede sacma sapan hex kodları geliyor sebebini ugrastım ama çözemedim proteus ile gerçek devre arasında neden bu kadar fark var? proteusda 110 byte buffer verisinin aynısını alıyorum gercekte sacma sapan 332 byte veri alıyorum bu farklılıgın nedeni sizce  nedir ? not: comport ayarları ile pic uart ayarları aynıdır.

proteusda okugudum kodlar;
C8 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D8 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D 68 09 3B 23 62 30 54 45 53 54 3D 68 09 3B 23 62 30 54 45 53 54 3D


buda gercek devrenin comportu ile okudugum kodlar;
F2 1E 7E 3E 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 9F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 8F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 9F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 9F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 9F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 9F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 77 9F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 93 8F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF 93 8F BF 9F 8D BF 99 7B BF 9B 99 BF 93 9B BF 99 9F BF 95 97 BF 97 95 BF 95 99 BF 95 97 BF 99 77 BF EB 00


buda kaynak kodum;
#include <16F628A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=4000000)
#use rs232(baud=9600,parity=E,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,stop=1,errors)
#use fast_io(A) 
#use fast_io(B)

volatile const int veri[]={
                  0xC8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54, 
                  0x45,0x53,0x54,0x3D,0xD8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,
                  0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,
                  0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,
                  0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,
                  0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,
                  0x54,0x3D};    
                       
void main()
{
 setup_timer_1(T1_DISABLED);
 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);

set_tris_a(0b00010000);
set_tris_b(0b00000010);
 
 output_a(0x00);
 output_b(0x00);

int i=0;
     
     while(TRUE){
    if(i<110){
    for(i=0;i<110;i++)
    printf("%X ",veri[i]);
    printf("\n");                        
   delay_ms(200);
}}}

YENİLMEZ..

omereliusuk

#25
volatile const int veri[]={  
                  0xC8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D, 
                  
                  0xD8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  
                  0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  
                  0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,
                  0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D};  
                                 
   int i=0;
void main()              
{                  
  while(TRUE)
   {                                                      
     printf("\r");      
           
    for(int i=0;i<110;i++)                                    
    {printf(" %X",veri[i]); if(veri[i]==0x3d) printf("\r"); delay_ms(250);     }
                             
   delay_ms(2000);  
   }
   } 

proteusta bir dener misiniz. TEKERRÜR var.  bakmanızda yarar var. bir de hangi türden veri aktarılacak karakter mi ascii mi byte mı bunlar önemli. ben hexadecimal olarak aktardım. belki sizin haberleşeceğiniz ürün ascii olarak haberleşiyor.
http://slideplayer.biz.tr/slide/2676167/10/images/16/0-127+Standart+128-255+Geni%C5%9Fletilmi%C5%9F.jpg

bulut_01

#26
ömer üstadım yardımların için tşk ederim pc nin comportundan okunan deger üst resimdeki pic den en altdaki resmideki gibi tx göndermem lazım son gönderdiğin kodda anlasımsız veriler geliyor proteus ile gercek devre farklı bir birini  tutmuyor.proteus ile gercek neden bir birini tutmuyor anlamıyorum.
ayrıca ilk örnek proteusda normal calısıyor ama gercek devrede farklı calısıyor mesele burda Üstad.

C8 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D8 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D D0 09 3B 23 62 30 54 45 53 54 3D 68 09 3B 23 62 30 54 45 53 54 3D 68 09 3B 23 62 30 54 45 53 54 3D


son kod ile gelen veriler


proteusdaki gelen veriler


dogru olan sekli burdaki gibi okumam lazım aynısı

YENİLMEZ..

omereliusuk

È  ; # b 0 T E S T =
 Ğ  ; # b 0 T E S T =
 Ø  ; # b 0 T E S T =
 Ğ  ; # b 0 T E S T =
 Ğ  ; # b 0 T E S T =
 Ğ  ; # b 0 T E S T =
 Ğ  ; # b 0 T E S T =
 Ğ  ; # b 0 T E S T =
 h  ; # b 0 T E S T =
 h  ; # b 0 T E S T =
text olarak seçimi yapar mısınız? karakter haberleşiyor gibi

omereliusuk


bulut_01

üstad sag taraftaki text ayrıca verdiğin link erişim engellendi uyarısı verip acılmadı.

YENİLMEZ..