proteus çalışan devre gerçek uygulamada çalışmıyor

Başlatan bulut_01, 17 Mart 2012, 18:57:45

TA7R

Pic in datasheetini incelemek lazım belki de harici osc yapmanız lazım olabilir.

jackal183

while(i<1000) döngüsünün sonrasına,  while(1); şeklinde yazıp dener misiniz?

bulut_01

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) ;
}
}
}
YENİLMEZ..

jackal183

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,

bulut_01

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);
}

YENİLMEZ..

bulut_01

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...
YENİLMEZ..

jackal183

peki neden öyle olduğunu anladınız mı? C'ye alışabilmeniz için soruyorum bu soruyu?

sifirzero

arkadaşlar aynı sorun bendede var gerçekte çalışmıyor devre herşey tamam.simülasyonda çalışıyor.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

Recep METE

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.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

kudretuzuner

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.
Amatör

mert3162

|^^^^^^^^^^^^\ ||\
|__PICPROJE.ORG __
||'""|""\___
| _____________ l | |__|__|___| )
(@!)!(@)"""""**|(@) (@)****|(@)---------

 Üstadlarım nonstradam & Logan

RaMu

İlk hortlama 23 Mayıs 2015 de olmuş,
yetmemiş bugünde cana gelmiş.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mehmet

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...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

bulut_01

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
YENİLMEZ..

RaMu

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.)
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html