Km saati Tasarımı

Kayıt
30 Kasım 2010
Mesaj
99
Tepki
71
Şehir
Kocaeli Gebze
@Ali Menemen


hocam çok çok teşekkürler fikirlerin için.
8051 in ram i 128 byte. doğru. ama o sorun olmadı şimdilik. hala ram da kullanabileceğim alan sayısı gayet fazla görünüyor. o da değişkenlerin sayısından dolayı tabi. onun dışındaki şeyleri zaten code bellek te tutuyorum o konuda problem olmuyor. 32 Kbyte eeprom var.

şu anda uğraştığım olay da tam olarak hız hesaplamaları. dediğin gibi komut satırlarından dolayı meydana gelen sapmalarla uğraşıp işlemi stabil hale getirmeye çalıştırıyorum. algoritmamı söyliyeyim;

  • kesmeleri ve ekrana yazılacak şeyleri ve timer i ayarladıktan sonra kesmeleri aktif yapıp bekliyorum.
  • her 1000 mikro saniyede timer kesme üretiyor ve miliSaniye ismindeki bir değişkeni bir artırıyor. Bu sırada eğer milisaniye 5000 olduysa (5 sn) yani 5 sn dir röleden tetik gelmediyse hız değişkenim ve milisaniye değişkenim sıfırlanıyor. ekrana da 0 yazılıyor.
  • röle den gelen sinyali diğer bir kesme ile alıyorum ve önceden belirlenmiş teker çevre bilgisi ile milisaniye bilgisini kullanarak saatteki hızı hesaplatıp ekrana yazdırıyorum.

    işte burda sorunlar başlıyor. ekrana yazdırırken bir kesme gelirse ekranda hiç hoş görüntüler oluşmuyor :D çünkü ekrana yazdırma komutlarım çok zaman alıyor. bu işlemleri diğer bir kesme gelmeden önce bitirmiş olması gerekiyor. koca algoritmayı üç satırda bitirdim bu arada.

ayrıca donanımda da sıkıntılar yaşamıyor değilim tabi. röle yerine şimdilik bir buton bağladım. ama onda da basıp çekmeler sırasında parazitler oluşuyor sanırsam ve işlemcide sıkıntılar meydana geliyor.

söylemek istediğim şey şu, bu saatten sonra entegreyi değiştirmek hiç iyi fikir değil benim için. çünkü önümüzdeki 1 ay içinde bitirip teslim etmem gerekiyor. ve pic hakkında hiç bişey bilmiyorum :D
mevcut sorunları düzeltip işi bu entegre ile bitirmeye çalışıcam. işlemci bir saat darbesini 1 mikro saniyede işliyor bu da yeterli bir hassasiyet gibi geliyor bunu. yani senin de zaten dediğin gibi GHz cinsinden bi işlemcimiz yok. 16f87x serisinde bu hız ne kadar onu bilmiyorum gerçi?
 
Scudo

Piskiletci

Forum Bağımlısı
Kayıt
20 Ağustos 2008
Mesaj
2.855
Tepki
2.578
Bisiklet
Corratec
@Selahattin Porsuk

Saat darbesinin işliyor dediğiniz şeyi komut çevrim hızı olarak anladım, bu değer 8951'de 1 mikro saniye,16f87X'de 200 nano saniye. CMOS işte burda devreye giriyor: Düşük enerji kullanımı-Yüksek performans, microchip in bu teknolojiyi kullanmasını çok seviyorum :D

Microchip hakkında pek bişey bilmiyorum demişsiniz, o zaman atmel ile yola devam. Sadece hız hesaplama kısmıyla ilgili şöyle bir öneri yapabilirim:

İşi 1 kesmede değilde 2 kesmede yapmaya çalışın. Yani 2 kesme arasındaki süreyi hesaplayıp hızı bulun. Bu arada teker her döndüğünde 1 kesme olacak. İlk kesmede timer çalışsın, ikinci kesmede timer dursun. Durunca tutulan sayı değerini bi değişkenin içine atın, o değişkenle hız hesaplaması yapın.

En basitinden hız=yol/zaman. İki kesme arasında en fazla teker çevresi kadar dönebilir bu değere 200 diyelim ve bu arada da 100 mikro saniye zaman geçmiş olsun. Bulacağımız değer hız formülünden: 200/100=2 olacaktır. Hızımız 2cm/ms. Mikro saniye, saniyenin milyonda biri, o yüzden 2 kesme arasındaki süreyi bir değişkenin içine atıp 1.000.000 a bölmemiz gerekir. Daha sonra aynı değeri saat cinsinden yazmak için 60 a bölersek, hız değişkenimiz saat cinsinden hesaplanmış olacaktır, tabi teker çevresini de km cinsinden yazmak gerekir.

İşte bu değerleri 2 kesme arasında hesaplayıp, ekrana yaz dersek sanırım sorun oluşmaz. Özetlersek:

-İki kesme arasındaki zamanı bul (İlk kesmede timer çalışacak, 2. de duracak ve bu değeri "zaman" değişkeninin içinde tutacak)
-Bulunan değeri saat cinsine çevirip bir değişkenin içinde tut(örn. "zaman")
-Teker çevresini km cinsinden hesapla ve bir değişkenin içinde tut(örn. "yol")
-Hız hesaplaması yap. "yol"/"zaman"
-Bulunan sonucu ekrana yaz.

Umarım bu yardımcı olur. Aynı mantığı mikro denetleyici ile voltmetre yaparken kullanmıştım. Yaptığı tek hata her voltmetredeki gibi ölçüm sapması olmuştu.
 
Kayıt
30 Kasım 2010
Mesaj
99
Tepki
71
Şehir
Kocaeli Gebze
@Ali Menemen

şimdi bu işlerle alakalı kodları aynen kopyalıyorum. tabi dün sana onları yazdıktan sonra baya bi değişiklikler yapmıştım. 4 te yattım gece ne ara geçti zaman anlamadım :D

Kod:
int miliSaniye=-1, cevre=2183, hiz=0, rpm=0;

void role(void) interrupt 0     //  harici kesme0 rutini
{	
	hiz= cevre/miliSaniye*36/10;

	rpm=60000/miliSaniye;
		
	miliSaniye=0;
}

void timer0(void) interrupt 1      timer0 kesme rutini
{
	TH0 = 0xFF - 0x03;		//zamanlayıcı 1000 mikrosaniyeye kuruluyor
	TL0 = 0xFF - 0x70;	

	miliSaniye++;	

	if(miliSaniye >= 5000)
	{
		miliSaniye = 0;
		hiz = 0;
		rpm=0;		
	}
}

void main(void)
{
nokia_init();

DelayMs(5000);

nokia_gotoxy(5,0); nokia_printchar("ANLIK");
nokia_gotoxy(5,1); nokia_printchar("HIZ :");
nokia_gotoxy(8,5); nokia_printchar("km/s");
nokia_gotoxy(67,0); nokia_printchar("rpm");

TMOD = 0x01;   //timer0 16 bit modunda
P3_2 = 0;	 //harici kesme pini ilk durum için sıfır
ET0 = 1;    // Timer 0 interrupt  aktif
EX0 = 1;	// harici kesme0 aktif
//IPL = 0X02;		
IPLT0 = 1;	  //timer0 a kesme önceliği
EA = 1 ;     //genel kesmeler aktif
IT0 = 1; 		// kesmeyi düşen kenarda üretmek için
TF0 = 1;		// timer 0 bayrağı ilk değerler yüklenmesi için aktif
TR0 = 1;    //Timer0 başlat

while(1)
   {
	DelayMs(1000);
	buyukYaz(hiz);     // hızı ekrana yazdır
	rpmYaz(rpm);      // rpm ekrana yazdır
   }

}
ekrana yazdırma olayını tek bi yerde yaptım. ayrı ayrı fonksiyonların içinde ekrana yazdırma fonksiyonları çağrılmıyor. yani ekrana yazdırırken kesme gelse de kesmelerin içinde yazdırma komutu olmadığı için ekranda saçma karakterler çıkmıyor.

neyse konumuz bu değildi zaten :D
hız hesaplamak için formülüm yukarıda yazıyor. tam sayı kullandığım için hassasiyeti düşük tabi ekrana yazdırılan değer -misal hız 7,367 hesaplansa ekrana sadece 7 yazdırıyor- onunla şimdilik uğraşmadım problemim o değil yani.

hız hesapladığım satırda parantez kullansam bile hesapta saçma sapmalara yol açıyor bi türlü çözemedim orayı.
şöyle ki
Kod:
	hiz = (2183*36)/(1000*10);

	hiz= 2183/1000*36/10;
şurda yazdığım iki kodun sonuçlarını farklı buluyor. yukarıdakinin sonucunu 1 olarak buluyor, aşağıdakini de 7 olarak buluyor. bu işlem arasındaki farkı hala anlamadım. orala takılıp kaldım çözemiyorum.

hız hesaplaması için tübitak ın şu sayfasındaki formülü kullandım
(link)
tabi orda çevre bilgisine 2*pi*r formülünden gitmiş. sadece onu değiştirdim.

şu iki kesme arası zamanı bulma meselesini yapmaya üşendim. çünkü bu olay sadece ilk değer hesaplanırken problem çıkarıyor. ondan sonra zaten iki kesme arası zamanı hesaplıyor her seferinde. tabi 5 sn tetik gelmezse zaman sıfırlanıyor. bu durumda yine ilk durumdaki gibi bişey ortaya çıkıyor. ama bunu dert etmiyorum bi ara düzeltirim o sapmaları.

microchip in hızını sevdim iyimiş gerçekten. atmelin de var böyle entegreleri ama şu anda bunu bildiğim için mecburen bunu kullandım yani :D bidahaki projeleri pic lerle yaparım :D üsait bi zamanda öğreneyim de :D

şimdi şu işlem hatalarıyla uğraşmaya biraz daha devam edeyim ben :)

edit: sorunu çözdüm :D cevre bilgisini mm cinsinden tam sayı olarak veriyodum. şimdi double yapıp metre cinsinden verince formülü de ona göre ayarlayınca hesaplamaları doğru yaptı. hesaplamadaki bilgiyi (2183) parantez içinde 36 ile çarparak girince sonucu 78588 gibi buluyor ve bu da integer ın sınırlarını aşıyordu. şu durumda hesaplamayı doğru yaptım gibi :D
 
Kayıt
30 Kasım 2010
Mesaj
99
Tepki
71
Şehir
Kocaeli Gebze
Aylar oldu bitireli projeyi. biraz üşendim ama sonunda şu videoyu hazırlayabildim.

alet gayet güzel bişey oldu. ağırlığı 296 gram. güneş enerjisi ile veya jsb üzerinden şarj olabiliyor. arazideyken acil bi durumda telefonu usb kablosu üzerinden şarj edebiliyor.

anlık hız
maksimum hız
ortalama hız
tur süresi
tur mesafesi
toplam mesafe
tekerleğin rpm i

gibi fonksiyonları var.

bisikleti park ettiğimde alarmını kuruyorum. alarmın hassasiyet ayarını da ekledim. sarsıntıya duyarlı

gece sürüşü için ekran arka ışığı var. elle açılıp kapanabiliyor. ortamda yeterli ışık varsa programdan açık yapılsa bile yanmıyor.

cihazın elektriği kesildiğinde, pil bittiğinde(ki 2 aydır bitmiyor çünkü gündüz dışarıdayken şarj oluyor.) hiç bir bilgi kaybolmuyor.

tur bilgileri güvenlik kodu ile sıfırlanabiliyor. Ayrıca yine güvenlik kodu ile tüm ayarlar ve bilgiler orjinale (fabrika ayarı derdim de fabrika yok ortada)

ilk kurulumda manyetik sensör ve mıknatısın konumunu ayarlayabilmek için bir menü oluşturdum. mıknatıs sensör karşısına gelince ekranta "TAMAM" yazıyor ve buzzer ötüyor.

tekerlek bir turunu 5 sn gibi bir sürede tamamlayamadıysa anlık hız sıfırlanıyor.

tekerlek çevresi bilgisi mm cinsinden giriliyor.

fazla bahsetmeye de gerek yok aslında. videolar her şeyi anlatıyorlar. ilk video projenin sanal ortamda çalışmasını gösteriyor. tüm menülerini özelliklerini filan gösteriyor. ikinci videoda ise projenin başından sonuna kadar fotoğrafladığım ve videoya aldıklarımı birleştirdim yani projenin gerçek hali bulunuyor. iyi seyirler...


 

Bisikletgazetesi

Daimi Üye
Kayıt
26 Kasım 2010
Mesaj
353
Tepki
121
Şehir
İstanbul
Başlangıç
2009—10
Bisiklet
b'Twin
Bisiklet türü
Yol bisikleti
çok güzel olmuş elinize sağlık :) daha da güzel şeyler ortaya çıkacağından eminim
 
  • Beğen
Tepkiler: Selahattin Porsuk

Piskiletci

Forum Bağımlısı
Kayıt
20 Ağustos 2008
Mesaj
2.855
Tepki
2.578
Bisiklet
Corratec
Sistem güzel olmuş, hiçbir cihaz insanın kendi yaptığı gibi olmuyor. Güle güle kullanın, dış kabı biraz daha küçülürse tadından yenmez; ver seri üretime :D
 
  • Beğen
Tepkiler: Selahattin Porsuk
Kayıt
30 Kasım 2010
Mesaj
99
Tepki
71
Şehir
Kocaeli Gebze
aslında dış kabı videoda görüldüğü kadar yer kaplamasa da gereğinden fazla büyük. içerisinde baya bi boş alan var yani. kendi istediğim gibi dizayn edip kalıba sokabileceğim bişey lazım. çünkü bit pazarından bulduğum eski bir tansiyon aleti kutusuyla bu kadar oluyor. tek bir ürün için böyle bişey yapma imkanı olan arkadaşlar varsa irtibata geçebilirler benimle. güzel bir kutu tasarlayalım şuna. :))
 
  • Beğen
Tepkiler: mehmet elver

Piskiletci

Forum Bağımlısı
Kayıt
20 Ağustos 2008
Mesaj
2.855
Tepki
2.578
Bisiklet
Corratec
@Selahattin Porsuk
Enjeksiyon kalıp tasarımı yapan yerler işinizi görebilir ama pahalıya mal olur, bu tür işleri ufak çapta yapan yerler yok galiba. Lazer kesim aluminyum kullanarak da kalıp yapabilirsiniz. Sırası gelmişken eleştiri olarak değil de fikir amaçlı bir soru sorayım, yukarıda sürekli şarjda kaldığı için bilgiler kaybolmuyor demişsiniz, bu tür uygulamalarda veri saklama çok önemli, yazılımı yazarken eprom kullandınız mı yoksa sürekli şarjda olduğu için sıfırlanma korkusu yok mu? Eğer kullanmadıysanız herhangi aksilikte toplam mesafe, maksimum sürat v.b. kayıtlı tutulması gereken değişkenler sıfırlanacaktır. Tuş takımı yerine fabrikasyon km göstergeleri gibi kombine butonlar koyarak boyutu küçültebilirsiniz, hemde şık görünür.
 
Kayıt
30 Kasım 2010
Mesaj
99
Tepki
71
Şehir
Kocaeli Gebze
@Ali Menemen

o konuyu 2402/2404 gibi eeprom ları kullanarak hallettim. yukarıda da yazdım ama karışık olmuş şimd okuyunca farkettim :D her hangi bir şekilde elektrik kesilse dahi hiç bir veri kaybolmuyor.
dediğin gibi keypad yer kaplıyor. aslında sadece şifre filan girebilmek için kullanılıyor. öyle olmasaydı dediğin gibi 2-3 tuşla halledecektim. ileride tuş takımı yerine direkt dokunmatik pad koymayı düşünüyorum ekranın üzerine. hem daha ergonomik olacak. smd malzemeler kullanarak içindeki kartı filan da olabildiğince küçültüp kutusuyla birlikte komple küçültecem. hatta bisikletin ön arka ışık gibi aksesuarlarını da bunun üzerinden kontrol etmeyi planlıyorum.
plastik kutu işini plastik bölümünde okuyan bi arkadaş edinip ona okulda bişeyler yaptırmasını isticem bakalım :)

tabi tüm bunlar için önce zaman lazım. sonra da üşenmemem lazım :)