@ DEVICE pic16f628A 'i?lemci 16F628
@ DEVICE pic16f628A, WDT_ON 'Watch Dog Timer aç?k
@ DEVICE pic16f628A, PWRT_ON 'Power on Timer aç?k
@ DEVICE pic16f628A, PROTECT_OFF 'Kod Protek kapal?
@ DEVICE pic16f628A, MCLR_ON 'MCLR pini kullan?l?yor. on kullanılıyor.OFF kullanılmaz.
@ DEVICE pic16f628A, HS_OSC 'Dahili osilatör kullan?lacak
@ DEVICE pic16f628A, BOD_OFF
'---------------------------------------------------------------------------------------------------------------
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giri? ç?k??
define osc 20
'---------------------------------------------------------------------------------------------------------------
trisb=%00000000 'irq 5. pine bağlı
trisa=%00001010 'porta.1 den veri giriişi olacak
'###############################################################################
INCLUDE "modedefs.bas"
DEFINE SHIFT_PAUSEUS 5
'tft pin ayarları
symbol wr=portb.0
symbol rd=portb.1
symbol cs=portb.2 'cs=0 ise veri, cs=1 ise komut
symbol rs=portb.3
symbol reset=portb.4
'sd kart pin ayarları
symbol sd_cs= portb.5
symbol sd_clk=portb.6
symbol sd_d_in=porta.1 'spi data girisi
symbol sd_d_out= porta.3
'*******************************************************************************
'74hc595 pin ayarları
symbol clk=portb.7
symbol d_out=porta.0 'spi data cıkısı
symbol ap=porta.2 '74hc595 enable(aktif-pasif) ucu aktif_pasif
'###############################################################################
al_dusuk var word ' spi gelen veriyi kaydetmek için ilk 8 bit
al_yuksek var word ' spi gelen veriyi kaydetmek için ikinci 8 bit
t_komut var word ' touch komutları
dongu var byte ' for next döngüsü için
komut var word ' tft ekran komutları
veri var word ' tft ekrana veri göndermek için
yuksek_deger var byte ' tft ekrana veri-komut göndermek için
dusuk_deger var byte ' tft ekrana veri-komut göndermek için
okunan var byte[63] 'sd karttan gelen verileri okumak için 64 byte
okunan01 var byte[63]
okunan1 var word
arguman var word 'adreleme yaparken msb kısmı (32 bit)
arguman1 var word 'adreleme yaparken lsb kısmı (32 bit)
adres1 var byte[3] 'adreslemeleri byte larına ayırmak için (gerek yok ama ben yinede kullandım)
k var byte
i var byte ' for next döngüleri için
j var word ' for next döngüleri için
sd_cs=1 '
k=0
'******************sd kart kurulum kısmı****************************************
sd_cs=1
cmd_0:
for i=0 to 9
shiftout sd_d_out,sd_clk,5,[$ff]
next
sd_cs=0
repeat
shiftout sd_d_out,sd_clk,5,[$40,$00,$00,$00,$00,$95,$FF]
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan=1
sd_cs=1:pause 50
GOTO CMD_1
cmd_1:
sd_cs=0
repeat
shiftout sd_d_out,sd_clk,5,[$ff,$41,$00,$00,$00,$00,$ff,$ff]
shiftin sd_d_in,sd_clk,0,[okunan]
lcdout $fe,$c0,#okunan
until okunan=0
shiftout sd_d_out,sd_clk,5,[$ff,$50,$00,$00,$00,$40,$ff,$ff,$ff] 'cmd16 kaç byte veri okumak istendiği karta bildirilir.
'ben 64 byte okuyacağım için bu kısımda bildiriyorum.
sd_cs=1:pause 1000 'istenirse bu kısım başka yerdede bildirilebilir.
goto lcd_hazirla_1
'******************tft ekranı hazırlama*****************************************
lcd_hazirla_1:
rd = 1
reset = 1
pause 50
reset = 0
pause 50
reset = 1
pause 50
cs = 0
'################tft ekranı hazıralamak için gerekli komutlar###################
komut =$0007:gosub komut_gonder:pause 30
veri=$0021:gosub veri_yazma:pause 30
'###############################################
komut =$0000:gosub komut_gonder:pause 30
veri=$0001:gosub veri_yazma:pause 30
'###############################################
komut =$0007:gosub komut_gonder:pause 30
veri=$0023:gosub veri_yazma:pause 30
'###############################################
komut =$0010:gosub komut_gonder:pause 30
veri=$0000:gosub veri_yazma:pause 30
pause 50
'###############################################
komut =$0007:gosub komut_gonder:pause 30
veri=$0033:gosub veri_yazma:pause 30
'###############################################
komut =$0011:gosub komut_gonder:pause 30 'tarama yöntemi soldan-sağdan-aşağıdan-yukarıdan
veri=$6808:gosub veri_yazma:pause 30
'###############################################
komut =$0002:gosub komut_gonder:pause 30
veri=$1000:gosub veri_yazma:pause 30
'###############################################
komut =$0001:gosub komut_gonder:pause 30
veri=$2b3f:gosub veri_yazma:pause 30
'###############################################
komut =$000b:gosub komut_gonder:pause 30
veri=$5308:gosub veri_yazma:pause 30
'###############################################
komut =$0028:gosub komut_gonder:pause 30
veri=$0006:gosub veri_yazma:pause 30
'###############################################
komut =$0025:gosub komut_gonder:pause 30 'osilator hızı
veri=$e000:gosub veri_yazma:pause 30
'###############################################
komut =$0022:gosub komut_gonder:pause 30 'tft ye yazma yapılacağı bildiriliyor
cs=1
veri=2016 'renk kodu
goto ekrani_doldur
'*******************************************************************************
veri_yazma:
yuksek_deger=veri.highbyte
dusuk_deger=veri.lowbyte
cs=0 'veri yazma
rs=1
shiftout d_out,clk,1,[dusuk_deger,yuksek_deger] 'data pini, clock pini
ap=1:ap=0:wr=0:wr=1:cs=1
return
'*******************************************************************************
komut_gonder:
yuksek_deger=komut.highbyte
dusuk_deger=komut.lowbyte
cs=0 'komut yazma
rs=0
shiftout d_out,clk,1,[dusuk_deger,yuksek_deger] 'data pini, clock pini
ap=1:ap=0:wr=0:cs=0:wr=1:cs=1
return
'*******************************************************************************
ekrani_doldur:
veri=$ffff:gosub veri_yazma
cs=0
for j=0 to 319
for i=0 to 239
wr=0
wr=1
next
next
cs=1:veri=$0000:gosub veri_yazma:pause 1500
arguman1=$0FC0 'adres kısmından okunacak byte kadarlık kısım cıkarılır.
arguman=$0040
j=0
goto oku
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'*******************************************************************************
'*******************************************************************************
'****************sd karttan veri okuma ve tft ekrana resim basma****************
oku:
arguman1=arguman1+64
if arguman1=$0000 then 'adres kısmının lsb bölmü sıfırlanınca
arguman=arguman+1 'adres kısmının msb bölmü 1 artar.
arguman1=$0000 'arguman1 bir sıfır ama ben garanti olsun diye yazdım.
endif
adres1[0]=arguman.highbyte:adres1[1]=arguman.lowbyte
adres1[2]=arguman1.highbyte:adres1[3]=arguman1.lowbyte
sd_cs=0
repeat 'adresleme bilgileri karta gönderilir.
shiftout sd_d_out,sd_clk,5,[$ff,$51,adres1[0],adres1[1],adres1[2],adres1[3],$ff,$ff,$ff]
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan=0 'kart hazır ise "0" gönderir onun dışındakiler hata demek.
repeat
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan =$fe 'veri göndereceğini söylüyor kart.
for i=0 to 63 ' veri okuma kısmı (64 byte )
shiftin sd_d_in,sd_clk,0,[okunan[i]]
next
sd_cs=1
'okunan veriler burda işleniyor. çünkü her bir hex kodunu karta ascii olarak kodlanıyor.
'yani bizim AAAA şeklinde olan renk kodumuz kartta 65-65-65-65 olarak görünür.
'buda istediğimiz hex kodu değildir. bu yüzden burda ASCII kodu 65 olan "A" önce 16 ya bölünür.
'sonra 9 eklenir.(65//16 kalan 1.9 eklenirse sonuc 10 olur ve buda HEX'in ilk verisidir.
'bu işlem 4 kez tekrarlanırsa ve her seferinde 4 bit kayarsa 16 bit renk kodu elde edilir.
'0-9 arasındaki rakamların ASCII karşılığı 48-58 arasında
'A-F arasındaki harflerin ASCII karşılığı 65 ile 71 arasında
'okunan[i]>40 olmasının nedeni 2 baytın (10 ve 14 kodlarının bizim için anlamsız olaması)
for i=0 to 63
if okunan[i]>40 then
if okunan[i]<65 then
okunan[i]=okunan[i]//16
else
okunan[i]=okunan[i]//16+9
endif
okunan1=okunan1<<4+okunan[i]
j=j+1
if j=4 then
j=0
veri=okunan1:GOSUB VERi_yazma
endif
endif
next
pauseus 1
goto oku
Alıntı YapNereden esti acaba bu mcu ile :)?Aslında elimde pic18f4550 var ama geçmeye erini yom.(tembellik)
Alıntı Yapkısaca nasıl yapılıyor onlarında açıklaması olsa çok yerli yerinde ve fayadlı olacaktır...
Mesela makrolar haline getirerek kullanabiliriz.
Hani nasıl lcd de print at 1,1,"mustafa" yazınca ekrana yazdırıyorsak o hale getirmek daha mantıklı olmaz mı ?
böyle bir çalışmanız olursa çok minnettar kalırız.Bizde elimizden geldiğince destekleriz..
Alıntı yapılan: homer380 - 20 Temmuz 2013, 22:36:07
Aslında elimde pic18f4550 var ama geçmeye erini yom.(tembellik)
tft ekran için mi yoksa sd kart için mi? Aslında böyle bir şey düşünüyorum şimdiki hal sadece çalışmasına bakıyorum.
lcdinit:
rd = 1
reset = 1
pause 50
reset = 0
pause 50
reset = 1
pause 50
cs = 0
'*********tft ekranı hazırlamak için gerekli komutlar***********************
komut =$0007:gosub komut_gonder:pause 30
veri=$0021:gosub veri_yazma:pause 30
'###############################################
komut =$0000:gosub komut_gonder:pause 30
veri=$0001:gosub veri_yazma:pause 30
'###############################################
komut =$0007:gosub komut_gonder:pause 30
veri=$0023:gosub veri_yazma:pause 30
'###############################################
komut =$0010:gosub komut_gonder:pause 30
veri=$0000:gosub veri_yazma:pause 30
pause 50
'###############################################
komut =$0007:gosub komut_gonder:pause 30
veri=$0033:gosub veri_yazma:pause 30
'###############################################
komut =$0011:gosub komut_gonder:pause 30 'tarama yöntemi soldan-sağdan-aşağıdan-yukarıdan
veri=$6808:gosub veri_yazma:pause 30
'###############################################
komut =$0002:gosub komut_gonder:pause 30
veri=$1000:gosub veri_yazma:pause 30
'###############################################
komut =$0001:gosub komut_gonder:pause 30
veri=$2b3f:gosub veri_yazma:pause 30
'###############################################
komut =$000b:gosub komut_gonder:pause 30
veri=$5308:gosub veri_yazma:pause 30
'###############################################
komut =$0028:gosub komut_gonder:pause 30
veri=$0006:gosub veri_yazma:pause 30
'###############################################
komut =$0025:gosub komut_gonder:pause 30 'osilator hızı
veri=$e000:gosub veri_yazma:pause 30
'###############################################
komut =$0022:gosub komut_gonder:pause 30 'tft ye yazma yapılacağı bildiriliyor
cs=1
komut =$0011 veri=$6808
komut =$0025 veri=$e000
komut_gonder:
yuksek_deger=komut.highbyte
dusuk_deger=komut.lowbyte
cs=0 'komut yazma
rs=0
shiftout portb.5,portb.6,1,[dusuk_deger,yuksek_deger] 'data pini, clock pini 74hc595 için
high portb.7
low portb.7 '74hc595 veriyi tetiklemek için
wr=0
wr=1:cs=1
return
veri_gonder:
yuksek_deger=veri.highbyte
dusuk_deger=veri.lowbyte
cs=0
rs=1 'veri yazma
shiftout portb.5,portb.6,1,[dusuk_deger,yuksek_deger] 'data pini, clock pini
high portb.7
low portb.7 '74hc595 tetiklemek için
wr=0
wr=1:cs=1
return
komut_gonder:
cs=0 'komut yazma
rs=0
'bu kısma data bacaklarına gidecek komut örnek : porta=komut.highbyte, portb=komut.lowbyte şeklinde olabilir
wr=0
wr=1:cs=1
return
veri_gonder:
cs=0
rs=1 'veri yazma
'bu kısma data bacaklarına gidecek komut örnek : porta=veri.highbyte, portb=veri.lowbyte şeklinde olabilir
wr=0
wr=1:cs=1
return
veri_gonder:
cs=0
rs=1 'veri yazma
'bu kısma data bacaklarına gidecek komut örnek : porta=veri.highbyte, portb=veri.lowbyte şeklinde olabilir
wr=0
wr=1:cs=1
return
adresleme:
x2=x1+a:y2=y1+b 'burdaki a ve b yatay ve dikeyde ne kadar ilerleme olacağını söylüyor.
komut=$0044:gosub komut_gonder 'x adresi
veri=(x2<<8)+x1: gosub veri_yazma
komut=$0045:gosub komut_gonder 'y adresi
veri=y1: gosub veri_yazma
komut=$0046:gosub komut_gonder 'y2 adresi
veri=y2: gosub veri_yazma
'###############################################################################
komut=$004e:gosub komut_gonder 'x1 baslama adresi
veri=x1: gosub veri_yazma
komut=$004f:gosub komut_gonder 'y1 baslama adresi
veri=y1: gosub veri_yazma
komut=$0022:gosub komut_gonder 'yazma yapacağımızı bildiriyoz
return
harf:
for i= 0 to 1
lookup al,[ $00,$00,$00,$00,$1C,$70,$1C,$70,$1C,$70,$1C,$70,$1C,$70,$1F,$F0,$1F,$F0,$1C,$70,$1C,$70,$1C,$70,$1C,$70,$1C,$70,$00,$00,$00,$00],yuksek_deger
if i=1 then
deger=deger+yuksek_deger
else
deger=yuksek_deger<<8
endif
if al >= 32 then al =0
al=al+1
return
'lookup tablosunda 16 bit olmadığından bu şekilde yaptım . her iki byte birleştirilip harfin ilk satırı elde ediliyor
'*******************************************
for i=0 to 15
gosub harf 'harfin ilk satırını almaya git
for j=0 to 15 'satır basmak için
if deger>>i//2=0 then ''bit değerinin 1 mi 0 mı olduğunu anlamak için
veri=$ffff:gosub veri_yazma '0 ise beyaz
else
veri=$0000:gosub veri_yazma '1 ise siyah renk
endif
next
next
if tp_irq=0 then 'istenirse bu kısım cıkarılabilir ve sürekli okuma yapılır.
for dongu=0 to 2
if dongu=1 then t_komut=$00D4 'x cevirisi için gerekli komut
if dongu=2 then t_komut=$0094 'y cevirisi için gerekli komut
pauseus 2
d_in=1
clk=0
t_cs=0 'ads7843 aktif hale getirdik
shiftout d_out,clk,5,[t_komut] 'clk düşen kenarda( x mi y mi cevrimi komutla haber veriyoruz.)
pauseus 3 'cevrim için bir süre bekleniyor.
shiftin d_in,clk,0,[al_dusuk\12] '12 bit veriyi alıyoruz
t_cs=1
if t_komut=$00D4 then gosub hesapla
if t_komut=$0094 then gosub hesapla
pauseus 1
next
endif
hesapLA: 'touch gelen x ve y leri anlamlı hale getirmek için
if t_komut=$00D4then
x1=al_dusuk-108 'burdaki 108 touch okunan en küçük değer
x1=x1**1000 'touch en büyük x ile en küçük x arasındaki farkın 240 bölümünden
x1=div32 7675 '7,675 gibi bir değer cıkıyor. x1'i 1000 ile carpar 7,675 bölersek
PAUSE 1 'x1 değerini 7,675 bölmüş oluyoruz.
endif
if t_komut=$0094 then
y1=al_dusuk-94
y1=y1**1000
y1=div32 5575
PAUSE 1
endif
return 'algilaya geri dönüş var.
INCLUDE "modedefs.bas"
DEFINE SHIFT_PAUSEUS 5
for i=0 to 9
shiftout sd_d_out,sd_clk,5,[$ff]
next
sd_cs=0
repeat
shiftout sd_d_out,sd_clk,5,[$40,$00,$00,$00,$00,$95,$FF]
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan=1
repeat
shiftout sd_d_out,sd_clk,5,[$ff,$41,$00,$00,$00,$00,$ff,$ff]
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan=0
cs=0
shiftout sd_d_out,sd_clk,5,[$ff,$50,$00,$00,$00,$02,$ff,$ff,$ff] 'cmd16 ile kaç byte veri okunacak o belirtilir. ben 2 byte okuma yaptım.
'eğer cmd16 belirtilmezse 512 byte veri okur. size kalmış bu kısım
cs=1
sd_cs=0
repeat
shiftout sd_d_out,sd_clk,5,[$ff,$51,adres1[0],adres1[1],adres1[2],adres1[3],$ff,$ff,$ff] 'adresleme bilgisi gönderiliyor.
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan=0
repeat
shiftin sd_d_in,sd_clk,0,[okunan]
until okunan =$fe 'okunan değer $fe ise kart ben veri gönderem diyor
for i=0 to 1
shiftin sd_d_in,sd_clk,0,[okunan[i]] 'veri okuma kısmı ben 2 byte okuduğum içinn verileri okunan[0] ve okunan[1] yükledim.
'istenirse döngü sayısı değiştirilebilir.
next
Alıntı yapılan: homer380 - 05 Ağustos 2013, 13:47:06
hocam bende parelel haberleşiyorum lcd ile . ben ilk önce sd karttan veri okuyorum oda en fazla 512 byte bir seferde .sanırım sd kartta veri okumak vakit alıyor o yüzden donımsal spi düşünüyorum. sadece donımsal spi hızı yeterince artırmayak. pic18f4550 en fazla 48 mhz çalışıyor. Benim aklıma gelen çözümler şunlar:
1 - sd kart haberleşmesi sd card bus protokolu (kart ile 4 bit parelel haberleşme)
2 - daha yüksek hızlarda çalışan mcu
bunların dışında neler olabilir.
Alıntı yapılan: homer380 - 12 Ağustos 2013, 13:26:08
Alıntı yapılan: homer380 - 12 Ağustos 2013, 14:29:08
https://www.picproje.org/index.php/topic,47641.0.html (https://www.picproje.org/index.php/topic,47641.0.html) burdaki kodları bi incele anlamıdığın yer olursa acıklarım.
Alıntı yapılan: homer380 - 12 Ağustos 2013, 15:53:10
daha önce hic 33f ile calışmadım ama neden olmasın herseyin bir ilki vardır. datasheeti oldukdan sonra. dip mi hocam?
Alıntı yapılan: mert07 - 13 Ağustos 2013, 10:17:09ccs c yi benim kadar kullansaydın emin ol hiç uğraşmak istemezdin ccs c ile . xc16 yı su anda kullanıyorum mis gibi
CCS C ile 24f ve 33 serisi piclerin konfigrasyonunu ayarlamak ve kullanmak çok hoş. Bende Proton Basic kullandıktan sonra CCS C ye geçiş yaptım Serdar ÇİÇEĞİN kitabı beni çok hızlı adapte etti. İncelemenizi tavsiye ederim. Kolay gelsin.
Alıntı yapılan: skara1214 - 13 Ağustos 2013, 12:16:07
ccs c yi benim kadar kullansaydın emin ol hiç uğraşmak istemezdin ccs c ile . xc16 yı su anda kullanıyorum mis gibi
Alıntı yapılan: mert07 - 14 Ağustos 2013, 16:42:12
xc16 16f serisi için değilmi
Alıntı yapılan: frederic - 17 Ağustos 2013, 17:11:01hocam 48 mhz cıkarınca tft calışmadı yani ilk kurulumu yapamadım. 18f4550 48 mhz calısıyor ama; tft cevap vermedi bu hızda. zaten 18fxxkxx deneyecem sırf ram'i için.
18f46k22 ile devam etsen daha iyi olur hocam, 64 mhz 16mips.
Alıntı yapılan: ambar7 - 22 Temmuz 2013, 11:38:31Bu konularda yeniyim binde 999.999 bilmiyorum fakat şu konu ilgimi çekti kendi dosya sistemini nasıl oluşturabiliriz kaynak biliyorsan ve verirsen sevinirim kaynak yoksa da canın sağolsun
Senin böyle aman aman lir LCD'ye ihtiyacın yok görünüyor. Senin işini karakter LCD'ler de görebilir. Onların ekranına bilgi göndermek bu LCD'den daha kolaydır. Seçme işimi göstermek sadece bir ok bile yeterli. Seni uğraştıracak olan SD kard okumasıdır. Daha doğrusu dosya adı ve yerini okumaktır. Bunun için FAT32 gibi konulara bakman lazım. Tabi kendi dosyalama sistemini oluşturmayacaksan!
Alıntı yapılan: homer380 - 17 Ağustos 2013, 18:05:05
hocam 48 mhz cıkarınca tft calışmadı yani ilk kurulumu yapamadım. 18f4550 48 mhz calısıyor ama; tft cevap vermedi bu hızda. zaten 18fxxkxx deneyecem sırf ram'i için.
ahmet link=topic=47860.msg360523#msg360523 date=1376758297] Bu konularda yeniyim binde 999.999 bilmiyorum fakat şu konu ilgimi çekti kendi dosya sistemini nasıl oluşturabiliriz kaynak biliyorsan ve verirsen sevinirim kaynak yoksa da canın sağolsun [/quote] fat32 için http://www.barissamanci.net/AltKategori/10/her-yonuyle-fat32/ (http://www.barissamanci.net/AltKategori/10/her-yonuyle-fat32/) oldukça yararlı. Alıntı yapılan: frederic - 17 Ağustos 2013, 20:14:18sıkıntı spi değil tft'de. tft ile'de paralel haberleşiyorum(spi ile değil). kartta sıkıntı yok 48 mhz cıkınca okuma yapabiliyorum. kartı okumak için yazılımsal spi kullanıyorum. |
Alıntı yapılan: homer380 - 17 Ağustos 2013, 21:20:00Teşekkürler
fat32 için http://www.barissamanci.net/AltKategori/10/her-yonuyle-fat32/ (http://www.barissamanci.net/AltKategori/10/her-yonuyle-fat32/) oldukça yararlı.
@CONFIG_REQ
@ __config CONFIG1H, FOSC_INTIO67_1 & PLLCFG_ON_1 & PRICLKEN_ON_1 & FCMEN_ON_1 & IESO_ON_1
@ __config CONFIG2L, PWRTEN_ON_2 & BOREN_OFF_2 & BORV_220_2
@ __config CONFIG2H, WDTEN_ON_2 & WDTPS_32768_2
@ __config CONFIG3H, CCP2MX_PORTC1_3 & PBADEN_OFF_3 & CCP3MX_PORTE0_3 & HFOFST_OFF_3 & MCLRE_INTMCLR_3
@ __config CONFIG4L, STVREN_ON_4 & LVP_OFF_4 & XINST_OFF_4 & DEBUG_OFF_4
@ __config CONFIG5L, CP0_OFF_5 & CP1_OFF_5 & CP2_OFF_5 & CP3_OFF_5 & CP1_OFF_5 & CP2_OFF_5 & CP3_OFF_5
@ __config CONFIG5H, CPB_OFF_5 & CPD_OFF_5
@ __config CONFIG6L, WRT0_OFF_6
@ __config CONFIG6H, WRTC_OFF_6 & WRTB_OFF_6 & WRTD_OFF_6
@ __config CONFIG7L, EBTR0_OFF_7 & EBTR1_OFF_7 & EBTR2_OFF_7 & EBTR3_OFF_7
@ __config CONFIG7H, EBTRB_OFF_7
OSCCON = %01110000
OSCTUNE.6 = 1 ;PLL aktif