arkadaşlar 16f877 de iki microcip gibi ayrı ayrı işlemler yaptıra bilmem mümkünmü? mesela saat çalışırken aynı anda başka bir işlemi daha yapıcak
timer0 veya timer1 veya timer2 yi ve kesmeleri kullanarak yapabilirsin.forumları incelersen bulabilirsin.kolay gelsin.
Mikroişlemciler Yapıları nedeni ile aynı anda sadece bir iş yapabilirler. Ama Saat gibi işlemler İçin microişlemcilerin INTERRUPT (Kesme) dediğimiz özelliklerinden yararlanabilirsiniz. Size Timer INTERRUPT ile çalışan bir saat uygulaması gönderiyorum Kıristaliniz 4 mhz olacak
buda linkin
@ device INTRC_OSC_NOCLKOUT
CMCON = 7
VRCON = 0
'Program saat.bas
'işlevi 4 bit lcd
' Device 16F84
Define LCD_DREG PORTA
Define LCD_DBIT 0
Define LCD_RSREG PORTa
Define LCD_RSBIT 4
Define LCD_EREG PORTB
Define LCD_EBIT 3
Değişken
saat var byte
dsaat var byte
dakika var byte
saniye var byte
ticks var byte
guncelle var byte
'i var byte
x var byte
y var byte
@ device WDT_OFF
Pause 100
saat=0
dakika=0
saniye=0
ticks=0
guncelle=1
OPTION_REG=$55
INTCON=$a0
ON INTERRUPT Goto tickint
trisb.4= 0
trisb.5= 0
' PORTB=0
' TRISB=%00011111
ana_dongu:
if PORTA.7 = 1 Then dak_azalt
if PORTA.6 = 1 Then dak_arttir
kontrol:
if guncelle=1 Then
Lcdout $fe,1
dsaat=saat
if (saat // 12) =0 Then
dsaat =dsaat + 12
Endif
' < >
if saat < 12 Then
Lcdout dec2 dsaat ,":" , dec2 dakika,":",dec2 saniye, " AM"
else
Lcdout dec2 (dsaat - 12) ,":" , dec2 dakika,":",dec2 saniye, " PM"
Endif
guncelle = 0
Endif
' if saniye =30 then
' Pot PORTB.0,255,X
' y= 58 - x
' endif
' if saniye /30 > 0 and saniye /30 < 5 then
' Pot PORTB.0,255,X
' y= 58 - x
' Pause 100
'Lcdout $fe,1
' Lcdout "isi=: " ,#y
' endif
Goto ana_dongu
dak_arttir:
dakika=dakika + 1
if dakika >=60 then
dakika =0
saat=saat+1
if saat >= 24 then
saat=0
Endif
Endif
Goto ark_sondur
dak_azalt:
dakika=dakika - 1
if dakika >=60 then
dakika = 59
saat=saat - 1
if saat >= 24 then
saat=23
Endif
Endif
ark_sondur:
For i = 1 to 25
pause 10
next i
guncelle = 1
Goto kontrol
Disable
tickint:
ticks=ticks +1
if ticks < 61 then tiexit
ticks =0
saniye = saniye + 1
if saniye >= 60 Then
saniye=0
dakika = dakika + 1
if dakika >= 60 Then
dakika=0
saat = saat + 1
if saat >= 24 Then
saat=0
Endif
Endif
Endif
guncelle=1
tiexit:
INTCON.2=0
resume
Endsaat.zip (http://www.dostevi.com/saat.zip)
burada pause komutu yok 1 saniye nasıl ölçülüyor ben onu anlamadım yani kesme nedir kısaca anlata bilirmisin
Haftalardır kafamı karıştıran soruya cevap buldum gibi. Ama bazı şeyleri netleştirmek istiyorum. Şimdi sizin yazdıklarınıza bakılırsa pic sadece standart basit ve sürekli tekrarlı işleri sırayla yapan bir eleman. Yani bir plc gibi birden fazla kaynaktan girdi yapıp bu girdilere göre çıkışlarında işlem yaptırabileceğimiz bir alet değil. Doğru anlamış mıyım? Peki birden fazla işlemi yaptıramanın hiç yolu yok mu? Yani birden fazla kaynaktan gelen datayı girişleri sıraylada olsa işleyemez miyiz? Bu benim için önemli çünkü otomasyon ile ilgili bir bölümden mezunum ve başlangıç olarak pic düşünüyordum ama vereceğiniz cevaba göre plc ye yönlenmek daha mantıklı olacak gibi.
Saygılarımla
Cok hızlı calıstıgından cok kısa surelerde cok fazla işlem gercekleştirebilir. Ve sen aynı anda bir cok işlem yapılıyormus sanabilirsin.
Ayrıca PLC lerde de çeşitli firmaların mcu ları kullanılıyor.
Otomasyon mezunu isen zaten PLC lerden cok iyi anlaman gerekiyor. İkisini de ogrenebilirsin
çift çekirdek olmayan bir sistemde iki iş aynı anda yapılmaz PLC lerdede aynı şey geçerli
PLC lerin bir programı baştan aşağı işletmeleri için geçen bir döngü süresi vardır 3-4ms gibi ve bu programının boyutuna göre değişir
şimdi PLC saniyede birkaç yüz kere programı işletip gerekli girişlere karşı programındaki mantığa göre gerekli çıkışları verdiği için sen aynı anda birçok işi yapıyor zannedersin (haliyle saniyede birkaçyüz kere olan birşeyi gözünle bakarak anlayamazsın)
pic ile (yada başka mcu ile) donanımını tasarlayıp programını yazabiliyorsan PLC lerden çok daha ucuza çok daha fazla iş yaptırabilirsin
PLC lerin amacı insanların donanım kısmı ile fazla uğraşmaması LADDER ile sadece kumanda devrelerini bilen kişilerin bile kullanabilmesi kolaylığı, standart kumanda devrelerinin yerini alması vs.dir.
MCU programlamak ile PLC kullanmak arasındaki fark
ASM ile program yazmak ile BASIC ile program yazmak arasındaki farka benzer
16f877 de hard pwm üreteci vardır.
ilgili registerler kurulduğu zaman programdan bağımsız çalışır.bu vesile ile pic aynı anda başka işlere koştururken pwm çıkışını kesintisiz verebilir.
başka bir hareket bilmiyorum.
saygılar.