Gekozen toon wijkt af: 880hz/880,7hz maar 881hz is 887,2hz?

Hallo allemaal,

ik ben wat aan het spelen met de tone functie maar ik heb een probleem wat ik niet helemaal snap namelijk: in sommige gevallen is de frequentie van gekozen toon veel groter dan ingesteld en gekke is dat de stappen hierin niet lineair lopen. enkele voorbeelden:

ingesteld op 878hz geeft 880,992
ingesteld op 879hz geeft 880,996hz
ingesteld op 880hz geeft 880,999hz
ingesteld op 881hz geeft 887,2hz

Zoals je ziet springt hij dus bij 1 hz hoger instellen op 6hz hoger uit, ik begrijp niet zo goed hoe dit kan en waar ik die zou kunnen herstellen of ondervangen.

De bedoeling is dat ik op de uitgang weer een 10deler gebruik om uit eindelijk halve hz tonen over te houden waar ik weer verder mee kan. (tone functie kent geen halve hz vandaar)

iemand enig idee waar ik het moet zoeken of er aan kan doen?

waarschijnlijk is het de beperkte nauwkeurigheid van de code.

De eerste stap is om je eigen code te posten, evt gebruikte libraries - of gebruik je de standaard tone functie?

Gebruik inderdaad de standaard tone code, verder nog helemaal niets om heen gebouwd.

Een Arduino heeft een clockfrequentie van 16.000.000 Hertz.
Alles wat geen gehele deler is van deze waarde wordt benaderd.
Daarnaast kan er nog een kleine afwijking zitten in de clockfrequentie als er geen kristal maar een resonator gebruikt is.

ingesteld op 878hz geeft 880,992
ingesteld op 879hz geeft 880,996hz

Het feit dat 2 waardes op dezelfde toon mappen is een indicatie van afrondingsfouten tgv integer deling.

5/3 = 1 in integer deling
5/3.0 = 1.66666667 in float deling.