HSEROUT Problemi

Başlatan Ruzgarbey, 12 Aralık 2010, 17:31:28

Ruzgarbey

merhaba ustalar.ben basic kullanıyorum.bugün protona ağır ağır geçeyim dedim ama daha ilk günden protondan vazgeçmem için proton tarafından baskı görmeye başladım.sorunum şudur.picten pc ye data göndermek istedim yaklaşık 6 saattir başaramadım :)
kodlar aşağıda.işlemci olarak 628 kullanıyorum dahili kristal kullanıyorum ama config ayarlarında bunu bulamadım ayrıca mclr ayarınıda bulamadım.
kod:
@CONFIG_REQ
@__CONFIG  CP_OFF & PWRTE_OFF & WDT_OFF & INTRC_OSC_NOCLKOUT 

Device = 16F628
Xtal=4
CMCON=$07 			
TRISB = %11000010
TRISA = %00001110
PORTA=0
PORTB=0
Hserial_Baud 1200
Hserial_RCSTA $90
Hserial_TXSTA $24
Hserial_SPBRG 25
Hserial_Clear = On

Dim GELEN As Byte
Dim Temp As Byte
CLS

BASLA:
DelayMS 3000
HSerOut ["MERHABA BEN PROTONDA YAZILMIŞ BIR PROGRAMIM",13]
DelayMS 1000
HSerOut ["EMIRLERINIZI BEKLIYORUM",13]
GOTO BASLA

END

basicte çok rahat bir şekilde hemen hemen aynı kodlar ile çalışıyor ama protonda başaramadım.yardımlarınızı bekliyorum.
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

mech

Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

Maxim

16F628 çalışıyor diye düşünüyoruz.
acaba çalışıyormu ? bence önce bir ledi yakıp söndürün programın başında ..

sonra
Hserial_SPBRG 25 satırı 25 değilde 207 olması lazım değilmi ?
4mhz,1200 baudrate için 207 olması lazım ..

alayli

Alıntı yapılan: Ruzgarbey - 12 Aralık 2010, 17:31:28
merhaba ustalar.ben basic kullanıyorum.bugün protona ağır ağır geçeyim dedim ama daha ilk günden protondan vazgeçmem için proton tarafından baskı görmeye başladım.sorunum şudur.picten pc ye data göndermek istedim yaklaşık 6 saattir başaramadım :)
kodlar aşağıda.işlemci olarak 628 kullanıyorum dahili kristal kullanıyorum ama config ayarlarında bunu bulamadım ayrıca mclr ayarınıda bulamadım.
kod:
@CONFIG_REQ
@__CONFIG  CP_OFF & PWRTE_OFF & WDT_OFF & INTRC_OSC_NOCLKOUT 

Device = 16F628
Xtal=4
CMCON=$07 			
TRISB = %11000010
TRISA = %00001110
PORTA=0
PORTB=0
Hserial_Baud 1200
Hserial_RCSTA $90
Hserial_TXSTA $24
Hserial_SPBRG 25
Hserial_Clear = On

Dim GELEN As Byte
Dim Temp As Byte
CLS

BASLA:
DelayMS 3000
HSerOut ["MERHABA BEN PROTONDA YAZILMIŞ BIR PROGRAMIM",13]
DelayMS 1000
HSerOut ["EMIRLERINIZI BEKLIYORUM",13]
GOTO BASLA

END

basicte çok rahat bir şekilde hemen hemen aynı kodlar ile çalışıyor ama protonda başaramadım.yardımlarınızı bekliyorum.

@Ruzgarbey hemen pes etmekle olmaz. Proton+ a geçmen doğru bir tercih. Fakat hemen su koyverme. Öncelikle aklında bulundurman gereken şey Picbasic ile Proton+ arasında basit syntax (sözdizimi) farklılıkları olduğu...

Yazdığın kodda hardware seri haberleşmenin çalışmaması normal. Nitekim deklarasyonlarından sadece HSERIAL_CLEAR = On çalışır. Diğerleri çalışmaz. Çünkü araya "=" koymayı unutmuşsun. Yazdığın deklarasyonun çalışacağından ve proton tarafından algılandığından emin olmak için ekranın sol tarafındaki "Code Explorer" den kontrol edebilirsin. Ayrıca 1200 baud için gerekli register ayarlarını da yanlış hesaplamışsın. Doğruları;

HSERIAL_RCSTA = $90
HSERIAL_TXSTA = $20
HSERIAL_SPBRG = 51


şeklinde olacak.

Aşağıdaki 2 resmi incele...

YANLIŞ




DOĞRU



Ayrıca Proton+ da en doğru fuse ayarları için "C:\Program Files\Proton\Inc" klasörü içindeki *.lpb dosyalarını kullan. Bu dosyaları notepad ile açabilirsin ve her pic için doğru fuse ayarlarını bu klasörde bulabilirsin. Dosyaların en alt kısmında "; [START OF CONFIGURATION BITS]" açıklamasının altında ilgili pic için hangi konfigürasyon fuse lerinin kullanıldığı ve doğru yazılımın ne olduğunu görebilirsin... Mesela pic16f628 için aşağıdaki resimde olduğu gibi. Ayrıca protonda "Config" komutu ile araya "," koyarak fuse settingleri ayarlayabilirsin. Assemble olarak girmene ve "&" kullanmana gerek yok. Yukarıdaki ikinci resimde nasıl kullanıldığını görebilirsin...



Bir de aşağıdaki kodları dene bakalım ne olacak... Denenmişi kodun altında proteusta çalışır şekilde görülüyor...


Device = 16F628
XTAL=4
Config  CP_OFF , PWRTE_OFF, WDT_OFF,INTRC_OSC_NOCLKOUT 
CMCON=$07 			
TRISB = %11000010
TRISA = %00001110
PORTA=0
PORTB=0
HSERIAL_BAUD = 1200
HSERIAL_RCSTA = $90
HSERIAL_TXSTA = $20
HSERIAL_SPBRG = 51
HSERIAL_CLEAR = On

Dim GELEN As Byte
Dim Temp As Byte
Cls

BASLA:
DelayMS 3000
HSerOut ["MERHABA BEN PROTONDA YAZILMIS BIR PROGRAMIM",13]
DelayMS 1000
HSerOut ["EMIRLERINIZI BEKLIYORUM",13]
GoTo BASLA

End


Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

Maxim

alaylı hocam ben niye 207 buldumki
2 tane değer çıkıyordu
biri 51 diğeri 207
bunların farkı nedir ?

alayli

Alıntı yapılan: Maxim - 16 Aralık 2010, 17:00:15
alaylı hocam ben niye 207 buldumki
2 tane değer çıkıyordu
biri 51 diğeri 207
bunların farkı nedir ?

Aradaki fark TXSTA registerinin 2. biti yani BRGH biti ile alakalı ve bu bit yüksek baudrate tanımlama biti. Bu bitin değerini 1 yaparsanız TXSTA = $24 değerini alır. Bu durumda sizin önerdiginiz SPBRG değeri, yani 207 kulanılmalıdır.

İlginçtir 4 MHz 1200 baudda TXSTA.2 = 0 ve SPBRG = 51 de olsa; TXSTA.2 = 1 ve SPBRG = 207  de olsa hata oranı %0.17 çıkıyor. Ama bu her zaman geçerli olmaz bazen aradaki hata çok daha yüksek çıkar.

Mesela 8 MHz 1200 baud için;

TXSTA.2 = BRGH = 0 ve SPBRG = 103 olunca hesaplanan baud = 1202 ve hata %0.17 olurken,
TXSTA.2 = BRGH = 1 ve SPBRG = 255 olunca hesaplanan baud = 1953 ve hata %62.75 oluyor.
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

Ruzgarbey

alaylı ustam cevabınız için çok teşekkür ederim.hardware seri haberleşmeyi başaramadığım için bende Serout komutu ile haberleştim :) protona çok öncelerden geçmek istiyordum ama bir türlü pbp yi bırakamadım.ama bu konuyu açtığımda pbp yi bırakmanın zamanının geldiğini düşünmüştüm.bir projem vardı IR uzaktan kumanda kodunu çözmem gerekiyordum.protona bakarken bu işi dahili bir komutla yapabildiğini gördüm (RC5 ve SIRC).pbp de böyle bir şey yok tabi her zamanki gibi :) dedim bir deneyelim bakalım protonu,yukardaki kodu yazdım çalıştıramadım.aöa baya bir zaman uğraştımyok olmuyor.sonra serout ile pcye veri gönderdim.daha sonra bir vestel kumanda bularak RC5IN komutunu deneyeyim dedim oda çalışmadı.pc ye data gönderme tamam ama RC5IN çalışmıyor.öyle yaptım böyle yaptım olmadı.bende proton beni sevmedi galiba deyip geçtim pbp de yazdım rc5 protolünü pic e yükledim çalışıyor.yine projemi pbp de tamamlamak zorunda kaldım :) inşaallah protonda devam edeceğim,hardware seri haberleşme için gereken SPBRG değerlerini bana yazabilirmisiniz acaba.bir daha aynı şekildehata yapmayayım.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

teknikelektronikci

pbp bilenin protonda zorluk cekmemesi gerekiyor bir baslayin bir daha birakamyacaksiniz :)
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Ruzgarbey

teiekkür ederim umarım dediğiniz gibi olur:) alaylı hocamın belirttiği gibi söz diziminde hatalarım mutlaka olacaktır.proton bana Visual Basici hatırlatıyor değişken tanımlamaları felan gibi.artık kodlarımı protonda hazırlamaya başlayacağım.pbp de en çok sıkıntı çektiğim konu kesmelerdeki kod şişmesi oluyor.donanımsal kesmeleri kullanmadığı için yazılımsal kesme yapıyor haliyle kodlarımız şişiyor.artık protona geçiyorumya elimden çekeceğiniz var sorularımla...:D  saygılarımla.
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK