Yalnız İşlemci İle, Başka Entegre Kullanmadan Nasıl Yapılabilir?

picmanya

Aktif Üye
Katılım
14 Haziran 2024
Mesajlar
227
21 adet I/O pini bulunan bir işlemciyle aşağıdakileri kontrol etmem gerekiyor.

3 Adet pcb üzerinde tach buton input (İşlemci CN kesmesi pinlerine bağlanacaklar. aynı anda, 1 den fazla butona basılmayacak.)
1 Adet harici input (pcb dışından geliyor.)
9 Adet output çıkışı (pcb dışındaki çıkışları transistör üzerinden kontrol ediyorlar. transistör geytlerine gidiyorlar.)
7 Adet seven segment display sürmek için çıkış (seven segment display; 3 Digit - ortak katod. saniyede 180 kez taranarak sürülecek.)
3 Adet seven segment display ortak katodlarını sürmek için, npn transistörlerin geytlerinin tetikleme çıkışları. (herbiri saniyede 60 kez ayrı ayrı çalıştırılıyor.)
Toplam : 23 I/O yapıyor.

işlemci haricinde herhangi bir entegre-çip kullanmadan, yalnızca işlemci ile, nasıl yapılabilir? (74HC165-595 tarzı seri I/O entegresi kullanmadan yapmak istiyorum.)

Şu anda yapabildiğim tek sadeleştirme işlemi; 3 Adet tach buton girişini 2 Adete düşürüp, bu 2 girişten 3 tach butonu okumak.
Bu sadeleştirmeden sonra gereken I/O sayısı 22 Adet ediyor. İşlemcide 21 Adet I/O pini var.

Devreyi en az 1 Adet I/O daha sadeleştirmem lazım. Nasıl yapılabilir.?

NOT:
3 Adet tach butonu, tek 1 Adet adc girişinden okumayıda düşündüm. Butonlar kesmeli kullanılması gerektiğinden dolayı, ADC girişini tach butonları okumak için istediğim halde kullanamadım. Tach butunları CN kesmesi ile istediğim gibi kullanabiliyorum.
 
Son düzenleme:
Eğer ADC girişi varsa butonların hepsini ADC girişinden okutabilirsin. Her buton farklı bir gerilim bölücü yaratır. Ama tak sinek butonu nedir yav :D
 
Kesme konusuna gelince, buton okumak için illa kesme şart değil. Polling yaparak da buton okunabilir. Ama illa kesmede ısrar ediyorsan, ADC girişindeki buton seviyelerini 0V, 0.1V, ve 0.2V seçersin ve ADC girişini CN girişine bağlarsın. Böyle yapınca 3 butonun hangisine basarsan bas, işlemci CN girişinden kesme de yiyecektir.
 
tach buton demek istedim.
1 ADC + 1 CN pini olmak üzere 2 Adet Pin kullanımından bahsetmişsiniz anladığım kadarıyla.
Ben bu kısmı 2 Adet CN pini kullanarak aştım. 1 CN pini sadeleştirmesini yapmayı başarabildim.
2 CN pin-girişinden 3 ayrı buton okunabiliyor şu anda.
 
Son düzenleme:
3 butonun birer ucunu birlestir ve 1 io giris uzerinden oku. Butonlarin diger uclarini da ortak katodlari taradigin pinlere bagla.

Displeylerin katodlarini tararken buton girisini de oku.

Bu sayede 2 pin bosa cikar.
 
Güzelmiş. Çözümü sağladınız. Bunu uygulayacağım. Sağ olun.
 
Son düzenleme:
son çözüm önerisi çalışıyor iş görüyor.
_______________________________________________________________________________________________________________________________________________________________________
merakımdan soruyorum;

girişleri işin içine hiç karıştırmadan, yalnızca çıkışlar üzerinden bir çözüm sağlamak mümkünmüydü? Yine 2 pin sadeleştirmesi (arttırılması) yeterli olacak.
yani 19 adet olan ve istenen çalışmayı gerçekleştiren pinler, 17 adet kullanılarak yine aynı çalışmayı yapabilirlermi?
Entegre kullanılmadan. Diğer kompanentler (direnç, diyot, transistör, kondansatör gibi...) makul bir halde kullanılarak bir çözüm arıyorum.

normalde toplam 19 adet olan çıkışların görevleri şöyle :
7 çıkış seven segment display segmentlerini (a,b,c,d,e,f,g / dp yok.) sürüyorlar. (aktif=1, pasif=0 olup, aynı anda kaçının ne durumda olduğu karışık bilinemiyor.)
3 çıkış seven segment digitlerini (basamaklarını) sürüyorlar. (aynı anda tek bir çıkış aktif=1, diğerleri pasif=0 oluyor.)
buraya kadar olan toplam 10 çıkış ortak katod, 3 digit bir seven segment displeyi sürmede kullanılıyorlar.

kalan diğer 9 çıkış şöyle çalışıyor :
5 ve 4 halinde iki gruba bölünmüş halde ve her grupdan aynı anda 1 er tane çıkış aktif oluyor. Yani çıkışlar yalnız 2 şerli halde aktif oluyorlar.
daha açık bir anlatımla :
5 li grup : A1-A2-A3-A4-A5
4 lü grup : B1-B2-B3-B4 olduğunu düşünürsek,

1. A1-B1
2. A2-B1
3. A3-B1
4. A4-B1
5. A5-B1

6. A1-B2
7. A2-B2
8. A3-B2
9. A4-B2
10. A5-B2

11. A1-B3
12. A2-B3
13. A3-B3
14. A4-B3
15. A5-B3

16. A1-B4
17. A2-B4
18. A3-B4
19. A4-B4
20. A5-B4

halinde çalışıyorlar. 9 çıkışla, 5 X 4 matris halinde, 20 ayrı-bağımsız çıkış sağlanmış oluyor.
amaç 20 adet ve aynı anda yalnızca 1 tanesi aktif olabilen çıkışların sayısını, sadeleştirip 9 adet çıkışla sağlamak oluyor. Bu kadar sadeleştirmeyi başarabildim.

Eksik kalıp açık anlatamadığım bir yer varsa lütfen sorunuz. Çıkışlardan bir çözüm mümkünmüydü?
 
Son düzenleme:
3 tach butonun 1 er pinleri işlemci display tarama çıkışlarına verilip,
3 butonun diğer pinleride birleştirip, işlemciye tek bir giriş olarak verildiğinde (bu giriş pull down direnci üzerinden işlemci VSS - 0V. beslemesinede bağlı)

display tarama çıkışları aktif edildiğinde, butonlar işlemci giriş port pininden okunduğunda sıkıntı olmuyor. istenilen elde ediliyor.

yalnız benim farklı sebeplerden dolayı, butonları okuduğum bu tek girişi, CN Interrupt / External-harici Kesme pinine bağlayıp, kesmeli okumam gerekiyor.
bu kısımda 2 gündür başarı elde edemedim. (sıkıntım 3 butonu tek bir pin üzerinden CN kesmesi içinde okumak kısmında)

bu işlemi yaparken, donanımsal olarak göremediğim - bilmediğim - düşünemediğim bir olaydan dolayı işlemi başaramıyor olabilirmiyim?

sizde prensipde bir sıkıntı görmüyorsanız, yani tek bir tane CN kesmesi ilede 3 butonunda okunması gerektiğini düşünüyorsanız,
çalışmaya dahada yoğunlaşıp denemeler yapar bir şekilde işlemi bitirmeye çalışırım. yeterki sıkıntının yalnız benden kaynaklı olduğunu bileyim.

kısaca problem sadece benim yazılım kodlama beceriksizliğimden kaynaklanıyor olabilirmi? tek sebep bumudur? ne söyleyebilirsiniz?
 
Eger tarama islerini int rutini icinde yapiyorsan ext int onceligi de yuksekse sorun olur.

ext int'in tarama yapilan int rutinini kesebilmesi lazim.
 
belki farklı bir neden çıkabilir diye, bu kısmıda belirtiğiniz yerler dahil komple açıkça anlatayım;

3 çıkışın tarama işlemi Timer Interruptu içinde sırasıyla yapılıyor. Tmer Interruptu saniyede toplamda 150 kez oluşuyor. her bir çıkış için saniyede 50 kere olmuş oluyor.
Timer interupt kesme priority önceliği en düşük seviye ve 1 (bir) değerinde.

CN (Change Natifacition) Kesme pini Intrruptu en yüksek priority önceliğinde yani 7 (yedi) olarak ayarlandı.

Bu durumda CN kesmesi, Timer kesmesinin yarıda bölebiliyor değilmi?
CN Timer kesmesini yarıda bölsede, kendi işini bitirince, tekrar bölünen Timer kesmesi içine dönülmüş oluyor değilmi?

yazılımda sadece bu iki interrupt kullanılıyor. başkada kesme fonksiyonu bulunmuyor.

bu durumda sorun yazlımdan-kodlamadan kaynaklıdır diyebilirmiyiz?
 
Son düzenleme:


3 adet çıkışlar taramalı olarak sırasıyla çalışıyorlar görevleri; 3 digit seven segment displayin digitlerini sırasıyla taramalı olarak sürmek,
Ve butonların birer pinlerine besleme sağlamak.

1 adet giriş normal port girişi olarak da kullanılabir, yada CN / External Interrupt girişi olarakda kullanılabilir. görevi; 3 adet butonu tek pinden okumak.

Şemadaki Input, CN / External Interrupt girişi olarak kullanılsa olurmu? Kesmeli giriş olarak kullanılacak yani.
 
Son düzenleme:
Ext kesme girisini bir tel parcasi ile H/L tetikleyince int rutinine girebiliyormusun?

Aslinda kesme kullanmak zorunda degilsin. Timer int rutininde tarama islemini yapmadan once ilk isin buton girisini okumak olsun. Sonra bir sonraki tarama islemine gec.
 
Ext CN (change natifaciation) girişine sinyal verince içine girebiliyorum. Butonlara basılıncada giriliyor.
Çizimde bir hata yapmışım yeni farkettim, Input CN External Int. kesme girişindeki paralel bağlı direnç kullanılmayıp,
işlemci içinde pull-up direnci olarak kullanılıyor. Çizimdeki bu direnci görmeyiniz.

Farklı nedenlerden dolayı, buton okumalarını, External Cn kesmesi içinde yapabilirsem daha iyi olacak.
Buton okumalarının kesme girişinden yapılmak istenmesinde, prensipde-mantıkda göremediğim, kaçırdığım bir nokta varmı-yokmu bunu öğrenmek istiyorum.
Buton okumalarının CN External kesme girişinden yapılmasında bir problem görülmüyorsa, yazılıma yoğunlaşacağım. Hata yazılımda diyeceğim.
 
Son düzenleme:
Donanim sorunu varsa display devresini cizmedigin surece sorun anlasilamaz.
 


Devremin tam hali bu dur.
Input girişi normal port pini olarak okunmayacak, kesmeli giriş olarak kullanılacak.
Input girişi External Interrupt / CN (Change Natification) pin girişi olarak kullanılacak. (CN pull-up direnci işlemci dışında kullanıldı.)
Butonları okuma kısmında istenilen çalışma sağlanamadıysa, bu durumda tek suçlu yazılımmıdır?

Kısaca devresi ve özellikleri böyle olan bir tasarımda, butonlar sıkıntısız okunurlarmı? Okunmalarında bir engel varmıdır?
 
Son düzenleme:
Evet sorunsuz okunur. Donanim yapilandirilirken, CN girisi 1'den sifira duserken int uretecek sekilde kurulmali. Giristen butonlara giden direnci kaldirip atabilirsin. Fakat giristen Vdd ye pullup direnci olmak zorunda.
 

Forum istatistikleri

Konular
6,350
Mesajlar
108,017
Üyeler
2,626
Son üye
subliminal_kuvvet

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