7 SEGMENT DISPLAY ILE KRONOMETRE

Bir de şunu belirtmekte fayda var. Böyle bol taklalı kod yazmamızın sebebi işlemcinin kısıtlı olmasından. Yoksa ben mesela ARM için veya başka hızlı bir işlemci için kesinlikle böyle kod yazmam. Maksimum seviyede ANLAŞILIR kod yazmaya çalışırım.
 
Her zamanki gibi yanlış yazmışım :katil2:

Bir de şunu belirtmekte fayda var. Böyle bol taklalı kod yazmamızın sebebi işlemcinin kısıtlı olmasından. Yoksa ben mesela ARM için veya başka hızlı bir işlemci için kesinlikle böyle kod yazmam. Maksimum seviyede ANLAŞILIR kod yazmaya çalışırım.
Picoya geçeyim mi abi?
Şaka bir yana picoya neden bu projeyi geçirmemem için güzel bir sebep Saniye 0.09
 
Son düzenleme:
hesaplama ile ilgili problemlerim var.

Şimdi 1000 milisaniye = 1 saniye

Benim 10mS'de 1 artan sayım var. x1

Birler basamağı'da 10 olana kadar 100mS zaman geçiyor. x10

Onlar basamağı'da 10 olana kadar 1000mS zaman geçiyor. x100

Hesapta böyle olması lazım ama saniye kısmı milisaniye kısmınan hızlı artıyor.
Aklım yine durdu.
 
Bir çay demle iç sonra çözersin
 
Sorunu buldum!
abi kurduğun tuzakları 1 çay 1 soda içmeden göremiyorum:(
 
Ne tuzağı yav, bunlar ipucu. Tuzak kursam öyle bir çayla kurtulamazsın :katil2:
 
Şu anda iki tane sorun var karşında. Rakamların birbirine geçmesi ve ekranın biraz sönük olması. Bu problemler ya tek tek var yada ikisi birden var. Bunları da en kısa zamanda çöz ve kronometreyi bitir. Daha bir sürü proje var yapacağımız :)
 
Sorunu bulamamışım.

display'i iptal ettim hiç sürmüyorum sadece seri porta sayı çıkarıyorum

bcdm[0] gayet güzel artıyor ve verdiğim koşulda kendini sıfırlıyor
bcdm[1] 10ar 10ar sayıyor
bcdm[2] asla saymıyor ? çıkıp duruyor

e zaten böyle olacak 0 birler basamağı 1 10lar basmaağı benim aklım kaydı gitti ya
 
Sorunu çözdüm ama yeni sorun doğdu.
C++:
unsigned char bcdm[] = {
  bcdm[0] = 0,
  bcdm[1] = 0,
  bcdm[2] = 0,
  bcdm[3] = 0,
  bcdm[4] = 0,
  bcdm[5] = 0,
  bcdm[6] = 0,
  bcdm[7] = 0,
};

void bcd_m()
{
  bcdm[0]++;//milisaniye giriş
  //------------MILISANIYE-----------
  if (bcdm[0] == 1) {//BIRLER
    bcdm[1]++;
    bcdm[0] = 0;

  }
  if (bcdm[1] == 10) {//ONLAR
    bcdm[2]++;
    bcdm[1] = 0;
  }
  //------------MILISANIYE-----------

  //------------SANIYE---------------

  if (bcdm[2] == 10) { //BIRLER
    bcdm[3]++;
    //Serial.println(bcdm[3]);
    bcdm[2] = 0;
  }

  if (bcdm[3] == 60) { //ONLAR
    // bcdm[4]++;
    bcdm[3] = 0;
  }
  //------------SANIYE---------------
}

ISR(TIMER1_COMPA_vect) {
  // salise[1]++;
  bcd_m();
}

Bu şekilde yapmak zorunda kaldım bu biraz daha iyi ama dijit dijit gitmiyor sayı bütün olarak ilerliyor
 
Mantığını anlamışsın gibime gelmişti ama herhalde anlamamışsın. Eğer algoritmanın kafanda doğru çalıştığını göremezsen Atmega328 de de doğru çalıştığını göremezsin. Uğraşmaya devam et.
 
% almadan 10'lar basamağına değer yazdıramıyorum.

Ben video yazılar bakayım anladığım kadarıyla yapamayacağım
 
Kafamı karıştıran nokta;
Benim real süreyi oluşturmak için real sayılara ihtiyacım var mesela

1 dakika için 60 saniye
Saniyeyi 60 yazdırmak için birler basamağı 60 kere 0-10 arası gitmesi lazım.
Ya counter yapacağım yada
yüzde alacağım başka bir yol göremiyorum
 
salise 0 - 99 arasında sayacak, saniye ve dakika 0 - 59 arasında sayacak, saat 0 - 23 arasında sayacak.

salise 99 dan 0 a dönerken saniye 1 artacak.
saniye 59 dan 0 a dönerken dakika 1 artacak.
dakika 59 dan 0 a dönerken saat 1 artacak.

Bunu gerçekleştirmen lazım.
 
Düzen tamam 10 saniye fazla var 33 saniye geçtiğinde 44 sayıyor.

C++:
  bcd[0]++;//her timer kesmesinde +1
//------------MILISANIYE----------
if(bcd[0] == 9){
  bcd[1]++;
  bcd[0] = 0;
}

if(bcd[1] == 9){
  bcd[2]++;
  bcd[1] = 0;
}
//------------MILISANIYE----------




//------------SANIYE--------------
if(bcd[2] == 9){
  bcd[3]++;
  bcd[2] = 0;
}

if(bcd[3] == 5){
  bcd[4]++;
  bcd[3] = 0;
}
//------------SANIYE--------------
 

Ekler

  • aaaaaaa.mp4
    3.1 MB
Böyle programın sadece bir kısmını koyarsan fikir yürütmek imkansız hale geliyor. Belli ki seri porttan birşeyler yazdırıyorsun, ama görünen programda hiçbir Serial.print yok.
 
C++:
unsigned char bcd[] = {
  bcd[0] = 0,
  bcd[1] = 0,
  bcd[2] = 0,
  bcd[3] = 0,
  bcd[4] = 0,
  bcd[5] = 0,
  bcd[6] = 0,
  bcd[7] = 0
};


void bcd_inc()
{
  bcd[0]++;//her timer kesmesinde +1
//------------MILISANIYE----------
if(bcd[0] == 9){
  bcd[1]++;
  bcd[0] = 0;
}

if(bcd[1] == 9){
  bcd[2]++;
  bcd[1] = 0;
}

//------------MILISANIYE---------- 




//------------SANIYE--------------
if(bcd[2] == 9){
  bcd[3]++;
  bcd[2] = 0;
}

if(bcd[3] == 5){
  bcd[4]++;
  bcd[3] = 0;
}
//------------SANIYE--------------
Serial.print(bcd[3]);//s 1
Serial.print("-");//
Serial.print(bcd[2]);//s 10


Serial.print("==");

Serial.print(bcd[1]);//ms 10
Serial.print("-");//ms 1
Serial.print(bcd[0]);//ms 1


Serial.println(" ");






//------------DAKIKA--------------



//------------DAKIKA--------------
 
 
}

ISR(TIMER1_COMPA_vect) {
  bcd_inc();
}

Ben kafa karışmasın diye en sade en alakalı yeri atıyorum abi
 

Forum istatistikleri

Konular
5,919
Mesajlar
101,032
Üyeler
2,504
Son üye
yaxe22

Son kaynaklar

Son profil mesajları

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?
gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
Back
Top