Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: jrcapa - 29 Mayıs 2015, 23:39:21

Başlık: PIC18F4550 portD dahili Pull-up
Gönderen: jrcapa - 29 Mayıs 2015, 23:39:21
Merhabalar.

Datasheette yazan :

Each of the PORTD pins has a weak internal pull-up. A single control bit, RDPU (PORTE<7>), can turn on all the pull-ups. This is performed by setting RDPU. The
weak pull-up is automatically turned off when the port pin is configured as a digital output or as one of the
other multiplexed peripherals. The pull-ups are disabled on a Power-on Reset. The PORTE register is shown in Section 10.5 "PORTE, TRISE and LATE Registers"


yazıya binaen, türlü türlü register ayarlarını denediğim halde başaramadığım PortD'nin pull-up'ını kullanabilen olduysa beni aydınlatabilir mi?

Yaptığım register ayarları şöyle:

ADCON1 |= 0x0F;   // Hepsi digital
CMCON  |= 7;        // Comparator pasif
CCP1CON=0x00;   // ECCP pasif
SPPCON=0x00;     //SSP pasif

RDPU_bit=1;         //porte|=0x80;  --->> portD pullup AKTİF

trisD = 0xFF;         
trisE = 0xFF;

portD = 0x00;         
portE = 0x00;


Teşekkürler.






Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: canbulut - 30 Mayıs 2015, 00:03:14
hızlıca port b pull up kullanma şansınız yok mu
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: jrcapa - 30 Mayıs 2015, 00:12:47
B portunda INT0,INT1 VE INT2 kesmelerini kullanmak istediğimden bu yolu zorluyorum. Kesmeler ile pull-up aynı anda yürümüyor,  pull-up pinlerini ayırabilseydik..
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: canbulut - 30 Mayıs 2015, 00:14:13
biraz baktımda sizin pullup ayarlarınızdan  önce şuna benzer bir işlem yapmanız gerekebilir. Kendi kodlarınıza göre deneyiniz.
setup_psp(PSP_DISABLED);
setup_ccp1(CCP_OFF);
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: OnderGrmz - 30 Mayıs 2015, 10:26:13
Merhabalar jrcapa hocam;
Alıntı yapılan: jrcapa - 29 Mayıs 2015, 23:39:21
Yaptığım register ayarları şöyle:

ADCON1 |= 0x0F;   // Hepsi digital
CMCON  |= 7;        // Comparator pasif
CCP1CON=0x00;   // ECCP pasif
SPPCON=0x00;     //SSP pasif
RDPU_bit=1;         //porte|=0x80;  --->> portD pullup AKTİF
trisD = 0xFF;         
trisE = 0xFF;
portD = 0x00;         
portE = 0x00;
RDPU_bit=1; ile Dahili pull-up aktif
trisD=0xFF ile tüm D portunu giriş olarak ayarlıyorsunuz.
fakat portD=0x00 ile D portu çıkışına lojik 0 değeri yazmış olmuyor musunuz ?
D portu için şu şekilde dener misiniz ?


ADCON1 |= 0x0F;   // Hepsi digital
CMCON  |= 7;        // Comparator pasif
CCP1CON=0x00;   // ECCP pasif
SPPCON=0x00;     //SSP pasif
trisD = 0xFF;
RDPU_bit=1;         //porte|=0x80;  --->> portD pullup AKTİF       
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: esensoy - 30 Mayıs 2015, 12:30:58
pull up ı kullanamadığına nasıl kanaat getirdin? data sheet te weak pull up diye yazar, bazen yeterli gelmiyor, mecburen 4k7 veya 10k atmak gerekiyor?
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: jrcapa - 30 Mayıs 2015, 14:03:47
Alıntı yapılan: esensoy - 30 Mayıs 2015, 12:30:58
pull up ı kullanamadığına nasıl kanaat getirdin? data sheet te weak pull up diye yazar, bazen yeterli gelmiyor, mecburen 4k7 veya 10k atmak gerekiyor?

Simulasyonda gözlemliyorum, gerçekte bakmadım. Portb için de weak pull up yazılıyor ama simulasyonda görünüyor. Bilemiyorum portb'den farkı var mı.
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: esensoy - 30 Mayıs 2015, 19:06:07
pull up i görünce portD dediğinizi hiç görmedim,
doğrulamak için datasheet e de baktım, portD de pull up yok, B de var,

Sayfa 18
PORTB is a bidirectional I/O port. PORTB can be software
programmed for internal weak pull-ups on all inputs.

Sayfa 20
PORTD is a bidirectional I/O port or a Streaming
Parallel Port (SPP). These pins have TTL input buffers
when the SPP module is enabl
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: canbulut - 30 Mayıs 2015, 20:58:46
konuyu açan şu an ki hali hakkında bilgi verse belki halledildi konu kapanacak.
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: selimkoc - 30 Mayıs 2015, 20:59:16
Şöyle bir deneme yaptım;

PORTE Registerinin 7. bitini (RDPU) 1 yaptım. (PORTE.RDPU=1;)

PORTD'nin ilk 2 pinini giriş diğerlerini çıkış olarak yönlendirdim. (TRISD=0x03;)

PORTD'yi 0 yaptım (PORTD=0;)

PORTD'nin pinlerini ölçtüm. RD0 ve RD1'de 4.80 V diğer pinlerde 0V okudum.

Yani sonuç olarak PORTD'de dahili Pull-Up kullanılabiliyormuş. Bunu da öğrenmiş olduk.
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: OnderGrmz - 30 Mayıs 2015, 21:14:04
Alıntı yapılan: esensoy - 30 Mayıs 2015, 19:06:07
pull up i görünce portD dediğinizi hiç görmedim,
doğrulamak için datasheet e de baktım, portD de pull up yok, B de var

Esensoy Hocam syf. 120 de aşağıdaki ifadeler
[IMG]http://i59.tinypic.com/2gtcfpd.png[/img]

Alıntı yapılan: selimkoc - 30 Mayıs 2015, 20:59:16
PORTD'nin ilk 2 pinini giriş diğerlerini çıkış olarak yönlendirdim. (TRISD=0x03;)

PORTD'yi 0 yaptım (PORTD=0;)

PORTD'nin pinlerini ölçtüm. RD0 ve RD1'de 4.80 V diğer pinlerde 0V okudum.
Selimkoc Hocam PORTD'yi neden 0 yapıyoruz ?
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: baran123 - 30 Mayıs 2015, 21:22:39
PortD de için bakmak lazım ama geçen gün gözüme şu linkdeki ifade çarptı.
http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC18F4550 (http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC18F4550)
Solda özellikler kısmında İnternal pull up resistor yazıyor ama D+, D-  için
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: esensoy - 30 Mayıs 2015, 21:52:01
Gerçekten de 120. sayfaya bakınca var olduğu görülüyor, ama 18. sayfadaki tabloda bahsetmemişler, unutmuşlar belki,
Neyse simulasyondan ziyade gerçekte bakmak lazım diye düşünüyorum,

Baran D+ ve D- deki pulluplar usb device olarak çalıştırdığında hızı belirleyen 1K5 dirençleri ifade ediyor,
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: selimkoc - 30 Mayıs 2015, 22:16:30
Alıntı YapPORTD'yi neden 0 yapıyoruz

Sadece ölçüm için; girişlerin H, çıkışların L olduğunu görmek için. Varsayılan değer değil, çıkışlar 0 olsun diye.
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: esensoy - 30 Mayıs 2015, 22:34:59
Alıntı yapılan: selimkoc - 30 Mayıs 2015, 22:16:30
Sadece ölçüm için; girişlerin H, çıkışların L olduğunu görmek için. Varsayılan değer değil, çıkışlar 0 olsun diye.
18 serisinde pin i çıkış yaptıysanız pinde portx i değil latxin değerini görürsünüz,
girişler için de , şimdi deneme şansım yok ama, diyelim ki B0 ı giriş yaptık, 4k7 ile de +vcc ye bağladık,
portB = 0x00 desek çıkışı 0 yapar mı ki? bana yapmaz gibi geliyor,

yani portb ye değer atamak pek mantıklı gelmedi bana,
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: selimkoc - 30 Mayıs 2015, 22:43:33
Ölçümleri bizzat donanım üzerinde, aşağıda linkini verdiğim kit üzerinde ölçtüm.

Deney kiti https://elektrokod.wordpress.com/2014/09/10/usb-hid-bootloader-pic18f4550-deney-karti/ (https://elektrokod.wordpress.com/2014/09/10/usb-hid-bootloader-pic18f4550-deney-karti/)
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: esensoy - 30 Mayıs 2015, 22:56:11
Yanlış ölçümüşsünüz demedim, latb yi ölçmüşsünüzdür dedim,
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: OnderGrmz - 31 Mayıs 2015, 00:35:40
Alıntı yapılan: selimkoc - 30 Mayıs 2015, 22:16:30
Sadece ölçüm için; girişlerin H, çıkışların L olduğunu görmek için. Varsayılan değer değil, çıkışlar 0 olsun diye.

Hocam yanlış anladıysam düzeltin.

ADCON1 |= 0x0F;   // Hepsi digital
CMCON  |= 7;        // Comparator pasif
CCP1CON=0x00;   // ECCP pasif
SPPCON=0x00;     //SSP pasif
RDPU_bit=1;         //porte|=0x80;  --->> portD pullup AKTİF
trisD = 0x0F;          // D portunun D0, ..,D3 pinleri input
// D4,...,D7 output olarak ayarlandı.
portD = 0x00;   // komutu ile çıkış olan pinler D4,..., D7 sıfırlandı. Diğer pinler ( D0,.. , D3 ) pull-up olarak kaldı.


Selimkoc Hocam doğru anlamış mıyım ?
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: selimkoc - 31 Mayıs 2015, 10:09:44
PORTD'nin ilk 4 biti giriş diğerleri çıkış olarak ayarlanmış ve girişler Pull-Up yapılmış.

Kodlar doğru.
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: jrcapa - 31 Mayıs 2015, 14:18:56
Evet arkadaşlar D portu için pull-up'ı kullanabiliyoruz. Simulasyonda lojik 1'ler görünmeyince bir devre kurup üzerinde test ettim ve çalıştı.  Devre simulasyonda çalışmıyor yani D0-D1 lojik1 olmadığından sıfıra çekemiyorsunuz. Dikkat edilmesi gereken bir husus da  RDPU_bit=1 yaptıktan sonra portE'nin 7. biti tekrar sıfırlanmamalı. İlk mesajımda yaptığım hata bu imiş.

Çalışan basit bir devre ve programı şöyle:

(http://i.hizliresim.com/JYZ5PW.jpg)

ADCON1 |= 0x0F;   // Hepsi digital
CMCON  |= 7;        // Comparator pasif
CCP1CON=0x00;   // ECCP pasif
SPPCON=0x00;     //SSP pasif
RDPU_bit=1;         //porte|=0x80;  --->> portD pullup AKTİF
trisD = 0x03;  //D0-D1 giriş   
trisE = 0xF0;     
portD = 0x00;
portE = 0xF0;  //7.bit 0 olursa pull-up çalışmıyor.

while(1)     // Sonsuz döngü.
{
if(!portd.rd0) {   while(!portd.rd0);

portd.rd7=1;   delay_ms(500);  portd.rd7=0;
   }
if(!portd.rd1) {  while(!portd.rd1);

porte.re0=1;   delay_ms(500);  porte.re0=0;

PWM2_Set_Duty(128);  //herhangi bir işlem yapılabilir.
    }
}
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: OnderGrmz - 04 Haziran 2015, 04:24:59
Merhabalar;
Konu ile bağlantılı olduğunu düşünerek burada bir soru sormak istiyorum.

LATDbits.LATD0
PORTDbits.RD0

Bu 2 register da D portuna erişilebiliyor diye biliyorum. Peki bunların farkları neler ? Kullanım alanı olarak bir farkı var mı ? İki register ı da hem okuma hem yazma işlemlerinde kullanabilir miyiz ?
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: Tagli - 04 Haziran 2015, 08:47:56
Eskiden bu başlıkta (https://www.picproje.org/index.php/topic,10891.msg146758.html#msg146758) konuşulmuştu. Özetle, yazarken LAT'a yazmak, okurken PORT'tan okumak gerekiyor.
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: esensoy - 04 Haziran 2015, 08:50:26
Porttan okuma yapılır, pine yazmak için LAT kullanılır,

D0 pinini okumak yani diital giriş olarak kullanmak istiyorsan;int main (void){
int i = 0;

TRISDbits.TRISD0 = 1;
i = PORTDbits.RD0;
while(1);
}


Yok D0 ı çıkış olarak kullanmak istiyor ve durumunu da lojik 1 yapmak istiyorsan;int main (void){

TRISDbits.TRISD0 = 0;
LATDbits.LATD0 = 1;
while(1);
}
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: OnderGrmz - 04 Haziran 2015, 19:39:05
Merhabalar;
Alıntı yapılan: Tagli - 04 Haziran 2015, 08:47:56
Eskiden bu başlıkta (https://www.picproje.org/index.php/topic,10891.msg146758.html#msg146758) konuşulmuştu. Özetle, yazarken LAT'a yazmak, okurken PORT'tan okumak gerekiyor.
Konuyu okudum hocam.

Alıntı yapılan: esensoy - 04 Haziran 2015, 08:50:26
Porttan okuma yapılır, pine yazmak için LAT kullanılır,


        ADCON1 |= 0x0F;   // Hepsi digital
        CMCON  |= 7;        // Comparator pasif
        CCP1CON=0x00;   // ECCP pasif
        SPPCON=0x00;     //SSP pasif
       
        TRISD = 0x0F;    // D portunun D0, ..,D3 pinleri input
                        // D4,...,D7 output olarak ayarlandı.
        PORTE|=0x80;       // RDPU_bit=1; --->> portD pullup AKTIF
        PORTDbits.RD7=1;
        Delay10KTCYx(500);
        LATD=0x00; // Tüm porta sıfır yazılmaya çalışıldı, fakat D0, ..,D3 pinleri pull-up nedeniyle hala lojik 1 kaldı !!!

LATD=0x00; yazıp tüm portu lojik 0'a çeksek bile input olarak ayarladığımız pinler hala lojik 1 kaldı. Bu nedenle şöyle bir yorum yapabilir miyiz
" input olarak ayarlanan pinlere lojik olarak değer yazamıyoruz " ?

Not: devamında şöyle bir işlem var inputların lojik 1 olarak kaldığını buradan anlıyorum

while(1)
{
               if(PORTDbits.RD0==0)
                {
        Delay10KTCYx(500);
                LATDbits.LATD7=1;
                LATDbits.LATD6=1;
                LATDbits.LATD5=1;
                }
                else if(PORTDbits.RD0==1)
                {
                Delay10KTCYx(50);
                LATDbits.LATD7=0;
                LATDbits.LATD6=0;
                LATDbits.LATD5=0;
                }
}



Giriş pinine yazmaya çalışmak veya çıkış pinin okumaya çalışmak mantıksız oluyor. Ama böyle bir şey yapılabiliyor mu onu merak ettim ?
Başlık: Ynt: PIC18F4550 portD dahili Pull-up
Gönderen: Tagli - 04 Haziran 2015, 23:31:42
Giriş bacağının latch'ına yazarsan, o bacak ileride çıkışa ayarlanırsa latch'a son yazılan çıkış etkili olur. Çıkış bacağından normal olarak okuma yapabilir ve bacaktaki mantık seviyesini öğrenebilirsin. Bazı durumlarda (örneğin kısa devre benzeri bir durumda) sen çıkışı 1 yapsan bile çıkış gerçekte 0'da kalabilir. İlgili çıkış bacağını okumak buna benzer bir durumda işe yarayabilir.