Haberler:

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

Ana Menü

33F serisi rs232 problemi

Başlatan skara1214, 16 Eylül 2011, 14:40:54

skara1214

bilgisayara dogru veri yollayabiliyorum fakat alamıyorum.tek bir karakter alırken düzgün çalışıyor fakat gets ile string alırken düzgün almıyor ekrana bastıgımda garip şekiller çıkıyor.(ayrıca interrupt ayarlması yaptıktan sonrada int_rda  interrupttına girmiyor.)
#include "33FJ128GP802.h" 
#Fuses  NOWDT,NOPUT,HS,PR_PLL
#pin_select U1TX=PIN_B6
#pin_select U1RX=PIN_B5
#use delay(clock=80M,oscillator=10M)
#use rs232 (uart1,baud=921600)
char klavye[15],a;
void main()
{
while(1)
{
gets(klavye);
printf("yazdiginiz metin %s \n\r",klavye);
}
}


bir ikinci problem bunu 16 bit microcontroller kösesinde açtım sağolsun iyiyildirim hoca çok yardımcı oldu  dediklerini deniyecegim ama belki ccs için nasıl yapıldıgını bilen vardır bu microişlemci 160 MHZ de çalışmıyor 80 MHZ de çalışıyor neden oldugunu anlamadım fuseslarda neleri ayarlamam gerekli?(80 MHZ yazınca düzgün çalışıyor )

ve son sorum dac kullanımıyla alakalı burada paylaşıyorum dspic dede paylaşacagım ama datasheette yazan dac1 interrupttı ccs de yok  bunu ben kendim nasıl tanıtabilirim?dac için herseyi denedim ama default degerden başka hiçbirşey alamadım oda defaultu midpoint yapınca 1.7 alıyorum ama 0 yapınca 1.1 oda tam çalışmıyor anlayacagınız:D .ek olarak donamılsal birşeymi yapmak gerekli?
#include "33FJ128GP802.h" 
#word DAC1CON =0x03F0
#word IEC4 =0x009C
#word DAC1STAT =0x03F2
#word DAC1DFLT =0x03F4
#word DAC1RDAT =0x03F6
#bit CON8 = DAC1CON.8
#bit CON0 = DAC1CON.0
#bit CON1 = DAC1CON.1
#bit CON2 = DAC1CON.2
#bit CON3 = DAC1CON.3
#bit CON4 = DAC1CON.4
#bit CON5 = DAC1CON.5
#bit CON6 = DAC1CON.6
#bit CON12 = DAC1CON.12
#bit CON15 = DAC1CON.15
#bit STAT5 = DAC1STAT.5
#bit STAT7 = DAC1STAT.7
#bit STAT1 = DAC1STAT.1
#bit STAT0 = DAC1STAT.0
#Fuses  NOWDT,NOPUT,HS,PR
#use delay(clock=10M,oscillator=10M)
int16 i=60000,z=0;
void main()
{
STAT7=1;
CON12=0;
CON0=0;
CON1=1;
CON2=0;
CON3=1;
CON4=0;
CON5=0;
CON6=0;
CON8=0;
DAC1DFLT=0x8000;
CON15=1;
while(1)
{
DAC1RDAT=50000;
while(STAT0==0);
DAC1RDAT=0;
while(STAT0==0);
}
}
Herkes ölür ama herkes gerçekten yaşamaz

GreeN

Terörü Lanetliyoruz.

Erol YILMAZ

String gelirken problem çıkıyorsa alıcı tarafta stop biti 2 yerine 1 yapmayı deneyebilirsin.
Muhtemelen gönderen <aralığı az süreli> gönderiyor.

esensoy

baud da hata var sanırım,
921600 yazıyor,

fuse ları ccs te View, valid fuses kısmından görebilirsin, bunları datasheet ile karşılaştırarak hangisi ne iş yapıyor görebilirsin,
En tehlikeli an "zafer" anıdır.

GreeN

9600 yerine 921600 yazdıysa problem . ama PC ile bağlantıda FT232 kullanıyorsa sanırım 921600 değeri problem olmaz. Zaten tek karakter gönderirken problem olmadığını söylüyor.

Terörü Lanetliyoruz.

GreeN

#5
Alıntı yapılan: skara1214 - 16 Eylül 2011, 14:40:54
....
bir ikinci problem bunu 16 bit microcontroller kösesinde açtım sağolsun iyiyildirim hoca çok yardımcı oldu  dediklerini deniyecegim ama belki ccs için nasıl yapıldıgını bilen vardır bu microişlemci 160 MHZ de çalışmıyor 80 MHZ de çalışıyor neden oldugunu anlamadım fuseslarda neleri ayarlamam gerekli?(80 MHZ yazınca düzgün çalışıyor )
....

XT Frekansı 8 MHZ

PLLPRE = 0                 8/2 = 4
PLLDIV = 000110000  50*4 = 200
PLLPOST=01               200/4 = 50 MHZ
(kırmızı renkli değerler pll registerlerinin aldığı default değerlere karşılık hesaplamada kullanılan değerlerdir.)

Çalışma frekansı = XT*PLLDIV/PLLPOST/PLLPRE  ile hesaplanıyormuş. (xt kristalin frekansı)
Yukarıdaki PLLPRE,PLLDIV,PLLPOST değerleri default değerler.

Bu registerlere asm kodu ekleyerek ulaşabilirsin.
Ayrıntılı bilgi için 143. sayfaya bak...

http://ww1.microchip.com/downloads/en/DeviceDoc/70292F.pdf

Ek:

HS =10 Mhz

F=10*320/2/10 =160MHZ

bunun için ;
PLLPRE = 0               
PLLDIV = 100111110 
PLLPOST=1000   

değerlerini almalı.

Terörü Lanetliyoruz.

iyildirim

Arkadaşlar bildiğim kadarıyla CCS sürümü güncellenerek  bu sorun giderildi.

https://www.picproje.org/index.php/topic,35317.msg251181.html#msg251181



Alıntı yapılan: GreeN - 29 Eylül 2011, 12:05:03
9600 yerine 921600 yazdıysa problem . ama PC ile bağlantıda FT232 kullanıyorsa sanırım 921600 değeri problem olmaz. Zaten tek karakter gönderirken problem olmadığını söylüyor.

İşlemciye TTL seviyesinde bağlı  ise, 921600 FT232 ile sorun olmuyor.

skara1214

problemi çözdüm.ccs sürümünden kaynaklanıyormus.ccs 4.093 e geçince çözüldü.ama pin_select ile  tx,rx ayaklarınıda ayarlamak gerekiyor.
Herkes ölür ama herkes gerçekten yaşamaz