Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Stepper sürmek...

Başlatan RcALTIN, 17 Ağustos 2010, 23:20:05

RcALTIN

18F452 ile stepper sürmek istiyorum ancak tasarımdan dolayı stepper sürmek için C0,C1,C2,C5 pinlerini kullanarak ULN2803ü sürebilmem gerekiyor. Genelde stepper sürmek için bir "pozisyon" dizisine, yarım ve tam adım için pin konumları yazılarak port_x(pozisyon[ i ]); şeklinde döngü içinde sürme işlemi gerçekleştiriliyor. Ancak bu şekilde sürecek olursam port_c= ifadesiyle c3 ve c4 pinlerini etkileyip i2c iletişimini bozmam söz konusu gibi görünüyor, output_high, output_low ile tek tek pinleri kontrol etsem yazılacak kod hayli uzayacak ve bu bana hiç iyi bir yöntem gibi gelmiyor, son düşüncem i2c pinlerinin o anki durumlarını okuyup, değiştirmeden okudğum hallerini yazmak ancak doğru yoldamıyım bilemedim? yoksa i2c iletişimini durdurarak port_c= şeklinde mi kullanmalıyım? i2c aktifken aynı porttaki stepper'ı sürmenin farklı bir yolu varsa bilmek isterim...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

FFT

#1
Donanımsal I2C aktifken portc=0xFF yapsan bile I2C bundan etkilenmez çünkü o GPIO değil zaten. Yani yavru kurta emir vermek için oymak başı olmak lazım.

RcALTIN

#2
Tek sorun i2c değil, aynı porttaki RS-232 iletişimi de etkilenmeyecek mi yani?
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

M_B

#3
Merhaba ;
PortC de kullanmadığın pinlerin etkilenmesini istemiyorsan bitsel işlemlerden yararlanabilirsin.
ornek olarak şu şekilde yapabilirsin.  ( burda kullanılan veya dır OR )

Portc = pozisyon[i]|0xFF ;
 
şeklinde yapabilirsin.


Not: Düzeltme.  İmla hatası.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

FFT

#4


Öncelikle ilk örnek olarak aldığımız 18F452 nin A portundaki ADC özelliği olan pinlere bir bakalım.




Resimde de takip edebileceğin üzere TTL Input Buffer yazan (ne demek olduğu önemli değil) VE kapısının girişlerinden birine pinin kendisi, diğerine de terslenmiş olarak Analog Input Mode biti bağlanmış durumda. Şimdi diyelimki bizde bu pinlerden 8 tane var ama biz 2 tanesini dijital çıkış ve geri kalan 6 tanesini de analog giriş yani ADC olarak kullanacağız. Ama çıkış seviyelerini öyle hızlı değiştirmeliyiz ki ne sen sor ne ben söyliyeyim...
Ozaman en amele şekilde program yazımına başlayalım;


TRISA=0xFF; A nın tüm pinleri çıkış oldu.
Sonra da 6 ADC pinimizi analog giriş olarak gerekli kodları yazarak tanımlayalım.

Şimdi son durum nedir acaba?

ADC pinlerinde resimdeki Analog Input Mode biti "1" oldu. Yani VE kapısının çıkışı herzaman "0" !!
Aynı pine bağlı bir çizgi daha çekilmiş ve aşağıdaki oka yakın yere To A/D Converter and LVD Modules yazılmış. Yani analog giriş yaptğımız pinin bir ucu da multiplexlenmiş girişlere bağlı olan bir iç-ADC ye gidiyor. Analog Input Mode bitimiz "1" olduğu için de o pin dijital giriş olarak kullanılamıyor, aslında çıkış olarak da kullanılamıyor ama nedense bunu şemada göstermemişler. Onuda üzerine basa basa tüm türkçe kitaplarda "analog olarak seçilen pinler otomatik olarak giriş yapılır" diye belirtmişler. Demekki biz PORTA=0xFF yazsak sadece çıkış olarak kalan 2 pinimiz "1" olacak. Geri kalan pinler ADC olarak tanımlandığı için PORTA=0xFF durumu onların umurlarında bile değil. Rahatlıkla har vurup harman savurabiliriz, nasılsa ADC pinleri bundan etkilenmeyecek çünkü oraya bağlı bir tel gitmiyor.

Sıradaki örneğimiz dış-kesme pini olan RB0 pini.




Burada durum okadar açık görünmese de mantık yine aynısı. Giriş/Çıkış olarak tanımlandığında çalışan bölüm ile dış-kesme olarak tanımlanan bölüm ayrılmış durumda. Eğer biz önce bu pini çıkış olarak ayarlayıp sonrada EXTINT özelliğini aktif yaparsak bu pin otomatik olarak giriş yapılıp I/O özellikleri kapatılacaktır ve sinyal direkt olarak Schmitt Trigger Buffer üzerinden gerekli kesme modülüne gidecektir. Burada da PORTB=0xFF yaparsak bundan dijital çıkış yapılmamış pinler etkilenmez.

Sadece UART modülünde şöyle bir durum varmış, bunu yazı ile yazmışlar. RX pinini manuel olarak dijital giriş yapmalıyız, kendisi bu işi yapmıyormuş, bu da üretici taraflı maliyet düşürücü bir mesele gibi görünüyor. Zaten UART modülü TTL seviyesinde çalıştığı için elle giriş yapılması istenmiş olabilir.

Görüldüğü üzre işlemcilerin içinde anahtar gibi çalışan seçici modüller sayesinde P0[23]/AD0[0]/I2SRX_CLK/CAP3[0]/MCOB1/SSEL0 gibi 6 özelliği bulunan bir pini seçilen özelliğin modülüne yönlendirip, diğer modüllerin bağlantılarını koparabilirsin. Bu durumda kullanmadığın modül o pine bağlı olmaz ve dolayısıyla kullanılmayan modülün çıkışını da o pinde göremezsin.



Düzeltme:
Ayrıca M_B nin dediği de öyle olmaz, PORTC|= .... şeklinde olur.

RcALTIN

#5
CCS in örneklerinden EX_STEP.c dosyasını inceledim ve buradan yardım alarak kendi fonksiyonumu yazıp ihtiyacımı karşıladım
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !