Ik heb onderstaand stukje code:


Procedure t1 is
  for 74 loop
    pin_a0 = high
      for 472 loop
        delay_1uS
      end loop
    pin_a0 = low
      for 472 loop
        delay_1us
      end loop
  end loop
end procedure

en krijg bij het compilen volgende foutmelding:


> error: no actual input for x
> file 'naam.jal' line 31 char 11
>         delay_1us
> --------^^^^^^^^^

het vreemde is als ik van de delay bijv. 1ms maak het wel gaat. Wat klopt er niet en hoe is dit op te lossen ?

Probeer eens delay_1us (1). Dit is net hetzelfde, maar de compiler heeft dan toch een waarde voor x.

In zo een geval kan het aan 2 dingen liggen:

*Of de functie 1us bestaat gewoon niet
*of je roept het niet juist aan.

De compiler geeft het zelf al aan doordat die zegt: no actual input for x. Dus je geeft geen parameters mee die hij wel verwacht.

Kijk in zo een geval naar de definitie van de functie zelf en dan kom je er al snel achter dat je een parameter moet meegeven voor hoeveel us je de delay wilt hebben.
Soms is een functie zo opgebouwd dat als er geen waarde meekomt als parameter dat er dan als default waarde voor 1 wordt gekozen. Bij die 1ms is daarvoor gekozen en bij de 1us niet. Eigenlijk niet netjes van de programeur omdat die wat dat stukje betreft niet consequent is geweest.

Op 26 november 2003 17:23:30 schreef Thomas:
Probeer eens delay_1us (1). Dit is net hetzelfde, maar de compiler heeft dan toch een waarde voor x.

zo moet het gaan en anders kijk even op de jal samenvatting op www.voti.nl

Ik zal het eens proberen. Alvast bedankt voor de suggesties !

delays:
delay_100us( ) delay_200us( ) delay_500us
delay_1ms( ) delay_2ms( ) delay_5ms( )
delay_10ms( ) delay_20ms( ) delay_50ms( )
delay_100ms( ) delay_200ms( ) delay_500ms( )
delay_1s( ) delay_2S( ) delay_5s( )

moest zonder spatie dus , tussen de ( ) zet je je X waarde ook al is de X = 1

Op 26 november 2003 19:35:32 schreef terrorfeary:
delays:
delay_100us( ) delay_200us( ) delay_500us
delay_1ms( ) delay_2ms( ) delay_5ms( )
delay_10ms( ) delay_20ms( ) delay_50ms( )
delay_100ms( ) delay_200ms( ) delay_500ms( )
delay_1s( ) delay_2S( ) delay_5s( )

moest zonder spatie dus , tussen de ( ) zet je je X waarde ook al is de X = 1

Die delays had ik idd al gevonden, maar wist niet dat er iets tussen haakjes moest, maar dit is top !!

> for 472 loop

ik neem aan dat je weet dat deze lus 216 keer doorlopen zal worden?

> delay_us( 1 )

een microseconde is (afhankelijk van je klokfrequentie) zo'n 1 tot 10 instructies. Verwacht dus niet dat een delay_us( 1 ) erg naukeurig zal zijn.

Als je een delay van ongeveer 472 us wilt hebben gebruik dan gewoon
delay_500us

kan je niet precies timen met een PIC dan ? want wouw hem gebruiken voor motortjes aan te sturen zodat als autotje aankomt hij juist op tijd open gaat :)

Op 27 november 2003 20:32:55 schreef terrorfeary:
kan je niet precies timen met een PIC dan ? want wouw hem gebruiken voor motortjes aan te sturen zodat als autotje aankomt hij juist op tijd open gaat :)

Voor timing in de buurt van de microcseconde zal je assembler moeten gebruiken, of in ieder geval iets anders dan de delay library.

Ik wil er een aantal tonen mee reproduceren die op de zgn. 5TVO frequenties moeten lijken, dus ik weet niet precies of dit gaat lukken. Ik kom er wel nog even op terug ;)