pcbway

MINI SUMO>>> PAUSE 5000 SORUNU

Başlatan onrsrc, 30 Mayıs 2012, 00:24:48

onrsrc

Arkadaşlar merhabalar bi konuda acil yardımınıza ihtiyacım var;

16F84A kullanarak 2 dc motorlu, 4 cny70 li, 1 hc-sr04 ultrasonic sensorlü mini sumo yaptım , programlarını yazdım ancak program sürekli PAUSE 5000 sorunu veriyor; 5 sn bekliyor tam çalşmak üzereyken cızt ediyor duruyor tekrar 5sn bekliyor bu böyle sürüyor. Acaba PAUSE 5000 i yanlış yere mi yazıyorum neden  bu sorunla karşılaşıyorum 2 gündür bununla uğraşıyorum. Bir fikriniz varsa lütfen fikirlerinizi paylaşın. Programım burda;


DEFINE OSC 4
PORTA=0
PORTB=0
TRISA=%00010000
TRISB=%01111111
SYMBOL  CNY7_L2=PORTB.0
SYMBOL  CNY7_L1=PORTB.1
SYMBOL  CNY7_R2=PORTB.2
SYMBOL  CNY7_R1=PORTB.3
SYMBOL  ANA_SENSOR=PORTB.6
SYMBOL  TRIP=PORTB.7
SYMBOL  MOTOR_L_G=PORTA.0
SYMBOL  MOTOR_L_I=PORTA.1
SYMBOL  MOTOR_R_G=PORTA.2
SYMBOL  MOTOR_R_I=PORTA.3
CNY_ST  VAR BIT
TIMER   VAR WORD
CNY_ST=0
PORTA=0
PAUSE 5000
\'_________________________________ANA PROGRAM DÖNGÜSÜ__________________________

ANAPROGRAM:

IF  CNY7_L1=CNY_ST   OR  CNY7_L2=CNY_ST   OR  CNY7_R1=CNY_ST   OR  CNY7_R2=CNY_ST   THEN
    GOSUB   SAVUNMA
    GOTO    ANAPROGRAM
    ELSE
    GOSUB   TARAMA
    ENDIF
   
GOTO    ANAPROGRAM
TARAMA:
IF  ANA_SENSOR=1    THEN
        TIMER=TIMER+1
        IF  TIMER<1200 THEN
        LOW     MOTOR_L_G
        LOW     MOTOR_R_I
        HIGH    MOTOR_L_I
        HIGH    MOTOR_R_G
        RETURN
        ENDIF
       
   
        ENDIF
     IF  ANA_SENSOR=0    THEN

        LOW     MOTOR_L_G
        LOW     MOTOR_R_G
        HIGH    MOTOR_L_I
        HIGH    MOTOR_R_I         
        TIMER=0
        HIGH    TRIP
        PAUSEUS 10
        LOW     TRIP
        RETURN
ENDIF
   



\'___________________________________CNY 70 ALT PROGRAMI (SAVUNMA)_______________
SAVUNMA:
IF  CNY7_L1=CNY_ST AND CNY7_R1=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_L_G
    HIGH    MOTOR_R_G
    PAUSE   500
    ENDIF
   
IF  CNY7_L2=CNY_ST AND CNY7_R2=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_L_I
    HIGH    MOTOR_R_I
    PAUSE   500
    ENDIF

IF  CNY7_L1=CNY_ST AND CNY7_L2=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_L_I
    PAUSE   500
    ENDIF
   
IF  CNY7_R1=CNY_ST AND CNY7_R2=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_R_I
    PAUSE   500
    ENDIF
   
IF  CNY7_L1=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_L_G
    PAUSE   50
    HIGH    MOTOR_R_G
    PAUSE   500
    ENDIF
IF  CNY7_L2=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_L_I
    PAUSE   50
    HIGH    MOTOR_R_I
    PAUSE   500
    ENDIF
IF  CNY7_R1=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_R_G
    PAUSE   50
    HIGH    MOTOR_L_G
    PAUSE   500
    ENDIF
IF  CNY7_R2=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_R_I
    PAUSE   50
    HIGH    MOTOR_L_I
    PAUSE   500
    ENDIF
    RETURN
END





onrsrc

30 Mayıs 2012, 16:11:31 #1 Son düzenlenme: 30 Mayıs 2012, 16:12:15 onrsrc
arkadaşlar yokmu PIC BASIC den anlayan, yardım edin lütfen yarın sabah 9 da yarışma başlıyor ve ben kafayı yemek üzereyim, sen o kadar emek harca pause 5000 i çalıştırama.. :\'(

onrsrc

arkadaşlar yokmu PIC BASIC den anlayan, yardım edin lütfen yarın sabah 9 da yarışma başlıyor ve ben kafayı yemek üzereyim, sen o kadar emek harca pause 5000 i çalıştırama.. :\'(

veli dayı

Sana cevap yazmak yardımcı olmak için içim gidiyor ama çok profosyonel değilim. olmassa fornext döngüsüyle dene gecikmeyi başka da bir şey aklıma gelmiyor.

davut naci kaya

merhaba
pause 5000 oldukça yüksek bir bekleme süresi ve hatalı çalışmaya neden olabilir böyle yapmak yerine

For k=1 TO 5 step 1
Pause 1000
Next

şeklinde kodlayıp deneyin. ayrıca alt programların başlangıçlarına da pause 20 gibi gecikmeler  ekleyin.

fatih88

for next döngüsü ile yap gecikmeleri program daha rahat çalışır

onrsrc

yanıtlayan arkadaşlara teşekkürlerimi sunarım..
for next döngüsü de yapmama rağmen pause 5000 deki gibi aynı sorunu veriyordu. başka bir programlayıcı ve pic kullanmama rağmen bu sorunu çözemedik ama aklımıza şöyle bir fikir geldi. Zaten ilk defa böyle bişeyle karşılaştım. Yarışa bu basit ve saçma neden dolayı başlayamasaydım çok üzülürdüm. Neyse sorunu nasıl çözdüğümü anlatayım olurda bir ihtimal bu sorunla karşılaşırsa bir arkadaşımız onun için bir fikir olur dedim;


\'****************************************************************
\'*  Name    : ROBOT YAZILIMI                                    *
\'*  Author  : ONUR SÜRÜCÜ - MECHANICAL ENGINEERING              *
\'*  Notice  : PROGRAMMED BY ONUR SÜRÜCÜ AND ALL RIGHTS RESERVED *
\'*  Date    : 27.05.2012                                        *
\'*  Version : 1.512                                             *
\'*  Notes   :                                                   *
\'*          :                                                   *
\'****************************************************************
 
   
DEFINE OSC 4
PORTA=0
PORTB=0
TRISA=%00010000
TRISB=%01111111
SYMBOL  CNY7_L2=PORTB.0
SYMBOL  CNY7_L1=PORTB.1
SYMBOL  CNY7_R2=PORTB.2
SYMBOL  CNY7_R1=PORTB.3
SYMBOL  ANA_SENSOR=PORTB.6
SYMBOL  TRIP=PORTB.7
SYMBOL  MOTOR_L_G=PORTA.0
SYMBOL  MOTOR_L_I=PORTA.1
SYMBOL  MOTOR_R_G=PORTA.2
SYMBOL  MOTOR_R_I=PORTA.3
CNY_ST  VAR BIT
TIMER   VAR WORD
CNY_ST=0
PORTA=0
   

   

 



\'_________________________________ANA PROGRAM DÖNGÜSÜ__________________________
ANAPROGRAM:
IF  CNY7_L1=CNY_ST   OR  CNY7_L2=CNY_ST   OR  CNY7_R1=CNY_ST   OR  CNY7_R2=CNY_ST   THEN
    GOSUB   SAVUNMA
    GOTO    ANAPROGRAM
    ELSE
    GOSUB   TARAMA
    ENDIF

GOTO    ANAPROGRAM
TARAMA:
IF  ANA_SENSOR=1    THEN
        TIMER=TIMER+1
        IF  TIMER<1700 THEN
        LOW     MOTOR_L_G
        LOW     MOTOR_R_I
        HIGH    MOTOR_L_I
        HIGH    MOTOR_R_G
        GOTO    ANAPROGRAM
        ENDIF
       
   
        ENDIF
     IF  ANA_SENSOR=0    THEN

        LOW     MOTOR_L_G
        LOW     MOTOR_R_G
        HIGH    MOTOR_L_I
        HIGH    MOTOR_R_I         
        TIMER=0
        HIGH    TRIP
        PAUSEUS 10
        LOW     TRIP
        GOTO    ANAPROGRAM
ENDIF
       



\'___________________________________CNY 70 ALT PROGRAMI (SAVUNMA)_______________
SAVUNMA:
IF  CNY7_L1=CNY_ST AND CNY7_R1=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_L_G
    HIGH    MOTOR_R_G
    PAUSE   500
    ENDIF
   
IF  CNY7_L2=CNY_ST AND CNY7_R2=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_L_I
    HIGH    MOTOR_R_I
    PAUSE   500
    ENDIF

IF  CNY7_L1=CNY_ST AND CNY7_L2=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_L_I
    PAUSE   500
    ENDIF
   
IF  CNY7_R1=CNY_ST AND CNY7_R2=CNY_ST THEN
    PORTA=0
    HIGH    MOTOR_R_I
    PAUSE   500
    ENDIF

IF  CNY7_R1=CNY_ST AND CNY7_l2=CNY_ST THEN
    PORTA=0
    PAUSE   5000
    ENDIF

   
IF  CNY7_L1=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_L_G
    PAUSE   50
    HIGH    MOTOR_R_G
    PAUSE   500
    ENDIF
IF  CNY7_L2=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_L_I
    PAUSE   50
    HIGH    MOTOR_R_I
    PAUSE   500
    ENDIF                       
IF  CNY7_R1=CNY_ST   THEN         
    PORTA=0
    HIGH    MOTOR_R_G
    PAUSE   50                   
    HIGH    MOTOR_L_G             
    PAUSE   500                     
    ENDIF                           
                 IF  CNY7_R2=CNY_ST   THEN
    PORTA=0
    HIGH    MOTOR_R_I
    PAUSE   50
    HIGH    MOTOR_L_I
    PAUSE   500
    ENDIF
    goto    ANAPROGRAM 

   

kırmızı ile yazdığım alt program sayesinde yarışa dar ve uzun beyaz bir kağıdı robotun altına koyarak, robotu çalıştırırken çapraz sensörleri aynı anda uyardıktan sonra kağıdı çekerek 5 sn beklemesini sağladm. yarıştım. sonuç; derece yok ama emeklerim boşa gitmedi :)




veli dayı

iyi hadi geçmiş olsun yardımcı olamadık kusura kalma neyseki işini halletmişin.daha nice projeler yapman dileğiyle başarılar