devre soft start dc motor devresi yanlız kodlar sorun yok similasyon yapıyorum proteusda çalısıyor ama kodları 12f675 yukleyıp board denediğim zaman 675 cıkısında hiç bir sinyal olmuyor acaba dedım pic mi sorun var 500 ms led yakma sondurme demo yapdım calısıyo hersey normal ama kodu pıce yukleyıp gercekde calısmıyo sigortalara felan herseyı kontrol ettım calısmadı neden calısmaz yardımcı olurmusunuz programlama kitim pickit 2 orjınal sorun yok ccs PCWHD full derlemedede sorun yok tmm ama gel gelelım proteusda calısan devre gercekde calısmıyor ?
#include <12F675.h>
#FUSES NOWDT
#FUSES PUT
#FUSES INTRC_IO
#FUSES NOBROWNOUT
#fuses NOMCLR
#use delay(int=4000000)
int16 i ;
void main()
{
setup_adc_ports( NO_ANALOGS );
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a(0x00) ;
output_a(0x00) ;
while(i<1000)
{
for(i=0; i<1000; i++)
{
output_high(pin_a2) ;
delay_us(i) ;
output_low(pin_a2) ;
delay_us(1000-i) ;
output_high(pin_a2) ;
}
}
}
(http://e1203.hizliresim.com/v/k/3m49d.jpg)
proteusta çalışıp gerçek devrede çalışmıyorsa %90 gerçek devrede sıkıntı vardır mclr pini ,beslemeleri bir kontrol et.%10 luk düşük bir ihtimal benim başıma geldiği için biliyorum derlemede v.s de problem yok ama kodu pice atınca çalışmıyor versiyondan kaynaklı ,4.107 versiyonunu problemsiz sekilde çalıştırdım
mclr kullanılmıyor zatı kapalı besleme 5v board uzerınde basıt bır yanan sönen led kodu yazdım denedım calıyo ama bu kod derlemede sorun olmadıgı halde proteusda calısıor ama gercekde calısmıyor işin içinden çıkamadım
#include <12F675.h>
#FUSES NOWDT,INTRC_IO,NOMCLR
#use delay(int=4000000)
int16 i ;
void main()
{
while(i<1000)
{
for(i=0; i<1000; i++)
{
output_high(pin_a2) ;
delay_us(i) ;
output_low(pin_a2) ;
delay_us(1000-i) ;
output_high(pin_a2) ;
}
}
}
birde böyle deneyebilirmisiniz?
denedım hocam verdıgınız codu derledım gıne aynı pıcden tık yok ama proteusda calsıyorr :(
gmaille yolladım ama yollamadı buraya hex dosyası olarak koyuyurum siz alıp bos bir txt dosyasına kopyalayıp uzantısını hex yapacaksınız
:1000000000308A0004280000FF238316900000308F
:100010008A001D281230A902031C1C2829308400E4
:10002000FC3080050310800C800C000803191C288C
:100030001A280000800B1928080084011F3083054E
:100040001F1383161F109F101F119F11073083125B
:1000500099002508033C031C7328031D332824083A
:10006000E73C031C7328A501A4012508033C031CDD
:100070007228031D3F282408E73C031C72288316BE
:100080000511831205152508A600A60AA603031963
:100090004D28FF30A9000A2046282408A9000A207C
:1000A00083160511831205112408E83CA6000330CD
:1000B000A7002508031C250FA7022708A800A80AE7
:1000C000A80303196728FF30A9000A206028260822
:1000D000A9000A208316051183120515A40A031925
:0800E000A50A35282928630058
:02400E00C401EB
:00000001FF
;PIC12F675
;CRC=D1E7 CREATED="17-Mar-12 19:39"
Alıntı yapılan: skara1214 - 17 Mart 2012, 19:43:05
gmaille yolladım ama yollamadı buraya hex dosyası olarak koyuyurum siz alıp bos bir txt dosyasına kopyalayıp uzantısını hex yapacaksınız
hocam denedım gıne olmadı pic hıç tık yok çıldırmamak elde değil . :-X
yardımlarınızı bekliyorummm...
donanımla alakalı olsa gerek pic bozuk olamazmı başka picle deneyin en son ihtimalde pic programlayıcı bozuk olabilir
led yakıp söndürme yaptım çalışıyor diyorsunuz. yazmış olduğunuz kod da led yakıp söndürmekten farklı bir kod değil. scope varsa, scope ile a2 pinine bir bakın, kodda yazdığınız işlemi yapıyormu. eğer bu işlemi yapıyorsa, transistorunuzü kontrol edin. scope yoksa da led yakıp söndürme deneyini a2 pini üzerinden deneyin. bir a2 pinini çıkış olarak ayarlayın tris fonksiyonu ile.
hocam eger pic yada programlayıcı bozuk olsa bu kod nasıl calısıyor board da...
denedım cıkıs dırek lede baglı soft start kodu yukledıgımde led hıc yanmıyor normalde pwm 4 sn ıcınde cıkıs hıgıh oluyor yanması lazım led hıc yanmıyor ama asagıdakı kodu yazdıgımda a2 port led yanıp sönuyor
basla:
output_high(pin_a2) ;
delay_ms(500) ;
output_low(pin_a2) ;
delay_ms(500) ;
output_high(pin_a2) ;
goto basla ;
}
şu olumsuz duruma bi çözüm yolu bulabilecek babayiğit yok mu ? :o
Kardeşim ccs c pek kullanmadım ama su var 12f675'te pinlerin ismini GPIO yapman gerekmiyormu bir öyle dene istersen ,
yok kardesım gpıo pbp proton ıcın ccs de setup_tris_a , output_a(0x00) ; seklinde yada farklı bir sekli varsada ben bilmiyorum
Xtal i hemen pic in bitişiğine monte etmeniz gerekli , 1cm den daha uzak montajlarda osilatör devresi çalışmıyor .
dahili osc kullandım krıstal yok
Pic in datasheetini incelemek lazım belki de harici osc yapmanız lazım olabilir.
while(i<1000) döngüsünün sonrasına, while(1); şeklinde yazıp dener misiniz?
jakal dediğini yapdım bu sefer proteusdada calısmadı cıkıs hep low
#include <12F675.h>
#FUSES NOWDT
#FUSES PUT
#FUSES INTRC_IO
#FUSES NOBROWNOUT
#fuses NOMCLR
#use delay(int=4000000)
int16 i ;
void main()
{
set_tris_a(0x00) ;
output_a(0x00) ;
while(i<1000);
while(1)
{
for(i=0; i<1000; i++)
{
output_high(pin_a2) ;
delay_us(i) ;
output_low(pin_a2) ;
delay_us(1000-i) ;
output_high(pin_a2) ;
}
}
}
kardeş dediğimi yanlış anlamışsın,
önceki yazdığın kodda
while(i<1000)
{
kod
kod
}
while(1);
şeklinde demek istedim.
Sen C biliyor musun? yoksa gözünden mi kaçtı bu:
son yazmış olduğun koda bakarsan, senin kodun while(i<1000); döngüsünün içerisinde sürekli döner, başka hiç işlem yapmaz,
Alıntı yapılan: jackal183 - 18 Mart 2012, 14:10:32
kardeş dediğimi yanlış anlamışsın,
önceki yazdığın kodda
while(i<1000)
{
kod
kod
}
while(1);
şeklinde demek istedim.
Sen C biliyor musun? yoksa gözünden mi kaçtı bu:
son yazmış olduğun koda bakarsan, senin kodun while(i<1000); döngüsünün içerisinde sürekli döner, başka hiç işlem yapmaz,
denedim neleri denemedımkı pic patlatacam artık calısmam dedı baska bıse demedı
dedıgın gıbı yapdım jackal proteusda calısıyo gercekde gıne calısmıyo ben kökenım pbp ccs c ögrenıyorum askerden yenı geldım cogu seyı unutmusum dedıgın sekıldekı kodlar;
#include <12F675.h>
#FUSES NOWDT
#FUSES PUT
#FUSES INTRC_IO
#FUSES NOBROWNOUT
#fuses NOMCLR
#use delay(int=4000000)
int16 i ;
void main()
{
setup_adc_ports( NO_ANALOGS );
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a(0x00) ;
output_a(0x00) ;
while(i<1000)
{
for(i=0; i<1000; i++)
{
output_high(pin_a2) ;
delay_us(i) ;
output_low(pin_a2) ;
delay_us(1000-i) ;
output_high(pin_a2) ;
}
}
while(1);
}
int16 i ; değişkenine değer atamayı unutmusum
şu şekilde yazınca calısdı int16 i=0 ; seklınde yapınca devre çalışdı butun ılgılenen arkadaslar cok cok tesekkur ederım saolun...
peki neden öyle olduğunu anladınız mı? C'ye alışabilmeniz için soruyorum bu soruyu?
arkadaşlar aynı sorun bendede var gerçekte çalışmıyor devre herşey tamam.simülasyonda çalışıyor.
Proteusta çalışan devre gerçek devrede de calismasi gerekir. Çalışmıyorsa gercek devrede eksik olan birseyler vardir. Ben de breadboard başında cildirma noktasına gelmiş, saçlarını beyazlatmis biriyim. Devre elemanlarını teker teker değiştirerek dene. Yılma sonunda calisiyor.
Merhaba,
Proteus simulasyon esnasında bazı hesaplamaları otomatik yapar.Siz gerçek devreyi kurarken eleman hesaplarınızı da datalarına göre koymalısınız.(örnek olarak isiste smd ledlerde 150 ohmluk direnç kullanırım,kartta ise 1kohmluk.Ayrıca PIC çalışmalarınızda boş bacak bırakmayınız.Yazılım ile ya VDD veya VSS'ye bağlayınız.PIC kontrollarında optokaplır kullanmanız size ayrı bir lüks çalışma verecektir.Motor vs gibi manyetik alan yaratan elemanları da ya röle kontrolu veya opto ile izole ediniz ve PIC beslemesi ile motor beslemesinin ayrı ayrı yapın.İsiste çalışan bir proje de teknik hata yok matematiksel noksanlıklar var demektir.Amatör olarak verebileceğim bilgiler bu kadardır.Kolay gelsin.
2012 den kalma bir konuyu hortlatmışsınız :)
İlk hortlama 23 Mayıs 2015 de olmuş,
yetmemiş bugünde cana gelmiş.
Biraz daha hortlasın bari; 8)
Atanmayan ilk değer ram hafızada 0xFFFF olarak saklanıyor ise
ve bu değer de 1000' den büyük olduğuna göre birinci while
komutu atlanıyor.
Proteus ram kısmını 0x00 değerleri ile doldurmuş ise i değeri
0x0000 olacaktır. Bu durumda ilk while komutu işleyecektir.
Bu nedenle her zaman ilk değer atamak uygun olacaktır...
Proteus da değişkenler ilk start durumda 0x00 oluyor ama gercekte start anında degerler farklı oluyor değişken 0 atanmamıs durumunda proteus çalışmaması gerekir realtime oldugu için
Bende proteus ve gerçek ile ilgili bir bilgi paylaşayım tekrar:
Proteus PORTların ilk değerlerinide gerçekten farklı alabiliyor,
misal
PORTB = !PORTB;
output_B( !input_B() );
PORTB.0 = !PORTB.0
output_toggle(pin_B0);
;
Gibi bir kod parçası yazılırsa
proteusda ve gerçekte farklı çalışabilir.
Aslında bu şekildeki kodlar tehlikeli zaten.
aynı PORTtan okuyup aynı PORTa yazılacaksa sıkıntı olabilir zaten,
bu durum detaylı şekilde eski konularda tartışılmıştı.
Birde zaten programın başında
bütün portlara ilk değer verilmeli,
giriş çıkış durumları ayarlanmalıdır.
(Derleyiciye göre giriş çıkış durumu atamak gerekmeyedebiliyor tabi.)
Arkadaşlar bende devremi uzun süre çalıştıramamıştım , problem mclr bacağıyla ilgiliymiş.Mclr bacağına 5v vermek gerekiyormuş , vermeyince pic kendine sürekli reset atıyormus.