7 SEGMENT DISPLAY ILE KRONOMETRE

Sen anladıysan iyi de, senin yapmaya çalıştığından ben birşey anlamadım :katil2:

100 μs ile işin ne? Eğer kesmeyi 10 ms yaptıysan 100 μs çözünürlük nasıl elde ediyorsun? Bir basamak bir dijit olması gerekiyor, iki tane 7 segment değil.
 
Sen anladıysan iyi de, senin yapmaya çalıştığından ben birşey anlamadım :katil2:

100 μs ile işin ne? Eğer kesmeyi 10 ms yaptıysan 100 μs çözünürlük nasıl elde ediyorsun? Bir basamak bir dijit olması gerekiyor, iki tane 7 segment değil.
Benim yine aklım karıştı.

-İlk aklıma gelen sayı 100uS'ydi sonra dedin bana 100uS yaparsan programın işlenmesine zaman kalmaz 10ms yap 10 yaptım bende.
-
duzen.png

dk için 2 dijit
sn için 2 dijit
ms için 2 dijit
us için 2 dijit
 
Kronometre için 10 ms lik çözünürlüğe ihtiyacın var, o yüzden 100 μs ile işin yok. Toplam 8 haneden oluşan bir 7 segment display olacak elinde, bunun hem frekans sayıcı hem de kronometre olarak kullanacaksın. Eğer öyle saat/dakika/saniye/salise diye ayırırsan o zaman frekans sayıcı olarak kafa karıştırır. Onun yerine display noktalarını ayıraç olarak kullan. Yani saat, dakika, saniye, ve salise arasında nokta olsun.
 
Kronometre için 10 ms lik çözünürlüğe ihtiyacın var, o yüzden 100 μs ile işin yok. Toplam 8 haneden oluşan bir 7 segment display olacak elinde, bunun hem frekans sayıcı hem de kronometre olarak kullanacaksın. Eğer öyle saat/dakika/saniye/salise diye ayırırsan o zaman frekans sayıcı olarak kafa karıştırır. Onun yerine display noktalarını ayıraç olarak kullan. Yani saat, dakika, saniye, ve salise arasında nokta olsun.
Gerçek çözünürlüğüm 9.998ms 0.002'lik bir sapma var ve engel olamıyorum ona öyle kalacak o.
Şimdiye kadar kat ettiğim ilerleme.

10mS'lik kesme oluşturmayı başardım
Çıkış için uln2803 kullanmaya karar verdim.


Noktaları'da dahil edeyim abi ben kutularsam eğer aralarında boşluklu yapacaktım mesela saniye ve dakika segmanları arasında 1 segman boşluk bırakıp dizecektim böylelikle ayraç olacaktı.

Ama hepsi yan yana dizlirse görüntü daha güzel olur noktaları'da yakayım
 
Sen kutulamayı nasıl istiyorsan öyle yap, neticede kullanıcı sen olacaksın. O sapma neden oluyor anlamadım. Benim yaptığım denemede süre tamdı. Kristal osilatör kullanıldığı için sürenin çok hassas olabilmesi lazım. Onun sebebini araştırıp bulursun sonra.

Bir de şuna dikkat etmen lazım: 10 ms lik kesme demek saniyede 100 defa o kesmeye girip çıkıyorsun demek. Oradaki kodun çok kısa süren, fazla iş yapmayan bir kod olması lazım. O yüzden de display pinlerini öyle bir ataman lazım ki, bir tek port registerine yazmakla BÜTÜN pinlere atama yapabilmiş olman lazım. Yoksa her bir pin için ayrı ayrı pinWrite yaparsan kesmede bu çok verimsiz olur.
 
Sen kutulamayı nasıl istiyorsan öyle yap, neticede kullanıcı sen olacaksın. O sapma neden oluyor anlamadım. Benim yaptığım denemede süre tamdı. Kristal osilatör kullanıldığı için sürenin çok hassas olabilmesi lazım. Onun sebebini araştırıp bulursun sonra.

Bir de şuna dikkat etmen lazım: 10 ms lik kesme demek saniyede 100 defa o kesmeye girip çıkıyorsun demek. Oradaki kodun çok kısa süren, fazla iş yapmayan bir kod olması lazım. O yüzden de display pinlerini öyle bir ataman lazım ki, bir tek port registerine yazmakla BÜTÜN pinlere atama yapabilmiş olman lazım. Yoksa her bir pin için ayrı ayrı pinWrite yaparsan kesmede bu çok verimsiz olur.
Tam 10'u yakalayamıyorum benim owon bozuk desem değil kendi üstündeki 1kHz referansı doğru şekilde ölçüyor kayma yapmıyor.
Owona güvendiğimi varsayalım.

ya 10mS'nin üstüne çıkıorum
ya'da 9.998.
En iyi en yakın sonuç 9.998.
Kullandığım kart orjinal arduino üretimi+plastik kutusu var.
Besleme'den dir dedim laptopun adapötrünü çektim pilden çalışssın diye yine düzelme olmadı ya 10un üstünde yada çok çok az altındayım.
 
Önce doğru ölçüm yaptığından emin ol. Kesmeye girdikten hemen sonra bir pini 1 yap, çıkarken hemen önce de 0 yap. Sonra da ortaya çıkan palslerin frekansına bak. Tam 100 Hz olması lazım. Palslerin yükselen kenarları arasındaki mesafe de tam olarak 10 ms olması lazım.
 
Önce doğru ölçüm yaptığından emin ol. Kesmeye girdikten hemen sonra bir pini 1 yap, çıkarken hemen önce de 0 yap. Sonra da ortaya çıkan palslerin frekansına bak. Tam 100 Hz olması lazım. Palslerin yükselen kenarları arasındaki mesafe de tam olarak 10 ms olması lazım.
Bu konudaki #68 numaralı mesaj yaptığım son ölçümün fotoğrafı.

Kartı öğretmenim toptan almıştı bize daha uyguna geliyor diye altında MADE IN ITALY vs. yazıyor ama orjinalliğinden kendim almadığım için emin değilim. Plastik kasasını söküp yarın kristaline'de bakacağım skop ile.

Aynı "Giorgi Tevzadze"'nin bmw'si gibi oldum benim kartın eşdeğerleri dümdüz giderken ben dağılıyorum her virajda :(

Sana da ayrıca teşekkür ederim abi.
Ben normalde düşünür dişim bu projeyi keser/kesmez hesabı yapar öyle başlardım ama sen biraz iktirdin arkadan. Finale kadar öğretici olacağını düşünüyorum.
 
Daha ilk adımda öğretici olmaya başladı.
Benim zaman kesmesine ihtiyaç duyduğumda sığındığım kapım "millis()"'di bununla yapardım.

Timer kesmesini öğrendim.

Sadece anlam olarak bildiğim prescaler(ölçekleme).
Kullanmayı öğrendim.

Finale kadar'da hep bilmediklerim'den çıkacak karşıma hissediyorum.
 
Şu mesajdaki kodu dene bir de.


Ben şimdi tekrar yükledim benim arduinoya, 100.03 Hz üretiyor. Bendeki arduino orijinal, ama klon da olsa farketmez, kristal osilatörler fazla sapmaz.

1655676386784.png
 
Hatta şimdi hazır frekansmetre de var, onunla da ölçtüm, 100.027207 Hz Frekans değeri de oldukça stabil, 100.027 den sonraki hanelerde değişim var sadece.
 
aaaaaaa.png

E ne değişti ki sabitledi kendini istediğimiz değerlere.

edit:neredeyse 1 dakika seyrettim en aşşağı 99.982'ye düştü en fazla 99.990'a çıktı bu owonun sapıtması olabilir baktığım prob ile alakalı olabilir skop probu değil bnc-krokodil dönüştürücü.
 
Hangisi klon hangisi orjinal anlamadım.

Zamanında 15 liraya aldığım nano klon ile denedim 100.16 herz ve asla değişmiyor.

Sözde orjinal olan çok kısa bir aralıkta geziyor sürekli.
 
C++:
ms = a / 10;//referans / 10


  us = ms / 10;//ürettiğimiz 1 ms referansı us'ye dönüştürdük

  if(us == 60){//60uS olduysa 1 milisaniye arttır ve uS'yi sıfırla
    msp++;
    us = 0;
  }
 
  if(msp == 60){//60 mS olduysa milisaniyeyi saniyeyi 1 arttır milisaniyeyi sıfırla
    snp++;
    msp = 0;
  }

  if(sanp == 60){//60 sn olduysa dakikayı 1 arttır saniyeyi sıfırla
    dkp++;
    sanp = 0;
  }

  if(dkp == 60){//60 dakika olduysa saati 1 arttır dakikayı sıfırla
    sap++;
    dkp = 0;
  }

Böyle bir yazım yaptım bunu deneyeyim şimdi.
 
Sen taktın mikrosaniyeye Ahmet :D 10 ms lik kesme ile 100 us çözünürlük elde edilmez. 100 us kesme yapman lazım. Veya bir hardware counter olacak 100 us ile sayan ve onun değerini okuyacaksın.
 
Sen taktın mikrosaniyeye Ahmet :D 10 ms lik kesme ile 100 us çözünürlük elde edilmez. 100 us kesme yapman lazım. Veya bir hardware counter olacak 100 us ile sayan ve onun değerini okuyacaksın.
Abi benim düşündüğüm en küçük basmağı elde edeyim sonra en küçükten büyüğe saydıra saydıra gideyim.

Bu yazdığımda hiçbir if sıfırlama yapmadı.
Ben birdaha baştan düşüneyim.
 
10 ms kesme varsa, en küçük basamak da 10 ms dir. Burada 100 us çözünürlüğe inemezsin.

Bu şuna benzer. Elinde en az 10 mV ölçebilen multimetre var. Sen ölçümü yapıyorsun ve 2.69 V çıkıyor. Sonra da bunun arkasına iki tane 0 ilave ediyorsun ve 2.6900 V oluyor. Sen şimdi bunu yaparak multimetrenin çözünürlüğünü 0.1 mV olarak iyileştirmiş mi oluyorsun?
 
10 ms kesme varsa, en küçük basamak da 10 ms dir. Burada 100 us çözünürlüğe inemezsin.

Bu şuna benzer. Elinde en az 10 mV ölçebilen multimetre var. Sen ölçümü yapıyorsun ve 2.69 V çıkıyor. Sonra da bunun arkasına iki tane 0 ilave ediyorsun ve 2.6900 V oluyor. Sen şimdi bunu yaparak multimetrenin çözünürlüğünü 0.1 mV olarak iyileştirmiş mi oluyorsun?
o zaman elimizdeki düzeni baştan kuracağız ben dünden beri bölme yapıp duruyorum.

saat-saniye-dakika-milisaniye
şeklinde olmak zorunda ekran düzeni

kafamı biraz daha sağa sola vurursam projeyi bitiricem.
yavaş yavaş aklım geliyor yerine.
en başta nanosaniyeleri hesaplamaya çalışıyordum kafamı vura vura uS'ye kadar gelmişim.
milisaniye'de durduk doğru yer buraymış.
 
C++:
if (a == 100) {
    snp++;
    a = 0;
  }

  if (snp == 60) {
    dkp++;
    snp = 0;
  }


  Serial.print(a);
  Serial.print("--");
 
  Serial.print(snp);
  Serial.print("--");

  Serial.print(dkp);
  Serial.println(" ");


}

Projenin başından beri en temiz en kararlı çalışır program bu oldu.
Hem cep telefonu sayacı başlattım hemde ekran kaydı aldım süreyi görmek için.
Bu şekilde dakika değişkeni arttığında tam 60 saniye geçmiş oluyor 2 farklı kaynaktan doğruladım.

a---> 10mS'lik kesme her girdiğinde 1 artan değişken.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,986
Mesajlar
119,346
Üyeler
2,835
Son üye
alpermete

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top