Delay tijd bepalen (zonder Dwengo bibliotheek)

6 antwoorden [Laatste bericht]
stienoo
Offline
Lid sinds: 2010-01-01

Ik ben bezig met een projectje waar ik redelijk nauwkeurig de tijd zou willen bepalen.
Nu maak ik geen gebruik van de dwengo bibliotheek en aangezien alle tutorials zijn aangepast naar de bibliotheek weet ik nu niet hoeveel tijd een delay in beslag neemt.

Kunnen jullie zeggen hoeveel tijd er verstrijkt als ik bv "Delay10KTCYx(255);" doe?

Zijn de sourcecodes van de oude tutorials eventueel nog beschikbaar?

Karel
Offline
Lid sinds: 2009-04-17

Dag Stienoo

De functie Delay10KTCYx(.) wacht een aantal 10 duizenden (vandaar de 10K) instructiecycli. In de PIC18F4550 duurt 1 instructiecycle 4 klokcycli. De klok van het Dwengo-bord staat in normale omstandigheden ingesteld op 48MHz (1 klokcyclus duurt dus 1/48MHz = 20.83ns). Delay10KTCYx(255) wacht dus:

255 * 10000 instructiecycli = 4 * 255 * 10000 klokcycli = 20.83ns * 4 * 255*10000 = 212466000 ns = 0.212466 s

Groeten
Karel

stienoo
Offline
Lid sinds: 2010-01-01

Bedankt voor de reactie, hiermee kan ik weer verder!

stienoo
Offline
Lid sinds: 2010-01-01

Ik en euromusic zijn aan het prullen met een speaker.

Nu wouden we echte tonen gebruiken, we hebben op volgende site gevonden dat we voor een do (C) een frequency van 130,81 of 261,63 Hz nodig hebben. (http://www.phy.mtu.edu/~suits/notefreqs.html External link)

Onze redenering:
- 1 sec/ 130,81 hZ = 0,007644675... sec
Ik wil berekenen hoeveel keer ik Delay10TCYx() nodig heb (zonder K) dus:
10 instructiecycli = 40 klokcycli = 20.83ns * 40 = 833,2 ns

0,007644675 / (833,2*10^-6) sec = 9,175

Maar dit lijkt mij nogal snel?

Weten jullie wat wij fout doen?

PS, onze code is als volgt, SOUND is poort A:

  1. SOUND = 1;
  2. Delay10TCYx(delay);
  3. SOUND = 2;
  4. Delay10TCYx(delay);
Karel
Offline
Lid sinds: 2009-04-17

Dag Stienoo

1 ns = 10^-9 sec en niet 10^-6. Dat zijn microseconden. Je zit er dus een factor 1000 naast.

Success!
Karel

stienoo
Offline
Lid sinds: 2010-01-01

Ok, bedankt.
Is er trouwens een maximum waarde dat ik kan gebruiken bij Delay10TCYx()?

Karel
Offline
Lid sinds: 2009-04-17

Het argument van Delay10TCYx() is een unsigned char. De maximale waarde is dan 255. Je zou dus best gebruik maken van Delay100TCYx().