16F1827 yeni nesil pic.

Başlatan F®T, 30 Aralık 2014, 19:21:59

F®T

Arkadaşlar merhaba.
Entegre yeni nesil ama malesef biz eski nesil.Anlaşamadık bir türlü.  ???
Takıldığım bir konu var.Protonda yeni nesil 16f1827 nin configrasyonlarını bir türlü ayarlıyamıyorum.Otomatik fuse eklentisi ile ayarladım.Pwm çıkışını ve analogları ne ettiysem olmadı.Bu entegre ile ilgili yardımcı olursanız sevinirim.Teşekkür ediyorum.İyi çalışmalar.

'proton  2.0.1.2 versiyon
'compiler 3.5.5.5


;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F1827

Declare Reminders Off
@ CONFIG_REQ = 0 ; Override Compiler's configuration settings
Asm-
__Config _Config1, 0x3984 ;FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_ON & FCMEN_ON
__Config _Config2, 0x1FFF ;WRT_OFF & PLLEN_ON & STVREN_ON & BORV_LO & LVP_OFF
Endasm-
Declare Reminders On

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------


Declare Xtal = 8      'işlemcinin 32 mhz dahili çalışmasını istiyorum fuse de pll yi açtım


TRISA=%00000000:PORTA=0
TRISB=%00011110:PORTB=0                             

Declare LCD_DTPin PORTA.0
Declare LCD_ENPin PORTA.6
Declare LCD_RSPin PORTA.7
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare LCD_CommandUs 100
Declare LCD_DataUs 100   

CM1CON0=0
CM2CON0=0

ANSELA=0
ANSELB=%00011110      'portb nin 0. biti pwm olacak ccp1 olarak 1.2.3.4. bitleri de adc olacak ama yapamadım bir türlü
                       'ADC OKUMALARI ÇOK YÜKSEK OLUYOR 65408 GİBİ 10 BİT ADC 1023 OLMUYOR
                       
Declare Adin_Res = 10 ' 10-bit result required
Declare Adin_Tad = 32 ' RC OSC chosen
Declare Adin_Delay = 100 ' Allow 50us sample time 

Declare CCP1_Pin PORTB.0


Dim VADC As Word
Dim VSET As Word

Dim AADC As Word
Dim ASET As Word
   

DelayMS 500       



BASLA:

HPWM 1,VSET,5000   '32 mhz de   10 BİT OKUMA OLACAK VSET ANALOGLA EŞLEŞECEK

VSET   =ADIn 9
ASET   =ADIn 8           'ADC OKUMALARI YUKSEK DEĞER OLUYOR 65408 GİBİ 1023 OLMASI GEREKEN
VADC   =ADIn 11
AADC   =ADIn 10

Print $FE,$80,"SET= ",Dec3 VSET,"VOLT= ",Dec3 VADC
Print $FE,$C0,"SET= ",Dec3 ASET,"AKIM= ",Dec3 AADC     


GoTo BASLA     





proteuse 7.10 sürümü.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

#1
FT hocam bu 16F1827 nin neresi yeni nesil? (eleştiri babında sormadım)
datasheetini tam incelemedim ama diğerlerinden ayıran belli başlı farklılığı nedir?

hocam kodu protonda derledim ama nedendir LCD de görüntü yok.

F®T

Sizi bilmem ama bana gore yeni ilk defa kullaniyorum ve baya gelismis ayarlari var.
Biraz gec geliyor goruntu.xtal ayarlarindan heralde bende anlayamadim zaten.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

#3
gecikme 500mS lik delaydan bende sonradan farkettim, ADC okuması sıkıntılı gözüküyor, bendeki fuse ayar programındaki fuse ayarını kabul etmiyor. dikkatimi çeken PLL yi aktif etmek için Declare PLL_Req TRUE komutu kullanılması gerekiyor ama ben beceremedim fuse ayarını, olmasa datasheetten bakmak lazım


edıt:
usta bunda dac bile var, yahu PIClerde alışık değiliz çarpmasın bu bizi... ;D

Hattuşa

F.T. hocam
ben bişeyler yakaladım, ADC ölçümünü doğru yapıyor artık PWM işine henüz bakmadım. aşağıya kodu ve isis cizimini tekrar ekliyorum.
yaptığım değişikliklere gelince;
öncelikle 32 MHZ e çıkmak için  Declare PLL_Req TRUE ekledimki derleme sonunda 32 MHZ yazıyor.
devamında adc işlemi için datasheete FVRCON registerinin 6. biti 16F1827 için 1 olmalı diyor (alltaki notta en azından ben öyle anladım)
ADCON0 registeri ADON u aktif etmek için ve çevrimin bittiği bayrağı set etmek için ADCON0 =%00000011 yaptım
ayrıca ADCON1 registeri sanırım bu işin püf noktası çünki ADCON1.7 biti 1 yapılarak 10 bit seçiliyor her ne kadar adin_res ile ayarlasakta herneyse 1. ve 0. bitler Vref lerle alakalı bir durum bunları ayarlayınca 10 bitte doğru ölçümü verdi.


Hocam bu yeni nesilin 28. pin ve 40. pinlisi de varmıdır türkiyede gerçi öncelikle işlemcilerin ne olduğunu öğrenmek lazım... birde fiyat konusu var tabi, malum amatörler pek tuzlu sevmez  ;D

F®T

#5
Hocam sana yeni nesil dedim inanmamıştın.:)

hocam analog inputu porta olarak ayarlamışın diye hata veriyor.adcon registerinde seçim bitleri var ama tek kanal seçiyor nasıl oluyor bu anlamadım.bunun fiyatıda uygun yeni üretilen picler ucuz oluyor.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

hocam pwm işini anlayamadım, bunu çözse çözse ete hocam çözer zira;
MDSRC =%00000010 'bu ayar PWM1 i seçiyor
MDCARH =%00000100 'buda PWM1 ile alakalı
CCP1CON =%00001100 'işte bu kodda tıkandım. zira alıştık biz düz motora vites vs anlamıyoruz. basıyoruz HPWM 1, duty, frekans gerisini işlemci yapıyordu. üstüne birde datasheet okuyamama özrümüz var.

hocam analog seçimi kolay, adc okutmadan hemen önce okutacağın kanalın adcon registerini ayarlarsan olur diye düşünüyorum. gerçi bu uygulama eski modellerinde de var ama hiç kullanma gereği duymadık...
en iyisi ete hocam bi cevap yazsın malum o bu işin kurdu...

F®T

Hocam analog lardan portb 1,2,3,4 nolu bitleri tek komutta neden kullanamıyoruz.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

F®T

#8
Hocam bu pic motor bilen kontrol ediyor.gelişmiş pwm moduda var.

APFCON0.0=1            'PORTB.0 CCP1 PİNİ OLACAK bu komut ccp1 i portb.0 a ayarlıyor
CCP1CON.2=1      'pwm moduna ve tek pin çıkışına ayarlandı
CCP1CON.3=1      'pwm moduna ve tek pin çıkışına ayarlandı
CCPTMRS=0        'tüm ccp lere tmr2  seçildi
T2CON=%01001110  'ccp1 için prescaller ayarlandı ve t2 devreye alındı

CCPR1L=VSET.LowByte
CCPR1H=VSET.HighByte 

Bu şekilde ayarlarla pwm alıyorum.proton komutu kullanmadan direk bu ayarlar ile.Vset 10 bit adc okumasına eşit.fakat pwm 255 değerinden sonra sıfırlıyıp  tekrar baştan başlıyor.yani pwm 10 bit çözünürlüğe sahip değil sadece şu anda 10 bit için uğraşıyorum.fakat hala başaramadım.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Bu işlemciyi bir k projede kullanmıştım. En son 6 ay önce biraz boğuştuktan sonra çalıştırabilmiştim ama şimdi sorun neydi unutmuşum. Data sheet'e şöye bir baktım. Bir çok özelliği olan bir işlemci. Çok da güzel özellikleri var. O günlerde artık 16F628 kullanmam bunu kullanırım demiştim ama bir ara piyasadan kayboldu bulmak gerçekten zor idi. Bu yüzden bende yeterince kullanamadım diyebilirim.
Özelliklerine şöyle bir bakarsak;
- 12 kanal , 10 bit ADC si var. Pinleri digital kullanmak için Hem A portu hemde B portu ADC pinleri iptal edilmeli.
- Yine 12 kanal kapasitif Sens (dokunmatik buton) özelliği mevcut. Pinleri digital yapmak için bu özellikte iptal edilmeli
- 2 kanal komparatör mevcut
- Extended USART modülü mevcut
- Full Bridge ve Half Bridge (ECCP) özelliği mevcut. Bu özellik H-Köprü devresi amacı ile kullanılmaktadır sanırım.
- 2 kanal HPWM mevcut
- DAC (Digital to Analog Converter) özelliği mevcut.
- Modulatör özelliği mevcut . Mesela 38 Khz taşıyıcı sinyal üretimini kolaylıkla gerçekleştirebilir.
- SR latch özelliği ve bir kaç ilave özellik daha mevcut.
Tabiiki bu kadar özellik bir araya gelince entegreye hakim olmakta epeyce zorlaşıyor.
Bir çok registerle oynamak gerekiyor.
Sıkıntı devam ederse inceleyeyim zira çok vakit alacak bir iş ancak lazım olunca yapabilirim.

Ete
En güzeli, 4k program hafızası mevcut.
-

F®T

hocam şu anda sadece 10 bit pwm çıkaramıyorum.her 255 te pwm sıfırlıyor.sanırım tmr ayarlamasında sorun yaşıyorum.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Aşağıdakileri incele bakalım eksiğin nedir.
Bu işlemcide bir CCPX çıkışı için TMR2 veya TMR4 veya TMR6 kullanılabiliyor bu nednele Timer kaynağını seçmek gerekiyor.
Bunuda CCPTMRS registeri yapıyor. data sheet'e bakıver detayları için.
gerisi normal PWM işleminin aynısı olması gerekir.

DEFINE CCP1_REG PORTB
  DEFINE CCP1_BIT 3   
  DEFINE CCP2_REG PORTA
  DEFINE CCP2_BIT 7   
  CCPTMRS=0
  PR2=249
  CCP1CON=$0C
  CCP2CON=$0C                                     
  T2CON=%00000110        'Prescaller / 16, Timer2 ON 

Ete
   

F®T

MDCON=0                'modülator çıkışı iptal
MDSRC=0                'modülasyon kaynak seçimi                 pwm sayfa 205 ten başlıyor
MDCARH=0               'modülasyon yüksek biti
MDCARL=0               'modülasyon düşük biti
CCP1CON.2=1      'pwm moduna ve tek pin çıkışına ayarlandı
CCP1CON.3=1      'pwm moduna ve tek pin çıkışına ayarlandı
CCPTMRS=0        'tüm ccp lere tmr2  seçildi
T2CON=%00000110        'Prescaller / 16, Timer2 ON  'ccp1 için prescaller ayarlandı ve t2 devreye alındı
PR2=249



basla:

CCPR1L=VSET.LowByte
CCPR1H=VSET.HighByte   

goto basla

hocam ayarlar bu şekilde program içinde ise  ccpr1  değerini vset ile eşleştiriyorum.adc değeri ne ise pwm o olsun diye.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

konu almış gitmiş bizde fransız kaldık, bir gerçek var her ne kadar yeni özellik PIC in set esnasında bizi yorsa da bazen birçok analog devreden kurtarıyor adamı vesselam aklımızda bulunması gereken bir PIC olmalı, tabi birde bunun 28 ve 40 pinli modelini de bulabilirsek...

F®T

arkadaşlar bu sitede çok güzel bir hesaplama aracı var değerleri giriyorsunuz o size kodları ayarlayıp veriyor.

http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Powered by EzPortal