Forum: Mikrocontroller und Digitale Elektronik Umsteiger PIC/Avr auf Arm7 - Erfahrungen


von Christian J. (elektroniker1968)


Lesenswert?

Hallo,

ich befasse mich nach rund 12 Jahren PICsen mit mehr als 100 
privat/beruflichen Designs nunmehr seit Jahresbeginn rein im 
Hobbybereich mit dem ARM7 von NXP. Vorher habe ich vom 16er PIC bis zum 
18er PIC mit dem CCS Compiler gearbeitet, der eine komplette HAL 
beinhaltet. Code ist nicht portierbar aber das war auch nie nötig, 
ebenso wenig wie die Interna eines PIC verstehen zu müssen bis auf 
Ausnahmen wie SPI und UART. I2C per Hand programmieren wäre ein Drama 
gewesen, durch die HAL ist das Ergebnis in Minuten fertig und die I2C 
Bausteine reagieren wie gewünscht. Assembler war nie ein Thema, das habe 
ich das letzte Mal 1995 benutzt auf dem 8051 und als altmodisch, nervig, 
unstrukturiert und extrem unlesbar abgetan seitdem Speicher und 
Geschwindigkeit keine Rolle mehr spielen. Angefangen habe ich mit 
Handumrechung in Tabellen 1983 auf dem 8048 und einem Z80 Board mit Hex 
Tastatur von keil als diese gerade gegründet waren.

Ich bezeichne mich als guter Programmierer, habe früher auch sehr grosse 
Windows Programme unter Visual C++ geschrieben wo natürlich keine 
Hardwareprogrammierung erforderlich ist, es gibt keine Register, eher 
muss man wissen welche der hundertausend Bibliotheken im Windows System 
hat die Funktion, die ich brauche.

Mit dem ARM7 aber geht es nicht so recht rund, statt flüssig Code zu 
schreiben sitze ich stundenlang am Verständnis der Register, Interrupts, 
der Bitsschieberei und Ausmaskiererei usw. Die Uart, beim PIC ein 
einfach zu verstehendes Teil ist beim ARM7 geradezu überladen mit 
Funktionen, tausend IRQs, die unter irgendwelchen Bedingungen erzeugt 
werden, einer sogar wenn 3.5 - 4.5 Perioden der Baudrate kein Zeichen 
ankam usw. Viele IRQ Register ändern ihren Wert beim blossen Lesen, beim 
SCS Register führt ein direkter Schreibzugriff zum Systemstillstand, ich 
kann nur read-modify-write machen. Sicher, die enorme 
Rechengeschwindigkeit ist beeindruckend, 32 Bit machen was her, kein 
Gehampel mehr mit zu wenig Speicher, klotzen statt kleckern.

Es erinnert mich an Linux, alles installiert, vier Wochen lang erkundet 
und eingerichtet, sogar die Konsole ansatzzweise verstanden aber dann 
immer weniger benutzt, weil unter Windows alles viel schneller läuft und 
einfacher zu verstehen ist, keine Skripte, kein Herumstochern in 
Systemeinstellungen, kein Theater mit USB Geräten. Schliesslich flog 
Linux von der Platte. So ähnlich gehts mir grad mit dem ARM7, entweder 
weitermachen oder doch wieder in die Schublade, weil mit den PICs ja 
doch alles funktioniert, einfacher und schneller zum Ergebnis.

Wie waren Eure Erfahrungen, wer hat den Umstieg gut gemeistert und wer 
ist doch wieder beim 8 Bit Avr gelandet?

Gruss,
Christian

von (prx) A. K. (prx)


Lesenswert?

Mir geht das eher andersrum. Ich mag eigentlich nur HALs die ich selber 
gestrickt habe. Nicht zuletzt deshalb, weil die meisten Hersteller-HALs, 
denen ich bisher begegnet bin, das "A" in "HAL" stäflich vernachlässigen 
und in meinen Augen nur allzu oft die Abhängigkeit vom Verständnis der 
Hardware-Register durch die Abhängigkeit von Verständnis der 
Parametrisierung und Reihenfolge der HAL-Aufrufe ersetzen. Und ich damit 
nichts gewonnen habe. Zumal so mancher HAL dank ausgiebiger 
Parameterisierung über structs auch noch ausgesprochen ineffizient ist.

Ich mache das folglich tendentiell andersrum. Und stricke mir 
Software-Module, die nach oben hin ziemlich ähnlich und vorzugsweise 
einfach aussehen, und nach unten auf die unterschiedliche Hardware 
verschiedener Controller aufsetzen.

Aber wenn du Wert auf HALs legst, dann vergiss NXP und schau dich 
beispielsweise bei ST um. Für die STM32 gibt es das.

von (prx) A. K. (prx)


Lesenswert?

Aber eines ist klar: Wenn du Probleme mit der Komplexität hast, dann 
bleib bei 8bittern, egal ob PIC oder AVR. Die 32bitter sind alle 
ziemlich komplex, und zwar mit deutlich ansteigender Tendenz. So ist der 
Interrupt-Controller der Cortex-M3 zwar klar besser als die Varianten 
der LPC2000, aber auch deutlich komplexer, und schon die Lektüre der 
Dokumentation dürfte so manchen gleich am Anfang aus der Kurve 
schmeissen.

Einfach mal irgendwo reinpieksen und hoffen das mehr dabei rauskommt als 
heisse Luft, das funktioniert bei PIC/AVR, aber nicht bei ARMs. Schon 
garnicht mit Barebone Entwicklungsumgebungen wie WinARM/Yagarto&Co. Da 
ist nützlich, wenn man das Teil im Gesamten vorher mal erfasst hast.

Alternativ kann man sich Entwicklungsumgebungen suchen, in denen einiges 
schon vorgekaut ist. Man keine Startup-Codes und Linker-Scripte basteln 
muss. Und die Beispiele auch für den eigenen Chip vorhanden sind und 
nicht nur für den nahen aber nicht ganz kompatiblen Vetter davon. Ist so 
halt teuerer.

von Christian J. (elektroniker1968)


Lesenswert?

>>Alternativ kann man sich Entwicklungsumgebungen suchen, in denen einiges
>>schon vorgekaut ist. Man keine Startup-Codes und Linker-Scripte basteln
>>muss.

Habe ich, Rowley Crossworks, kein Makefile, keine Linkerscripts, kein 
Startup usw. Hierarchie und Ordner für Files, klick & play. Bei Winarm 
hätte ich auch schon abgewinkt, hatte das nur einmal installiert.

Ich schreibe derzeit meine HAL aber die passt auch nur auf mein Board 
und auf kein anderes. Routinen wie uart_init(Baudrate) usw. um überhaupt 
damit arbeiten zu können.

von Oliver S. (ollibass)


Lesenswert?

Hm ich kann dich verstehen. Ich hab auch viel mit AVRs gebastelt, und 
als ich das erste mal was mit arm7 gemacht hab, war ich auch ganz schön 
erschlagen. allein da eine led zum leuchten zu bringen und eine taste 
auszuwerten dauert ne ganze weile, man muss sich halt erstmal mit dem 
startup-code (pll etc.) beschäftigen, hardwarezugriff und so weiter. 
viel umständlichder fand ich noch, mich erstmal mit eclipse, yagarto, 
gdb, telnet, openocd und irgendwelchen skripten und so beschäftigen zu 
müssen. beim avr ist das alles wesentlich einfacher.
dennoch muss ich sagen bieten einem die größeren controller einfach viel 
mehr möglichkeiten. und es gibt da auch varianten, die einem viel arbeit 
abnehmen können. für infineon controller (zb xc167) gibts den "dave". da 
klickt man auch an was für timer und interrupts und so man braucht und 
der bastelt einem das codegerüst zusammen - sehr praktisch und fast 
einfacher als auf dem avr. dennoch muss man sich auch dort mit den 
interna beschäftigen und die compiler sind meist deutlich teurer 
(zumindest im gegensatz zum kostenlosen avr-gcc).

ich würd dir raten - bleib dran. wenn man sich einmal reingefuchst hat, 
dürfte man auch mit großen controllern gut klarkommen.

von Christian J. (elektroniker1968)


Lesenswert?

Hi,

ja ich bin ja dran. Nur es nervt, wenn nach 2 Tagen Arbeit immer noch 
kein Uart IRQ ausgelöst wird, wenn ich U0THR beschreibe. Habe die Uart 
auf Fifo umgeschrieben und ISR Steuerung damit die automatisch läuft 
sobald ich mit sprintf etwas in einen Array schreibe aber ich suche mich 
dämlich nach der Ursache warum die ISR nicht anspringt, ob da irgendwo 
ein Bit vergessen wurde zu setzen usw. Die Timer ISR arbeiten doch auch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.