PBP Osilatör yapımı?

Başlatan garfie, 04 Aralık 2003, 10:26:20

mmengi

Bu konuların sonu gelmez herkes mesut olduğu gibi yaşar.

Garfie dostum ben Ir alıcı ve Ir led ile araya engel

girdiğini anlayan bir uygulama yapmıştım orda 16f628 in hpwm çıkışından 20khz sinyal alıp ır ledin modülasyonunda kullanmıştım.

freqout ve hpwm ile en fazla 32khz sinyal alabilirsin.

ama en uygunu dumrulbey in vermiş olduğu devredir.pic i bu iş için yormaya gerek yok.

-SharK-

Merhaba,
Öncelikle, yardımlarınız için teşekkürler.
Ben bu işi pic ile yaparsam

istediğim şekilde frekansı değiştirebilirim diye düşünmüştüm. Ama anladığım kadarıyla PBP ile yapmamın imkanı yok.

Asm en hızlısı, kabul. Peki basamak olarak önce C'ye geçmek biraz

olsun
hız sağlar mı? yani C Basic'den hızlımıdır?

Sevgiler...

GarfiE

mmengi

sevgili dostum benim C yada basic seçmemin kendime göre nedenleri olduğu içindir. Öncelikle ASM ile uğraş onu iyi

kavradıktan (veya kavramışsan) sonra basic ve C de daha verimli hızlı programlar geliştirebilirsin kanatindeyim.

Basic ile frekansı yine değiştirebilirsin ama freqout veya hpwm ile 32khz de

sınırın var.Kendin bir rutin yazarsan bu sınırı daha da arttırabilirsin.Ama yinede ayarlı bir çıkış için 555 li bir devre tavsiye ederim.

z

Bu güne dek işlemci ve programlama dilinde çok fanatik arkadaşlarım oldu ve
bol bol kavga yapıp benim işlemcim

seninkini döver vs çatıştık.

Benim yukarıdaki yazıyı yazmamdaki amaç, arkadaşların programlama dilindeki  
limitlere takılıp daha sonra bunu nasıl çözeriz sorularına cevap olması

açısındandı.

Bunu pek vurgulamadığım için anlaşılmamış olabilir.

Library yada macro kullanım yeterince hız kazandırsa da elbetteki asm kodu
BASIC hatta C kadar hızlı

yazamayız.

Ancak hiç bir dil  de asm kadar hızlı çalışamaz ve kısa olamaz.

Bütün kilit nokta şurada yatıyor.

Hangisi yada hangileri önemli?

Bir başka dili

öğrenmemede yaşanan zorluklarmı
İşlem hızımı
Kaynakların verimli kullanılmasımı
Projenin çabuk bitmesimi
Taşınabilir bir kaynak kodumu
Kartın arge harici

maliyetimi

Özellikle yazılımla yapılan ve zaman yada frekans üretimlerinde asm dışındaki diller
programınıza ek kodlar getireceği için limitlerde sınırlanacağınızdan çözüm hiç

olmazsa kritik noktaların asm ile yazılmasıdır.

HIZ benim uygulamalarım da en ön planda olduğu için favori dilim  ASM diyorum ve
hamallık yapmaya razıyım.

Bir

arkadaşımız toplamların çarpımı gibi bir formülü asm dili ile yazmamızı istemiş
hiç zor değil ama ben bunu yazıncaya kadar siz BASIC le  çoktan bitirmiş olursunuz.
Tek kriteriniz bu ise

BASIC iyidir.

Basic ile siz de şunu yazın.

4Mhz hızında, içinde ADC  olan bir PIC'e exstra devre kurmadan 1 Khz lik bir sinüsoidal bir sinyalin tam tepe değerinin kaç volt

olduğunu her peryodda tesbit eden programı BASIC dili ile yazın. (1 Khz'i kafadan attım Basic ile yaparsanız 2 Khz diye sorayım)

Göreceksinizki işlemci, donanım olarak bu soruyu

çözecek güçte olmasına rağmen, BASIC dili, işlemcinin  çalışmasında ayak bağı olacak.

C, Basic den hızlımıdır sorusuna cevap vermek zor, PC için sorsaydın cevabı evetti, ancak PIC için

nasıl bir derleyici yazdılar incelemek lazım. Aynı program parçacığını BASIC ve C için yazıp asm kod ürettirip kodlara bakmak mukayese için yeterli olur.

Tabi kodları işlemciye yükleyip

koşturarak sonucu direk gözleyebilirsiniz de.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mmengi

"PBP yu yakından hiç görmedim ama nasıl bir şey olduğunu tahmin

ediyorum."


sevgili bunalmis yukarıdaki ifadeni göz önüne alarak nasıl bir şey olduğuna bakmanı önerebilirim. Kimseyede illa şunu, bunu kullan diyemeyiz. Ben, bana

göre en güzelini yapıyorum basic kodları içinde hız ve güvenirlilik gereken yerlerde ASM kodları ilave ediyorum böylelikle her iki dilide verimli kullanmaya çalışıyorum.

DumrulBey

Merhaba,

Hiç bir alıntı yapmadan konuyu başka yere çekmek istiyorum. Yoksa hararetli

bir tartışmaya gidiyoruz. Gerçi şimdi bahsedeceğim de girilince çıkılması zor bir konu:

Hız dedik, ASM'mi, BASIC'mi yoksa C'mi iyidir diye düşündük. Aslında burada assembly

dilini diğerlerinde ayırmak lazım. Zira kuşak farkı var ve assembly temel olması açısından hepsinin babasıdır.

Peki olayı bilgisayar programlarına çeksek ne dersiniz? Şimdi neredeyse herkes

en az 1 GHz. hızında bilgisayarlara sahip. Tamam, bunlar CISC işlemcili bilgisayarlar ama bu ne büyük bir hız farkında mısınız? Ama hala kimse bilgisayarın yavaşlama kavramını unutmuş değil!

Unutması da düşünülemez zaten. Zira hayatımız bilgisayarı beklemek ile geçiyor. Komiktir, bilgisayar bizim komut vermemizi bekleyeceğine... :shock:

Nedir bu durum Allah aşkına? Şimdi

diyeceksiniz görsellik artınca doğal olarak yavaşlık da geliyor. Ama olay bence öyle değil. Tıpkı PBP'mi yoksa ASM'mi karşılaştırması gibi. Bence CPU gücümüzü yavaş yazılımlar ile boşa

harcıyoruz. Sadece CPU gücü olsa sorun değil 10 tane takarız. Elektrik, zaman ve para! Nereye bu gidiş ? :!:

İddia ediyorum, bugün 10 kat daha hızlı işletim sistemi yazılabilir!

Bilgisayarınızda yaptığınız her işlemde öyle gereksiz şeyler yapılıyor ki, sormayın gitsin. Kendiniz kolay bir deneme yapabilirsiniz. Mesela basit bir demoyu assembler ile derleyin çalıştırıp test edin.

Aynısını DirectX kullanarak yazın, her şeyi aynı olsun, ek bir görsellik olmasın. Bakın bir ne biçim CPU gücü harcıyor. Deneyin, deneyin! :idea:

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

fsan

Alıntı yapılan: "garfie"Merhaba,
Infrared vericide kullanmak için

38-40khz osilatöre ihtiyacım var.
4mhz 16F84 ile (ve basic ile) bunu yapabilirmiyim?.
Freqout

6 khz'den yukarı çıkmıyor.
Sevgiler...
Murat

dostum bu isi 16f84 ve basic ile yapmak anladigim kadariyla biraz

zor cünkü bunun icinde hardware PWM yok ama 16f628 de var belki onunla yapilabilir.

yada "bunalmis" arkadasin önerdigi gibi asm ile TIMER INT ögenelim ve 38 khz bu sekilde

16f84 icinde üretelim sanirsam picbasic pron un "interrupt" komutlari ile olmuyor.

arkadaslar picbasic pronun en büyük dezavantajlari benim anladigim kadariyla mesela bir 16f84 de

birkac picbasic komutu kullandinmi neredeyse bütün hafiza doluyor. birde bu interrupt komutlari asm ile uretildigi gibi değilmis (software interrupt ?).

bu yüzden merak ediyorum picbasic

pro ile yazdigimiz bir program icinde asm codu ilave ederek interrupt yapabilirmiyiz?

garfie

Sorumu sorduktan sonra, yazdıklarınızdan öğrendiklerim şunlar:

-16F84'de hardware

PWM yok, 16F628'de var. Ama ikisinde de PBP ile 32khz üzerine çıkamıyorum.
-16F84 ile yapılabilir ama ya ASM kullanmalıyım ya da PBP içinde ASM rutinleri kullanmalıyım. (benim

için en mantıklısı 2. seçenek sanırım)
-ASM çok hızlı, ancak tercihleri ihtiyaçlar belirliyor. (en azından benim için)
-555 ile ayrı bir osilatör devresi yaparak bütün bu sorunlardan

kurtulabilirim.

Bütün bunlar aslında öğrenebilen TV kumandası yapma isteğimden çıktı. Kumandaların osilatör frekansları farklı olduğundan ben de ayarlanabilir osilatör
kullanmayı

tercih etmiştim.


Sevgiler...

Murat

fsan

pardon, görmemistim yukarida "mmengi" arkadasinda yazdigi gibi:
Alıntı YapFrequency is the desired

frequency of the PWM signal. Not all frequencies
are available at all oscillator settings. The lowest frequency at 4MHz is
245Hz. The highest frequency at any oscillator speed is

32767Hz.
http://picbasic.com/downloads/pbpro244.pdf

rentron.com da arkadas asagidaki kodu 16f877 icin yazmis 38khz. Pic16f628 ile calisirmi

bilmiyorum. siz ne dersiniz?
PicBasic Pro Code:

' Setting up hardware PWM for 38KHz operation.


DEFINE LOADER_USED 

1'Setup for boot-loader programming

TRISC.2 = 0  ' CCP1 (PortC.2 = Output)
PR2 = 25     ' Set PWM Period for approximately 38KHz
CCPR1L = 13  ' 

Set PWM Duty-Cycle to 50% 
CCP1CON = %00001100  ' Select PWM Mode
T2CON = %00000100    ' Timer2 = ON + 1:1 prescale
TRISB.0 = 

0

ADDRESS	VAR BYTE
DAT	VAR BYTE
ID	VAR BYTE
ADDRESS	= 10
ID	= 25

BEGIN:
	FOR DAT = 0 TO 255
	    

SEROUT PORTB.0,4,[ID,ADDRESS,DAT]
	    PAUSE 100
	NEXT
GOTO BEGIN

mmengi

sevgili fsan verdiğin kodu denedim 16F877 de 38461 hz kare dalga üretiyor. Kod üzerinde ufak bir değişiklik yaparak

16F628 de denedim oda aynı frekansta kare dalga üretiyor.

PR2 değerine bağlı olarak çıkış frekansı değişebiliyor.

PR2 max 12=76923 hz
PR2 min 255=3906

hz

yanlız çok keskin ayar yapmak mümkün olmuyor.aşağıdaki kodu programın başına koyarsanız yazacağınız programdan bağımsız olarak ve programı engellemeden 16F628 in portb.3

ten kare dalga alabilirsiniz.

TRISB.3 = 0  ' CCP1 (PortB.3 = Output) 
PR2 = 25    ' Set PWM Period for approximately 38KHz 
CCPR1L = 

13  ' Set PWM Duty-Cycle to 50% 
CCP1CON = %00001100  ' Select PWM Mode 
T2CON = %00000100    ' Timer2 = ON + 1:1 prescale

fsan

ellerine saglik kardes, sağol  böylelikle bunuda ögrenmis olduk. Sen bunu Proteus ile mi simule ettin?

evet dostum

gerisi kolay asagidaki NAND girislerin birine o kare dalgayi öbürünede SEROUT komutu ile istedigimiz bilgiyi

giriyoruz.

A simple two input NAND Schmitt Trigger is used to combine the two incoming signals into an

output data signal modulated at 38KHz.
http://www.rentron.com/Infrared_Communication.htm

evet buda alici

kismi:

receiver programi picbasic pro ya cevirebilirsiniz diyor, daha sonrada SERIN komutu ile gelen bilgiyi

okuyacaz.

' BS2 program to test IR communication program
' using the PIC16F877 hardware PWM.

SYNCH CON 25     'Establish 

synchronization byte
BAUD  CON 396    'NON INVERTED 2400 baud (MAX)
DAT   VAR byte   'Data storage variable
DIRH = %11111111 'All 

outputs
ADDRESS VAR BYTE

START:

SERIN 0,BAUD,[WAIT(SYNCH),ADDRESS,DAT]
OUTH = dat
GOTO 

START

fsan

Alıntı YapSEROUT PORTB.0,4,[ID,ADDRESS,DAT]
@mmengi
dostum verici

programda BAUD mode 4 secilmis (N2400 inverted yanlis anlamadiysam) peki alicida neden 396 secilmis bunun BS2 ile mi bir ilgisi var?  PIC icin ne olacak bu? N2400 inverted olmasi gerekir öyle

değilmi?

z

Dumrulbey,

Directx kullanımı ile elinde örnek varmı?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

james

niye hardware pwm gerekli ben anlamadım.38khz i data göndereceğiniz zaman yazılımla üretseniz olmuyor mu?ben sony rx

-tx yapmıştım.picin herhangi pinininden 38 khzi aşağıdaki şekilde

ürettim

IR_MODULATION		BSF	IR_LED
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
	

t	NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			BCF	IR_LED
			NOP
			NOP
			NO

P
			NOP
			NOP
			NOP
			RETURN        


örneğin start bit göndeermek

iiçin
IR_OUT		BCF	IR_LED		
		MOVLW	78
		
SEND		MOVWF	SAYAC1
SEND1		CALL	IR_MODULATION	


t	DECFSZ	SAYAC1,F
		GOTO	SEND1
		CALL	WAIT	;0,6MS LİK GECIKME
		RETURN
ARAMIYORUM , BULUYORUM

mmengi

sevgili fsan alıcı ve verici ile ilgili kodları düzenledim. dün akşam picprojeye giremedim bir sorun vardı sanırım şimdi

gönderebiliyorum ancak proteus da denedim düzgün çalışıyor. Aşağıdaki adreste proteus dosyası mevcuttur. Simülasyonda 38khz lik taşıyıcı sinyal olmaksızın pic to pic

çalışmaktadır.


http://web.ttnet.net.tr/mmengi/ir_tx-rx/IR_TX-RX.zip


VERICI

' bu programın 

ID'si 25 ve ADDRESS'si ascii 49(1) dir.
' program yukarıdaki bilgiler ile birlikte 0-255 arasındaki
' ascii karakterleri PORTA.0 portundan seri olarak 

göndermektedir.
' PORTB.3 portundan 38461 hz lik taşıyıcı sinyal üretmektedir.
TRISB.3 = 0  ' CCP1 (PortB.3 = Output) 
PR2 = 25     ' Set PWM Period for 

approximately 38KHz 
CCPR1L = 13  ' Set PWM Duty-Cycle to 50% 
CCP1CON = %00001100  ' Select PWM Mode 
T2CON = %00000100    ' Timer2 = ON + 1:1 

prescale 
CMCON=7

ADDRESS   VAR BYTE 
DAT   VAR BYTE 
ID   VAR BYTE 
ADDRESS   = 49 
ID   = 25 

BEGIN: 
   FOR 

DAT = 0 TO 255 
       SEROUT PORTA.0,0,[ID,ADDRESS,DAT] 
       PAUSE 100 
   NEXT 
GOTO 

BEGIN



ALICI

' bu programın ID'si 25 ve ADDRESS'si ascii 49(1) 

dir.
' program PORTA.0 portundan gelen bilgide ID=25 bilgisini aldıktan sonra
' alınan bilgiyi PORTA.1 portundan seri olarak PC veya 
' herhangi bir seri alıcıya 

iletmektedir.
CMCON=7
TRISB=0
ID CON 25     'Establish synchronization byte 
BAUD  CON 396    'NON INVERTED 2400 baud (MAX) 

DAT  

   VAR byte   'Data storage variable 
ADDRESS VAR BYTE 


BEGIN: 
SERIN2 PORTA.0,BAUD,[WAIT(ID),ADDRESS,DAT] 


SEROUT2 PORTA.1,396,[ADDRESS," ",DEC DAT," ",DAT,13]
PORTB=DAT 'PORTB UZERİNDEKİ LEDLER BINARY OLARAK 

KONTROL EDİLMEKTEDİR.
GOTO BEGIN