PSOC ta İlk Program

Başlatan Erol YILMAZ, 07 Şubat 2006, 18:47:53

Erol YILMAZ

PSOC ta artık programları sadece bir adet C veya BAS kodu ile veremiyorsunuz. Çünkü ayarlanmış bir donanım var yazılım bunun üzerinde. Çalıştırdığım ilk kodu örnek olarak veriyorum ama çok ta fazla birşey ifade etmiyor. Yine de yeni başlayanlara en azından çalışan bir kod olmuş olur. Bir adet 16 bit PWM kullanıldı.

Program 1. pinden 20 Hz de %50 duty cycle ile çıkış veriyor.

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

void GenerateOneThirdDutyCycle(void)  
{
    PWM16_1_WritePeriod(4687);  
    PWM16_1_WritePulseWidth(2343);  
    PWM16_1_DisableInt();  
    PWM16_1_Start();  
    return;
}  

void main()
{
	GenerateOneThirdDutyCycle();  
	while(1);
}


Donanıma da bir göz atmak isterseniz,
http://www.hemenpaylas.com/download/171632/first.pdf.html

aYe

Selam,

Erol hocam nasil birşeydir bu PSoC? Benim de ilgimi çekmeye başladı.
Hem periyodunuza bakilirsa pwm'i dokuz buçuk bit kullanmışsınız bunun sebebi nedir? Hörmetler...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

Erol YILMAZ

PSOC u sizden öğreniyoruz hocam,
Bu arada PWM16 bit, Çıkış frekansını tam sayı istediğinizde böyle küsüratlı rakamlarla karşılaşıyorsunuz.

Şimdi de DAC tan 0...5 V genlikli Sinus sinyali elde etmeye çalışıyorum.
Yardımcı olur_musunuz?

aYe

Kod'un ve şemanın son halini bir görelim, ona göre sinüs için matematikle arası iyi olan arkadaşların sanıyorum önerileri olucaktır..

Kolay gelsin...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

Veli B.

Ben mi yanlış yorumladım acaba diye düşünmeye başladım.20 hz için
#include "PWM16.h" 
#include <m8c.h>        // part specific constants and macros 
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules 

void GenerateOneThirdDutyCycle(void)  
{ 
    PWM16_1_WritePeriod(20);  
    PWM16_1_WritePulseWidth(10);  
    PWM16_1_DisableInt();  
    PWM16_1_Start();  
    return; 
}  

void main() 
{ 
   GenerateOneThirdDutyCycle();  
   while(1); 
}


değil mi?

aYe

Selam,

Evet katana yanlış yorumlamışsınız, şöyle ki;

Bir pwm modülü seçilmiş ve üretilen datasheet'e bakarsak 16bit pwm için clock girişi VC2 prescaller'i. VC2'in girişi VC1 ve onu 4'e bölmüş. VC1'in clock girişi sysClk pll kapalı olduğu için 24mhz ve VC1'de girişi 4'e bölüyor. 16bit pwm'in saat girişi 1.5 mhz olur. Yani 1 clock yaklaşık 0.66us
buna Tclk dersek. Period değeri 4687 girilmiş buna da period value dersek

PWM16 için de formülümüz buysa; Output period=(period value+1)TCLK

(4687+1)x0.66=3094us bu da yaklaşik 3ms eder. Burdan da frekans 333hz civari çıkar.

Bu durumda Erol'a sormak lazim,datasheetdeki degerler ve kod'un bire bir aynımıdır???
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

Veli B.

bu mcu için üretilen datasheete bakmadım.Sadece göz gezdirirken ne nerde acaba diye gözüme çarpmıştı.O formüle tekrar baktım ve ona göre söylemiştim ama elbette işin içine prescaler gibi faktörler girince işlker değişecek.Datasheete bakayım önce.(ilk yapmam gereken şey iken en sona bırakırsak....)

Bu arada tesadüfen, cd içerisinde bir tane Türkçe program buldum(asm).


http://rapidshare.de/files/12765014/blackjack.rar.html

aYe

@katana

PSoC diyince datasheet kavramı da biraz degişiyor; modüllerin datasheetleri ve entegrenin datasheet'i olarak iki tip söz konusu.

Ben datasheet derken tasarımcı tarafından dizayn edilen entegrenin datasheet'inden bahsediyorum. Tabi bu da benim anlatım hatam olmuş oluyor, hangi mantıkla kendi varsayımlarımın herkes için geçerli olduğu hissine kapıldıysam  :oops:  :oops:  :oops:

Pek yeterli olmasada başka türkçe kaynaklara bu adresten erişebilirsiniz;
http://www.destekelektronik.com/psoc.htm

Ek: Destek elektroniğin sitesine link kopyalamak için girdiğimde dikkat ettim de PSoC konuşulan forumlara link verilmiş... eee burdan çok PSoC konuşulan yer mi var?
Hani bizim linkimiz?
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

Veli B.

Benim kastımda @Erol' un oluşturduğu mcu için datasheete bakmaktı.Anlatım hatanız sözkonusu değil ama genel anlamda PSoC için bu karışıklığa sebep vermeme adına önerim;
-Modüller için datasheet
-Oluşturulan MCU için ise worksheet demek
Cypress sadece şematik yapılanma için demiş ama olsun:D

Erol YILMAZ

20 Hz PWM sinyali nasil elde edildi ?

PWM in osilatoru VC2den alindi.
VC1 ve VC2 prescaler degerleri 16 ve 16 dir :)
yani, 24.10^6 / 16 / 16 = 93.75 Khz
PWM in clock sinyali bu.
93.75kHz / 20 Hz = 4687.5 bulunuyor.  Bunu da aynen;
PWM16_1_WritePeriod(4687);     olarak kullaniyoruz.
Frekansin nereden/nasil geldigi anlasilmistir...

Bu arada olusturulan Config Sheet ilk mesajimda belirtilmistir.

Saygilarimla...

aYe

Selam,

@Erol

Tamam dokus buçuk derken bir an dalmışım pwm çözünürlüğün on iki buçukmuş ama ilk verdiğin datasheet'e bir daha bakarsan prescaller'lar bölü 16 değil bölü 4 şeklinde.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

Erol YILMAZ

Ikisinin de 16 oldugu 2 yerde belirtilmis,  
Config Sheet te VC1 ve VC2, 16 olarak yaziyor. Bir onceki mesajimda da 16 olarak belirtildi. Hesapta buna gore yapilmis ve dogru calisiyor.
Buyuk bir ihtimalle yanlis bir hesap yapiyorsunuz.

Ayrica tarafinizdan ADCler ve kullanimi hakkinda ayrintili bilgi talep ediyoruz. Simdiden teşekkürlerimi sunarim.

@tatlısukurnazı,
VC1 ve VC2 değerleri ilk verdiğim linkteki gibidir.
Zaten sen de bu başlığın 6. mesajında bahsettiğin hesabı tutturamamışsın.
20 Hz PWM ve 16-16 prescaler diyorum. Bu sekilde 4687 clock ile periyot sağlanıyor. Bunların  hepsi birbirini sağlıyor.
Siz 1 değişkeni değiştirip ötekini de ona göre yazıyorsunuz.

Ayrıca 4 ve 4 prescaler değeri ve 4687 clock periyot uzunluğu ile 320 Hz sinyal elde edilir.


Daha faydalı konular hakkında yazışmak üzere.

aYe

@Erol

Ben download ettikten sonra değerler değişti heralde, ilk gönderdiğiniz halini neyseki silmemişim buyrun;

http://www.hemenpaylas.com/download/173328/first.pdf.html
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

picusta

Merhaba beyler,
Bende su Psoc'lari merak ettim, burda anlatilanlarin hepsini okudum. Psoc numune istiyecegim, fakat benim merak ettigim su hardware multiplierlardan kaç tane konabiliyor? 16*16 fixed point'mu floating point mu? iki tane yan yana koyup 32 bit islem yapilabiliyormu? Hangi modeli önerirsiniz? (söyle multiplier'i bol, 8 ADC-DAC olan bisi, giris çikis filtreli )

aYe

Selam,

Sayin Erol mesajları aynı anda yazdığımız için olucakki ben sizin mesajınızı daha yeni görüyorum.

Alıntı yapılan: "Erol"VC1 ve VC2 değerleri ilk verdiğim linkteki gibidir.

Bu tür soruları msn yerine forumdan sorarsanız cevaplardan herkez faydalanır yorumuma birde dosyaları msn yerine sadece forumdan gönderirseniz karışıklıkta olmaz diye ekleme yapiyorum.

Alıntı yapılan: "Erol"
Zaten sen de bu başlığın 6. mesajında bahsettiğin hesabı tutturamamışsın.
20 Hz PWM ve 16-16 prescaler diyorum. Bu sekilde 4687 clock ile periyot sağlanıyor. Bunların  hepsi birbirini sağlıyor.
Siz 1 değişkeni değiştirip ötekini de ona göre yazıyorsunuz.

Ayrıca 4 ve 4 prescaler değeri ve 4687 clock periyot uzunluğu ile 320 Hz sinyal elde edilir.

Prescaller degerleri VC1=16,VC2=16 iken 24mhz/16/16=10.66666uS eder.
Period 4687 iken 6. mesajımdaki hesaplamaya göre;
(4687+1)x10.66666=49.9ms eder ki bu da yaklaşik 20Hz'dir

Yine aynı yöntemle VC1 ve VC2 değerleri 4 olarak ele alındığında 6. mesajımda belirttiğim üzere yaklaşık olarak 333 çıkar.
Yok ben yanlışlık derken 333 ile 320 arası farkı diyordum dersen; hesapları mesajları yazarken kafamdan yaptığım için detaya girmeden yaklaşık yazıyor ve yaklaşık değer olduğunu belirtiyorum, zaten burda önemli olan rakamsal değil yöntemsel doğruluk.
İllede rakam derseniz gerçek frekans 323,20620555914673561732385261797Hz'dir.
Yani sizin bakış açınızla yanlış hesaplamışsınız.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)