ccs c uart haberleşmede bit hızımı osiloskopda doğru göremiyorum

Başlatan karakaleli, 22 Ocak 2015, 09:30:18

karakaleli

arkadaşlar merhaba, baud 9600 fakat osiloskopda 4800 okuyorum, bilgisayara aktardığımda da bundan kaynaklı olarak da istediğim verileri alamıyorum.neden kaynaklanmaktadır?




Salih

Öncelikle gerçek çalışma frekansının dan emin ol.
Belki ayarlar düzgün değildir.
Onun için ana döngüde, çıkışın birinde,  100ms saniyelik
kare dalga oluştur ve osiloskop da ölç.

karakaleli

büyük ihtimalle pic işlemci hızında ayarsızlık var ben ona nasıl erişip ayarlayabilirim.

Salih

Alıntı yapılan: karakaleli - 22 Ocak 2015, 10:31:01
büyük ihtimalle pic işlemci hızında ayarsızlık var ben ona nasıl erişip ayarlayabilirim.

Öncelikle dediğim şekilde ölçerek emin olalım.
Sonra üzerinde düşünürüz.

pea

Analog değil, dijital veri yolluyorsunuz. Sürekli devam eden, periyoda sahip olan bir sinyal değil.
Osiloskobun 1 periyot olarak aldığı şey aslında 0+1 değeri. Yani 9600 bit'i 4800 Hz'lik 1+0 sinyali olarak görüyor.

karakaleli

Alıntı yapılan: pea - 22 Ocak 2015, 12:40:11
Analog değil, dijital veri yolluyorsunuz. Sürekli devam eden, periyoda sahip olan bir sinyal değil.
Osiloskobun 1 periyot olarak aldığı şey aslında 0+1 değeri. Yani 9600 bit'i 4800 Hz'lik 1+0 sinyali olarak görüyor.

peki hocam o zaman neden bilgisayarda gönderdiğim veriyi alamıyorum.


Salih

Alıntı yapılan: pea - 22 Ocak 2015, 12:40:11
Analog değil, dijital veri yolluyorsunuz. Sürekli devam eden, periyoda sahip olan bir sinyal değil.
Osiloskobun 1 periyot olarak aldığı şey aslında 0+1 değeri. Yani 9600 bit'i 4800 Hz'lik 1+0 sinyali olarak görüyor.

Seri data göndermeyi kare dalga ile karıştırıyorsun bana göre.
Seri haberleşmede bir bitin gönderilmesi için sinyalin 1 ve 0 olmasına gerek yoktur.
Seri haberleşmede her bit için ayrılan süre vardır.
Bu süre içinde değeri ne ise odur.


pea

@salih
Ben tam anlatamadım, siz de tam anlamadınız.
Dediğim şeye göre, eklediğiniz resimde belirli bir frekans ölçemeyecek osiloskop. Kendini tekrar eden bir sinyal bulup, bunu frekans sanacak.
Örneğin 2. sinyalde 0-0-1 olmuş iki kere. Bunu 3t periyotlu bir sinyal olarak algılayabilir diyorum.

@karakaleli
Şemanız nedir bu arada?
Bilgisayardan nasıl okumaya çalışıyorsunuz? Simülasyon mu sadece?

Salih

Alıntı yapılan: pea - 22 Ocak 2015, 17:04:23
@salih
Ben tam anlatamadım, siz de tam anlamadınız.
Dediğim şeye göre, eklediğiniz resimde belirli bir frekans ölçemeyecek osiloskop. Kendini tekrar eden bir sinyal bulup, bunu frekans sanacak.
Örneğin 2. sinyalde 0-0-1 olmuş iki kere. Bunu 3t periyotlu bir sinyal olarak algılayabilir diyorum.

@karakaleli
Şemanız nedir bu arada?
Bilgisayardan nasıl okumaya çalışıyorsunuz? Simülasyon mu sadece?

Tamam, haklısın osiloskop tarafından ölçüm yapılabilmesi açısından 1 periyot
oluşması lazım diyorsun.

Bu arada arkadaş da dediğimiz ölçümü yapsa da biz de problemi çözsek :)

karakaleli

#include <18F45K80.h>

#device ICD=TRUE
#device HIGH_INTS=TRUE
#device ADC=12
#TYPE int=16
#FUSES NOWDT,NOBROWNOUT,NOPROTECT,NOPUT //No watchdog timer, Brownout Reset, No Protect on EEPROM
#FUSES SOSC_DIG // Secondary Oscillator pins are used as Digital I/O
#FUSES PLLEN //PLL is enabled
#FUSES INTRC_IO // Internal Oscillator
#use delay(clock=16000000) // Internal Oscillator Frequency = 16 MHz+
#ZERO_RAM // Clear RAM on Boot
#priority  INT_RDA,INT_RTCC 


#include <delay.h>


#define  KEYHIT_DELAY 1000
#use delay(clock=16000000)

//#use rs232(baud=9600, uart1, xmit=PIN_C6, rcv=PIN_C7,stream=RS232,bits=8)

#use rs232(baud=115200, uart1, xmit=PIN_C6, rcv=PIN_C7, timeout=KEYHIT_DELAY)

#define IO_BITS_D 0b00000000 // I/O bits for TRIS_D
#define IO_BITS_C 0b00000000 // I/O bits for TRIS_SCK

void sendmessage(unsigned char *sendmessage,int sizeofmessage)

{
	int i;
	for(i=0;i<sizeofmessage-1;i++)
	{
		putchar(sendmessage[i]);
	}
} 
void main(){
   
	
   unsigned char k;
   k =0;
   while (1){
	unsigned char *sendArray = "picproje";

      k++;
	putchar(0xAA);
    //sendmessage ( sendArray,sizeof(sendArray));
     delay_ms(100);
   }
}
sorunu çözdüm, #fuses ayarlarıyla alakalı olarak.115200 hızını neredeyse yakaladım.teşekkürler



Salih

Problemi ve nasıl çözdüğünü foruma yazarsan,
ilerde başka ihtiyaç sahiplerine de faydan olur. ;)

RaMu

Ortada bir problem yok aslında.
#use rs232(baud=9600, ........ )

desek ve
void main()
{
putchar(0xAA);
}

Yani baudrate 9600 ayarlasak ve
aralıksız 0xAA göndersek
osiloskopla pic in tx bacağını gözlemlediğimizde
doğal olarak
saniyede 9600 bit gelir osiloskoba
0xAA da zaten ikilik tabanda 1010 1010 şeklindedir,
yani 9600 ün yarısı kadar, tam periyod kare dalga görürüz osiloskopda.

9600 baudrate > 9600bps bit per second
(0xAA için) oskopda saniyede 4800 clock görülür
4800Hz okunmuş olur.

Birde uart dan sürekli
0x00 veya 0xFF gönderip ölç osiloskoda.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html