Niet alle pinnen van een processor zijn beschikbaar. Sommigen dienen voor een USB of debug aansluiting of hebben geen output functionaliteit.
Je zult in de datasheet van de processor moeten kijken welke functionaliteit er op een Pin zit.
There are only 2 limits, the sky and your imagination
Vond wel dit... dus ik denk dat ik maar ff 2 andere pinnen kies... :-)
Heb aan de onderkant van de print PA0 en PA1 doorverbonden aan PC14 enPC15, ik dacht als ze Not Connected zijn, maakt dat volgens mijn niet zo veel uit... en nu draaien al me steppers.... dus ook weer opgelost....
ben bijna weer net zo ver als ik was... nu alleen met een andere controller....
wel hoorde ik al, dat de motors veel sneller draaide als met de Arduino Due...
ben benieuwd.....
en dit is de Nucleo F446Re
en ik heb hier nog even wat tijd in gemaakt... omdat ik er anders bang van werd...
verder is het programma nog het zelfde....
nu eens kijken of we het mooier kunnen krijgen..... Leuk... :-)
Ik had niet gedacht dat het verschil tussen 80 (duo) en 180 MHz (nucleo) zo groot zou zijn. Mogelijk dat het verschil zo groot is omdat de duo geen FPU heeft.
There are only 2 limits, the sky and your imagination
ja waar het door komt weet ik ook niet...
maar het programma is het zelfde....
ik heb hier zelfs nog een delay in gezet van 10ms geloof ik... wat ging zo hard....
alle touwtjes vlogen om me oren.... :-)
Swets schreef: ↑09 jan 2023 23:03
Dit snap ik even niet... 100/6562 =0,015239
maar de serial print laat 0,02 zien?
Afgerond is dat 0.02. Voor een double is het default format blijkbaar 2 decimalen.
Wil je een ander formaat, dan kun je het getal eerst formatteren met dtostrf() en dit vervolgens printen.
dtostrf gebruikt een buffer om de string in op te slaan. Hier een voorbeeld met 3 decimalen en een minimum breedte van 8 karakters.
Hier een link naar de grbl library voor het printen. Daar kun je code van kopiëren. Deze lib is niet gemaakt voor leesbaarheid maar maximale snelheid zonder andere bibliotheken te gebruiken. https://github.com/MetalWorkerTools/grb ... bl/print.c
een stukje uit de lib voor het printen van een float:
// Convert float to string by immediately converting to a long integer, which contains
// more digits than a float. Number of decimal places, which are tracked by a counter,
// may be set by the user. The integer is then efficiently converted to a string.
// NOTE: AVR '%' and '/' integer operations are very efficient. Bitshifting speed-up
// techniques are actually just slightly slower. Found this out the hard way.
void printFloat(float n, uint8_t decimal_places)
{
if (n < 0) {
serial_write('-');
n = -n;
}
uint8_t decimals = decimal_places;
while (decimals >= 2) { // Quickly convert values expected to be E0 to E-4.
n *= 100;
decimals -= 2;
}
if (decimals) { n *= 10; }
n += 0.5; // Add rounding factor. Ensures carryover through entire value.
// Generate digits backwards and store in string.
unsigned char buf[13];
uint8_t i = 0;
uint32_t a = (long)n;
while(a > 0) {
buf[i++] = (a % 10) + '0'; // Get digit
a /= 10;
}
while (i < decimal_places) {
buf[i++] = '0'; // Fill in zeros to decimal point for (n < 1)
}
if (i == decimal_places) { // Fill in leading zero, if needed.
buf[i++] = '0';
}
There are only 2 limits, the sky and your imagination
Swets schreef: ↑10 jan 2023 07:38
maar in het programma wordt er wel echt gerekend met het onafgeronde getal?
het is puur alleen serial print?
Het is alleen de print die afgerond wordt.
Vind ik eerlijk gezegd wel heel merkwaardig. Heb in m'n hele programmeer carrière (die eigenlijk niet zoveel voorsteld) nog nooit mee gemaakt. Blijkbaar nooit te oud om te leren.
Ik zou voor het printen die Procent100 even met 1000 vermenigvuldigen voordat ie geprint wordt, dan weet je het zeker.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.