Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
Best wel veel met PIC micro en Arduino gewerkt.
maar ben nu bezig via PlatformIO ipv de Arduino IDE.
ook heb ik bijvoorbeeld een Nucleo F446RE (STM32).
maar ik ga nu wat vragen hier neer zetten, misschien zijn ze stom... maar ja...
in platformIO, als ik bijvoorbeeld een nieuw project begin, word er gevraag naar een project naam, een board en een framework.
bij de arduino Mega kan ik bij frame work kiezen uit Arduino of Simba?
en bij een Nucleo F446RE kan ik kiezen uit Arduino, CMSIS, MBed, STM32Cube, libopencm3 en zephyr RTOS
nu heb ik steeds Arduino gekozen?
maar nu dus de vraag, wat zou je moet moeten kiezen, en waarom?
kan je via Framework Arduino wel alles uit de NucleoF446RE halen?
okay, eerst dit maar.... wel graag in jip en janneke taal ... 
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Vraag is wat open...
'Alles eruit halen' lukt alleen met assembly, hogere talen hebben nu eenmaal (meer of minder) overhead.
Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
nou laat ik het anders zeggen... waarom zou ik iets anders kiezen als bijvoorbeeld Arduino framework?
Spog2
Honourable Member
Het mooie van Arduino is dat er voor praktisch elk device (display, motor, wifi) aan je microcontroller een library is gemaakt.
Als je daarmee iets kan maken wat doet wat je wilt en geen speciale eisen hebt ben je gezegend.
Als je zelf een library wilt schrijven moet je je verdiepen in de details van het aangehangen device en de controller zelf. Moet je uitzoeken in de registers en hun bitjes. Honderden/duizenden schakelaartjes. Daar moet je wel zin in hebben. Kan in Assembler en C.
Ik heb zelf ervaring met Bascom (= Gecompileerd Basic). Niet echt ervaring met Arduino, wel op de hoogte van wat anderen er mee doen.
De oude AVR's hebben een overzichtelijk aantal registers en die kan je in Bascom direct heel comfortabel aansturen met assembler commando's. "Blink a LED" kan je doen met handvol (ca 5 bytes) registersettings, is programmaatje van niks. Dat vind ik leuk.
Maar modernere hebben zoveel mogelijkheden dat je steeds meer afhankelijk wordt van software tussenlagen.
Je moet dan accepteren dat je code van derden gebruikt die je niet meer doorziet. Ik heb daar zelf een beetje moeite mee (zoek maar eens een C applicatie uit... elke laagjes programmeur verzint weer nieuwe namen), maar de trend lijkt mij dat dat normaal is gaan worden.
Voor AVR's moet ik nu eigenlijk naar MPLAB-X, maar dat is dus zo'n laagje-op-laagje-op laagje software. Lijkt prachtig, lekker klikcken, maar totaal niet te volgen.
Ik zou zeggen: neem Arduino als je wilt opschieten. Ga pas naar C / assembler / alternatieven als je het perse nodig hebt.
Overigens: is PlatformIO niet ongeveer hetzelfde als Arduino?
P.S.: Ik heb ooit Mbed gehad. Daar vond ik de documentatie zo waardeloos, dat is nooit wat geworden. De online compiler vond ik op zich wel handig. Maar ik kon er niets zelf mee maken, alleen de voorbeelden toepassen.
Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
ik ben een beetje aan het spelen met een Nucleo F767zi.
ik had een webserver demo. eerst in de arduino IDE, Daar heb ik stm32 MCU er in gezet, dan kan ik kiezen uit een nucleo 144, board type F767zi.
en dan kan ik hem downloaden, en alles werkt...
toen die ino geimporteerd in PlatformIO, en ook daar werkt het... kan downloaden... en via de webrowser in die F767zi kijken...
maar dat is dus in platformIO ook met het arduino framework..
heeft het dan zin om al die andere mogelijkheden wel te bekijken....
eigenlijk komt het er op neer dat ik niet zo goed weet wat die frameworks zijn...?
hardbass
PE2BAS
Er zijn grote verschillen in hoe microcontrollers worden aangestuurd, zelfs binnen dezelfde fabrikant en nog meer tussen verschillende fabrikanten. Bij een PIC-microcontroller ben je bijvoorbeeld gewend om direct naar registers te schrijven om pinnen als uitgang of ingang in te stellen.
Het probleem zonder abstractie
Voor een programmeur is dit niet ideaal. Stel dat je een compleet softwarepakket hebt ontwikkeld voor een specifieke chip. Na een paar jaar is deze chip niet meer leverbaar, of je wilt overstappen naar een nieuwere chip met extra functionaliteiten. In dat geval moet je je software flink aanpassen om deze opnieuw werkend te krijgen.
De oplossing: Hardware Abstraction Layer (HAL)
Om dit probleem te verhelpen, is ooit het concept van een HAL bedacht. Dit is een laag tussen je software en de hardware die de hardware-specifieke aansturing afhandelt. In plaats van direct registers te manipuleren, kun je bijvoorbeeld een functie aanroepen zoals:
SetPin(pin_5, true)
De HAL zorgt er dan voor dat onderliggend de juiste registers worden ingesteld, afhankelijk van de gebruikte chip.
Veel fabrikanten leveren een HAL bij hun microcontrollers, zodat je als programmeur een consistente manier hebt om de hardware aan te sturen. Het grote voordeel hiervan is dat je code blijft werken als je overstapt naar een andere chip van dezelfde fabrikant.
Echter, als je overstapt naar een microcontroller van een andere fabrikant, krijg je te maken met een andere HAL. Dat betekent dat je je code opnieuw moet aanpassen, wat alsnog veel werk met zich meebrengt.
De volgende stap: Frameworks
Dit is waar frameworks om de hoek komen kijken. Een framework biedt een standaard manier om microcontrollers aan te sturen, ongeacht het merk of type processor. Hierdoor hoef je je code niet steeds opnieuw te herschrijven.
Een goed voorbeeld hiervan is Arduino. In het Arduino-framework kun je functies zoals:
Serial.print();
digitalWrite();
delay();
gebruiken, ongeacht de onderliggende microcontroller. Deze functies zijn beschikbaar omdat het Arduino-framework dit regelt. Gebruik je echter een ander framework, dan kunnen deze functies anders heten of zelfs niet beschikbaar zijn.
Het installeren van zoon framework kan best een hoop gedoe zijn. Bij arduino stelt dit niets voor, je installeert het en het werkt. Vandaar dat het ook beginners vriendelijk is. Het nadeel is dat je dan alleen het arduino framework kan gebruiken. Sommige frameworks ben je rustig een dag bezig om alles goed op te zetten. PlatformIO doet dit voor je. Zoals je al aangeeft, je selecteert gewoon een framework en processor en platformIO installeert alle benodigdheden voor je.
Waarom Arduino populair is
- Arduino heeft een aantal voordelen, vooral voor beginners en hobbyisten:
- Het is eenvoudig te begrijpen en gebruiken.
- Er is enorm veel kant-en-klare code beschikbaar.
- Dankzij de vele libraries kun je snel functionaliteit toevoegen zonder alles zelf te programmeren.
- Het installeren en configureren gaat heel eenvoudig.
---
Wat het beste is kan ik niet beantwoorden, dat hangt helemaal af van wat je wilt bereiken en wat jouw kennis niveau is.
Een vraag die je jezelf moet stellen: Wil je alles uit je controller halen? Of heb je liever met een fractie van de moeite iets wat werkt en koop je gewoon een iets krachtigere processor als het niet toereikend is?
Code moet geschreven zijn voor mensen, dat wil zeggen een persoon moet het kunnen begrijpen. De processor snapt het wel, sterker nog, die kan het niet verkeerd interpreteren. Dan komt er namelijk een error en compileert je project niet.
Ik vind juist de Arduino IDE vreselijk ingewikkeld,, maar dat ligt aan mij. Ik ben ook al een ouwe l*l.. Ik vind het nog steeds redelijk simpel om Assembler te gebruiken, maar het is net wat je gewend bent.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Meeste libraries zijn wel inefficient doordat ze 'gebruiksvriendelijk' en 'universeel toepasbaar' zijn gemaakt, dat moet je wel op de koop toenemen...
Zo heb ik libraries gehad die ruim 2kB aan code toevoegden. Na omzetten in assembly nog maar 18 bytes...
hardbass
PE2BAS
Op woensdag 12 februari 2025 09:19:18 schreef mel:
Ik vind juist de Arduino IDE vreselijk ingewikkeld,, maar dat ligt aan mij. Ik ben ook al een ouwe l*l.. Ik vind het nog steeds redelijk simpel om Assembler te gebruiken, maar het is net wat je gewend bent.
Echt waar? (Mag hoor
)
SETUP:
LDR R0, =GPIO_BASE
LDR R1, [R0, MODER]
ORR R1, R1, 0x1000
STR R1, [R0, MODER]
LOOP:
LDR R1, [R0, ODR]
ORR R1, R1, 0x20
STR R1, [R0, ODR]
BL DELAY_1SEC
LDR R1, [R0, ODR]
BIC R1, R1, 0x20
STR R1, [R0, ODR]
BL DELAY_1SEC
B LOOP
void setup() {
pinMode(5, OUTPUT);
}
void loop() {
digitalWrite(5, HIGH);
delay(1000);
digitalWrite(5, LOW);
delay(1000);
}
@arco, ja dat is zo. Maar is dat echt een probleem? Zwaardere processoren worden steeds goedkoper. Het is voor ons goedkoper om een iets duurdere processor te kopen dan de kosten die anders in ontwikkeling gaan zitten. En vergeet ook het onderhoud niet zodra de wensen van de klant veranderen.
Er zijn natuurlijk zeer specifieke situaties te bedenken dat dit inderdaad een probleem is.
Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
Op woensdag 12 februari 2025 09:02:15 schreef hardbass:...........
aha dank je.... is gelijk veel meer duidelijk....
dus ik kies voorlopig wel de arduino frame...
want alles wat ik maakt is toch niet zo super bijzonder... 
ja ik heb ook in assembly geprogrammeerd, z80 maar ook de pic micro controllers...
ook wel veel in Proton Picbasic en oshonsoft pic basic gerommeld.... toen een beetje de Arduino's ingerold...
met de arduino IDE... tot er weer iemand zei dat je beter met PlatformIO kon gaan werken, dus dat weer aan het bekijken...
en eigenlijk ook helemaal nieuw met de STM32.
die meer voor dit verhaal omdat het met arduino een beetje traag werd:
https://www.youtube.com/watch?v=zZ_HcL66ZUU
maar ik rommel zomaar wat... maar vind het wel leuk om te doen... 
alleen altijd met teveel tegelijk bezig... en de dingen veranderen sneller dan dat ik leren kan...
hardbass
PE2BAS
Als ik het zo lees is arduino inderdaad zeer geschikte keuze voor jou. Als de processoren te traag zijn kan je ook ESP32 modules kopen. Die kan je ook gewoon programmeren met arduino maar zijn veel krachtiger en helemaal niet duurder.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bij moderne compilers voor hogere programmeertalen maakt de taal zelf niet zoveel meer uit, de gecompileerde code is nagenoeg identiek.
(bijv. MikroE compilers voor Basic, C, en Pascal hebben hetzelfde back-end)
't Is meer: " bij welke taal voel ik me het meest op mijn gemak... "
Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
Op woensdag 12 februari 2025 12:30:26 schreef hardbass:
Als ik het zo lees is arduino inderdaad zeer geschikte keuze voor jou. Als de processoren te traag zijn kan je ook ESP32 modules kopen. Die kan je ook gewoon programmeren met arduino maar zijn veel krachtiger en helemaal niet duurder.
ja sinds kort ook met die ESP32 bezig. Dat eigelijk weer om dat ik ook een Home Assistant op een Odroid heb draaien, en ik heb wat zelf gemaakte sensoren.
En in home assistant heb je ESPHome Builder...
maar wat ik dus al zei... eigenlijk altijd met te veel tegelijk bezig...
Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
misschien nog een domme vraag...
ik heb die F767zi (met ethernet) eigenlijk gekocht om via ethernet , van uit een pc programma data naar toe te sturen....
maar ik vind alleen maar voorbeelden met webservers en zo...
ik heb al ergens zoiets gemaakt, maar dan van uit de PC stuur ik me data serieel naar de microcontroller... in de microcontroller zit dan een stukje die des tring die binnen komt via de serieel verbinding uit elkaar pluist, en dan wordt dat commando uitgevoerd...
eigenlijk wil ik zo-iets via ethernet proberen...
ennn waar moet ik beginnen....
iemand een idee?
hoe zend ik iets naar die ethernet poort van die controller?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op woensdag 12 februari 2025 21:37:07 schreef Arjan Swets:
hoe zend ik iets naar die ethernet poort van die controller?
Dan moet je die poort in de software van de controller tot leven wekken. Dat wil zeggen een TCP/IP (of UDP) protocol stack implementeren. En daarbovenop je eigen applicatie, bijvoorbeeld een webserver of iets met MQTT ofzo.