Forum: Offtopic Anfängerfrage zur Programmierung von uC


von Dominik G. (moondryl)


Lesenswert?

Hallo,
ich lese jetzt hier schon einige Zeit mit und konnte schon viel Hilfe 
finden.
Nun habe ich aber doch mal eine blutige Anfängerfrage.
Ich habe mit Arduino angefangen und es hat wirklich Spaß gemacht. Man 
hatte schnell Erfolge, es gab viele Libraries und und und. Das hat aber 
nicht mehr gereicht und ich wollte möglichst ohne Libaries auskommen; 
auch wenn es heißt das Rad zweimal erfinden zu müssen. Später habe ich 
nur noch Libraries für die IOs, I2C und SPI genutzt.

Irgendwann wollte ich mir mal die direkte Programmierung von µC 
anschauen, um von Arduino etwas weg zu kommen, damit auch mal ein 
Umstieg auf andere µC nicht so kompliziert ist (den Arduino Bootloader 
gibt es ja nicht für alle µC).

Das GCC-Tutorial habe ich fast durch aber ich frage mich trotzdem noch 
folgendes:

Wie macht ihr das mit I2C z.B.? Nutzt man hier auch Libraries und 
programmiert man sich das wirklich auch komplett selber? Bei Arduino 
konnte man leicht in ein Register springen und es lesen bzw. 
beschreiben.
Ich frage mich das, da ich mir nicht sicher bin, ob es sich nun wirklich 
lohnt oder ob ich bei Arduino vielleicht doch besser aufgehoben bin?

Hier scheinen ja auch viele Profis unterwegs zu sein, ich betreibe das 
ganze allerdings nur als Hobby. Es hat mich aber schon manchmal 
geärgert, dass einem bei Arduino einige Controller halt vorenthalten 
werden.

Viele Grüße

Dominik

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich habe meistens keine Lust, das Rad neu zu erfinden und freue mich 
immer, wenn jemand schon eine Library geschrieben hat. Peter Fleury z.B. 
hat sich um LCDs, UARTs und I2C verdient gemacht und hat gut 
dokumentierte Bibliotheken dafür auf seiner Homepage:

http://homepage.hispeed.ch/peterfleury/

von Dominik G. (moondryl)


Lesenswert?

Danke schonmal!
Bei so grundlegenden Sachen (I2C) stimme ich dir zu. Aber wenn ich z.B. 
ein Bauteil habe, möchte ich es selber programmieren, damit ich weiß, 
wie das ganze funktioniert. Also für eine RTC z.B. selbst den Code zum 
Auslesen der Register schreiben. Bei so etwas gebe ich die Kontrolle 
ungern aus der Hand.
Ich habe mir die Library mal angeschaut. Letztendlich scheint es ja 
nicht so viel anders zu sein, als beim Arduino. Man muss sich halt 
reinlesen. Das motiviert mich dann schon wieder, doch weiter zu machen!

von Karl H. (kbuchegg)


Lesenswert?

Dominik Gebhardt schrieb:
> Danke schonmal!
> Bei so grundlegenden Sachen (I2C) stimme ich dir zu. Aber wenn ich z.B.
> ein Bauteil habe, möchte ich es selber programmieren, damit ich weiß,
> wie das ganze funktioniert. Also für eine RTC z.B. selbst den Code zum
> Auslesen der Register schreiben. Bei so etwas gebe ich die Kontrolle
> ungern aus der Hand.

Ja, kannst du ja.

Du musst konkret beim Thema I2C unterscheiden zwischen der 
Transportschicht und dem was sich dann über diese Transportschicht 
abspielt. Selbst wenn du ein Fax-gerät selber bauen würdest, würdest du 
ja nicht das komplette Telefonnetz neu aufbauen :-)

Die I2C Libs, zb die vom Fleury, regeln für dich nur den Transport der 
Daten. Welche Daten du dann damit überträgst, in welche Richtung, was 
sie bedeuten, das interessiert diese Lib nicht.

von Dominik G. (moondryl)


Lesenswert?

Sonst wäre es ja auch zu einfach. ;)
Was ich senden möchte, muss ich natürlich selbst entscheiden. Ich hatte 
nur bedenken, ob ich mir auch Gedanken machen muss, wie ich es schicke. 
Aber das übernimmt ja die Lib. Welches Register etc. liegt natürlich in 
meinen Händen. :)

Aber dann passt das ja alles und es steht dem Ganzen ja nichts mehr im 
Wege. :)

Aber so richtig nehmen sich die beiden Plattformen dann ja nicht. Ich 
dachte immer, der große Vorteil von Arduino seien die ganzen Libraries. 
Aber letztendlich scheint es dies ja auch hier zu geben. Gut, bei 
Arduino stößt man gerade bei neuen oder unpopulären Bauteilen an 
Grenzen; weiß man aber mit Registern umzugehen, gibt es doch eigentlich 
kaum Unterschiede (dann kommt man bei Arduino ja genauso weit)?

Aber ich möchte hier lieber nicht einen Glaubenskrieg vom Zaun brechen. 
;)

Viele Grüße

Dominik

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dominik Gebhardt schrieb:
> Aber das übernimmt ja die Lib. Welches Register etc. liegt natürlich in
> meinen Händen. :)

Ich habe auf nahezu jedem MC-Typ, der mir im Laufe der Jahre unter die 
Finger kam, auch I2C Routinen schreiben müssen, einfach weil es eben 
kein Internet gab. Aber es ist ja viel schöner, wenn du dich gleich mit 
den Sachen beschäftigen kannst, die speziell für dein Projekt nötig sind 
und eben die Erfindung des Rades (und testen desselben) schon erledigt 
ist. Der grosse Vorteil der Bibliotheken ist eben auch, das vor dir 
schon einige hundert andere sie geprüft und optimiert/debugged haben.

von Dominik G. (moondryl)


Lesenswert?

Wenn ich mir vorstelle, wie viel ich mir über das Internet anlesen 
konnte. :)
Manchmal hilft es aber auch das Rad neu zu erfinden; einfach zum 
besseren Verständnis. Für viele Bausteine gibt es ja auch schon fertige 
Libs aber da setze ich mich doch lieber selber ran. Nur Funktionen 
aufrufen, möchte ich dann doch nicht. :)

Nur gerade was die Kommunikation von Bauteilen angeht, bin ich immer 
wieder begeistert, dass das, was ich auf dem PC schreibe, später 
funktioniert. Also das der Code irgendwie umgesetzt wird.

Grüße

von Icke ®. (49636b65)


Lesenswert?

Dominik Gebhardt schrieb:
> Manchmal hilft es aber auch das Rad neu zu erfinden; einfach zum
> besseren Verständnis. Für viele Bausteine gibt es ja auch schon fertige
> Libs aber da setze ich mich doch lieber selber ran. Nur Funktionen
> aufrufen, möchte ich dann doch nicht. :)

Sehe ich exakt genauso. Ich bekomme die Zusammenhänge viel leichter in 
den Kopf, wenn ich die Funktionen von Grund auf selber schreibe und 
dabei Fehler mache. Der Lerneffekt ist wesentlich größer, wenn ich 
hinterher weiß, warum ein Programm NICHT funktioniert hat, als wenn es 
sofort läuft. Der Code ist zwar selten optimal, aber man kann später 
immer noch bei anderen gucken, wie die es lösen und sich Anregungen 
holen.
Fertige Libs sind gut für Leute, die sich für die Programmierung im 
Detail nicht interessieren, sondern nur schnell ein Gerät praktisch zum 
Laufen bekommen wollen. Für die Lernphase sind sie m.E. eher 
kontraproduktiv, weil der copy-n-paste-Programmierer gar nicht versteht, 
was da unten drunter abläuft.

von Chr. M. (snowfly)


Lesenswert?

Icke ®. schrieb:
> Für die Lernphase sind sie m.E. eher
> kontraproduktiv, weil der copy-n-paste-Programmierer gar nicht versteht,
> was da unten drunter abläuft.

Als Antithese dazu würde ich mal formulieren:
Beim zusammenkopieren lern man mehr weil:
-einfach kopieren geht normal eh nicht weil es nie zum eigenen 
Programmablauf, Variablenkonvention und den anderen Bedürfnissen passt.
-durch die auseinandersetzung mit fremden Code stösst man auf 
Lösungen/Strategien die einem selbst nicht eingefallen wären.
-man traut sich eher an Sachen ran von denen man sich sonst überfordert 
gefühlt hätte.
-es geht schneller.

von Icke ®. (49636b65)


Lesenswert?

Chr. Messener schrieb:

> -einfach kopieren geht normal eh nicht weil es nie zum eigenen
> Programmablauf, Variablenkonvention und den anderen Bedürfnissen passt.

Richtig. Deswegen tauchen auch regelmäßig Threads mit der Frage auf:
"Ich habe die Lib X von Y auf meinen Controller gebrannt, aber die LED 
leuchtet nicht/das LCD zeigt nichts an, warum?"

> -durch die auseinandersetzung mit fremden Code stösst man auf
> Lösungen/Strategien die einem selbst nicht eingefallen wären.

Auch richtig. Das mache ich aber fast immer erst, nachdem ich die 
Routine selbst geschrieben habe. Dann verstehe ich nämlich eher, was der 
Kollege besser gelöst hat.

> -man traut sich eher an Sachen ran von denen man sich sonst überfordert
> gefühlt hätte.

Wenn ich ein Problem nur mit fremdem Code lösen kann, bin ich in der Tat 
überfordert. Wenn ich in der Lage bin, den fremden Code zu analysieren, 
denn überfordert mich auch das Schreiben eigenen Codes nicht. Verstehen 
muß man ihn so oder so.

> -es geht schneller.

Das zählt beim LERNEN nicht und geht m.E. auch nicht wirklich schneller.

von Dominik G. (moondryl)


Lesenswert?

Es kommt ja schließlich auch darauf an, was man machen möchte. Ich 
experimentiere auch gerne mit neuen Sachen z.B.
Als Beispiel hätte ich den AS1130 von ASM. Wollte ich eine Frage dazu 
stellen, hieß es, dass ich die Matrix mit Shiftregistern und Treibern 
aufbauen solle. Mich hat es aber interessiert, weil es einfach etwas 
neues war und ich auf dem Arduino gerade lernen wollte, mit Registern 
umzugehen. Libraries gab es nicht. Man sollte hier also wissen, wie es 
funktioniert.

Möchte man einfach nur etwas bauen und das ganze soll dan funktionieren 
sind Libs wiederum von Vorteil. Man sucht sich raus, was man braucht und 
versucht es für seine Bedürfnisse zusammen zu setzen. Im besten Falle 
hat man aber auch hier etwas Ahnung, was man da tut, ansonsten kommen 
nämlich die ganzen Fragen auf, die Icke erwähnt hat. ;)

So oder so sehe ich einige Funktionen als Werkzeug an, die man zu 
bedienen wissen sollte und dann kann man eigentlich auch fast alles 
schaffen, was man sich vornimmt. Alles möchte ich schließlich auch nicht 
von vorne machen; deshalb nutze ich auch gerne weiter die <io.h> und die 
oben erwähnte I2C Library. Beides hat mir bereits erfolge beschert und 
ich bin froh, dass ich mich jetzt doch direkt mit µC befasse und etwas 
von Arduino weg komme. Dadurch stehen mir jetzt schon so ziemlich alle 
I2C Bausteine offen, ohne hier fragen zu müssen. :)

Also je nachdem was man machen möchte, muss wohl jeder für sich 
entscheiden was und wie er es angehen will.

Grüße

Dominik  :)

von Dominik G. (moondryl)


Lesenswert?

Ha, habe jetzt aber doch noch eine Frage.
Ich habe die I2C-Library von Peter Fleury bisher direkt ins Projekt mit 
eingebunden. Da ich sie aber wohl öfters brauche, wollte ich so in AVR 
Studio integrieren, dass ich nur noch sagen muss #include <i2cmaster.h>.
Bei Arduino gibt es ein Library-Verzeichnis mit Unterordner für jede 
Library. Bei google konnte ich nichts konkretes finden, wo ich das fest 
einfügen könnte?

Grüße

Dominik

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dominik Gebhardt schrieb:
> Da ich sie aber wohl öfters brauche, wollte ich so in AVR
> Studio integrieren, dass ich nur noch sagen muss #include <i2cmaster.h>.

Du könntest sie zu den anderen avr libs in die gcc-lib legen, aber das 
ist deswegen nicht sinnvoll, weil da ja auch die Portdefinitionen drin 
sind, die sich bei jedem 2ten Projekt ändern. Tue es nicht und kopier 
die Library jeweils mit in den Projekt Ordner, denn dadurch hast du die 
Dateien zusammen. Bedenke auch, das alle anderen Leute, denen du mal 
dein Projekt zeigen und zur Verfügung stellen willst, die Konfiguration 
nicht haben und dann auf Linkerfehler stossen.

von Digital C. (digitalcosmos)


Lesenswert?

Hallo Dominik,

wäre es möglich, dass du mir deine private Email gibst? Ich stecke in 
einer ähnlichen Situation, in der ich überlege, wie ich den Sprung von 
Arduino zu anderen UC schaffe. Vielleicht kannst du mir ein paar Tipps 
geben, wie man das gescheit anstellt bezüglich Tools, Evalboard etc.

Vg, DigitalCosmos

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Digital Cosmos schrieb:
> wie ich den Sprung von
> Arduino zu anderen UC schaffe

Wenn du erstmal bei den AVRs bleiben willst, dann ist die Anschaffung 
eines ISP Programmers, z.B. des AVR ISP MkII so ziemlich das einzige, 
was du wirklich brauchst. Die Arduinos sind ja auch ohne die Arduino SDK 
gut benutzbar. Ich z.B. benutze 2 Arduino 2009 als universelle 
Evalboards, was auch deswegen praktisch ist, weil sie ja eine brauchbare 
USB-Bridge für serielle Kommunikation schon an Bord haben.
Dann noch ein AVR Studio deiner Wahl (für Neueinsteiger vllt. AS6, für 
Produktion nehme ich allerdings immer noch AS 4.18) und du hast alles 
was du brauchst, um auf Assembler oder C-Ebene zu programmieren. Die AVR 
Studios wollen alle allerdings ein Windows als OS haben.

von Hawa M. (hawamand)


Lesenswert?

Matthias Sch. schrieb:
> Wenn du erstmal bei den AVRs bleiben willst, dann ist die Anschaffung
> eines ISP Programmers, z.B. des AVR ISP MkII so ziemlich das einzige,
AVRDragon wäre da auch noch eine Möglichkeit.
Ich bin mittlerweile bei AtmelStudio6, AVRDragon sowie Arduino Uno Rev3 
gelandet - mit dem richtigen USB Driver lassen sich die prima per RS232 
ansprechen, auch ohne Arduino-Überbau.
Den Bootloader habe ich so ziemlich als erstes wegkopiert und den Chip 
gelöscht...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ja, der Dragon hat den Vorteil, das er auch HV-Programming kann. Dafür 
kann der AVRISP MkII den TPI Programmiermodus, was für die neuen 
Winzlinge a la ATTiny 10 benutzt wird. Beide Programmierer beherrschen 
natürlich das 'normale' ISP und können auch PDI, was bei z.B. den XMegas 
benutzt wird.

Ausserdem kann der Dragon auch noch debugWire, was manchmal nützlich 
sein kann, habe ich allerdings bisher nicht gebraucht.

von Hawa M. (hawamand)


Lesenswert?

Matthias Sch. schrieb:
> Ausserdem kann der Dragon auch noch debugWire, was manchmal nützlich
> sein kann, habe ich allerdings bisher nicht gebraucht.
DebugWire habe ich bisher auch nicht gebraucht - ich bin mit Simulator 
und Serial Debug Output bisher gut durchgekommen.

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.