Arduino-ontwikkeling versus nRF51-ontwikkeling

Oorspronkelijk had ik een idee om een ​​Arduino-compatibel project te ontwikkelen met een ATmega328P , sommige sensoren en de nRF51822 als de BLE-radio. Naarmate ik vorderde, realiseerde ik me dat als ik de Arduino-compatibele vereiste zou versoepelen, ik de ATmega328P eigenlijk kon schrappen en de toepassing rechtstreeks op de nRF51822 kon schrijven omdat het een capabelere MCU is (32-bit, meer geheugen, sneller, heeft SPI, I2C en TTL-serie, enz.) Ik ben niet bekend met het schrijven van native applicaties voor de nRF51822, maar het lijkt veel gecompliceerder.

Voor iemand die ervaring heeft op beide platforms, kunt u een lijst maken van enkele van de voordelen van ontwikkeling met behulp van een ATmega328P voor toepassing + nRF51822 voor radio en het gebruik van de nRF51822 voor zowel toepassing als radio?

0
Dit stoort me soms zelfs. Op dat moment realiseer je je dat de "slave ethernet module" Linux draait op een 88Mhz x86 CPU met 256kb sram. En dat je je realiseert dat je kleine MCU de meester is (en 10x goedkoper).
toegevoegd de auteur dotnetengineer, de bron

1 antwoord

Ten eerste zijn er verschillende poorten van de Arduino-omgeving naar de NRF51822, maar dat zal ik voorlopig terzijde laten en adresseren met de codebase van Nordic of de mbed-versie.

Over het algemeen zal een van deze paden je meer plaatsen in de huidige 'echte wereld' van ingebedde ontwikkeling op professioneel niveau, waarin de ARM-cortexdelen een leidende rol spelen. Je zult conventionele meerdere bronbestandsprojecten hebben die met elkaar verbonden zijn door meer gewone middelen zoals een Makefile of expliciete IDE-configuratie, in plaats van de nogal vreemde manier waarop de Arduino IDE is geëvolueerd om dingen te doen. De basis API's op lager niveau waar u naar zult schrijven, zullen veel conventioneler zijn - dat wil zeggen, uw code zal beginnen in main() in plaats van setup() en lus() , genereert u foutopsporingsberichten met printf() of een soortgelijk opgemaakte lidfunctie op mbed in plaats van Arduino-type print() / println() (hoewel je natuurlijk met een bepaalde instelling printf() op een Arduino kunt gebruiken). Hierdoor wordt het veel eenvoudiger om code te coderen of te delen tussen dit en andere ingesloten systemen, of zelfs tussen een ingebed systeem en een telefoon of desktop waarmee wordt gecommuniceerd of gesimuleerd. Natuurlijk kun je een Arduino als een gewone ATmega behandelen en dit ook doen, tot de limiet van de CPU en zijn herinneringen.

Mensen hebben de neiging om de mbed-optie te zien als een online "speeltje" voor bepaalde borden, maar je kunt over het algemeen anderen gebruiken door het op dezelfde manier in te stellen voor een bord dat dezelfde MCU gebruikt. En in de meeste gevallen kun je een zipbestand van een project downloaden met een Makefile erin die arm-gcc of een paar andere compilerkeuzes zal aansturen. De NRF51822 komt in variëteiten met verschillende opslagmaten aan boord, en dit kan soms zorg en aandacht vereisen voor het linkerscript - in sommige gevallen zal een project dat in de online build past (blijkbaar met de Keil-compilatie-engine als de back-up) niet bouw de gedownloade GCC-configuratie in, tenzij u het linkerscript aanpast om de stackgrootte te verkleinen, of misschien de niveaus van de compileeroptimalisatie te wijzigen.

Om deze redenen tegen te gaan zou je de ATmega kunnen houden als je een aantal van zijn I/O-randapparatuur of zijn 5v I/O-mogelijkheden nodig hebt. De NRF51822 heeft bijvoorbeeld beperkte PWM-hardwarecapaciteit in vergelijking met een ATmega, dus dat moet in het algemeen in software worden gedaan.

Als je echt thuis bent met "The Arduino Way", kan overschakelen naar iets traditionelere aanpassingen van denkwijzen en gewoontes. Aan de andere kant, als je kijkt naar de voordelen van Arduino, zijnde de verscheidenheid aan out-of-the-box, gemakkelijk aan te passen voorbeelden die je kunt gebruiken om de mogelijkheid van een project te onderzoeken, maar je vaak geïrriteerd voelt door de erfenis van zijn talloze eigenaardigheden en atypische benaderingen op de langere termijn, dan zul je waarschijnlijk de aanpassing aan het gebruik van de NRF51822 direct de moeite waard vinden.

0
toegevoegd
Dat lijkt te werken, ja. Een groot deel van je uitdaging zal liggen in het vinden van georganiseerde code om de randapparatuur te bedienen, en in hoe dit integreert met de BLE of welk ander gebruik je ook van de radio maakt.
toegevoegd de auteur rossp, de bron
Dank je. In mijn toepassing zou ik graag een GPS, een IMU, een microSD-adapter en misschien temperatuur/barometrische sensoren willen bevestigen. Deze nemen alle UART-, I2C- en SPI-interfaces in beslag. PWM is niet nodig. Zou dit een redelijke manier zijn om de noodzaak van een extra IC weg te nemen ten koste van meer gecompliceerde ontwikkeling?
toegevoegd de auteur Will Phillips, de bron