#byte oscon=0x99
#fuses INTRIC_IO,PLL
#use delay(internal=8MHz)
void main()
{oscon=0b11110010;
}
bu şekilde kristali ayarlamaya çalışıyorum ama olmuyor. yardımcı olurmusunuz acaba
#fuses INTRC_IO,PLL bu şekilde yazıyorum. ilk mesajda yanlış yazmışım
hocam datasheetteki 58. sayfaya dikkat edin.
32mhz için gerekli register ayarlamalarından bahsediyor
http://ww1.microchip.com/downloads/en/DeviceDoc/41391D.pdf
kardeşim çok baktım ama atladıgım bir şey var . bir türlü stabil çalışmıyor 32 mhz de
65. sayfadaki osconn ayarlamalarını yapıyorum. ama olmuyor. yapamadım bir türlü
The 4xPLL is not available for use with the internal
oscillator when the SCS bits of the OSCCON register
are set to '1x'. The SCS bits must be set to '00' to use
the 4xPLL with the internal oscillator.
Osccon Registerını 0b11110000 olarak güncelleyip dener misin hocam
onu denedim kardeşim. ama olmadı bir türlü
Peki şöyle yapalım. Sorunun tam kaynağına inelim. 1 saniyelik blink yaptığında skoptan ne okuyorsun?
Yada osc hiç mi çalışmıyor
scop yok
sende hiç yardımcı olmuyorsun :)
devrenin çalışıp-çalışmadığını nereden anlıyorsun peki?
led yakıp söndüremez misin en azından
osc=0b11111010 yapınca çalıştı bit 6-3 ün bir tane bitini atlamışım çok tşk sabahtan bu yana ugraşıyordum. çok tşk
osctune register ini de ayarlamak gerekiyormuş 32 için
32mhz için SCS bitini 0 yap diyordu halbuki. Kolay gelsin.
#fuses INTRC_IO,NOWDT,PROTECT,NOLVP,NOFCMEN,NOBROWNOUT,NODEBUG
#use delay(int=32000000) // dahili osc 32mhz
SCS 0 yaptıgımda da olmadı
Bu yeni nesil işlemcide genelde HFINTOSC gibi bazı bitleri kontrol etmek gerekiyor. Sorununuz büyük ihtimalle bundan kaynaklı olabilir hocam. Sayfa 66 daki oscstat registerine bakın derim. HFINTOSC bu değer 1 oluncaya kadar bekleyin, hatta öncesinde delay koysan daha güzel bile olur.
https://www.picproje.org/index.php/topic,60078.msg464483.html#msg464483
biraz daha ugraşacagız .inş bir sonuç alırız.
Alıntı yapılan: bulutay - 21 Kasım 2016, 14:08:52
#byte oscon=0x99
#fuses INTRIC_IO,PLL
#use delay(internal=8MHz)
void main()
{oscon=0b11110010;
}
bu şekilde kristali ayarlamaya çalışıyorum ama olmuyor. yardımcı olurmusunuz acaba
#use delay(internal=8MHz)
Osilatorle igili başka bir şey yapmayın bu yeterli.
Alıntı yapılan: sadogan - 23 Kasım 2016, 12:39:51
#use delay(internal=8MHz)
Osilatorle igili başka bir şey yapmayın bu yeterli.
Sadece onu yapinca nasil 32mhz olacak ? Hic pll ile işim olmadi merak soruyorum
#fuses INTRC_IO //Internal RC Osc, no CLKOUT
#fuses PLL //4X HW PLL enabled
#fuses NOCLKOUT //I/O function on OSC2
#fuses NOWDT //No Watch Dog Timer
#fuses NOPUT //No Power Up Timer
#fuses MCLR //Master Clear pin enabled
#fuses NOPROTECT //Code not protected from reading
#fuses NOCPD //No EE protection
#fuses NOBROWNOUT //No brownout reset
#fuses NOIESO //Internal External Switch Over mode disabled
#fuses NOFCMEN //Fail-safe clock monitor disabled
#fuses STVREN //Stack full/underflow will cause reset
#fuses NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#use delay(internal=32000000)
En üstden üç satır clock ayarıyla ilgili.
Osccon registerini ayarlamaya gerek yok. CCS onu kendi ayarlıyor zaten...
32mhz olmayacak 8mhz olcak. Dahili osilatorle ile 16mhz olabiliyor diye biliyorum.
onun içinde
#use delay(internal=16MHz)
Şimdi datasheet baktımda olabiliyormuş
#pragma config FOSC = INTOSC //internal Osc.Portlar Digital I/O olarak kullanılabilinir.
#pragma config PLLEN = OFF //OSCCONbits.SPLLEN = 1; İse ON olmuş OFF olmuş önemi yok.
OSCCONbits.SPLLEN = 1; //"#pragma config PLLEN = OFF" olsa bile buradan PLL açılıp kapatılabilinir.
OSCCONbits.IRCF = 0x0E; //8 Mhz internal Osc. 4 * 8 = 32Mhz denk.
CCS'den anlamam ama mantık bu şekilde olması lazım.
Birde şunu öğrenmek istiyorum.
Bu #use delay(internal=16MHz) direktifinin osilatör ayarlarına ne gibi bir etkisi var?
Bu Delay fonksiyonlarını belirlenen Osc frekanslarında kullanmak için değilmi?
Bu 32Mhz olsa ne 16Mhz olsa ne.
#use delay(clock=16MHz)
Bu delay fonksiyonlarının belirleyen Osc frekansını belirlemekte kullanılıyor
Bu ise
#use delay(internal=16MHz)
Delay fonksiyonlarını belirleyen ocs frekansını hemde dahili osilatorun yapılanmasını sağlıyor.
Derleyici çıktısı söyle
.................... #use delay(internal=16MHz)
*
00EB: MOVLW 20
00EC: MOVWF 05
00ED: MOVLW 3E
00EE: MOVWF 04
00EF: MOVF 00,W
00F0: BTFSC 03.2
00F1: GOTO 100
00F2: MOVLW 05
00F3: MOVWF 78
00F4: CLRF 77
00F5: DECFSZ 77,F
00F6: GOTO 0F5
00F7: DECFSZ 78,F
00F8: GOTO 0F4
00F9: MOVLW 2E
00FA: MOVWF 77
00FB: DECFSZ 77,F
00FC: GOTO 0FB
00FD: GOTO 0FE
00FE: DECFSZ 00,F
00FF: GOTO 0F2
0100: RETURN
Alıntı yapılan: sadogan - 23 Kasım 2016, 23:53:58
#use delay(clock=16MHz)
Bu delay fonksiyonlarının belirleyen Osc frekansını belirlemekte kullanılıyor
Bu ise
#use delay(internal=16MHz)
Delay fonksiyonlarını belirleyen ocs frekansını hemde dahili osilatorun yapılanmasını sağlıyor.
Derleyici çıktısı söyle
.................... #use delay(internal=16MHz)
*
00EB: MOVLW 20
00EC: MOVWF 05
00ED: MOVLW 3E
00EE: MOVWF 04
00EF: MOVF 00,W
00F0: BTFSC 03.2
00F1: GOTO 100
00F2: MOVLW 05
00F3: MOVWF 78
00F4: CLRF 77
00F5: DECFSZ 77,F
00F6: GOTO 0F5
00F7: DECFSZ 78,F
00F8: GOTO 0F4
00F9: MOVLW 2E
00FA: MOVWF 77
00FB: DECFSZ 77,F
00FC: GOTO 0FB
00FD: GOTO 0FE
00FE: DECFSZ 00,F
00FF: GOTO 0F2
0100: RETURN
@sadogan ,Siz ve bir kaç arkadaş bu direktifi gösterdiniz,
O zaman bu arkadaşlar niye olmuyor diyor?
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES PLL=ON
#fuses INTRC_IO, NOWDT, PUT, NOPROTECT, NOBROWNOUT
#use delay(internal=8MHz)
#byte osc= 0x99
#byte osctune= 0x98
#byte oscstat= 0x09A
osc=0b1111 1010;delay_ms(2);
osctune=0b00011111; delay_ms(2);
oscstat=0b01011001; delay_ms(2);
osc=0b1111 0010 yaptıgımda 16 mhz diyor datasheet de calışıyor
ama osc= 1111 1010 veya 1111 1000 yaptıgımda çalışmıyor.
ostune ve oscstat sız yaptıgımda da çalışmıyor. gözümden kaçan bir durum var. anlıyamadım bir türlü.
osc=0b 1111 0010 bu şekilde 32 mhz
osc=0b 1111 1010 16 mhz
16 da çalışıyor 32 de çalışmıyor.
Config1 FOSC_INTOSC,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_ON,CPD_OFF,BOREN_OFF,CLKOUTEN_OFF,IESO_ON,FCMEN_OFF
Config2 WRT_ALL,PLLEN_ON,STVREN_ON,LVP_OFF,BORV_19,LVP_OFF
Declare Xtal=32
OSCCON= %11110000
decllare xtal=32 etepic comda bu konu geçmiş . ordaki arkadaşlar xtal=32 yaparak çalıştırmışlar.
ccs de nasıl lyapatır xtal=32 yi
Sayın
@bulutay hocam naçizane bir tavsiyede bulunmak isterim.
Seni bu derleyiciye bağlayan bir şey yoksa XC8 e geçmeni öneririm.
Bu kadar çırpınmana gerek kalmaz.
3-5 register ile bitirirsin bu OSC Config işini :)
bulutay, OSCTAT Oislatör durum bitlerini tutan register.
Ona ne yapasanız yapın osc değişmez.
OSCTUNE Registeri ise şu.
Bir işlemcide İnternal Osc kullandığınız zaman iç osilatör yapısının R, C, Cmos, TTL elemanları bir kalıptan çıkmış
gibi olmaz,sonuçta gerçek hayatta 8-16-32Mhz vs internal olarak ayarladığınız osc tam değer vermez.
8Mhz ayarlarsınız tam 8Mhz olmaz bu.+/- töleransı vardır.Bir işlemcide 7.980Mhz osc olurken aynı işlemciden başkası
8.100Mhz verebilir.
Veya Tam 8Mhz ayalamış ve çalışyordur fakat ortam ısısı,işlemci chipinin kendi ürettiği ısı bu osilatörün kaymasına neden olur.
Bu çok kritik durumlar için önem azeder.
İşte o gibi durumlarda Osilatör'ü Tuning edersiniz.
Dolayısı ile o registerlerin bir etkisi olmaz.Boşuna kafanızı karıştırmayın.
teşekkürler ilgilediginiz için
biraz daha ugraşalım bakalım.
Alıntı yapılan: baran123 - 24 Kasım 2016, 16:50:54
Sayın @bulutay hocam naçizane bir tavsiyede bulunmak isterim.
Seni bu derleyiciye bağlayan bir şey yoksa XC8 e geçmeni öneririm.
Bu kadar çırpınmana gerek kalmaz.
3-5 register ile bitirirsin bu OSC Config işini :)
Sorun PIC C compiler'da değil
Alıntı yapılan: JOKERAS - 24 Kasım 2016, 12:30:33
@sadogan ,Siz ve bir kaç arkadaş bu direktifi gösterdiniz,
O zaman bu arkadaşlar niye olmuyor diyor?
Bilimiyorum ben 16 mhz de çalıştırmıştım.
Alıntı yapılan: xoom - 24 Kasım 2016, 18:40:05
Sorun PIC C compiler'da değil
Hocam ben sorun orada demedim zaten.
//genel de...
#BIT PLLR = 0x9A.6
#BIT HFIOFR = 0x9A.4
#BYTE OSCCON = 0x99
//main de en başa ilave
OSCCON = 0b11110000;
delay_ms(1000);
while (!PLLR);
while (!HFIOFR);
//diger işlemler...
Olur mu acaba? Zira CCS C bilmiyorum...
https://gputils.sourceforge.io/html-help/PIC16F1827-conf.html
https://gputils.sourceforge.io/html-help/PIC16F1827-conf.html
kristal ayarları confıig word de yapılıyor 32 mhz çalıştırmak için
Konu üzerinden epey vakit geçmiş:
Bu kadar zaman yılmadım, sonucu buldum, forumada bilgi veririm diyorsun :)
CcsC için register ayarı vs. yapmaya gerek yoktur,
Project Wizard ile proje oluşturulurken,
dahili osilatör ve 32 MHz seçilirse,
gerekli kod CcsC tarafından üretilir ve
MCU 32MHz dahili osilatörle çalışır.
Gerçekte denediğim bir devrenin kodlarından alıntı:
tek osilatör ayarı bu;
#include <16F1827.h>
#device ADC=16
//.
//. diğer konfigurasyon ayarları
//.
#fuses intrc_io
#use delay(internal=32MHz)
en kısa zamanda deniyecegim
Dene yaz,
bende 16F1827 datasheet ten
bu osilatör ayar ile ilgili detay bir durum gördüm onu yazayım sonra.
CONFIGURATION WORD 1 ty olarak yazdım f2 f1 f0 fosc
#byte ty = 0x8007
#bit f2 = ty.2
#bit f1 = ty.1
#bit f0 = ty.0
#bit mcrl = ty.5
CONFIGURATION WORD 2 pll olarak yazdım pl de pll 13 bit
#byte pll = 0x8008
#bit pl = ty.13
çalıştı
pll 8.bit
pl.8
#byte pll = 0x8008
#bit pl = pl.8
düzeltme
Alıntı yapılan: bulutay - 26 Mayıs 2017, 00:50:47
CONFIGURATION WORD 1 ty olarak yazdım f2 f1 f0 fosc
#byte ty = 0x8007
#bit f2 = ty.2
#bit f1 = ty.1
#bit f0 = ty.0
#bit mcrl = ty.5
CONFIGURATION WORD 2 pll olarak yazdım pl de pll 13 bit
#byte pll = 0x8008
#bit pl = ty.13
çalıştı
Bunu nereye yazdınız ccs CONFIGURATION WORD nerededir?
CCS 5.65V de konfig fabrika ayarları hepsi 1 tanımlı geliyor. Benim analizimde.
Çözüm olarak Konfig ayarlarını Sıfırlayan Fuse "CN1CLR,CN2CLR" tanımı ekledim.
Benim devrede 10Mhz kristal var.
#FUSES CN1CLR,CN2CLR,NOWDT,HS,PROTECT
#use delay(clock=10MHZ)
1- Yönetici olarak ccs çalıştırın
2- Tools>Device Editor>
3-
Name Mask Value CW
CN1CLR 1FFF 0000 1
CN2CLR 1FFF 0000 2
4-Kaydet
Bakalım düzgün çalışacakmı
Bu sefer internal osc geçti biraz daha incelemeli!