Jump to content
Devre Forum
  • Kaydol

şenol eker

Administrators
  • İçerik sayısı

    46
  • Katılım

  • Son ziyaret

  • Days Won

    13

şenol eker kullanıcısının paylaşımları

  1. şenol eker

    PIC-ADC bit sayısı hakkında

    DMA kullanmanız mantıklı görünüyor. Nasıl bir tasarım yapacaksınız bilmiyorum. Ama benim aklıma gelen şu: ADC'den bir süre; örneğin 1 milisaniye boyunca örnek alırsınız, Bu durumda 20 MSPS ve 16 bit hesabı ile 20k word yani 40 kb bir veri oluşacak. Eğer DMA ile alınırsa bu veri, alındıktan sonra bellekten bunu işleyebilirsiniz. Ama ben böyle bir uygulama yapmadım. Dolayısı ile bir sıkıntı çıkar mı tecrübe etmedim ama "bilgi" ile gidersek, çıkmayacak gibi görünüyor. Dolayısı ile DMA ile 80Mbit/s veri alabilen, DMA'nın kullandığı 40kB belleğe sahip bir işlemciye ihtiyacınız var gibi görünüyor.
  2. şenol eker

    PIC-ADC bit sayısı hakkında

    Bir kere 20 msps hızda okuma yapacak bir ADC'den bilgiyi nasıl alacağınızı düşünün. Bu, çok yüksek bir hız. 16 bit veri alacaksanız, saniyede 320 megabit veri aktarmanız gerekecek. Diyelim aldık, bunu nasıl işleyeceksiniz? Bunları tasarlayın kafanızda en önce. Ama bu 20 Mhz'de bir hata olmasın? Zira 20 Mhz ciddi bir hız.
  3. şenol eker

    PIC-ADC bit sayısı hakkında

    16F84'ü seçmeyin. Bu, "tarihi" bir çip. 628 de "antika" düzeyinde. Yeni çipler var, onları kullanın. https://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1005 Bu sayfadan seçim yapabilirsiniz.
  4. şenol eker

    Ac ve DC ark nasıldır

    İkisinin çekirdekleri farklı. DC'de bobinin sarıldığı çekirdek, demirden yapılır. Ancak AC rölelerde böyle yapılırsa çok fazla kayıp (ısınma) olacağından, biririnden yalıtılmış saclardan üretilmiş çekirdekler kullanılır, trafolardaki gibi. Ayrıca bir bobin, DC'de reaktans (bobin etkisinden kaynaklanan direnç) olmadığından AC'ye nazaran daha fazla tur sayısına sahiptir. Yine kontak tarafında DC'de ark sürekli olduğundan kontak tarafı ark söndürecek düzeneklere sahip olmalıdır.
  5. şenol eker

    PIC-ADC bit sayısı hakkında

    16F84, 16F628 gibi çipler çok eski. Onlardan çok daha iyi olan yeni nesil kardeşleri bunların dörtte biri fiyatta, onlardan çok daha hızlı ve yetenekli. Bu yüzden bir projeye f84/628 gibi çiplerin kullanılmasını önermem.
  6. şenol eker

    FVR (Sabit Referans Voltajı) Nimetleri

    Diğer dillere de kolayca uyarlanabilir. Batarya gerimini kontrol etmek için karmaşık yöntemlere / donanımlara ihtiyaç olmayacak bu durumda.
  7. şenol eker

    Ac ve DC ark nasıldır

    Neden Edison'un değil de Tesla'nın yolundan gittiğimiz anlaşılıyor sanırım.
  8. şenol eker

    Emülatör vs Simülatör

    Bu iki kelime çok sıkça kullanılıyor, birbirine benzer de şeyler. Hatta kimi zaman hangisini kullanacağımıza emin olamıyoruz. Emülatöre "öykünücü", simülatöre de "benzeteç" diye karşılıklar var Türkçe olarak, ama galat-ı meşhur lügat-ı fasihadan evladır(*) diyerek tanımlara bakalım: Eğer bize bir "şey" lazımsa ama bir sebeple temin edemiyorsak, onun yerine "emülatör" kullanabiliriz. Yani emülatörü, emüle ettiği şey yerine, orijinali kadar verimli olmasa da kullanabiliriz. Örneğin bir Android telefonda yapmamız gereken bir işlem varsa ve bir android telefonumuz yoksa, "idareten" android telefon emülatörü ile işimizi görebiliriz. Mesela -olmaz da, misal olsun- bir cerrahın neşter yerine maket bıçağı kullanması diyelim. Eğer bir şey üzerinde çalışma yapmamız gerekiyor ama o şey üzerinde çalışma yapmak bize sıkıntı verecekse, tehlikeli olacaksa, zor olacaksa, o zaman o şeyin kendi üzerinde değil de "simülatörü" üzerinde yapabiliriz çalışmamızı. Örneğin uçak kullanmayı öğrenmek istiyorsak doğrudan kokpite girip öğrenemeyiz, çünkü çok tehlikelidir. Bunun yerine "uçağa benzer" (ama uçmayan, yani uçak yerine asla kullanamayacağımız) bir düzenek üzerinde çalışabiliriz. Simülatör bu. Yine cerrah örneğine dönersek, cerrahın bir insanı değil de bir maketi ameliyat etmesi durumunda bu maket, "simülatör" olacaktır. Kısaca: Emülatör, emüle ettiği şey elimizde yoksa, onun YERİNE kullanılabilir. Simülatör, simüle ettiği şey elimizde yoksa, onun YERİNE kullanılamaz. Siz de bu konuda yorum yapmak isterseniz bekliyoruz. (*)Yaygın hatalı kullanım, kullanılmayan ama doğru olandan daha iyidir.
  9. Isı sensörü değil. Bkz: Piyasada analog olarak LM35, digital olarak da DS18B20 çok popüler. Ama özellikle LM35'lerin içinde çok sayıda sahte ürün çkıkıyor. Bunları test etmek için bir şeyler yaptık. Siz olduğu gibi kullanabilir ya da içindeki kodları inceleyerek faydalanabilirsiniz. Kullanılan malzemeler: https://www.hobidevre.com/lm35dz?search=lm35&description=true https://www.hobidevre.com/DS18B20?search=ds18b20&description=true https://www.hobidevre.com/index.php?route=product/product&product_id=946&search=26k22&description=true https://www.hobidevre.com/2x16-yesil-lcd-display?search=lcd&description=true sicaklik.rar
  10. şenol eker

    Akım Kaynağı vs Gerilim kaynağı

    500mA demeyelim de, yüke bağlı olarak, belirtilen gerilimi (Örnekte 5V) aşamayacağından, belirtilen gerilimin akıtabileceği akım kadar, yani belirlenmiş akımdan (Örneğimizde 1A) daha azını akıtabilecektir. Örneğin 1A bir akım kaynağı en çok 5V veriyorsa, buna 10 Ohm bir direnç bağlarsak, dediğiniz gibi 10 Ohm x 5V= 500mA olacaktır.
  11. şenol eker

    Akım Kaynağı vs Gerilim kaynağı

    Hayır, kaynak verebileceği maksimum gerilimi verdiği halde istenen akım geçmiyorsa, maksimum gerilimde (Örneğimizde 5V) kalacaktır. Çünkü ideal gerilim kaynağı nasıl ki kaç amper çekersen çek; istersen sonsuz akım çek, hep aynı gerilimi vermeli ama pratikte, güç kaynağının sınırları aşıldığında verdiği gerilim azalacaktır. Varsa, sigortası atacaktır. İdeal akım kaynağında ise uçlar açık devre olursa sonsuz gerilim vermelidir ama pratikte böyle bir şey olamayacağına göre, yüksek direnç bağlandığında vermesi gereken akımı veremeyecek, hatta açık devre durumunda hiç akım akıtamayacaktır.
  12. şenol eker

    HEX editor

    HEX dosyaları düzenlemek / değiştirmek için bir excel dosyasıdır bu. Dosyayı açtığınızda bir uyarı gelecek. Programın çalışabilmesi için bu uyarıyı onaylamalısınız. Ekranın en üstünde "Load Hex" ve "Save Hex" düğmeleri göreceksiniz. Load Hex ile hex dosyanızı yükleyin. Bu, birkaç saniye sürecek ve bittiğinde bir uyarı çıkacaktır. Şimdi HEX dosya ilk stunda, sonra içeriği HEX olarak ve en sağ grupta ise karakter olarak göreceksiniz. İsterseniz doğrudan HEX dosya içinde değişiklik yapabilirsiniz. Bunu yaparsanız checksum'u değiştirmezseniz bir hata mesajı verilir ve checksum düzeltilir. İsterseniz ortadaki HEX değerleri ya da en sağdaki karakterleri değiştirerek de düzenleme yapabilirsiniz. Her durumda diğerleri de uygun şekilde düzenlenecektir. İstediğiniz değişikliği yaptıktan sonra "Save Hex" ile kaydedebilirsiniz. Ayrıca isterseniz kaynağı inceleyerek bunun nasıl yapıldığına bakabilirsiniz. Soru ve yorumlarınızı buraya yazabilirsiniz. HEX_EDITOR.xlsm
  13. şenol eker

    Akım Kaynağı vs Gerilim kaynağı

    5 voltta 500 mA akım çekecek direnç, R=V/I => R=5/0,5=10 Ohmdur. 1A 5V akım kaynağına (R=V/I=>R=5/1=5) 0-5 ohm arası bir direnç bağlarsak, daima 1A akım verecektir. 5 Ohm'dan daha yüksek direnç bağlanırsa, max gerilimi 5V olduğundan, 1A akımı sağlayamayacaktır. Yine gerilim kaynağı ile karşılaştırma yaparsak: 5V 1A bir gerilim kaynağına (R=V/I=>R=5/1=5) 5-sonsuz ohm arası bir direnç bağlarsak, daima 5V verecektir. 5 Ohm'dan daha düşük direnç bağlanırsa, max akım 1A olduğundan, 5V gerilimi sağlayamayacaktır. Gerilim kaynaklarında uçlar kısadevre edildiğinde teoride sonsuz akım geçmeli. Bu yüzden güç kaynağı zarar görmesin diye ya sigorta konur, ya da gerilimin düşmesi pahasına akım, sınır değerde tutulur ve varsa, kısadevre lambası yanar. Akım kaynaklarında uçlar açıkdevre bırakıldığında teoride sonsuz gerilim olmalı. Bu yüzden güç kaynağı zarar görmesin diye akımın düşmesi pahasına gerilim, sınır değerde tutulur ve varsa, açıkdevre lambası yanar.
  14. şenol eker

    Kondansatör vs Bobin

    İnternet üzerinde ulaşabildiğimiz kaynaklar genellikle birbirine benzerler ve ders kitaplarındaki bilgileri içerirler. Burada biraz "değişik" bir açıdan bakmaya çalıştım. "Nerelerde kullanılır" konusunda bir şeyler yazmak isterim: Yukarıda ne demiştik? Eğer bobinden bir akım geçirmek istersek, buna direnir; akımı geçirmemek ister. Ama bir süre sonra akımı geçirmeye ikna olur. Fakat aynı "sıkıntı", biz akım geçirmeyi kesmek istediğimizde de karşımıza çıkar, bu sefer de illaki bir akım geçirmeye çalışır. Bu yüzden gerekirse üzerinde çok büyük bir gerilim oluşabilir, hatta bu gerilim devremize zarar verebilir. Bu yüzden bu gerilimleri yok etmek için diyot koyduğumuzu hatırlayın. Bobinin bu özelliğinden örneğin filtre tasarlarken faydalanırız. Çünkü eğer bizim sinyalimiz çok hızlı değişiyorsa, bobin buna tepki verecektir. Akım geçirmek istediğimizde en önce direnecek, akım geçirmeyi kesmek istediğimizde de yine direnecektir. Yani eğer sinyalimizde yüksek frekanslı bileşenler varsa ve bunu bir bobinden geçirirsek, bobinimizin yüksek frekanslı bu bileşenleri geçirmeyeceği anlamı çıkar. Yahut bu sinyali bir bobinle kısadevre edersek, bu sefer de düşük frekanslı bileşenleri süzmüş olursunuz. Bunun neden böyle olduğunu anlıyorsunuz değil mi? Anlamıyorsanız yukarıdakileri ve başka kaynakları okuyup üzerinde düşünün. Bu, bir bobinin nasıl çalıştığını içselleştirirseniz, formüllerden arınmış bir şekile düşünebilirseniz, hepsine "daha yukarıdan" bakabilir ve "formül"leri ezberlemek yerine anlayabilirsiniz. Ya da salıncak bilirsiniz, bir salıncağı salladığınızda daha az ya da daha yükseğe sallayabilirsiniz ama her zaman aynı hızda sallanır. Örneğin az salladığınızda dakikada 30 defa sallanıyorsa, en yükseğe kadar sallağınızda da dakikada 30 defa sallanacaktır. Bunu lise fizik derslerinden hatırlayın. Dakikada kaç kez sallanacağı sadece ve sadece salıncağın ipinin uzunluğuna ve yerçekimine bağlıydı. Hatırladınız mı? Salıncağın enerjisi bir ucundaki kütlenin hızı (kinetik), bir yerçekiminden kaynaklanan (potansiyel) enerji olarak değişir. Eğer bir bobinle bir kondansatörü paralel bağlarsak da salıncağa benzer bir yapı oluşur. Buradaki enerji bir bobine, bir kondansatöre geçer ve aynen salıncaktaki gibi "sallanır". Buradaki titreşimin frekansı da sadece bobin ve kondansatörün değerine bağlı olduğundan bu devre sabit frekanslı sinyaller üretmek için kullanılan osilatörlerin kalbi olarak kullanıldı uzun zaman ve halen de kullanılıyor. Bir bobinden akım geçirildiğinde bir "mıknatıs" gibi davranıyor olması ise, "telgraf"tan başlayıp röle, motorlar, transförmotörler, kablosuz şarj gibi çok temel sistemlerden tıbbi MR görüntüleme, NFC gibi teknolojik sistemlere kadar sayısız sistemlerle hayatımızın içinde.
  15. şenol eker

    Kondansatör vs Bobin

    Kondansatör uçlarına bir gerilim uygularsanız ilk başta biraz akım çeker, sonra akım çekmez. Bobinden bir akım geçirirsek, ilk başta üstüne biraz gerilim düşer, sonra gerilim düşmez. Kondansatör uçlarına bağladığınız gerilim kaynağını kaldırırsanız, kondansatör uçları açık devre ise, aynı gerilim varolmaya çalışır. Bobin uçlarına bağladığınız akım kaynağını kaldırırsanız, bobin uçları kısadevre ise, aynı akım akmaya çalışır. Kondansatörün uçlarını kısadevre edersek, aniden çok yüksek bir akım verir ve üstündeki gerilim biter. Bobin uçlarını açık devre edersek, aniden çok yüksek bir gerilim verir ve akan akım biter.
  16. Gerilim kaynağı sıkça kullandığımız bir şey. Adaptörler, piller hep gerilim kaynağıdır. Akım kaynağı ise daha az kullanıldıklarından tam anlaşılmadığını görüyorum. Örneğin LED sürücüleri, Şarj devreleri gibi. Gerilim kaynağında örneğin 5V 1Amper demişsek, DAİMA 5 VOLT VERİR ama 1 amper veya daha az akım çekerseniz. 1 Amperden fazla akım çekmek isterseniz 5V düşecek, akım 1A'i geçmeyecektir. Veya cihazın sigortası atacaktır. Akım kaynağında örneğin 1A 5V demişsek DAİMA 1 AMPER VERİR ama 5V'u aşmamak kaydıyla. Gerilim kaynağı kullanılmıyorsa uçları açık devre yapılır. Böylece tam 5V verir ve hiç akım geçmez. 5Vx0A=0Watt Akım kaynağını kullanmıyorsanız uçlarını kısadevre edebilirsiniz. Böylece tam 1A verir ve hiç gerilim olmaz. 0Vx1A=0Watt 5V gerilim kaynağına birkaç tane yük bağlarsanız, yükleri ve kaynağı PARALEL bağlarsınız. Böylece tümünün uçları arasında 5V olur. 1A Akım kaynağına birkaç tane yük bağlarsanız, yükleri ve kaynağı SERİ bağlarsınız. Böylece tümünden 1A geçer.
  17. Ayrıca bu tür motorlar, devir sayısı sabit olacak şekilde planlanır. Devrini değiştirmek mümkünse de bu çok az bir aralıkta olur. Örneğin 5000 d/d bir motoru 500 d/d döndürmek isterseniz çok verimsiz çalışır.
  18. şenol eker

    16F1718 Hakkında

    deneme
  19. şenol eker

    Düşen kenar yükselen kenar

    Güzel bir soru Aslında devamda bahsedeceğim birinci konu buydu. Ardından da "basılı tuttuğumuzda tekrarlama nasıl olacak" gelecek. Debounce, butona bastığımızda "basılı" duruma geçerken bir ya da birkaç kez baslılı durumdan çıkması ve tekrar girmesi, dolayısı ile sanki defalarca butona basıp bırakmışız gibi bir sonuç çıkmasıdır. Bunu engelleyeceğiz, ama bunu yaparken butona üst üste hızlı hızlı bastığımızda tümünü algılayabilmeliyiz. Yani öyle kritik bir zaman olmalı ki, butona bu kadar hızlı basıp bırakamayacağımız kadar kısa, ama buton ark süresinden daha uzun bir süre seçmeliyiz. Örneğin saniyenin onda biri, yani 10 milisaniye bu iş için uygun gibi görünüyor. Butona saniyede on kez basmamız mümkün değil, ama buton arkı bu kadar uzun olmaz. O halde yapmamız gereken, butona basılmada 10 milisaniye altındaki hareketleri gözardı etmekten ibarettir. Bunu da bekleme satırının yani while (p==button); satırının sonuna 10 milisaniye bekleme eklemekten ibarettir. while (p==button);delay(10); Burada neler olacak: Bu satıra geldiğinde while buton basılana dek bekleyecektir. Buton basıldığı anda buradan çıkacak, 10 milisaniye bekleyecek ve bu sırada arklanma tamamlanmış olacaktır.
  20. şenol eker

    Ne kadar tuz ruhu, ne kadar perhidrol?

    Aliexpres'te fiyatlar çok uçuk oluyor böyle malzemelerde, çünkü kargo da içine yedirilmiş oluyor. TR'de daha ucuz bu kâğıtlar: https://www.hobidevre.com/baski-devre-kagidi
  21. Buton algılamada hep bir sıkıntı olur. Nedir işin aslı? Düğmeye basınca bunu "bir" görmeli, ne kadar basılı tutarsam tutayım, ne kadar kısa basarsam basayım. Ama aynı zamanda da kaza ile basılmış gibi davranmasın. Bunun için "düşen / yükselen kenar" terimlerini öğrenelim bilmiyorsak: Eğer bir noktada sinyal 0'dan 1'e çıkıyor ve sonra tekrar 0'a düşüyor ve öyle kalıyorsa: 0'da durduğu sürece "seviye 0" olur. Tam 1'e çıkarken "yükselen kenar" olur 1'de dururken "seviye 1" olur Tam 0'a düşerken "düşen kenar" olur. Butonu devreye bağlarken butonun bir ucunu şaseye, diğer ucunu işlemcimize bağlayacağız, işlemcimizin bu ucunu da bir dirençle + ya bağlayacağız. Buna "pullup" denir. Çok işlemcide bu pullup dirençleri istendiğinde devreye alınacak şekilde içeride bulunabilir. Bunu bilmiyorsak dışardan bir direnç takabiliriz. Peki butonu ne zaman algılamak isteriz? Basınca algılamak isteyebiliriz. Basılı iken algılamak isteyebiliriz. Ya da bırakırken algılamak isteyebiliriz. Sanırım en çok işe yarayacak olan, "bastığımız anda" algılanması. Yani "düşen kenar" oluyor burası. Normalde dirençten dolayı pinimiz "1" çünkü. Butona bastığımızda "0" oluyor ve biz 1'den sıfıra düşmesini algılayacağız. Normalde bu işler kesmelerle yapılır ama biz burada mantığı anlatmak istediğimizden "tuş basılana dek bekleyen" bir kod yazacağız sadece. Başkaca sorunuz olursa aşağıda sorarsınız. Kenar algılamada, butonun "önceki halini" bilmemiz gerekir. Bunun için bir değişken tutacağız. Bunun adı "p" olsun. char p; Pinimizi de "pin" diye tanımlamış olalım. Ya da en iyisi burada bir örnek olarak PORTB.2 olsun. #define button PORTB.2; Artık programımızı yazabiliriz: void tusbekle (void) { while (1) { p=button; //butonun ilk halini alıyoruz. while (p==button); // Buton aynı durumda olduğu sürece bekliyoruz. if (!button)exit; //Eğer buton sıfır ise, çıkıyoruz. } } Tabii sizin kullandığınız işlemci ve dil bundan farklı olabilir ama sonuçta mantık aynı. Anlaşılmayan bir yer varsa lütfen sorun.
  22. Eskiden baskı devre yapmaya başlayanlar demir3 klorür veya nitrik asit kullanırdı ama günümüzde tuz ruhu ve perhidrol revaçta. Ama hep sorulan ve tatmin edici bir cevap alınamayan bir soru var: Ne kadar asit ne kadar perhidrol kullanacağız? Yarı yarıya mı? Bire iki mi? İkiye bir mi? Olayın kimyasını anlarsanız bu konuda daha iyi yönetebilirsiniz durumu. Tuzruhu (hidroklorik asit) bakırı çözmez. Perhidrol da çözmez, ama bakırı "karartır". Oksitler yani. Tuzruhu da bakırı "temizler", Üstündeki siyah oksit tabakasını çözerek pırıl pırıl yapar. Bu ikisi birlikte çalışarak sizi amacınıza uşaltırır. Perhidrol karartır, tuzruhu çözer, perhidrol karartır, tuzruhu çözer, bu döngü bakır tamamen bitene dek böyle devam eder. Bakırı tuzruhu içine koyun. Sonra üstüne azıcık perhidrol dökün. Bir reaksiyon gözleyeceksiniz. Asitten etkilenmeyecek bir çubukla plaketinizi (üstüne dokunmadan) hareket ettirip reaksiyonu rahatlatın. Birazdan reaksiyon sona erecektir. Şimdi plaketi kontrol edip henüz olmadı ise azıcık daha perhidrol dökün. Bunu birkaç kez tekrarladığınızda plaketiniz indirilmiş olacaktır. Ama bir süre sonra döktüğünüz perhidrol artık reaksiyon yapmıyorsa, asit iyice seyrelmiş demektir, kabı komple boşaltıp yeni asitle başlayabilirsiniz. Burada dikkat etmeniz gereken iki konu var: Birincisi, perhidrol size çok zarar verebilecek bir kimyasaldır. Eldivensiz çalışmayı aklınızdan bile geçirmeyin. Ola ki cildinize gelirse hemen suya tutun. Çok kaşınacak ama sıkın dişinizi ve asla dokunmayın. Birkaç dakika sonra geçecek. Ama ola ki kaşırsanız, çok ciddi yaralanmaya sebep olabilir. Tabii cildinize değil de gözünüze gelirse bu çok tehlikeli. Hemen bir sağlık kuruluşuna gidin. İkincisi ise tuz ruhundaki klor. Bu işlem sırasında serbest klor ortaya çıkar ki, savaşlarda kimyasal silah olarak kullanılacak kadar tehlikeli bir gazdır. Dolayısı ile işlem yaptığınız kaptan çıkan size ulaşmayacak şekilde havalandırılan bir ortamda çalışın. Çok ciddi sıkıntılara sebep olabilir. Ha, bu arada tuz ruhu da tehlikeli tabii ama piyasadaki tuzruhu, saf (%37'lik tuzruhuna saf denir, daha yüksek oranda olamaz çünkü) değildir tehlikesinden dolayı. Eğer elinize gelirse hemen suyla iyice yıkayın. "olmadı bir şey" deyip geçmeyin, birkaç dakika sonra etki etmeye başlayacaktır ama o zaman da suya tutmak para etmeyecektir.
  23. şenol eker

    10k Potansiyometre ile voltaj ayarlama

    Orijinal halde, yani trimpotla ayar yaptığınızda nasıl oluyor? Yani öncelikle orijinal halde iken istediğiniz şekilde çalıştığını test ettiniz mi? Ayrıca kullandığınız kabloları lehimleyerek kullandınız değil mi? Üçüncü bir konu da, potansiyometreyi bağlarken uçları doğru bağlamamış olabilir misiniz?
  24. şenol eker

    İki mikrodenetleyici arasında haberleşme

    Peki gönderilen bu veriyi nasıl alabiliriz? Bunun en kolay yolu kesme kullanmak aslında. Ama kesme kullanmadan da yapabiliriz. İlk örneğimize göre yapacaksak: while (GetChar<>0x55); //0x55 gelmesini bekliyoruz veri=GetChar; veri=veri + GetChar<<8; İkinci örneğe göre yapacaksak: typedef union { struct { char bytes[34]; }; struct { char isim[16]; char soyad[16]; char boy; char checksum; }; }veri_type; veri_type veri; .... Bekle: if (GetChar!=0x55) goto Bekle if (GetChar!=0xAA) goto bekle veri.checksum=0; for (i=0;i<33;i++) { veri.bytes[i]=GetChar; veri.checksum=veri.bytes[i]; } veri.checksum-=GetChar; if (veri.checksum!=0) goto Bekle; Umarım anlaşılmıştır. Eğer kesme içinde yapacaksak, bu sefer de sonlu durum makinesi kurmamız gerekir. char state=0; char tmp; .... void Serial_ISR(void) { tmp=GetChar; switch (state) { case 0:if (tmp==0x55)state=1; break; case 1:if (tmp==0xAA){state=2;}else{state=0;} break; case 33: default: if (state>33) { state=0; }else{ veri.checksum=tmp; for (tmp=0;tmp<33;tmp++) { veri.checksum-=veri.bytes[tmp]; } if (checksum==0)VeriGeldi=1; state=0; } } ResetIF; } Peki programımızda, bir "veri geldiğini" nereden biliriz? "VeriGeldi" adlı bayraktan anlayacağız bunu da. Sonlu durum makinesinin nasıl çalıştığını, ne olduğunu bilmiyorsanız, önce bunu öğrenmenizi öneririm. Ayrıca yukarıdaki kodlar bir C lehçesi için yazılmadı, olayı anlatmak için yazıldı ve test edilmedi. Dolayısı ile copy+paste yapmanız için değildir, öğrenmeniz içindir. Zaten ben prensip icabı balık vermeye karşıyım.
  25. şenol eker

    İki mikrodenetleyici arasında haberleşme

    Verileri karşı tarafa gönderirken, basit bir veri yapımız varsa, doğrudan seri porttan gönderebiliriz. Örneğin bir tane integer sayı ve tekn byte premable göndereceksek: SendChar (0x55); SendChar (veri & 0xFF); SendChar ((veri>>8) & 0xFF); şeklinde gönderebiliriz. (Verimizin adı "veri" ve preamble 0x55) Ama görece karmaşık bir verimiz varsa, bir veri yapısı içinde gönderebiliriz. Bir örnek olarak isim, soyisim ve boy bilgilerini göndermek isteyelim. Şüphesiz ki bunu da yukarıdaki gibi yapabiliriz. Yani tek tek gönderebiliriz. Ama çok genel olsun diye "tam tekmil" bir yapı verelim, İstemediğiniz yerleri çıkartabilirsiniz. Önce bir union type tanımlayacağız. Hem gönderirken kolaylık olsun diye her byte'ı ayrı ayrı; hem de kullanımda kolaylık olsun diye uygun değişkenler şeklinde. typedef union { struct { char bytes[36]; }; struct { char preamble[2] char isim[16]; char soyad[16]; char boy; char checksum; }; }veri_type; veri_type veri; Sonra değerlerimizi koyacağız: veri.preamble=0x55aa; veri.isim=.... veri.soyad=.... veri.boy=180; Daha sonra eğer kullanacaksak checksum hesaplayacağız: veri.checksum=0; for (i=2;i<35;i++) //preamble ve checksum hariç { veri.checksum+=veri.bytes[i]; } artık verimizi yollayabiliriz. for (i=0;i<36;i++) { SendChar(veri.bytes[i]); } Hepsi bu
×
×
  • Yeni Oluştur...

Önemli Bilgilendirme

Facebook / Twitter / Google hesabınızla kolayca kaydolup cevap verebilir, soru sorabilir, istekte bulunabilirsiniz.
Devam etmeniz, forum kurallarını kabul ettiğiniz anlamına gelir.            Forum Kuralları