PIC ile 2 - 3 işlem aynı anda...

Kasıyor derken?

#use rtos(timer=0, minor_cycle=1ms)

Buradaki 1ms ile oyna istersen biraz.. Belki düzelme olur..
 
Kasıyor derken?

#use rtos(timer=0, minor_cycle=1ms)

Buradaki 1ms ile oyna istersen biraz.. Belki düzelme olur..


yani şu şekilde aslında...

Kod:
#use rtos(timer=0, minor_cycle=10ms)
#task(rate=10ms, max=10ms)
void deneme1()
{
      if(input(buton)==1)
      {
            buton kapalı ise ilk işlemi yap...
               1 sn bekle
            buton kapalı ise son işlemi yap...
      }


#task(rate=10ms, max=10ms)
void deneme2()
{
      if(input(buton)==1)
      {
           grafik ekrana işlemler yap...
      }
 
eğer programda kesme alt rutini kullanıyorsan ki genelde rtos olayında kaçınılmaz gibidir kesme rutininde asla ve asla bekleme yapmamaya çalış. birden fazla kesme kullanıyorsan kesme önceliklerini çok çok iyi ayarla, ilgili kesmeye girince o ksemeye ait enable bitini clear yap çıkarken tekrar set et gibi. bu noktalara özen gösterdiğin sürece ve yapabilirsen bir in circuit debugger kullanırsan sorunsuz rtos programlar yazarsın
 
eğer programda kesme alt rutini kullanıyorsan ki genelde rtos olayında kaçınılmaz gibidir kesme rutininde asla ve asla bekleme yapmamaya çalış. birden fazla kesme kullanıyorsan kesme önceliklerini çok çok iyi ayarla, ilgili kesmeye girince o ksemeye ait enable bitini clear yap çıkarken tekrar set et gibi. bu noktalara özen gösterdiğin sürece ve yapabilirsen bir in circuit debugger kullanırsan sorunsuz rtos programlar yazarsın


Çok teşekkür ederim yanıtın içn fakat circuit debugger nedir ?
 
In Circuit Debugger.. Türkçesi devre üzerinde hata ayıklama gibi bişey.. Pdfyi yanlış hatırlamıyorsam programlama pinlerini, eepromdan bikaç baytı, bikaç program satırı ve 1-2 stack i feda ederek devre üzerindeki sistemin işleyişini pcde görüyorsun.. Ama hiç kullanmadım ben şahsen.. :) Yerine kendi oluşturduğum yapay seri portlu hata ayıklama sistemini kullanıyorum..

MAIN_LOOP bu ICD nin nasıl kullanıldığı hakkında detaylı bilgi varsa verirsen sevinirim.. :) Kendi sistemlerimde kurulu bir eeprom düzeni var.. Bunları yer değiştirmek büyük sorun.. Bu debug modda hangi baytları kullanıyor.. Biz mi belirliyoruz onu? PicKit 2 gerekiyor sanırım.. Bende var, yan sanayi.. Ama denemedim hiç ICDyi.. MPLAB da asmde yazıyorum..
 
In Circuit Debugger.. Türkçesi devre üzerinde hata ayıklama gibi bişey.. Pdfyi yanlış hatırlamıyorsam programlama pinlerini, eepromdan bikaç baytı, bikaç program satırı ve 1-2 stack i feda ederek devre üzerindeki sistemin işleyişini pcde görüyorsun.. Ama hiç kullanmadım ben şahsen.. :) Yerine kendi oluşturduğum yapay seri portlu hata ayıklama sistemini kullanıyorum..

MAIN_LOOP bu ICD nin nasıl kullanıldığı hakkında detaylı bilgi varsa verirsen sevinirim.. :) Kendi sistemlerimde kurulu bir eeprom düzeni var.. Bunları yer değiştirmek büyük sorun.. Bu debug modda hangi baytları kullanıyor.. Biz mi belirliyoruz onu? PicKit 2 gerekiyor sanırım.. Bende var, yan sanayi.. Ama denemedim hiç ICDyi.. MPLAB da asmde yazıyorum..

pickit2 yan sanayide olurmu bilmem ama programlayıcı devre üzerinde bağlı iken çalıştırılıyor. steve wright diye bir vatandaşın yazmış olduğu programı kullanıyorum. bütün registerların durumunu step by step gösteriyor.
 
pickit2 yan sanayide olurmu bilmem ama programlayıcı devre üzerinde bağlı iken çalıştırılıyor. steve wright diye bir vatandaşın yazmış olduğu programı kullanıyorum. bütün registerların durumunu step by step gösteriyor.

İnternette bulamadım bir link atabilir misin? Ya da konuyla ilgili bi döküman varsa o da olur.. TMR0 kesmeli yapay seri portlarda problem çıkarıyor mu? Merak ettim şu debugger ı.. :)
 
Arkadaşlar Merhaba

Bir şey soracağım size , PIC aynı anda iki üç işlemi yapamaz mı ?

Mesela ben bir proje gerçekleştiriyorum. Grafik ekranlı falan. Her şey güzel çalışıyor. Ama ana programım haricinde grafik ekranın bir köşesinde Saat, bir köşesinde Takvim ve bir köşesinde de Termometre de gösterilsin istiyorum. O olayı kabul ediyor mu ?

Cevaplamanızı rica ederim. Çok teşekkür ederim şimdiden.

Kesme ile de denedim ama biliyorsunuz ki timer ve ext kesmesi var. yada bildiğiniz başka pic ler var mı ?
Bu işlemi yapmak icin aslında RTOS 'a gerek yok..

LCD nin XY kordinatlarına Sırası ile zamanı , Takvimi Termoetreyi yazdırabilirsin..
Bu işlemler zaten Saniye bazında olucagı icin Herşey aynı anda oluyormus gibi sorunsuz calısır..

Ayrıca Programlarında Ana dongu icinde , veya timer icinde bir sayac kullan.. 1us , 1ms , 1sn gibi işlemler yapmak icin..
Delay gibi programı durduran komutlar kullanma..

Ornek

portb =FF
delayms 1000
portb=00
... Diğer Kodlar
...


Gibi birşey yapmak yerine

if ms>1000 then
ms= 0
portb = ~portb
endif
....
....Diger Kodlar

yazarsan portb yi 1 sn aralıkla yakıp sondururken Diger kodlarında sorunsuz calısmasını saglarsın
bu cok basit bir ornek tabi..
 
İnternette bulamadım bir link atabilir misin? Ya da konuyla ilgili bi döküman varsa o da olur.. TMR0 kesmeli yapay seri portlarda problem çıkarıyor mu? Merak ettim şu debugger ı.. :)
tekinin oglu vallahi merak ettim,simdiye kadarki programlarını asm kullanıpta debuger kullanmadan nasıl gerceklestırdın.cok zor ıs hemen hemen hıc hata yapmadan program yazman gerekır.anlasılan bu zamana kadar becermıssın helal valla.bence en azından bir tane pickit3 al ve oh be dunya varmıs de.hatta imkanın varsa dahada ıyısını al.cunkı pickit3 de birden fazla break point tanımlanamıyor.
 
Bu işlemi yapmak icin aslında RTOS 'a gerek yok..

LCD nin XY kordinatlarına Sırası ile zamanı , Takvimi Termoetreyi yazdırabilirsin..
Bu işlemler zaten Saniye bazında olucagı icin Herşey aynı anda oluyormus gibi sorunsuz calısır..

Ayrıca Programlarında Ana dongu icinde , veya timer icinde bir sayac kullan.. 1us , 1ms , 1sn gibi işlemler yapmak icin..
Delay gibi programı durduran komutlar kullanma..

Ornek

portb =FF
delayms 1000
portb=00
... Diğer Kodlar
...


Gibi birşey yapmak yerine

if ms>1000 then
ms= 0
portb = ~portb
endif
....
....Diger Kodlar

yazarsan portb yi 1 sn aralıkla yakıp sondururken Diger kodlarında sorunsuz calısmasını saglarsın
bu cok basit bir ornek tabi..


Teşekkür ederim bilgileriniz için. ilkdefa bambaşka farklı bir yöntem sunan oldu. Peki bu durumu biraz daha olsun açabilirmiyiz rica edersem. Yani en basiti aynı anda iki ledi farklı zaman aralıkları ile yakıp söndüren ufak bir yazılım yazarmısınız en basitinden. konuyu anlamak için
 

Forum istatistikleri

Konular
128,214
Mesajlar
915,865
Kullanıcılar
449,995
Son üye
osmanguney15

Yeni konular

Geri
Üst