mikroC-Pwm sorunu

Başlatan Bayramsumbul, 26 Ocak 2014, 20:20:46

Bayramsumbul

Merhaba arkadaşlar.
Söze başlamadan önce şema;

Ve kod;
unsigned short keydata = 0, special = 0, down = 0;
sbit PS2_Data            at RD0_bit;
sbit PS2_Clock           at RD1_bit;
sbit PS2_Data_Direction  at TRISD0_bit;
sbit PS2_Clock_Direction at TRISD1_bit;
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D7_Direction at TRISD7_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD4_bit;
void main() {
  Ps2_Config();
  Lcd_Init();
  PWM1_Init(1250);
  Delay_ms(100);
  Lcd_Cmd(_Lcd_Clear);
  Lcd_Cmd(_Lcd_Cursor_Off);
  Lcd_Out(1,1,"Bayram    SUMBUL");
  Lcd_Out(2,1,"www.picproje.org");
  Delay_ms(2500);
  Lcd_Cmd(_Lcd_Clear);
  PWM1_Set_Duty(255);
  PWM1_Start();
  while(1)
  {
  if(Ps2_Key_Read(&keydata,&special,&down))
  {
  if(!special&&down){Lcd_Chr_Cp(Keydata);}
  else if(down && (keydata == 1)){Lcd_Cmd(_LCD_FIRST_ROW);}
  else if(down && (keydata == 2)){Lcd_Cmd(_LCD_SECOND_ROW);}
  else if(down && (keydata == 16)){Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);Lcd_Chr_Cp(' ');Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);}
  else if(down && (keydata == 18)){Lcd_Cmd(_LCD_Clear);}
  }
  delay_ms(1);
  }
}

Bu kodu şemasını verdiğim devrede denediğim zaman sanki sürekli reset atıyor mikrodenetleyici.Motor belli bir süre çalışıp duruyor ama arka plan da pwm nin frekansı olan ses duyuluyor.(Beep vs.) Ama pwm ile ilgili satırları çıkarınca hiç bir sorun yok.Beslemeyi usb üzerinden yapıyorum.Sizce sorun nedir?
Ayrıca mcu winpic tarafından tanınmıyor ama icprog tarafından tanınıyor.Sorun mcu da olabilir mi?
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker

#1
Usb gucu yetmiyor olabilir. Guclu bir kaynak kullanmaniz mumkun mu?

mesaj birleştirme:: 26 Ocak 2014, 20:25:05

Bir de picin besleme uclari qrasinda 100nf goremedim devrede.

Bayramsumbul

#2
Alıntı YapUsb gücü yetmiyor olabilir. Güçlü bir kaynak kullanmanız mümkün mü?
Evet olabilir.Peki en az kaç Amper olmalı?
Alıntı YapBir de pic'in besleme uçları arasında 100nf göremedim devrede.
Evet unutmuşum.Bu kitler ile çalışınca insan devre kurmayı unutuyor sanki :)
Peki usb zaten filtreli değil mi?(Yani masaüstü bilgisayarın güç kaynağı)

mesaj birleştirme:: 26 Ocak 2014, 20:32:57

Bir de şu var;Programda data->RC0 ve clock->RC1 olarak tanımlı ama ps2 klavye bağladığım zaman çalışmıyor ancak uçları değiştirdiğim zaman sorun kalmıyor bu neden olabilir."mikroC" kütüphanesinin sorunu mu?
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker

Data clock meselesinde siz bir hata yapiyor olmayasiniz. Mesela klavyenin uclarini karistiriyor olabilirsiniz. Ps2 klavye kutuphanesinin orneginde bir hata vardi sanirim help dosyasindaki. Kullandiginiz motorun zorlanma ve kalkis akimini rahatça karsilayacak bir kaynak lazim. Usb beslemesine fazla guvenmeyin, picin besleme pinlerine ve l293 besleme uclarina yakin 100nf kullanin.

Bayramsumbul

#4
Şu an fark ettim evet pinler yanlış.Bu arada bağlantı yaptığım klavyenin resmi;






Bu arada en kısa zamanda devreyi yeniden kurup deniyeceğim.
--------------------------------------------------------------------------------
Fark ettim ki bağlantılarını bakarak yaptığım resim(mikro C help belgesindeki) connector tarafı imiş.Zaten böyle kablo ucu mu olur diye epey düşünmüştüm.İyice bakınca doğrusunu buldum.Tamamdır sorun yok :)
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker

Polarite tersken çalişmasi mumkun degil.

Bayramsumbul

#6
Alıntı YapPolarite tersken çalişmasi mumkun değil.
Evet bende ona şaşırmıştım.Ama hata bende imiş.
Peki winpic neden uCU'yu görmüyor?
--------------------------------------------------
Şimdi denediğimde ise sorunsuz tanıdı.Ah winpic...
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker

Başka bir pic ile denediniz mi?

Bayramsumbul

#8
Evet başka bir 877A yı tanıyor.Bilmem belki deneme yaptığım 877A'ya biraz işkence yapıyorum belki ondandır.Mesela devre çalışırken devreden çıkarma,yine devre çalışır iken kristali sökme ve arada sırada breadboard'a takarken bir iki pin kaydırma gibi :)

mesaj birleştirme:: 26 Ocak 2014, 21:44:00

Tamamdır Sağ ol @LukeSkywalker. Sorunu hallettim,sığaçları ekleyince sorun çözüldü demek ki motor çalışınca gürültü oluşturuyor.Ondandır herhalde.
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker


Bayramsumbul

Yeni konu açmadan sorayım. Stirng to int gibi bir fonksiyon var mı?
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker

Alıntı yapılan: Bayramsumbul - 26 Ocak 2014, 21:55:51
Yeni konu açmadan sorayım. Stirng to int gibi bir fonksiyon var mı?
Yok. Ne icin kullanacaksiniz? Pwm degerini klavyeden mi degistireceksiniz?

Bayramsumbul

Evet.Elinizde örnek uygulama var mı?Yeni yeni tanıyorum mikroC'yi. Beni cezbeden tarafı kütüphaneleri gerçi bence kütüphaneler insanı tembelleştiriyor ama neyse hızlı uygulama geliştirmek için güzel bir şey.
Bir Elektronik Meraklısının Serüveni...

LukeSkywalker

O halde gelen ASCII kodlardan 48 cikartarak, yüzler,onlar ve birler basamaklarini bulacaksiniz.

Mr.Java

#14
Buna gerek yoktur.MikroC ANSI C standartlarını ve C99 yazım dilini destekliyor.Hazır kütüphaneden şikayetçiseniz işte size fırsat.Kendi dönüştürme fonksiyonlarınızı yazabilirisiniz.Bunun için C atoX fonksiyonunu kullanabilirsiniz(X için i=integer,f=float,l=long) Örnek;

#include<stdio.h>
#include<stdlib.h>
int main( void )
{
	char kok_iki[] = "1.414213";
	char pi[] = "3.14";
	char tam_bir_sayi[] = "156";
	char hayatin_anlami[] = "42 is the answer";

	printf( "%d\n", atoi( tam_bir_sayi ) );
	printf( "%d\n", atoi( hayatin_anlami ) );
	printf( "%f\n", atof( kok_iki ) );
	printf( "%f\n", atof( pi ) );
	return 0;
}