avatar_ete

16F628 - 16F628A işlemcisinin İncelenmesi

Başlatan ete, 28 Ağustos 2011, 20:45:21

ete



18 Pin yapısına sahip bu işlemci

üzerinde barındırdığı 2 adet Komparatör , 1 adet CCP (HPWM modulü) ve 1 adet USART modülü ile enteresan işlemciler arasındadır. Ayrıca 2048 word uzunluğunda program hafızasına sahip olmasıda ekstra bir avantaj olarak karşımıza çıkmaktadır.


İşlemcinin genel özelliklerini sırası ile inceleyelim.

İşlemci de dahili Osilatör bulunmakta olup toplam , 4 Mhz hızda çalıştırılabilmektedir.Frekans seçimi öncelikle sigorta ayarlarından dahili OSC nin seçimi ile yapılabilmektedir.

İşlemcide MCLR (Reset) pini gerekirse iptal edilip pin giriş pini olarak kullanılabilmektedir. Bu pin çıkış pini olarak kullanılamıyor maalesef.

2 adet Komparatör modülü bulunan işlemcide komparatör ayarlarını CMCON registeri ayarlamaktadır. İşlemci çalıştığında komparatör default  (önseçimli) olarak seçili gelir. Bu nedenle projelerinizde komparatör kullanmayacaksanız bu özelliğin iptal edilmesi gerekir. Iptal işlemi CMCON registerine 7 değerinin verilmesi ile yapılır.

USART modülü PortB de yer alan TX ve RX pinleri aracılığı ile kullanılır. RX pini PortB.1 de ve TX pini de PortB.2 üzerinden kullanılır.

İşlemcide CCP modülne bağlı olarak HPWM çıkışı PortB.3 pininden den alınabilir.

İşlemci 3V ile 5,5V aralığında sorunsuzca çalışabilmektedir. Bu özelliği nedeni ile pil ile beslenen uygulamalarda başarı ile kullanılabilmektedir.

16F628A serisi işlemciler daha yeni teknolji ile yapıldıklarından 20Mhz frekansa kadar sorunsuzca çalışırlar. 16F628 serisi işlemciler ise üzerinde yazılı olan frekanslarda güvenle çalışırlar. Bu frekanslar genelde 16F628/04
Ya da 16F628/20 gibi işretleme ile entegre üzerine yazılmaktadır.

Bu husus gözeterek her zaman A serisi işlemcileri satın almanazı öneririm. Bu önerim diğer işlemciler içinde geçerlidir.

zoptrik

#1
Ellerinize sağlık hocam çok faydalı bilgiler.
bir sorum olacak aslında farklı bir başlık açıp soracaktım forum kirliliği açısından burada sormam daha iyi olur diye düşündüm.
16f628A ile HPWM kullanmak istiyorum. bunun için CCP1CON registerine baktım fakat tam istediğim gibi bir ayar bulamadım ( ya da anlamadım ingilizcemin yetersizliğinden) fakat micro code studio da "HPWM 1, 128 , 200" gibi bir komut yazdığımda bana tam istediğim gibi PWM sinyali çıkarıyor. bu simulasyonun bir özelliği bi yoksa gerçek hayatta çalışması için başka sigorta ayarları yapmam gerekiyor mu?
bir sorum daha olacak bu fırçasız motorlar için ESC (electronic speed controller) larla ilgili bir fikri olan var mı? ben bunu PWM ile sürmek istiyorum. sürülebildiğini de biliyorum fakat bu esc lerin programlanması, pwm ile sürülebilir hale gelmesi mi gerekiyor ingilizceden bu kadar anlıyorum bilgisi olan varsa çok sevinirim
şimdiden teşekkürler
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

ete

HPWM kullanma yollarından birisi HPWM komutudur. Ancak bu komutta yer alan duty değeri 8 bitlik bir değerdir ve işlemciler 10 bitlik çözünürlükle HPWM kullanabilirler. Bu nedenle ben genelde bu komutu kullanmadan kendi komutlarımı yaratıp kullanırım.

16F628 işlemcisinde CCP1 ile isimlendirilen tek bir HPWM çıkış pini bulunur. Buda PortB.3 dür.
Öncelikle bu pini ÇIKIŞ pini olarak ayarlamak gerekir.
OUTPUT PORTB.3  komutu bu işi yapar. Ya da TRISB.3=0 şeklinde bir ayarlamada geçerlidir.

Bütün işlem TMR2 tarafından yürütülür. Bu nedenle genellikle ayarlar bu zamanlayıcya ait registerler üzerinden yapılır.
Daha sonra CCP1CON registerini PWM işlemi için ayarlıyoruz.
CCP1CON=%00001100

Ardından frekansımıza karşılık gelen PR2 değerini hesplayıp PR2 registerine veriyoruz.
Frekansımız varsayalım 1Khz (1000 Hz) olsun. Peryot =1000000/1000= 1000us olarak bulunur.
O halde formülümüz; ........... PWM Period = [(PR2) +1] * 4 * Tosc * (TMR2 Bölücü Değeri)  (Data sheet den alınmıştır)
de değerlerimizi yerleştirelim.
1000=(PR2+1)*4*0,25*1  '...........Tosc=1/4 us = 0,25
1000=(PR2+1)*1
1000=PR2+1
PR2=999 olarak bulunurki bu yanlış bir sonuç olmaktadır. Zira çıkacak değer 8 bitlik olması gerekiyordu habuki nerdeyse 10 bitlik bir sonuç çıktı. Demekki bölme oranını yanlış almışız.
1/1 değilde ¼ olarak almakta yarar var. Aynı işlemi bu bölücü oranına göre yeniden yapalım.
1000=(PR2+1)*4*0,25*4
1000=(PR2+1)*1*4
1000=4PR2+4
PR2=(1000-4)/4
PR2=996/4 = 249 olarak bulunur.
O halde ilk yapılacak iş T2CON registerinde bölme oranını ¼ olarak ayarlamak olacaktır.

T2CON=%00000101  'data sheete bakınız

PR2=249 değeride verilecek.
Buraya kadar aslında HPWM sinyalini açmış olduk. Şimdi duty değerini ilgili registerlere yerleştirmek gerekiyor. Diyelimki %duty olarak çalışıyoruz ve %75 lik bir duty değeri vereceğiz.
Önce %70 lik duty değeri için hangi değer kullanılacak onu bulalım.

X=(PR2+1) * %duty/25  'formülümüz budur Yüzde kaç duty isteniyorsa %Duty yerine onu yazın ve hesaplayın
X=(249+1) * 75 /25
X= 250 * 3 = 750 değerini bulmuş oluruz.

Şimdi bunu ilgili registerlere yerleştirelim.

CCP1CON.4=X.0
CCP1CON.5=X.1
CCPR1L=X>>2
bu üç satırlık komut dizisi bu işlemide yerine getirir ve çıkan sinyalin duty değeri %70 olarak ayarlanmış olur.

Biraz kestirme anlatmış olabilirim. Anlaşılmayan yer var ise belirtin daha detaylı anlatmaya çalışayım.

Ete

kgguler

Ete hocam HPWM komutunu durdurmak için ne yapmamız gerekir.Şöyleki motoru çalıştırdık,pot ile devir ayarı yaptık sınır anahtarından bilgi geldiğinde motor dursun.Hangi komut ilie pwm sonlandırabiliriz.

ete

Şu komut HPWM işlemini başlatır.
CCP1CON=%00001100
Durdurmak için ise CCP1CON=0 vermeniz yeterlidir. Başlatmak için ilk komutu yeniden vermek gerekecek unutmayın.

Ete

kgguler


zoptrik

hocam yanıtınızı yeni gördüm çok teşekür ederim ellerinize sağlık.
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

toprak

Hocam bu konu uzun süredir yanıtlanmamış uyarısı vardı. Ama soracağım konu 16f628A ile ilgili olduğu için burada sormak daha uygun geldi.

Genelde PIC16f628A kullanıyorum. Bazı devrelerimde MCLR bacağını kullanmadığım için hiçbir bağlantı da yapmıyorum. Mesala 4k7 ile artıya çekmiyorum. Yani bacak boşta kalıyor.
Bu şekilde olmasının picin çalışmasına etkisi olur mu?

MCLR bacağı ile işimiz yoksa boşta olması bir sorun yaratabilir mi?

Saygılar.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Yaratmaz. Zaten Mclr nin iptal edilmesinin iki amacı var. Birincisi o pine pullup direnci bağlamamak. İkincisi pini gerektiğinde giriş pini olarak kullanmak.
Ete

Maxim

Alıntı yapılan: ete - 06 Ekim 2012, 17:08:04
Yaratmaz. Zaten Mclr nin iptal edilmesinin iki amacı var. Birincisi o pine pullup direnci bağlamamak. İkincisi pini gerektiğinde giriş pini olarak kullanmak.
Ete

sıkıntı oluyor ete hocam
sanırım size hiç denk gelmedi ama mlcr pini giriş olarak tanıtırsanız pini genede boşta bırakmamak lazım

ete

Bana hiç denk gelmedi nedense. Ben kendi tecrübeme göre konuşuyorum tabiiki.
Birde mantık açısından olayı inceleyelim. Pini giriş yaptım ama hiç bir şey bağlamadım pin float denilen gidip gelme olayını yaşar. Havadan nem kapıp artıya doğru çekilir bazen low a doğru çekilir. Peki programda o pine ait hiç komut yok ise işlemci ne yapacak?  Kendi kendine komut icat etmez herhalde. 
Ne gibi sorunlar oluyor bilmek isterim doğrusu!!

Ete

Maxim

valla mantıklı değil onu söyleyeyim
aynen bende önceleri boş bırakırdım mclr girişini
nasılsa mclr off etmişim config ayarından değilmi ? diye düşünüyordum.

ama yoook öyle olmadı
masa başında günlerce haftalarca sıkıntısız çalışan devreler
pis ortama (sanayi veya gürültülü ortam) gelince reset olmaya başladı

bu problemi sanki mclr kapalı değilmiş gibi pull up + 47nf kondansatör takarak aştım.

ete

Bunuda bir tecrübe olarak kabul etmek gerek o halde.

Ete,

toprak

Alıntı yapılan: Maxim - 07 Ekim 2012, 12:43:56
valla mantıklı değil onu söyleyeyim
aynen bende önceleri boş bırakırdım mclr girişini
nasılsa mclr off etmişim config ayarından değilmi ? diye düşünüyordum.

ama yoook öyle olmadı
masa başında günlerce haftalarca sıkıntısız çalışan devreler
pis ortama (sanayi veya gürültülü ortam) gelince reset olmaya başladı

bu problemi sanki mclr kapalı değilmiş gibi pull up + 47nf kondansatör takarak aştım.
Ben de buna benzer bir sorun yaşadım. Ama sorunu tam anlayamadım.
Günlerce masa üstünde çalıştırdığım devre , hatta uzun zaman kullandığım devre birdenbire saçmalamaya başladı. Bu durumlarda pici değiştirince sorunun düzeldiğini de gördüm. Fakat picin durup dururken niye çıkış verdiğini anlamadım. Mesela portb ye bağlı bir led durup dururken yanıyordu. Programda yanması için gerekli şart sağlanmadığı halde böyle davranıyordu.

47nf ı nereye bağladınız.

Şunu da söyleyeyim mclr yi kullanmadığım halde pull up ile artıya bağladığım birkaç devrede de aynı sorunu yaşadım.

Ete hocam böyle bir tecrübem de oldu. Ama nedenini anlayamadım.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

halilgaliç

#14
ben mclr için şu bağlantıyı öneririm.benimde o yüzden basım cok ağrıdı ama bu kesin çözüm  http://www.upload.gen.tr/d.php/www/xiwijbig/s.bmp.html

Powered by EzPortal