avatar_jun

En Düşük enerji ile çalışan pic hangisi

Başlatan jun, 17 Mart 2012, 20:55:46

jun

Sayın arkadaşlar rf kontrol üzerinde çalışıyorum ve pic olarak f628 seçtim.Fakat  verici kısmını değilde alıcı kısmını 12 volt alkalin pil ile çalıştırmayı düşünüyorum fakat pilin dayanma süresi hakkında bir bilgim yok.Eğer tecrübe etmiş arkadaşlar varsa deneyimlerini paylaşırlarsa sevinirim.Diğer bir konu f628 kullanmasam onun yerine düşük güç ile çalışan pic işlemci hangisidir?

rexo

16F88 kullanabilisin

      Min            Max
      2V             5.5V

jun

peki 12 volt alkalin pil (pic sadece gelen data yı okuyacak,led vs... yok) ne kadar dayanır bilginiz varmı?

greatgonzo

Jun kardeşim düşük enerji tükeriminden bahsederken gerilimden ziyade akım olarak anladım. Şöyle bir tartışma var ve ETE hocamızın bir hesabı var. Zannedersem sana fikir verecektir.

http://etepic.com/index.php?topic=226.msg2146#msg2146

Pek çok pic 2 ila 5 v arasında çalışır. Datasheetlerdede bunu görürsün. Zaten 12 v pille besliyorsan regülasyonla 5v gerilime indireceksin ki piclerin en stabil olduğu gerilimdir. Bunda bir sorunun yok tüm piclerde sorunun yok. Akım olarak tüketimine bakman gerekecek ki pil ömrünü tayin eden husus budur. Rexo arkadaşımızın önerisi bence iyidir. 16f628a dan daha pahalı değildir ama "nanoWatt Technology" olarak işaretli bir pictir. Klavuzunda şöyle yazar...

Low-Power Features:
• Power-Managed modes:
- Primary Run: RC oscillator, 76 μA, 1 MHz, 2V
- RC_RUN: 7 μA, 31.25 kHz, 2V
- SEC_RUN: 9 μA, 32 kHz, 2V
- Sleep: 0.1 μA, 2V
• Timer1 Oscillator: 1.8 μA, 32 kHz, 2V
• Watchdog Timer: 2.2 μA, 2V
• Two-Speed Oscillator Start-up

Bunlar gayet düşük değerlerdir ve pilli uygulamalar için bu şekilde dizayn edilmiştir. Sonrası senin amacın ve o amaca yönelik yazdığın programa bağlıdır. Şöyleki alıcı pici normalde sleep moduna sokarsın. Alıcından data geldiğinde usart kesmesi ile uyandırıp işlem yaptırırsın. Bu durumda pic yaklaşık hiçbirşey tüketmez. Rf modülde 5 mA gibi birşey tüketir. Ama 5 volt için kurduğun devre önem arzedecektir. Çünkü her devre elemanı akım çekecektir.

jun

rexo ve greatgonzo Teşekkürederim.usart kesmesini biraz daha açıklarmısınız?

greatgonzo

Usart kesmesi bir çeşit donanımsal kesmedir. Bunun olabilmesi için öncelikle pic in usart desteği olmalı. Her picte  bulunmaz ama 16f628 de  16f88 de bu arayüze sahiptir. RX ve TX olarak işaretlenen bacaklar vasıtasıyla kullanılır ve bacakları değiştiremezsin. Usart kesmesini ayarladığında rx bacağından veri geldiğinde pic kesmeye gider. Kabaca tüm işini bırakır (uyku moduda dahil ) gelen veriye odaklanır. Bu açıdan 2 faydası var teknik olarak. Biri senin enerji tasarufuna yönelik ihtiyacın. Diğeride veri yollar veya alırken pic in veriye odaklanması ve iletişimin herhangi bir problem yaşanmaması. Yani uyku modunu kullanmasanda iletişimde bu kesmeyi kullanmanı tavsiye ederim.

INTCON=%10010000   Bu ayarla genel kesmeleri ve donanımsal kesmeleri açıyorsun.

defıne ile yapılan bu tanımlar usart ile veri alıp yollamak için geçerli olan tanımlardır.

DEFINE HSER_RCSTA 90h  Alma registerini açıyorsun
DEFINE HSER_TXSTA 20h   Gönderme registerini açıyorsun
DEFINE HSER_SPBRG 25   Baud tanımlamaları 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_BAUD 2400   Baud tanımlamaları
DEFINE HSER_CLROERR 1 Usartla ilgili yazmaçların gelen veriden şişmemesi için otomatik temizlenmesi

Kesmeleri program içinde yönetmek için intcon yazmacının bazi kısımlarını symbol ile aşağdaki gibi tanımlamanı tavsiye ederim. Zira  kesmeye gittiğinde diğer kesmeleri kapatman açısından bu gerekli. Aynı anda 2 kesme olmamalıdır.

SYMBOL GIE  =INTCON.7   'genel interruptlar
SYMBOL PEIE =INTCON.6   'peripheralinterruptlar
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit

Programına başlamadan
RCIE=1     \
PEIE=1       =    Symbol ile yukarıda tanımladığın bitleri 1 yapacaksın. Böylece genel kesmeler/donanımsal kesmeler/usart kesmesini
GIE=1       /       aktif etmiş olacaksın.


Bu tanımlardan sonra programına başlamadan şöyle bir satırın olmalı.
ON INTERRUPT GOTO KESME   
KESME burada bir etikettir. Kesme olduğunda bu etikete atlamasını söyler ve programında bunu kabaca şöyle ifade etmelisin:

DISABLE  (kesmeleri durdur )
KESME:                                             (kesme etiketin, kesmede buraya program buraya sıçrayacak)
    GIE=0                                           (İntcon yazmacından tüm kesmeleri kapat ki başka bir kesme ile çakışmasın )
    hSerIn , [WAIT("ETE"),KMT]          (Bu satır usarttan gelen veriyi alma komutun gelen veriyi KMT değişkenine atama yapıyor.)
    GIE=1                                           (İntcon yazmacından tüm kesmeleri aç ki yeniden kesme oluşabilsin )
    INTCON.1=0                                 (İntcon yazmacının 1 nolu bitini sıfırla. Bu bit gelen veriden dolayı 1 oldu. Kesme vektörünü     
                                                         oluşturan bittir. Sıfırlanarak sonraki usart kesmesi için boş olması sağlanıyor. )
    Resume                                         (kaldığın yerden devam et)
    enable                                           ( kesmeleri aç )

Genel mantık bu şekilde ve yeni başladıysan biraz karışık gelecektir. Umarım anlatımım genel bir fikir vermiştir. Sana son olarak tavsiyelerim şunlar olur. Burada 2 başlıkta toplanacak 2 eylem var. Bunun birincisi usart ile haberleşme diğeride kesmeler. Bunları birbirine karıştırmadan ETE hocamızın seri iletişim ve kesmeler derslerinden önce öğren derim . Teker teker dene ve sonra bir araya getir. Ayrıca kullancağın pic önemli. Ben bu kodları zannedersem 628a için yazdım. Mesela 628a işlemcisi kesmeye gitmek için en az 2 byte veriye ihtiyaç duyar. Sonra kesme vektörüne gider bunu 16F88 için data sheetlerinden bakman lazım.




Powered by EzPortal