Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: korcenk - 15 Mayıs 2014, 11:58:08

Başlık: mcp23017 calışması hakkında yardım
Gönderen: korcenk - 15 Mayıs 2014, 11:58:08
arkadaşlar mcp23017 entegresinden input okuya bilmek için entegrenin registırını nasıl ayarlama gerekiyor.datasheet te baktım ama anlayamadım.
yardımcı olursanız sevinirim.
iyi çalışmalar
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: CLR - 15 Mayıs 2014, 12:57:07
sadece okuma yapacaksan register ayarlamana gerek yok çünkü default olarak portlar giriş , yani  A portunu okuyacaksan
0x41(read),GPIOA(0x09), ile okuyabilirsin, B portu için 0x19

Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: korcenk - 15 Mayıs 2014, 14:28:56
ustam çok sağol deneyeceğim. peki çıkış olarak kullanmak istersem ne göndermem gerek
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: CLR - 15 Mayıs 2014, 15:01:49
 A portunu çıkış yapmak için


0x40+0x00+0x00   //PORTA pinlerinin tümünü çıkış yapar
0x40+0x00+0xF0   //PORTA pinlerinin 0-3 çıkış/ 4-7 giriş yapar

Mesela PORTA'ya 0xFF yazmak için önce bir kereye mahsus
0x40+0x00(IODIRA)+0x00  // gönderilir yani portun tamamı çıkış yapılır
0x40+0x0A(OLATA)+0xFF   // artık pinlerde 0xFF görülecektir


Bu chip çok fonksiyonel, herderde deva, ben SPI olanını tercih ediyorum
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: korcenk - 28 Mayıs 2014, 10:57:14
arkadaşım verdiğin bilgiler için sağol. input olarak okumayı başaramadım hep ff geliyor. output olarak yazma işleminde ise 0b00001111 yazarsam yazmıyor.0b10001111 yazarsam hepsini yazıyor yani lsb bitlerini yazmıyor ama msb bitlerinden 1 tanesi olursa lsb ve msb yi yazıyor.
yardımcı olabilirmisiniz.
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: CLR - 28 Mayıs 2014, 12:16:30
yardımcı olamam çünkü ortada işlemci yok, kod yok, hardware I2C veya soft I2C hangisini kullandığın belli değil, şematik yok, ne yazarsam boşuna olur. Önce buraya devre şematiğini sonra yazdığın kodu yükle hata nerede o zaman bakabilirim.
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: korcenk - 28 Mayıs 2014, 14:09:25
arkadaşım kusura bakma şemayı ve kodu ekledim.

#include <xc.h>
#include "stdio.h"
#include "stdlib.h"
#include "plib/i2c.h"

char i=0;
void main(void) {
    TRISB=0x00;
    PORTB=0x00;
    OpenI2C(MASTER, SLEW_OFF);   // Initialize I2C module
   SSPADD = 9;

    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x00);
    IdleI2C();
    WriteI2C(0x00);
    StopI2C();

     while (1) {
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x0a);
    IdleI2C();
    WriteI2C(0b00001111);
    IdleI2C();
    StopI2C();

    StartI2C();
    IdleI2C();
    WriteI2C(0x41);
    IdleI2C();
    WriteI2C(0x19);
    IdleI2C();
    i=ReadI2C();
    StopI2C();
    PORTB=i;
    }


(http://s18.postimg.cc/6e6qnqub9/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/6e6qnqub9/)
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: CLR - 28 Mayıs 2014, 14:47:53
Aşağıdaki kodu dene, çalışması lazım, ayrıca işlemci frekensını yazmamışsın, I2C clock frekansını düşürüp denersen daha emin olabilirsin. Ayrıca yazdığım yerlere en az 1ms delay ekle, çalıştırınca istersen silersin. 




char i=0;
void main(void) {
    TRISB=0x00;
    PORTB=0x00;
    OpenI2C(MASTER, SLEW_OFF);   // Initialize I2C module
   SSPADD = 9;

// bank değiştir
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x0A);
    IdleI2C();
    WriteI2C(0x80);
    StopI2C();
//delay 1ms
// porta output
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x00);
    IdleI2C();
    WriteI2C(0x00);
    StopI2C();
// delay  1ms
     while (1) {
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x0a);
    IdleI2C();
    WriteI2C(0b00001111);
    IdleI2C();
    StopI2C();
// delay 1ms
    StartI2C();
    IdleI2C();
    WriteI2C(0x41);
    IdleI2C();
    WriteI2C(0x19);
    IdleI2C();
    i=ReadI2C();
    StopI2C();
    PORTB=i;
//delay ms
    }



Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: korcenk - 28 Mayıs 2014, 16:49:52
kodu denedim ouput düzeldi.dediklerinide yaptım ama hala input okuyamıyorum .i2c frekansını 100khz ayarladım.
#define _XTAL_FREQ 4000000
#include <xc.h>
#include "stdio.h"
#include "stdlib.h"
#include "plib/i2c.h"

char i=0;
void main(void) {
    TRISB=0x00;
    PORTB=0x00;
    OpenI2C(MASTER, SLEW_OFF);   // Initialize I2C module
   SSPADD = 9;

   // bank değiştir
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x0A);
    IdleI2C();
    WriteI2C(0x80);
    StopI2C();
    __delay_ms(1);
//delay 1ms
// porta output
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x00);
    IdleI2C();
    WriteI2C(0x00);
    StopI2C();
    __delay_ms(1);
// delay  1ms


while (1) {
    StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x0a);
    IdleI2C();
    WriteI2C(0b00001111);
    IdleI2C();
    StopI2C();
    __delay_ms(1);
// delay 1ms
    StartI2C();
    IdleI2C();
    WriteI2C(0x41);
    IdleI2C();
    WriteI2C(0x19);
    IdleI2C();
    i=ReadI2C();
    StopI2C();
    PORTB=i;
    __delay_ms(1);
//delay ms
    }
}
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: CLR - 28 Mayıs 2014, 21:15:33
@korcenk

datasheet okumayı öğrenmen lazım,

// okuma kısmı


StartI2C();
    IdleI2C();
    WriteI2C(0x40);
    IdleI2C();
    WriteI2C(0x19);
    IdleI2C();
    RestartI2C();
     IdleI2C();
    WriteI2C(0x41);
    IdleI2C();
    i=ReadI2C();
    IdleI2C();
    NotAckI2C();
    IdleI2C();
    StopI2C();
    PORTB=i;
    __delay_ms(1);
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: korcenk - 29 Mayıs 2014, 22:36:07
arkadaşım sağol sayende mcp23017 ve mcp23s17 ikisinide input ve output olarak kullanabiliyor.
Başlık: Ynt: mcp23017 calışması hakkında yardım
Gönderen: CLR - 29 Mayıs 2014, 22:50:08
rica ederim, o chip'in çok özeliiği var, şuan en basit özelliklerini kullanıyorsun, zamanla diğerlerinide geliştirirsin, spi kullanırsan daha problemsiz kullanabilirsin.