gerçek zamanlı çizim

Başlatan asi67670, 21 Mayıs 2011, 00:17:14

asi67670


merhaba arkadaşlar bitirme projemde son aşamaya gelip son rütuşları yapmaktayım. bu projem de picproje sitesinin bana faydalarını unutmamak gerektiğinin bilincindeyim..

fakat bir sorum daha var siz değerli arkadaşlarıma. grafik lcd ekranın 1 ve 2 satırını spo2 değeri nabız değerini ve vücut sıcaklığını yazmak için kullanmaktayım.3,4,5,6,7,8 satırlarını ise grafik için kullanmaktayım.
               Fakat şöyle bir sorunum var nabız değerini hesaplarken portc.0 a gelen 1 değerinin 5 saniye ile sayarak bunu 12 ile çarpıp dakikadaki atımını bulmak mümkün fakat burda nabız değerinin beklerken aşağıda grafik çizilmiş halde duruyor. bu grafiği de  gerçek zamanlı çizmek istiyorum..

yani grafik çizerken yukarıda ki nabız için olan  beklemeyi ortadan kaldırmak mümkün mü?

o bekleme süresini alt program tarzı veya başka birşey ile iptal etmek mümkün müdür?

özetle grafiği çizerken nabız için olan sayma işinide diğer bir tarafdan yapmak mümkün müdür?

Maxim

mümkün ama kodun son halini görmek lazım ona göre birşeyler çıkarbilir.

asi67670


Maxim

bütün hafta sonu dışardaydım bakamadım

bakalım doğrumu anlamışım :
counter komutunda "sayac = Counter PORTC.0,2000"
portc girişini sayarken geçen 2 saniye sırasında işlemci başka birşey yapmıyor
o yüzden grafikte beklemeye uğruyor ?

evet mümkün
bu gibi durumda interrupt kullanmak lazım
birşeyler yapmaya çalışıcam fakat sistemin çalışmasını biraz detaylı anlatırmısın
nereden ne zaman ne okuyoruz?

asi67670

aslında çok basit bir işleyişi var programın
program grafik çizme nabız ve nabız iel bağlantılı olarak oksijen saturasyonu hesabını yapıyor. nabız için bekleme süresini ben 10 sn filan yapmak istiyorum ama onu 10 sn yapınca da grafik çizmiyor benim istediğim ise nabız için beklerken de grafiği çizmesini  sıcaklığı ölçmesini ve istiyorum.nabız için beklemeyi iptal edip ama onuda başka tarafdan yapmasını istiyorum.bekleme yapmasını benim programın akışını engellemesini istemiyorum..

Maxim

gereksiz bazı şeyleri toparladım düzenledim çünkü picte yer kalmamıştı
birde soru işareti koyduğum yerleri açıklarmısın? anlamsız birkaç satır var

asıl problem teşkil eden frekans sayma işlemine daha bakmadım .
count komutu kalkacak onun yerine interrupt kullanılacak .

birde her loopta başa dönüp ekran temizleniyor onada çözüm bulmak lazım, kıpraşma olur böyle sürekli .



Device 16F877A
Xtal=4

Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_ON, PWRTE_ON, WDT_OFF, XT_OSC

               
        TRISA=%11111111
        TRISB=%00000000
        TRISC=%10000000
        TRISD=%00011111
        CMCON =7
        ADCON1=%10000010   
           
Declare LCD_DTPort=PORTB
Declare LCD_RSPin=PORTD.5
Declare LCD_ENPin=PORTD.7
Declare LCD_RWPin=PORTD.6
Declare LCD_CS1Pin=PORTE.2
Declare LCD_CS2Pin=PORTE.1
Declare LCD_Type=GRAPHIC   
Internal_Font = On
Font_Addr = 0
DelayMS 250
Cls
       
        Print At 2,7,"HAZIR"     
        Print At 4,4,"ANKARA 2011"       
        Print At 6,1,"ANKARA UNIVERSITESI"
        DelayMS 590         

Dim sayac As Float
Dim kalp As Word  '?? bu nedir ?
Dim M As Word
Dim M2 As Word
Dim M3 As Word
Dim M4 As Word
Dim ADVAL As Word
Dim degisken1 As Float
Dim degisken2 As Float
Dim akk As Float
Dim spo2 As Float
Dim spo22 As Word
Dim RAMPTR2 As Word
Dim SAMPLES[128] As Word
Dim x As Byte
Dim y As Dword
Dim x2 As Byte
Dim y2 As Dword
Dim xx As Byte
Dim xmax As Word
xmax=128
Dim ymax As Word
ymax=1024

        kalp=0  '?? bu nedir ?
        M=0
        M3=0
        M2=0
        M4=0

ilk:
    Cls
       
    Print At 1,2,"Isi"   
    Print At 1,15,"SPO2"   
    Print At 1,8,"Nabiz"
    Print At 2,1,Dec1 akk,"c"       
    Print At 2,9,Dec M2   
    Print At 2,15,"%",Dec spo22   

SON:
    SAMPLES[RAMPTR2]=ADIn 0
    DelayMS 8
    y2=36 * SAMPLES[RAMPTR2] / ymax
    y2=58 - y2
    x2=RAMPTR2 * 128/xmax
    Plot y2,x2
    RAMPTR2=RAMPTR2 + 1
    If RAMPTR2>127 Then GoTo loop
    GoTo SON

loop:           
    RAMPTR2=0
    M=0     
    sayac = Counter PORTC.0,2000   'kalkacak
   
    M= sayac * 30     
    M4=M+M4  ' ?? M4 = 0 ??
    M3=M3+1   ' ?? M3 = 0 ??   
    M2=M4/M3                     
           
    ADVAL = ADIn 1
    degisken1=304 - ADVAL   '' ?? 304 ten analog girişi çıkar değişken1 e at
    degisken1=ADVAL * 0.2262  '' ?? sonra analog girişi 0.2262 ile çarp tekrar değişken1 e at?
    degisken2=degisken1 + 25
    akk=degisken2 - 35
   
         
    spo2=140/M2
    spo22=100-spo2
   
    If spo22<97 Then spo22 = 97
    If spo22<98 Then spo22=spo22 + 0.3     
   GoTo ilk                   
         
Include "font.inc"   

ferit06

@asi67670


Bu projeyi bu şekilde kaynakları hovardaca kullanarak bitirseniz bile hocalarızın yerinde olsam bu projeye geçer not vermem.

Projenizde ne yapacağınıza emin olun,  Örnek aldığınız projede ne yapıldığını iyice inceleyin ve kendinize göre geliştirme yapın. Daha önce başka bir mesajınızdaki(https://www.picproje.org/index.php/topic,33445.0.html) önerilerimi dikkate alıp alıp almamak tabiki size kalmış...

asi67670

ferit arkadaşım biizm okulda nasıl hocaların olduğunu biliyor musun da geçer not vermem tarzı bir cümle kurma gereksinimi duyuyorsunuz acaba. okulumuzda pic programlama yada donanaımla alakalı en ufak ders bile yok siz tutuş bana gerçer not vermez mişiniz böyle bir şeyi söylemeye hakkınız yok

ferit06

tamam geçebilirsin hayırlı olsun...

asi67670

teşekkür ederin teveccühün için

asi67670

kalp komutunu daha sonra ki işlemlerde kullanmadım programın son hali olamdığı için o şekilde olmuş ona gerek yok diğer M2 M3 M4 olayıda nabız ölçümünü alırken nabızı ortlama alarak hesaplamak için yazılmıştır. interrupt komutu nasıl oluyor ne işlem yapıyor örnek programlar varsa paylaşır mısınız?