Zaman ayarlı pic

adiga

Üye
Katılım
23 Ocak 2009
Mesajlar
154
Puanları
1
Yaş
35
Arkadaşlar, random (rastgele) bir zamanda çalışıp random (rastgele) bir zamanda duran pic yazılımını nasıl yapabiliriz.
Örneğin ;
programa 1-5 dakika süresi içerisinden bir süre seç ve çalış dedik. Program random olarak 3 dakikayı seçti ve 3 dakika süre geçtikten sonra devre çalıştı. Daha sonra devre açık motor çalışıyor tabi, devre açılır açılmaz program motorun durması için 10 - 20 dakika süresi içerisinden bir süre seç ve dur dedik. Program 12 dakikayı seçti ve daha sonra durdu. Bu sürekli bu şekilde tekrarlanacak. Her zaman rastgele bir sayı süre seçip devreyi çalışıp durduracak. Bu nasıl yapılabilir nasıl bir pic kullanmalıyız.
 
random sayı üretmek herzaman bir sorundur.aslında hiçbir zaman random yoktur. kullanılan dile göre rando-seek komutları vardır. fakat ben adc girişi olan bir pic kullanıp ucunu anten gibi kart üzerinde uzatıp boşta bırakmanızı öneririm. havadan aldığı enterferanslarla random değerler alıcaksınız. gelen değerleri artimetik işlemlerle istediğiniz süreyi elde edersiniz
 
random sayı üretmek herzaman bir sorundur.aslında hiçbir zaman random yoktur. kullanılan dile göre rando-seek komutları vardır. fakat ben adc girişi olan bir pic kullanıp ucunu anten gibi kart üzerinde uzatıp boşta bırakmanızı öneririm. havadan aldığı enterferanslarla random değerler alıcaksınız. gelen değerleri artimetik işlemlerle istediğiniz süreyi elde edersiniz
hocam bununiçin nasıl bir kod ve hangi pic i kullanmalıyım. Bu konuda hiç bilgim yok heves ettim sadece. yardımlarınızı beklerim.
 
pic12f675 olabilir. ama az giriş çıkışı vardır. sadece motor sürecekseniz yeter.
 
pic12f675 olabilir. ama az giriş çıkışı vardır. sadece motor sürecekseniz yeter.
evet sadece motoru belirli bir süre çalışıp durduracağım. en az devre elemanı ile halletmek istiyorum işi. bununla ilgili örnek bir devre varmı acaba? bu devreyi nasıl yapabilirim.
 
arkadaşım linkte çok güzel anlatılmış.....

Bu uygulamamızda CCS C ile 0-10 arası rastgele sayı üretip 7 segment dipslay da göstereceğiz.
Uygulamamızda rastgele sayıyı devredeki buton ile üreteceğiz. Butona her bastığımızda 0-10 arasında bir sayı üretilecek ve 7 segment diplay da gösterilecek. Programın aşamalarına bakacak olursak;

Rastgele sayı üretmek için;



sayi=rand()%10;
fonkisyonunu kullanıyoruz ve üretilen değeri sayı değişkenine aktarıyoruz. Burada 0-10 arasında sayı değeri üretiliyor. Program yeniden başladığında aynı sayıları üretmesini engellemek için



srand(i++) ;
fonkisyonu içerisindeki değişkeni sürekli değiştiriyoruz.



write.eeprom(1,i);
Değiştirilen bu değeri eeprom belleğine yazarak program başlangıcında okutuyoruz. Programda aynı sayının art arda üretilmesini engellemek için ise


do
{

}
while();
döngüsünü kullanıyoruz. Bu döngüde üretilen sayı portb ye gönderilen sayı ile aynı ise tekrar üretiliyor.



Ugyulamanın CCS C kodu


#include <16f628A.h>
#fuses NOWDT,INTRC_IO
#use delay(clock=4000000)

#include <stdlib.h>
#define tus pin_a0

int i=0,sayi=0;

void main()
{
set_tris_a(0x01);
set_tris_b(0x00);
output_b(0x00);

while(true)
{
if(input(tus))
{
while(input(tus));
delay_ms(100);
do
{
i=read_eeprom(1);// EEPROM'un 0x01 adresi okunuyor
srand(i++); //farklı sayı üretilebilmesi için değişmesi gerekiyor
if(i==100)i=0;
write_eeprom(1,i); // EEPROM'un 0x01 adresine degişken yazılıyor
sayi=rand()%10;//0 ile 10 arasında rastgele sayı üretiliyor
}
while(sayi==input_b());//üretilen sayı aynı ise tekrar üret
output_b(sayi);
}
}
}
 
arkadaşım linkte çok güzel anlatılmış.....

Bu uygulamamızda CCS C ile 0-10 arası rastgele sayı üretip 7 segment dipslay da göstereceğiz.
Uygulamamızda rastgele sayıyı devredeki buton ile üreteceğiz. Butona her bastığımızda 0-10 arasında bir sayı üretilecek ve 7 segment diplay da gösterilecek. Programın aşamalarına bakacak olursak;

Rastgele sayı üretmek için;



sayi=rand()%10;
fonkisyonunu kullanıyoruz ve üretilen değeri sayı değişkenine aktarıyoruz. Burada 0-10 arasında sayı değeri üretiliyor. Program yeniden başladığında aynı sayıları üretmesini engellemek için



srand(i++) ;
fonkisyonu içerisindeki değişkeni sürekli değiştiriyoruz.



write.eeprom(1,i);
Değiştirilen bu değeri eeprom belleğine yazarak program başlangıcında okutuyoruz. Programda aynı sayının art arda üretilmesini engellemek için ise


do
{

}
while();
döngüsünü kullanıyoruz. Bu döngüde üretilen sayı portb ye gönderilen sayı ile aynı ise tekrar üretiliyor.



Ugyulamanın CCS C kodu


#include <16f628A.h>
#fuses NOWDT,INTRC_IO
#use delay(clock=4000000)

#include <stdlib.h>
#define tus pin_a0

int i=0,sayi=0;

void main()
{
set_tris_a(0x01);
set_tris_b(0x00);
output_b(0x00);

while(true)
{
if(input(tus))
{
while(input(tus));
delay_ms(100);
do
{
i=read_eeprom(1);// EEPROM'un 0x01 adresi okunuyor
srand(i++); //farklı sayı üretilebilmesi için değişmesi gerekiyor
if(i==100)i=0;
write_eeprom(1,i); // EEPROM'un 0x01 adresine degişken yazılıyor
sayi=rand()%10;//0 ile 10 arasında rastgele sayı üretiliyor
}
while(sayi==input_b());//üretilen sayı aynı ise tekrar üret
output_b(sayi);
}
}
}
Hocam bahsettiğim sisteme göre örnek bir devre var mı acaba? İlginiz için teşekkürler.
 
Pici programlaman gerekiyor.
Pic programlayıcı 50TL ve üstü.
Yada biri pici programlayıp sana gönderecek.
Kodu sen yazamıyorsun, kodda bulacak.
Devre kurmayı biliyor musun,
hayır ise kuracağın devre biraz zor çalışır.
Her şeye hazırlıklı olmalısın.
Yani öncelikle basit işlerden başlayıp
belli süre çalışman uğraşman öğrenmen lazım.
Yardımlarla bahsettiğin gibi bir devre yapmanda mümkün ama
çok hevesli olman ve insanlara bildiklerini anlattıracak gayreti göstermen lazım.
 
Pici programlaman gerekiyor.
Pic programlayıcı 50TL ve üstü.
Yada biri pici programlayıp sana gönderecek.
Kodu sen yazamıyorsun, kodda bulacak.
Devre kurmayı biliyor musun,
hayır ise kuracağın devre biraz zor çalışır.
Her şeye hazırlıklı olmalısın.
Yani öncelikle basit işlerden başlayıp
belli süre çalışman uğraşman öğrenmen lazım.
Yardımlarla bahsettiğin gibi bir devre yapmanda mümkün ama
çok hevesli olman ve insanlara bildiklerini anlattıracak gayreti göstermen lazım.
valla hocam hevesliyim de insanları nasıl ikna ederim bilemiyorum. fakat güzel bir dua edip sevap hanesine +1 ekletebilirim :) bu devreyi yapmak istiyorum. lütfen bana yardım edin.
 
Öyle olmuyor.
Önce işini yapıp sonra dua etme yöntemi daha çok tercih ediliyor.

Misal "pic programlayıcım yok,
x şehirde olan varsa,
şu pice bu yazdığım-bulduğum programı
atıp yollayabilecek olan var mı?" dersen,
bunu yapacak adam bulursun,
ama bana şu işi yapacak devreyi bulun-yapın yollayın dersen
onu bulmak zor.

Yani sen araştırıp soracaksın
şurası nasıl oluyor, burası nasıl çalışıyor,
şu şöyle ....

Kısaca birisi bunu yapmışsa devresi şu diye nokta atışı söyler
sende aynısını yapmaya çalışırsın, herhalde.
 

Forum istatistikleri

Konular
128,134
Mesajlar
915,318
Kullanıcılar
449,852
Son üye
ddknght

Yeni konular

Geri
Üst