ACİL Pic ten pic e sayı göndermek

Başlatan demirciaytac, 19 Ocak 2006, 08:42:01

demirciaytac

Arkadaşlar ben bir picte okuttuğum örneğin 354 sayısını diğer kullandığım pice göndermek ve bu elde ettiğim sayıyı kullanarak başka bir döngü yaratmak istiyorum.sanrım tek pic iki ayrı döngüyü yapamıyor. iç içe oluyor. ben aynı anda yapmak istiyorum. bu veri gönderimini sağlayacak pic basic pro dilinde ne tür bir komut var. 2 tane 16f84 kullanıyorum. en fazla 2 tane kablo ve 2 tane bacak ayırmak istiyorum.araya fazladan bir entegre istemiyorum. projem için gerkli de acil yardımlarınızı bekliyorum. bu arada sayılar 256 ya kadar tanınıyor byteta. yeni bir öğrenici olarak ve benim gibi bu konuya takılanlar olduğunu düşnerek byte değil de word olarak tanımlamalarını öneririm.sorun çözüyor.saygılarımla.Aytaç

Erol YILMAZ

Tek Pic'in 2 ayrı dongu yapamamasını anlayamadım.
Bu senin tasarımınla alakalı birsey. Tek Pic ile bu is olmuyor demek için acele ediyorsun. Ugrasmadan 2 pic ile yaparım diyebilirsin tabii.
O zaman da iletisim gibi problemler çıkar karşına.

Sen ne tip bir program yapmak istediğini anlatirsan yardimci olabiliriz.
Iki Pic arasında direkt kablo bağlantısı ile tek pinden  veri gönderimi yapabilirsin. Rs232 gibi.

demirciaytac

yani benim bildiğim pic bir döngüyü yaparken diğerini yapamaması. iç içe döngü koyarım ama öle olmaz. benim program kısaca şöle olacak:
bir pic sensörden veri okuyor sürekli.mesela 1, 2, 3, 4 diye ve bu 400 e kadar gidecek.400den sonra 0 olacak.bunda problem yok. bunu okuttum.bu okuma işlemi zaten bir döngü istiyor. veriyi okurken de aynı zamanda buzzerdan ses almam gerekiyor ama bu sesin frekansı elde edilen sayı arttıkça artacak. bu da döngü istiyor.2 pic kullanıcam.tek picle çözemedim.

Petek

Alıntı yapılan: "demirciaytac"yani benim bildiğim pic bir döngüyü yaparken diğerini yapamaması. iç içe döngü koyarım ama öle olmaz.
Multitasking yapacaksın öyle mi 8O
Alıntı Yapbenim program kısaca şöle olacak:
bir pic sensörden veri okuyor sürekli.mesela 1, 2, 3, 4 diye ve bu 400 e kadar gidecek.400den sonra 0 olacak.bunda problem yok. bunu okuttum.bu okuma işlemi zaten bir döngü istiyor. veriyi okurken de aynı zamanda buzzerdan ses almam gerekiyor ama bu sesin frekansı elde edilen sayı arttıkça artacak. bu da döngü istiyor.2 pic kullanıcam.tek picle çözemedim.
16F84'ü hala bulabiliyormusun? 16F628 kullan. buzzer için de pwm'i kullan. 400 frekansı ayırt edebilecek bir kulağın varsa bence bu ülkede heba olma, elektronik gibi gereksiz uğraşıları da bırak ve git Pavarottinin çırağı ol :)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

demirciaytac

pazartesi proje olarak vermem lazım fakat tıkandım kaldım burda bir yeni başlayan ve öğrenen olarak:(
16f84 var evet baya. yeni başlayanlar için en temel oymuş.yeni bir pic kullanmam onu öğrenmek için vakit harcamam demek ama o vakit yok ben de.elimizdeki bu:))
ya hani arabalar geriye doğru giderken dıt dıt diye ses veriyolar ya sonra işte duvara yaklaşınca dıt dıt artarak gidiyo.çarpıca dııııııııt oluyo:))işte öle bir döngü istiyorum.sonuçta pause vermem lazım aralarda ki aarlayabiliyim.pause verince sensör okumayı kaçırıyo arada.yanlış okuyo.farklı piclerde yapmam lazım gibi geldi.başka bir yol da bekliyorum.yardımlarınızaaçığım:)

Erol YILMAZ

Petek in dedigi gibi PWM kullanırsan istedigin frekansa ayarlarsın. ornegin 2 kHz. istedigin zaman dur-kalk komutu verirsin.

Dahili osc ve MCLR ucu da baglanti kolaylıgı saglar.

Tabii bunlar 16F628 icin.

Petek

16F628 ile 16F84 birbirine çok benzer. 16F628 de cmcon=7 yapınca 2 kat kapasiteli 16F84 elde etmiş olursun. 2 tane 16F84 ü haberleştirmek için harcayacağın zamanda 16F628 ile herşeyi bitirirsin. pwm donanımdan yapıldığı için sen diğer işini görürken pwm buzzera gerekli frekansı gönderiyor olacaktır.

dıt dıt dııt dııt dııııt dııııt bu bahsettiğin biraz süreyle alakalı ve 400. okumada bunun süresi en uzun olacak öyle mi? Bunu ödevi veren hocanız mı istedi? Mantığı neymiş ve size ne kazandırmayı amaçlamış?

arada pause verince sensör okuması nasıl kaçırılıyor? Sensörden gelen bilgi nasıl geliyor da sen diğer işi yapacağım diye bunu kaçırıyorsun?
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

demirciaytac

sensörden gelen bilgi digital input olarak geliyor.1 ve 0 diye.ben 1 leri sayarak inputun değerini bulmuş olucam.bu sayma işlami için de bir while wend komutu içine yerleştirilmiş if endif silsilesini kullandım. tabi bir de 3 digitlik göstergem var bu while wend içerisinde onları ekrana veriyorum. entegre kullanmadım digit gösterge için.kendim programladım. onu da bildiğiniz üzere loop içerisinde gösterebiliorsun ancak.sırayla göstergeleri hızla yakarak oluyor.(ilk önce yüzler sonra onlar sonra birler). işte 2 tane döngüsel olay var ama bir de zil işin içine girince 3 oluyor.zil istediğim gibi çalmıyor.her bir sayı okuma için çalıyor. işte ben bu zımbırtıdan yırtmak için ikinci bir pice göndermeyi düşündüm ama dediğini şimdi araştırıcam.pici değiştirmek çözüm mü?emin misin?

mcan

valla programlarda şu an için çok anlamam ama petek in dediği çok doğru ilk olarak araştırmadan gittim 16f84 aldım sonra bunla pwm üreteyim derken baktımki aynı boyutlarda daha gelişmiş pic16f628 varmış gittim almaya neredeyse aynı fiyattı 1milyonmu ne fark vardı,sadece ek özelliği değil hafızası dahada genişmiş 16f84 ü boşuna almış oldum,belki 16f628 i de boşuna almışımdır :D

picusta

Interrupt kullanmayi denedin mi?

aster

Selam,
bence bir BGA al, polofonik müzik bile çaldırırsın, hocan da seni asistanı yapar

demirciaytac

şu anda onu araştırıyorum nasıl olur diye.biri daha söledi ama algoritma olarak nasıl kullanılabilir interrupt?

mcan

bir sayı belirle bunu göstergeye yazdır ,pwm ile sireni kur sireni kurdukdan sonra gene göstergeye git yazdır yani sonsuz döngü yap ,interruptuda yükelen kenara kur ve içine sayını bir artıracak komutu yaz,

sistem başlayacak gösterge 0 yazacak ona göre varsa siren ötecek her 1 geldiğinde sayın 1 artacağı için ekrana atış yansıyacak siren farklı şekilde kurulduğundan ses değişecek .....

gibi olabilirmi acaba

pwm yoksa sesi çıkarmak için bir sonsuz döngü gibi bişey yapılabilir tam olarak sonsuz döngü değil yani aynı çevrimi 10 kere tekrarlasın 11. ci inde ekranı değiştirip geri çevrime girsin ekran sonradan değişecek ama belki gözle bile görülmez gecikmesi

picusta

Bu devrede ya timer interrupt'unu kullanacaksin ya da PortB interruptu (sayiyi okumak için).
Timer interruptu dedigimiz sey çalar saat gibi. Her çalisinda PIC okudugu programi birakip, interrupt için yazilmis olan kod kismina gider ve ordaki islemleri yapar. Bitince bisi olmamis gibi programa devam eder. Kabaca böyle sonra nasil kuracagini arastirmalisin (prescaler, postscaler, interrupt vektörü(gidecegi adres), interrupt enable vs... ).
Senin algoritmada söyle yapilabilir:
while döngüsünü fazla degistirmezsin döngüye ekleyecegin satir, sayiyi okuduktan sonra çalar saati sayiya göre kuracak(veya ters orantili bir biçimde).
Sonra Interrupt Service Rutin dedigimiz yere birkaç satir kod yazacaksin.
mesela buzzer'e bagli bacagin seviyesini degistir, böylece buzzer'a giden sinyal kare dalga olacak ve sayiya göre degisecek.

CaFFeiNe

@demirciaytac

pic aynı anda iki döngü işletemiyor demişsin ve çok doğru söylemişsin yalnız şu anda kullandığın bilgisayarda aynı anda iki döngü işletemez :)(birden fazla CPU'su yoksa)

DOS zamanlarında TSR (Terminate but Stay Resident) programlama diye bir olay vardır kesmeleri kullanarak DOSta bir program çalışırken hafızada arka planda başka bir program çalıştırmaya yarardı.

aynı anda iki işlem yaptırmanın yolu kesme kullanmaktan geçer (gerçi derine inersen yine tam aynı anda olmuyor ya neyse) ve kesme kullanmayı öğrenirsen bir çok işlemi daha rahat yapabilirsin mesela tuştakımı okurken gösterge sürebilirsin aynı anda sensör okuyabilirsin vs.vs.