Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: Cemre. - 03 Aralık 2015, 16:31:34

Başlık: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 03 Aralık 2015, 16:31:34
Herkese iyi günler.

Bugün internetten satın aldığım lojik seviye (5V-3.3V çift yönlü) dönüştürücüm geldi. Ancak modülle hiç bir iletişim kuramıyorum

https://www.pololu.com/product/2595 (https://www.pololu.com/product/2595)

Satın aldığım modül bu. Haberleştiğim modül ise MPU-6050. Pololu sitesinde I2C için kullanılabileceğinden hatta 400kHz seviyelerinden bahsetmiş. Ben şimdilik 100kHz tanımlıyorum ve modülü aşağıdaki fonksiyonla kontrol ediyorum.

Ana döngümde bu fonksiyonu
check_device(0x68); şeklinde çağırdığımda LCD'de Device not found yazısını görüyorum ama neden?


void check_device(unsigned short dev_address){
I2C1_Start();
while(I2C1_Wr(dev_address)){
  Lcd_Out(2,1,"Device not found");
  delay_ms(50);
}
Lcd_Out(2,1,"Device is OK");
I2C1_Stop();
}


Daha önce bu kod ve aynı modül, aynı işlemci, aynı breadboard üzerinde (yani modülün gelmesini beklediğim sıralarda) Device OK yazısını görüyordum, modülün registerlarına yazma işlemi gerçekleştiriyordum, okumada sorun yaşıyordum. Şimdi hiç bir hareket yok, sizce sebebi ne olabilir? Neyi eksik, yanlış yapıyorum?

Teşekkürler, iyi günler.

Ekleme (birkaç gün önceki konu): https://www.picproje.org/index.php/topic,62180.0.html (https://www.picproje.org/index.php/topic,62180.0.html)

Kodun tamamı;

//#include "mpu_fs.c"
// Durum LED'leri
#define LED1 LATE.B0
#define LED2 LATE.B1
#define LED3 LATE.B2

#include "register_map.h"

const int mpu_I2C_ADDR = 0x68;
// Variables used
unsigned int raw_data[7];
int gyro_x_temp, gyro_y_temp, gyro_z_temp, accel_x_temp, accel_y_temp, accel_z_temp, temp_raw;
char i, buff, gyro_x_out[15], gyro_y_out[15], gyro_z_out[15], accel_x_out[15], accel_y_out[15], accel_z_out[15], temp_out[15];
float temp, gyro_x, gyro_y, gyro_z, accel_x, accel_y, accel_z;
char txt1[]     = "                ";
int lcd_x = 0;
// LCD bağlantıları tanımlanıyor
sbit LCD_RS at  LATD.B4;
sbit LCD_EN at  LATD.B5;
sbit LCD_D4 at  LATD.B0;
sbit LCD_D5 at  LATD.B1;
sbit LCD_D6 at  LATD.B2;
sbit LCD_D7 at  LATD.B3;

sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
// LCD bağlantıları tanımlandı

void init_mcu(){
     ADCON1     = 0x1F;                          // Analog özellikli tüm pinler Dijital G/Ç yapıldı.
     CMCON      = 0x07;                          // Karşılaştırıcılar kapatıldı.
     PORTB      = 0x00;
     TRISB      = 0x00;
     TRISE      = 0x00;                          // PORTE çıkış yapıldı.
}

void check_device(unsigned short dev_address){
I2C1_Start();
while(I2C1_Wr(dev_address)){
  Lcd_Out(2,1,"Device not found");
  delay_ms(50);
}
Lcd_Out(2,1,"Device is OK");
I2C1_Stop();
}

void MPU_I2C_Write(unsigned char s_addr, unsigned char r_addr, unsigned char len, unsigned char *dat) {
  unsigned int i;
  I2C1_Start();                      // issue I2C start signal
  I2C1_Wr(s_addr & 0xFE);            // send byte via I2C  (device address + W(&0xFE))
  I2C1_Wr(r_addr);                   // send byte (address of EEPROM location)
  for (i = 0 ; i < len ; i++){
    I2C1_Wr(*dat++);                 // send data (data to be written)
  }
  I2C1_Stop();                       // issue I2C stop signal
  lcd_x += 1;
}

void MPU_I2C_Read(unsigned char s_addr, unsigned char r_addr, unsigned char len, unsigned char *dat) {
  unsigned int i;
  I2C1_Start();                      // issue I2C start signal
  I2C1_Wr(s_addr & 0xFE);            // send byte via I2C  (device address + W(&0xFE))
  I2C1_Wr(r_addr);                   // send byte (data address)
  I2C1_Repeated_Start();             // issue I2C signal repeated start
  I2C1_Wr(s_addr | 0x01);            // send byte (device address + R(|0x01))
  for (i = 0; i < (len-1); i++){
    *dat++ = I2C1_Rd(_I2C_ACK);      // Read the data (acknowledge)
  }
  *dat = I2C1_Rd(_I2C_NACK);         // Read the data (NO acknowledge)
  I2C1_Stop();                       // issue I2C stop signal
  lcd_x += 1;
}

void init_mpu(){
  MPU_I2C_Write(mpu_I2C_ADDR, MPU6050_RA_PWR_MGMT_1 , 1, 0x80);
  Delay_ms(100);
  IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Write(mpu_I2C_ADDR, MPU6050_RA_PWR_MGMT_1 , 1, 0x00);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Write(mpu_I2C_ADDR, MPU6050_RA_FIFO_EN , 1, 0x78);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Write(mpu_I2C_ADDR, MPU6050_RA_INT_ENABLE , 1, 0x10);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Read (mpu_I2C_ADDR, MPU6050_RA_ACCEL_CONFIG, 1, &raw_data);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  raw_data[0] |= 0x18;
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Write(mpu_I2C_ADDR, MPU6050_RA_ACCEL_CONFIG, 1, &raw_data[0]);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Read (mpu_I2C_ADDR, MPU6050_RA_INT_ENABLE, 1, &raw_data);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  raw_data[0] |= 0x11;
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
  MPU_I2C_Write(mpu_I2C_ADDR, MPU6050_RA_INT_ENABLE, 1, &raw_data[0]);
  Delay_ms(100);
    IntToStr(lcd_x,txt1);
  Lcd_Out(2,1,txt1);
}

void main() {
     init_mcu();
     LED1 = 1;
     Lcd_Init();                         // LCD Kurulumu
     Lcd_Cmd(_LCD_CLEAR);                // Ekranı Temizle
     Lcd_Cmd(_LCD_CURSOR_OFF);           // İmleç Kapalı
     LED2 = 1;
     I2C1_Init(100000);
     Delay_ms(50);
     Lcd_Out(1,1,"START");
     check_device(0x68);
     Delay_ms(2000);
     init_mpu();
     Lcd_Out(2,1,"                 ");
     Lcd_Cmd(_LCD_SECOND_ROW);
     Lcd_Out_CP("#");
     Lcd_Out(1,1,"#1 OK!          ");
     Delay_ms(100);
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Out(1,1,"#2 OK!          ");
     Delay_ms(100);
}
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: mehmet - 03 Aralık 2015, 17:31:40
1) İki cihaz GND olarak birleşmiş durumda mı?
2) 3.3V tarafinda SCL ve SDA pinleri pull-up mu?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 03 Aralık 2015, 17:40:47
Hocam öncelikle cevabınız için teşekkürler.

Elimde 3.3V bir gerilim kaynağım olmadığı için 5V ve 3.3V'u arduino uno kartımdan alıyorum. Yani PIC 5V arduino vasıtasıyla USB'den, modül 3.3V yine arduino'nun 3.3V regülatöründen besleniyorlar. Board üzerinde de ayrıca GND ortaklaması yapıyorum. Yani birinci sorunun cevabı kesinlikle evet.

İkinci sorunuzun cevabı ise  modülün şemasında gizli.
(https://a.pololu-files.com/picture/0J5321.1200.png?18fd2407f46e4090995c31187ca4f758)

Yani evet, 10kOhm ile pull-up yapılmış durumda. Eğer harici pull-up gerekmiyorsa bu sorunun cevabı da evet.

İşin ilginç tarafı, arduino ile modül dönüştürücü olsun yada olmasın çatır çatır haberleşiyor, dataları seri porttan okuyorum. Hatta odam 23 dereceymiş ben de biryerlerden soğuk geliyor diyordum  ;D

Şaka bir yana, kafayı yemek üzereyim. Breadboard'dan şüphelenip devreyi tekrar kurmaktan b.boardun her yerini gezdim artık gidecek yer de kalmadı. Zaten yaptığım bağlantıları multimetrenin diyot kademesiyle de kontrol ediyorum, iyice paranoyak yaptı beni bu durum
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: OG - 03 Aralık 2015, 18:19:58
Alıntı Yap
Elimde 3.3V bir gerilim kaynağım olmadığı için 5V ve 3.3V'u arduino uno kartımdan alıyorum.
Arduino'dan anlamam da, sanki bir yerlerde okudum gibi, "beslemesi çok zayıf" şeklinde eleştiriliyordu.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 03 Aralık 2015, 18:32:13
Alıntı yapılan: OG - 03 Aralık 2015, 18:19:58
Arduino'dan anlamam da, sanki bir yerlerde okudum gibi, "beslemesi çok zayıf" şeklinde eleştiriliyordu.

Hocam yazarken benim de aklıma geldi, aslında kendi haberleşebiliyorken PIC + mpu6050'yi besleyememesi ilginç geliyor ama belki de sorunun kaynağı budur. Ama şuan elimde başka bir güç kaynağı yok maalesef.

mesaj birleştirme:: 03 Aralık 2015, 18:53:24

Proteus ISIS simulasyonunda aynı kodla sadece adresi 0x90 olarak değiştirip DS1631 ile iletişim kurabiliyorum. Device is OK yazısı dönüyor. Yani sorunu kodlarımda değil board.da aramam gerekiyor sanırım. Peki bu yönde bir öneriniz olabilir mi?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: drmp - 03 Aralık 2015, 20:10:44
yazılarda çift yönlü yazıyor ama
mosfetli şema  tek yönlü gibi     H side  >>> low side gibi

led ler ile bir kontrol yap çift yönlümü tek yönlü mü??...
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 03 Aralık 2015, 20:12:34
Alıntı yapılan: drmp - 03 Aralık 2015, 20:10:44
yazılarda çift yönlü yazıyor ama
mosfetli şema  tek yönlü gibi     H side  >>> low side gibi

led ler ile bir kontrol yap çift yönlümü tek yönlü mü??...

Hocam HV tarafından HV 5V'a bağlıyken herhangi bir pine 5V verdiğimde yine LV tarafı 3v3'e bağlı iken karşısındaki pinden 3v3 okuyorum ölçü aletiyle. Bu durum tersi için de geçerli. Sizin önerebileceğiniz bir şema var mı bu durumu test etmek için?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Kabil ATICI - 03 Aralık 2015, 21:18:48
Şemadaki dönüştürücü çalışıyor, emin olabilirsiniz. Hem de iki yönde.
(http://3.bp.blogspot.com/-nZxPHzQUpV8/Td35c9t0AeI/AAAAAAAACAY/mbLTicyoRzQ/s1600/m8_hp03s_usb_01.jpg)
farkli bir ürün için ama olsun... mosfet olarak BS170 kullanmıştım.
5 V tarafın sinyali diyot üzerinden iletilirken, 3.3V tarafın sinyali mosfet üzerinden iletilir.
(http://4.bp.blogspot.com/-q-2AhK0y92I/Td35Ys_SVtI/AAAAAAAACAQ/1d0cCctv6PA/s1600/m8_hp03s_usb_02.jpg)
sadece 5V tarafın sinyalini 3.3V tarafına iletmek için bu yeterlidir. Hatta diyot olarak schotky tipi kullanılırsa gerilim düşümü daha az olacaktır.
İletişim hızınızı kontrol edin, belli bir frekansın üzerinde mosfet kapasitif etkiler devreye girmeye başladığı için sinyal bozuluyor.

isis simülasyonuna fazla güvenmeyin. En olmadık durumlarda çalışmaya devam edebiliyor.. (özellikle dijital sinyallerde)

Hatta yerine göre gerilim bölücü dirençler bile iş görebilmektedir...
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 03 Aralık 2015, 22:23:07
Hocam verdiğiniz bilgiler için teşekkürler. Kafam çok karışmış durumda. Bağlantılarımı onlarca kez kontrol ettim. Modül bozuk deyip atamıyorum, Arduino ile hem 5V seviyesinde hem de bahsettiğim 3.3V dönüştürücü ile çatır çatır çalışıyor. Şuan tek şüphelenebileceğim şey aşağıdaki devre şemasında da görülebileceği üzere RB0 pinindeki (SDA) butonun 10k pull-up direnci. Bu dirençten SCL (RB1)'de yok. Ancak lojik dönüştürücünün her iki gerilim tarafında 4k7 pull-up dirençleri mevcut. Karttaki direnci sökeceğim, bakalım değişen birşey olacak mı.

(https://elektrokod.files.wordpress.com/2014/09/deneyseti_pic18f4550_similasyon1.png)

Edit. Maalesef değişen bir şey yok..
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: selimkoc - 03 Aralık 2015, 22:42:22
Bunun için size 5-6$ satılan lojik analizörü şiddetle tavsiye ederim. PIC  tarafı 3.3V zaten H olarak algılar. 3.3V tarafı için en basit dirençli gerilim bölücü bile yeterli olur.

Kart üzerinde LM78L33 var. Bundan ben kendi bilgisayarımda başka modüllere kartlara voltaj uyguladım. Voltaj düşüklüğü olmadı. Yani güç  yeterli oldu.

I2C haberleşmesi için pull-up direnç zaten gerekli. PCF8574 ile I2C haberleşmesi yaptım. Ama her iki taraf ta 5V idi. Haberleşmede problem yok.

Şunu yapabilirsin;

1- Modüle 3.3V geliyor mu? Bunu ölç.
2-Voltaj konvertörü test et. HV tarafına 5V uyguladığında diğer tarafta 3.3V alabiliyormusun?
3- LV tarafından 3.3V uyguladığında HV tarafından 5V alabiliyormusun bunlara bak.

Kolay gelsin...

Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 03 Aralık 2015, 22:45:58
Alıntı yapılan: selimkoc - 03 Aralık 2015, 22:42:22
Bunun için size 5-6$ satılan lojik analizörü şiddetle tavsiye ederim. PIC  tarafı 3.3V zaten H olarak algılar. 3.3V tarafı için en basit dirençli gerilim bölücü bile yeterli olur.

Kart üzerinde LM78L33 var. Bundan ben kendi bilgisayarımda başka modüllere kartlara voltaj uyguladım. Voltaj düşüklüğü olmadı. Yani güç  yeterli oldu.

I2C haberleşmesi için pull-up direnç zaten gerekli. PCF8574 ile I2C haberleşmesi yaptım. Ama her iki taraf ta 5V idi. Haberleşmede problem yok.

Şunu yapabilirsin;

1- Modüle 3.3V geliyor mu? Bunu ölç.
2-Voltaj konvertörü test et. HV tarafına 5V uyguladığında diğer tarafta 3.3V alabiliyormusun?
3- LV tarafından 3.3V uyguladığında HV tarafından 5V alabiliyormusun bunlara bak.

Kolay gelsin...

Üç sorunuzun cevabı da evet hocam. Ben 78L33'ü kartın montajını yaptığım sırada kaybettim maalesef. Modülün üzerinde besleme için kendi 3v3LDO entegresi var 3.3V ve 5V beslemeyi kabul ediyor ve iki şekilde de deniyorum ancak bir cevap yok. Neyse direnci bari geri lehimleyeyim :(

Hocam yakın zamanda bahsettiğiniz lojik analizörü satın alma şansım yok ama elimde pickit3 klonu var. Bunun lojik analizör özelliğini kullanmaya çalıştım ancak oluşan görüntüler hiçte beklediğim gibi değildi. Daha önce pickit3'ü lojik analizör olarak kullanan oldu mu acaba?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Kabil ATICI - 03 Aralık 2015, 22:57:09
MPU-6050 çip olarak değilde modül olarak kullanıyorsan, modülünü veya şemasını bulabilirsen şemasını bir incele üzerinde 3.3V regülatör olabilir.

i2c kullanıyorsan işlemcinin bacaklarını i2c olarak ayarladıktan sonra,  MPU-6050 modül üzerindeki i2c için kullanılan pull-up dirençleri yeterli olması gerekir. Çünkü i2c 'de ne işlemci ne de çevre birimi i2c hatlarını lojik-1 için vcc hattına çekmez. Bu iş pull-up dirençlerine aittir.
Yani senin o çeviriciye ihtiyacın olmayabilir.
Sadece reset vs ek hatlar varsa bunları kontrol etmek için gerekli olabilir. 3.3V hem işlemcinin hem de modülün girişlerini lojik 1 seviyesinde tutmaya yeterlidir. (pull-up direnci)

geriye senin program ile gerekli ayarlamaları yapmana ve programı işletmene kalır.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: drmp - 04 Aralık 2015, 11:13:41
mesela 
L1   0  olunca   H1  0 oluyor mu??

Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 04 Aralık 2015, 15:25:23
Alıntı yapılan: drmp - 04 Aralık 2015, 11:13:41
mesela 
L1   0  olunca   H1  0 oluyor mu??

Evet hocam oluyor, zaten dediğim gibi arduino ile mpu6050 bu modül üzerinden hatasız bir şekilde haberleşebiliyor. Devreyi hiç bozmadan arduinodan söktüğüm kabloları getirip PIC'e taktığımda sonuç hüsran. Hiç bir tepki yok.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: drmp - 04 Aralık 2015, 19:25:14
sorun  lojik  seviye değiştiricide değil   
pic ve programı konrol et

hatta arduino daki programı pice uyarla

modul sağlam anlaşıldı..
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 05 Aralık 2015, 01:23:03
// Durum LED'leri
#define LED1 LATE.B0
#define LED2 LATE.B1
#define LED3 LATE.B2

// LCD bağlantıları tanımlanıyor
sbit LCD_RS at  LATD.B4;
sbit LCD_EN at  LATD.B5;
sbit LCD_D4 at  LATD.B0;
sbit LCD_D5 at  LATD.B1;
sbit LCD_D6 at  LATD.B2;
sbit LCD_D7 at  LATD.B3;

sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
// LCD bağlantıları tanımlandı

void init_mcu(){
     ADCON1     = 0x0F;                          // Analog özellikli tüm pinler Dijital G/Ç yapıldı.
     CMCON      = 0x07;                          // Karşılaştırıcılar kapatıldı.
     TRISB      = 0xFF;
     TRISE      = 0x00;                          // PORTE çıkış yapıldı.
}

void check_device(unsigned short dev_address){
I2C1_Start();
while(I2C1_Wr(dev_address)){
  Lcd_Out(2,1,"Device not found");
  delay_ms(100);
  LED3 =~ LED3;
};
Lcd_Out(2,1,"Device is OK");
I2C1_Stop();
}

void main() {
     init_mcu();
     LED1 = 1;
     Lcd_Init();                         // LCD Kurulumu
     Lcd_Cmd(_LCD_CLEAR);                // Ekranı Temizle
     Lcd_Cmd(_LCD_CURSOR_OFF);           // İmleç Kapalı
     LED2 = 1;
     I2C1_Init(100000);
     Delay_ms(100);
     Lcd_Out(1,1,"START");
     check_device(0x68);
     Delay_ms(200);
     Lcd_Out(1,1,"FINISH");
}


Bu deneme amacıyla basite indirgemeye çalıştığım ancak sonuç alamadığım kodum hocam. Gördüğünüz bir hata ya da eksiklik var mı acaba?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 10 Eylül 2016, 22:19:01
Arkadaşlar bende aynı sorunu yaşıyorum.
Pic ile mpu6050 haberleşmiyor. I2cin komutunu kullarak aldığım verilerin tamamı 2x16 lcd'ye desimal olarak 4112 sayısını döndürüyor.
Bu işi nasıl çözeceğiz? acil yardım lütfen.

Kullandığım basit kod örneği http://www.sonsivri.to/forum/index.php?topic=59978.0 (http://www.sonsivri.to/forum/index.php?topic=59978.0) sitesindekidir.
Herşeyi denedim sonuç yok!
Kullandığım pic 16f876a.

Hatta SCL ile SDA bağlantılarını bile çaprazladım. her halükarda sonuç aynı :(
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Gökhan BEKEN - 11 Eylül 2016, 06:36:47
Alıntı yapılan: Kabil ATICI - 03 Aralık 2015, 22:57:09
MPU-6050 çip olarak değilde modül olarak kullanıyorsan, modülünü veya şemasını bulabilirsen şemasını bir incele üzerinde 3.3V regülatör olabilir.
Aynı sorun başıma gelmişti hocam. Dediğiniz gibi regülatörden dolayı 5v ile beslemek gerekiyor.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 11 Eylül 2016, 10:33:18
Gökhan bey nasıl çözdünüz sorunu daha detaylı anlatabilir misiniz?
Devre şeması falan var mı?

Yukarıda verdiğim sitede satın almış olduğum mpu6050'nin resmi ve kartının devre şeması gözüküyor.
3.3Vluk regülatör kullanılmış durumda. bu regülatörü sökersem gyro yanar!
bunun dışında da aynı 5V ile hem regülatörü hemde gyronun regüllatörünü besliyorum.

Önerdiğiniz nasıl bir çözüm? Araya basit bir lojik seviye dönüştürücü de koydum. yine olmadı?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Gökhan BEKEN - 11 Eylül 2016, 11:10:44
Hocam çip 3.3v ile çalışıyor ama modülde vcc pininin regülatöre bağlı olduğuna dikkat etmemiştim. 3.3v verdiğimde çalışıyordu ama 10 saniye sürmeden kapanıyordu, mcu ya reset atmam gerekiyordu düzelmesi için. Sonradan regülatör olduğunu farkettim ve vcc pinine 5v verince kilitlenmeler olmamaya başlamıştı.
Yani aslında ortadaki sorun benden kaynaklanıyordu.
Eğer siz de benim gibi yaptığınız halde başka bir sorunla karşılaşıyorsanız regülatörün çıkışını bir ölçün bence. Ya da yazılımınızı kontrol edin derim.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 11 Eylül 2016, 11:47:03
mpu6050'ye gerekli 3.3 V ulaşıyor. MPU6050 kartı ve pic aynı besleme kartından 5V ile besleniyor.
İ2Cin komutunu kullanarak açıları okuduğum zaman 4112 gibi bir rakam görüyorum. Who am i okumaya çalıştığım zaman da 16 gibi bir değer dönüyor.
Ancak I2cout kullanıp mpu6050'yi uyandırmaya çalışıyorum. buna rağmen hala aynı rakamları okuyorum. değişen hiçbirşey yok!
pic olarak da 18f2620 kullanıyorum.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 11 Eylül 2016, 12:41:34
Alıntı yapılan: apocalips - 11 Eylül 2016, 11:47:03
mpu6050'ye gerekli 3.3 V ulaşıyor. MPU6050 kartı ve pic aynı besleme kartından 5V ile besleniyor.
İ2Cin komutunu kullanarak açıları okuduğum zaman 4112 gibi bir rakam görüyorum. Who am i okumaya çalıştığım zaman da 16 gibi bir değer dönüyor.
Ancak I2cout kullanıp mpu6050'yi uyandırmaya çalışıyorum. buna rağmen hala aynı rakamları okuyorum. değişen hiçbirşey yok!
pic olarak da 18f2620 kullanıyorum.

Açıları ne ile okuyorsunuz? LCD mi UART mı?

Şu dosyadaki projeyi bir düzenleyip dener misiniz? 18F4550 için çalışıyordu.
http://s9.dosya.tc/server/zm2vp4/usart.rar.html (http://s9.dosya.tc/server/zm2vp4/usart.rar.html)
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 11 Eylül 2016, 14:45:12
Sn Cemre ben malesef C bilmiyorum.

Proton basic ile yazdığım kodlar aşağıdadır.

kod:
Device = 18F2620
Declare Xtal = 20            ' Kristal frekansı: 20 MHz
CMCON = 7                    ' Tüm comparatorlar devre dışı
Declare All_Digital = True   '
TRISA=%00111111                 
TRISB=0                         
TRISC=%01000000

Declare LCD_DTPin = PORTB.4
Declare LCD_RSPin = PORTB.1
Declare LCD_ENPin = PORTB.0
Declare LCD_Interface = 4
Declare LCD_Lines = 2
Declare LCD_Type = 0
Declare LCD_CommandUs = 2000
Declare LCD_DataUs = 50


Dim READAX  As Word
Dim READAY  As Word
Dim READAZ  As Word
Dim READX   As Word
Dim READY   As Word
Dim READZ   As Word
Dim READT   As Word
Dim READT1  As Word
       
Symbol SDA = PORTC.4  ' I2C data pin. Pullup connection is required. You can change, according your board ports
Symbol SCL = PORTC.3  ' I2C clock pin. Pullup connection is required. You can change, according your board ports
Symbol W_DATA = $D2   'Used to perform a Write operation
Symbol R_DATA = $D3   'Used to perform a Read operation
Symbol PWR_M1 = $6B   'Power Management Register 1.This register allows the user to configure the power mode and clock source. It also provides a bit for resetting the entire device, and a bit for disabling the temperature sensor.
Symbol PWR_M2 = $6C   'Power Management Register 2.This register allows the user to configure the frequency of wake-ups in Accelerometer Only Low Power Mode. This register also allows the user to put individual axes of the accelerometer and gyroscope into standby mode.
Symbol CONF_R = $1A   'Congiguration Register.This register configures the external Frame Synchronization (FSYNC) pin sampling and the Digital Low Pass Filter (DLPF) setting for both the gyroscopes and accelerometers.
Symbol G_CONF = $1B   'Gyro Configuration Register.This register is used to trigger gyroscope self-test and configure the gyroscope full scale range.
Symbol A_CONF = $1C   'Accelerometer Congiguration Register. This register is used to trigger accelerometer self test and configure the accelerometer full scale range. This register also configures the Digital High Pass Filter (DHPF).
Symbol XA_MSB = $3B   'Read Register, Output of accelerometer X MSB 8-bit value.
Symbol XA_LSB = $3C   'Read Register, Output of accelerometer X LSB 8-bit value.
Symbol YA_MSB = $3D   'Read Register, Output of accelerometer Y MSB 8-bit value.
Symbol YA_LSB = $3E   'Read Register, Output of accelerometer Y LSB 8-bit value.
Symbol ZA_MSB = $3F   'Read Register, Output of accelerometer Z MSB 8-bit value.
Symbol ZA_LSB = $40   'Read Register, Output of accelerometer Z LSB 8-bit value.
Symbol TEMP_M = $41   'Read Register, Output of temperature MSB 8-bit value.
Symbol TEMP_L = $42   'Read Register, Output of temperature LSB 8-bit value.
Symbol XG_MSB = $43   'Read Register, Output of gyro X MSB 8-bit value.
Symbol XG_LSB = $44   'Read Register, Output of gyro X LSB 8-bit value.
Symbol YG_MSB = $45   'Read Register, Output of gyro Y MSB 8-bit value.
Symbol YG_LSB = $46   'Read Register, Output of gyro Y LSB 8-bit value.
Symbol ZG_MSB = $47   'Read Register, Output of gyro Z MSB 8-bit value.
Symbol ZG_LSB = $48   'Read Register, Output of gyro Z LSB 8-bit value.

I2COut SDA,SCL,W_DATA,PWR_M1,[%10000000] 'RESITER 6B CONFIG (PWR MANAGEMENT)  MPU6050 reset
DelayMS 100
I2COut SDA,SCL,W_DATA,PWR_M1,[%00000000]  'RESITER 6B CONFIG (PWR MANAGEMENT)  MPU6050 START
DelayMS 100
I2COut SDA,SCL,W_DATA,CONF_R,[%00000001]  'RESITER 1A CONFIG (FILTER CONFIG)
DelayMS 10
I2COut SDA,SCL,W_DATA,G_CONF,[%00000000]  'RESITER 1B CONFIG (GYRO CONFIG)
DelayMS 10
I2COut SDA,SCL,W_DATA,A_CONF,[%00010000]  'RESITER 1C CONFIG (ACCELERATOR CONFIG)
DelayMS 10


READI2C:

I2CIn SDA,SCL,R_DATA,XA_MSB,[READAX.HighByte]  'The first 8 bits of 16-bit X Axis
I2CIn SDA,SCL,R_DATA,XA_LSB,[READAX.LowByte ]  'The second 8 bits of 16-bit X Axis
I2CIn SDA,SCL,R_DATA,YA_MSB,[READAY.HighByte]
I2CIn SDA,SCL,R_DATA,YA_LSB,[READAY.LowByte ]
I2CIn SDA,SCL,R_DATA,ZA_MSB,[READAZ.HighByte]
I2CIn SDA,SCL,R_DATA,ZA_LSB,[READAZ.LowByte ]
I2CIn SDA,SCL,R_DATA,TEMP_M,[READT.HighByte ]
I2CIn SDA,SCL,R_DATA,TEMP_L,[READT.LowByte  ]
I2CIn SDA,SCL,R_DATA,XG_MSB,[READX.HighByte] 
I2CIn SDA,SCL,R_DATA,XG_LSB,[READX.LowByte ]
I2CIn SDA,SCL,R_DATA,YG_MSB,[READY.HighByte]
I2CIn SDA,SCL,R_DATA,YG_LSB,[READY.LowByte ]
I2CIn SDA,SCL,R_DATA,ZG_MSB,[READZ.HighByte]
I2CIn SDA,SCL,R_DATA,ZG_LSB,[READZ.LowByte ]
READT1 = (READT / 340 + 37)-192

Print $FE,1, "X=",SDec READAX,"Xg=",SDec READX
Print $FE,$C0, "Z=",SDec READAZ,"T=",SDec READT1
DelayMS 100
       
GoTo READI2C:
End



Bu kodları kullanıyorum.

lojik gerilim seviyesi dönüştürücü devre örneğini de kurdum. ama nafile. LCD'de sadece 4112 görülüyor :(
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 11 Eylül 2016, 18:25:15
Arkadaşlar şimdi farklı birşey daha denedim. pic'in girişine 10k direnç üzerinden 5V uyguladım. ekranda yine 4112 rakamını gördüm.
Anladığım kadarıyla ben bu alet ile hiç haberleşemiyorum.
Bununla ilgili olarak lojik seviye kaydırma uygulamasından da sonuç alamadım.
Elimde 1 adet daha mpu6050 vardı onuda denedim onda da aynı sonuç :(

Şimdi farklı lojik seviye kaydırma uygulamalarını araştırıyorum.
Öneri ve görüşlerinizi rica ederim.

Saygılarımla;
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 12 Eylül 2016, 14:56:38
Arkadaşlar haberleşemiyorum. Kafayı yemek üzereyim. Ne sitelerde adam gibi bir devre şeması var, ne de kod satırı.
Arduino haricinde pic ile  yapabilen 1 kişi gördüm sadece.
Yok mu bana yardım edebilecek bir vatan evladı!!!
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: 35Murat35 - 12 Eylül 2016, 22:32:25
Merhaba iyi bayramlar  :)
Öncelikle şu voltaj olayını halletmek lazım. Elinde pickit3 varsa 3.3v'u kitten alabilirsin. 18F4550 ve LCD 3.3v'da çalışabiliyo. Modülde 3v3 olduğuna göre hepsini aynı voltajla çalıştırabilirsin. Hiç voltaj farklarıyla uğraşma. I2C pinlerinide (SCL ve SDL) 1-10K arası iki dirençle pullup yapabilirsin.
Şurdaki örneğide modifiye edip kullanabilirsin. http://libstock.mikroe.com/projects/view/1002/mpu-imu-click-example
Birde pic'i kaç mhz kristalle çalıştırıyosun. Konfigürasyon penceresinin görüntüsünü yollar mısın?

Ek olarak : Eğer pickit'den besliceksen LCD'nin ışıklandırmasını bağlama, lcdnin ışığını yakınca ne kadar akım çekiyo bilmiyorum. LCD'nin modelini yazarsan onunda dökümanına bakarız. Belki sendeki 3v3 da çalışmıyordur.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: Cemre. - 12 Eylül 2016, 23:39:38
https://www.picproje.org/index.php/topic,62384.msg483235.html#msg483235 (https://www.picproje.org/index.php/topic,62384.msg483235.html#msg483235)

Şu konuyu ve alt konularını inceleyin. Ben verdiğiniz koda biraz baktım ancak pek aşina değilim o yüzden anlayamıyorum. Siz yeni bir konu açın isterseniz Proton kategorisine, bir de şema vs verirseniz daha hızlı çözülür sorun. Ben bu kodda cihaz adresi nerede tanımlanmış göremedim. Adres olarak 0x68 kullanıyorsanız bir de 0xD0 olarak deneyin. Size gönderdiğim dosyada header dosyası içinde gerekli tanımlamalar yapılmış. Bu şekilde bir kullanım daha doğru sanıyorum. Siz yinede yeni bir konu açın oradan elbet Proton bilen birileri yol gösterecektir.

Kolay gelsin. İyi çalışmalar.

Şimdi gördüm

Symbol W_DATA = $D2   'Used to perform a Write operation
Symbol R_DATA = $D3   'Used to perform a Read operation

Eğer Adres piniyle oynamadıysanız hata burada.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 13 Eylül 2016, 16:25:59
Herkese iyi bayramlar :)

Sn.35Murat35
Cevabın için teşekkür ederim. Ben programlayıcı olarak brenner8 kullanıyorum. Bu programlayıcı 5V ile çalışıyor.
Söylediğin gibi tüm devreyi 3.3V ile besledim. Ancak LCD çalışmadı. bildiğimiz standart 2x16 lcd.
Satın aldığım MPU6050 devresinde SDA ve SCL portları 3.3V üzerinden 4.7K dirençler ile pull up yapılmış durumda. Arada lojik kaydırıcı kullanmadan 5V tarafı ile bağlantı kurmayı denedim. Hatta 5V tarafı için 10K'lık dirençler de yerleştirmeyi denedim :) Sonuç alamadım.

Pic18f2620'yi de 20MHz kristal ile çalıştırıyorum. Protonda kullanılan port yavaşlatma-hızlandırma komutunu kullanarak da denedim.

Ancak hiçbirinden sonuç alamadım. Neyse malum bayramda açık elektronikçi olmadığı için kendi elimdeki malzemeler ile lojik shifter yapmayı denedim.
NPN transistörler ile yapılan, mosfet ile yapılan shifterlardan yaptım. Hatta optokuplör ile kendim birkaç çeşit devre tasarladım ancak sonuç yine hüsran.

Artık emin olmamakla birlikte bss138 alıp piayada bulunan shifterlardan yapacağım. Artık bakacağız.

Sn. CEMRE
Sizin de cevabınız için teşekkür ederim. Gönderdiğiniz kısımların tamamını okumuştum ancak uyarınız üzerine tekrar gözden geçirdim. Ben sorunun donanımsal olduğunu düşünüyorum. Çünkü kullandığım hiçbir komut satırında 4112 haricinde geri dönüş sağlayamadım. Hatta bu da bir geri dönüş değil! Eğer PİC'in SDA portuna direk sabit 5V uygularsanız ekranda yine 4112 yazısını görüyorsunuz.

Neyse söylediğiniz gibi

Symbol W_DATA = $D2   'Used to perform a Write operation
Symbol R_DATA = $D3   'Used to perform a Read operation

kısımlarında hata olabilir. D0 ve D1'den haberleşemeyince yaptığım araştırmalarda 68 69 D0 D1 D2 D3 kullanıldığını gördüm. bu nedenle yaptığım denemerden biridir sadece bu. çok dikkate almayın bu kodu lütfen.

Özellikle "Who Am I" ($75) almaya çalıştığımda 104 görmem gerekirken hala 4112 görüyorum. MPU ile haberleşmeyi sağladığımı bu şekilde anlayabileceğim.

Logic Shifter yapıp denedikten sonra cevabı sizler ile paylaşırım.

Sizler shifter kullandınız mı? Ne tavsiye edersiniz?
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: apocalips - 14 Eylül 2016, 02:08:58
Arkadaşlar selamlar.

Lojik seviye dönüştürücüyü yaptım. haberleşmeyi "Declare I2C_Slow_Bus On" olarak ayarladım. haberleşme olmadı.
Ancak haberleşmenin kontrolünü yapmak için SDA ve SCL'ye osiloskop bağladığım zaman WHO_AM_I kodunda ilk cevabımı 104 olarak aldım :)

Bingo !!! doğru cevap :)

Şimdi sorum şu. Benim tahminim bu habeleşme hattında bir şekilde ortaya çıkan yüksek miktarda gürültü var ve osiloskop bunu filtreledi. Nasıl düzeltebilirim?
Soru 2. sizin başka bir öneriniz var mı?

Teşekkürler.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: mehmet - 14 Eylül 2016, 18:43:51
Hem LV hem de HV yollarına 1K
ile pull-up yapıp deneyiniz.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: OG - 21 Haziran 2017, 02:10:53
Alıntı yapılan: Kabil ATICI - 03 Aralık 2015, 21:18:48
Şemadaki dönüştürücü çalışıyor, emin olabilirsiniz. Hem de iki yönde.
(http://3.bp.blogspot.com/-nZxPHzQUpV8/Td35c9t0AeI/AAAAAAAACAY/mbLTicyoRzQ/s1600/m8_hp03s_usb_01.jpg)
farkli bir ürün için ama olsun... mosfet olarak BS170 kullanmıştım.
5 V tarafın sinyali diyot üzerinden iletilirken, 3.3V tarafın sinyali mosfet üzerinden iletilir.


S ve D pinleri ters isimlendirilmiş.
Başlık: Ynt: Lojik Seviye Dönüştürücü neden çalışmadı?
Gönderen: mehmet - 21 Haziran 2017, 04:17:32
(https://i.stack.imgur.com/06PjX.jpg)