Forum: Mikrocontroller und Digitale Elektronik C für µC lernen wenn man Bascom beherrscht, Hürden?


von C-Lerner (Gast)


Lesenswert?

Tach,

ich beherrsche Bascom recht gut aber möchte auch endlich mal in C 
reinkommen.
Die meisten höheren Funktionen in Bascom nutze ich kaum sondern arbeite 
manuell mit den Registern, für PWM, Uart, SPI, I2C usw.. Von der Seite 
also erstmal kein Problem, ich bin da kein Neuling was AVR angeht.
Teilweise bin ich da näher dran am µC als der Kollege, den man als 
absoluten C-Profi was µC angeht bezeichnen kann.
Ansonsten hab ich keine Programmierkenntnisse. Ich hab es mal mit Java 
auf Android versucht, mit einem Buch das angeblich gut sein soll. 
Nachdem ich nach 2-3 Kapiteln immer noch nicht kapiert hab was das soll, 
hab ich aufgegeben.

Teilweise kann ich C schon lesen (Inspirationen aus Beispielcode holen) 
aber vieles ist da für mich noch im Dunkeln.

Welche Herangehensweise würdet Ihr da empfehlen?
- C wirklich von der Pike auf wäre mir zu heftig. Ich habe mal vor 
Jahren "die C-Bibel" angefangen (weiß den Titel nicht mehr aber ist wohl 
das Standardwerk) und recht flott wieder in die Ecke befördert. So genau 
kann und will ich es nicht wissen.
- Tutorials für µC richten sich oft an Anfänger, der ich auf µC-Ebene 
nunmal nicht bin. Erst recht, wenn man wie so oft empfohlen C auf dem PC 
schon beherrscht. Das ist genau falsch rum für mich.

Hat jemand einen heissen Tipp, wie ich mich mit diesen Vorkenntnissen am 
einfachsten in C auf µC einarbeiten kann?

Gruß,
C-Lerner (zukünftig, hoffentlich)

von TriHexagon (Gast)


Lesenswert?

C-Lerner schrieb:
> - C wirklich von der Pike auf wäre mir zu heftig. Ich habe mal vor
> Jahren "die C-Bibel" angefangen (weiß den Titel nicht mehr aber ist wohl
> das Standardwerk) und recht flott wieder in die Ecke befördert. So genau
> kann und will ich es nicht wissen.

Ohje. Nichts für ungut aber C ist eine Sprache bei der man genau wissen 
muss, was man da tut. Somit ist ein Buch eigentlich ein Muss. Klar kann 
man C auch mit Learnig-By-Doing lernen, dann muss man sich allerdings 
auf einiges gefasst machen und sehr frustresistent sein. Versteh mich 
nicht falsch C ist eine (nach meiner Meinung) tolle und mächtige 
Sprache, die eigentlich einfach ist. Es ist irgendwie seltsam immer 
wieder zu sehen, wie Anfänger mit den einfachsten Sachen in C haben, die 
aber aus der Sicht eines Fortgeschrittenen völlig lächerlich sind (z.B. 
Zeiger). Vielleicht muss man sich erst mal in C rein denken und dann 
klappt es? Es lohnt sich auf jeden Fall aber den traditionellen Weg mit 
dem Buch sollte man schon gehen.

von Ralf (Gast)


Lesenswert?

C-Lerner schrieb:

> Ansonsten hab ich keine Programmierkenntnisse. Ich hab es mal mit Java
> auf Android versucht, mit einem Buch das angeblich gut sein soll.
> Nachdem ich nach 2-3 Kapiteln immer noch nicht kapiert hab was das soll,
> hab ich aufgegeben.
Das plus...

> Welche Herangehensweise würdet Ihr da empfehlen?
> - C wirklich von der Pike auf wäre mir zu heftig. Ich habe mal vor
> Jahren "die C-Bibel" angefangen (weiß den Titel nicht mehr aber ist wohl
> das Standardwerk) und recht flott wieder in die Ecke befördert. So genau
> kann und will ich es nicht wissen.
... das deutet drauf hin dass du's nicht richtig willst. Ergo musst du 
es lassen, ansonsten hast du keinen Erfolg. Bitte versteh's nicht 
falsch. Aber du musst schon das "volle Programm" können - aber nicht von 
Anfang an. Für dich scheint es so zu sein, als ob du glaubst dass du 
gleich voll durchsteigen musst. Das ist falsch. Man tastet sich ran.

> - Tutorials für µC richten sich oft an Anfänger, der ich auf µC-Ebene
> nunmal nicht bin. Erst recht, wenn man wie so oft empfohlen C auf dem PC
> schon beherrscht. Das ist genau falsch rum für mich.
Kommt auf das Tutorial an - ich persönlich habe nicht irgendwelche 
Tutorials genommen, sondern die Beispiele die bei den DevKits dabei 
waren. Gelernt hab ich auf nem 8051er in Assembler, kannte den Käfer 
also sehr genau. Später hab ich mir dann den Ruck mit C gegeben und 
Bücher gekauft, die den entsprechenden Compiler behandelt haben. Hier 
war es dann so, dass ich mir eigene Aufgaben gesetzt hab. Angefangen wie 
bei Assembler auch mit beispielsweise Timer-Interrupt und LED blinken 
lassen, dann UART-Kommunikation, etc. "Automatisch" hinzu kommen dann 
irgendwann die Pointer (beispielsweise bei Textausgaben auf LCD) und 
ähnliches. Sprich eben nicht trocken nach Tutorial oder C-Bibel, sondern 
nach konkretem Anwendungsfall. Die Beispiele der Devkits habe ich mir 
bzgl der Struktur angesehen und einfach "erweitert", was auch einen 
gewissen Lerneffekt bietet. Ist man dann allem begegnet (Pointer, 
struct, union, enum, etc.) und hat es auch verstanden(!), dann fallen 
automatisch komplexere Programme hinten raus, z.B. über verkette Listen 
gesteuerte Menüs, etc.

> Hat jemand einen heissen Tipp, wie ich mich mit diesen Vorkenntnissen am
> einfachsten in C auf µC einarbeiten kann?
Setz dir am Anfang kleine Aufgaben, beispielsweise kleine 
Bascom-Programme in C nachbauen. Du wirst automatisch bei der einen oder 
anderen Sache stolpern und gezwungen sein, dich schlau zu machen, sei es 
über ein Buch, eine Website oder sonstwie. Lernen wirst du, weil du ja 
die Aufgabe lösen willst.

Ralf

von Reiner (Gast)


Lesenswert?

Hallo,
C ist ja eigentlich eine recht magere Sprache, die aber mit einem 
Rasiermesser ohne Griff zu vergleichen ist. Die Vielseitigkeit kommt 
erst über die libraries. Ein Buch (zum Nachschlagen) ist sicher 
erforderlich. Aber vieles, was für andere Platformen erforderlich ist, 
wird eigentlich auf Microprozessoren nie gebraucht. Ich habe noch nie 
printf, scanf und Konsorten auf einem uc benutzt.  Zu verstehen wie 
Pointer funktionieren etc ist aber ein absolutes muss, da man sonst 
weder mit arrays noch mit text strings etc klar kommt. 
Englischkenntnisse sollten auch vorhanden sein.
Ich würde mir ein Projekt aussuchen, dass über meine Fähigkeiten 
hinausgeht, Beispiele suchen, fleissig googlen, probieren, nachlesen, 
und mich dann freuen, dass ich es geschafft habe!

Gruss
Reiner

von HerrBert (Gast)


Lesenswert?

Am besten besorgst du dir einen fertigen C-Code für ein einfaches 
Projekt (z.B. LED-Steuerung) und versuchst, den nach deinem Geschnack 
umzuschreiben und dabei zu verstehen.

Ein einfaches C-Buch dazu als Ergänzung ist sicher nicht verkehrt 
(Bücherei).

Vielleicht einfach mit dem Atmel AVR-Studio4 anfangen (kannst du 
kostenlos downloaden).

Was für einen Progger benutzt du?

von HerrBert (Gast)


Lesenswert?

Ach ja, und nicht von C-Profis ins Bockshorn jagen lassen, jeder fängt 
mal an und die Programmiersprache C kocht auch nur mit Wasser.

Ob man als Hobby-Programmierer C in der tiefsten Tiefe seiner 
Möglichkeiten benutzen können muss, wage ich zu bezweifeln.


Wie man die einzelnen Register im Datenblatt ausfindig macht für die 
gewünschten Anwendungen (z.B. PWM-Ausgabe, ...) weißt du?

von Dussel (Gast)


Lesenswert?

Am einfachsten ist es wohl, für die Grundlagen, die man direkt 
übertragen kann, die Syntax zu lernen. Schleifen, Bedingungen, 
Variablen, Arrays und Funktionen gibt es in BASCOM (sicher) auch. Also 
würde ich erstmal nur damit arbeiten, damit deren C-Syntax sicher sitzt. 
Damit kann man schon größere Programme schreiben und später, wenn man es 
sicher beherrscht, darauf aufbauen.

von Reiner (Gast)


Lesenswert?

HerrBert schrieb:
> Ach ja, und nicht von C-Profis ins Bockshorn jagen lassen, jeder
> fängt mal an und die Programmiersprache C kocht auch nur mit Wasser.

Oh ja, das hatte ich vergessen:
Vieles, was sog. C-Profis als smart ansehen (absolute Unverständlichkeit 
des Codes) wird in anderen Programmiersprachen zu recht als absolut 
schlechter Prigrammierstil angesehen.
Das grösste Problem mit solchem Code ist aber, dass man trotzdem 
verstehen muss, was diese "smart assholes" mit ihren Konstrukten 
erreichen wollen.

Gruss
Reiner

von c-hater (Gast)


Lesenswert?

C-Lerner schrieb:

> ich beherrsche Bascom recht gut aber möchte auch endlich mal in C
> reinkommen.

Warum C?

> Die meisten höheren Funktionen in Bascom nutze ich kaum sondern arbeite
> manuell mit den Registern

Dann wäre eigentlich Assembler der logische Ausweg aus der 
BASCOM-Misere. Sonst bist du irgendwann auch bloß wieder in der 
Situation, daß es mit C nicht mehr weiter geht, wo mit Asm noch was 
ginge...

> Ansonsten hab ich keine Programmierkenntnisse.

Das ist immer schlecht. Die logische Struktur von Programmen zu 
erarbeiten, ist unabhängig von der Sprache. Wer angeblich nur eine 
Sprache kann, kann in Wirklichkeit meist gar keine. Er hat nämlich den 
gedanklichen Schritt zur Abstraktion von Problemen nicht bewältigt, 
sondern denkt in ausschließlich den Kategorien "seiner" 
Programmiersprache. Und das oftmals auch noch in dem eingeschränkten 
Bereich dessen, was er wirklich davon beherrscht...

> Ich hab es mal mit Java
> auf Android versucht, mit einem Buch das angeblich gut sein soll.
> Nachdem ich nach 2-3 Kapiteln immer noch nicht kapiert hab was das soll,
> hab ich aufgegeben.

Nun ja, Java ist eine objektorientierte Sprache. Sich das Verständnis 
der OO-Paradigmen zu erarbeiten (das kann man nicht wirklich lernen, man 
muß es sich erarbeiten) ist etwas anderes als rein prozedurale 
Programmierung zu verstehen.

Wenn man aber Assembler kann und sieht, wie es auf dieser Ebene 
umgesetzt wird, hilft das erheblich dabei, die Paradigmen zu verstehen 
und den ansonsten inhaltsleeren abstrakten Begriffen einen materiellen 
Sinn zu verleihen.

> Teilweise kann ich C schon lesen

Das ist immer gut. Blöd nur, das C vielfach als "write only"-Sprache 
verwendet wird. Das liegt aber nur indirekt an C selber, weil es quasi 
unlesbare Konstrukte erlaubt. Am Ende Schuld sind die C-Programmierer, 
denn nirgendwo im C-Standard steht, daß man unleserlich schreiben 
muss.

> - C wirklich von der Pike auf wäre mir zu heftig.

Dann hast du bereits verloren. Deine C-Kenntnisse werden dann 
(bestenfalls) auch nur den Stand deiner BASCOM-Kenntnisse erreichen: 
Kenntnis von ein paar grundlegende Deklarationen und Kontrollstrukturen 
und das war's.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wenn du dich mit der Hardware der AVRs (I/O-Register usw.) schon
einigermaßen auskennst, brauchst du vor allem ein ganz normales C-Buch.
Der Klassiker ist das Buch Kernighan und Ritchie. Es ist nicht sehr
aufgeblasen, so dass du es in relativ kurzer Zeit Zeit durchgearbeitet
bekommst. Der einzige Nachteil besteht darin, dass das Buch nicht den
aktuellen Standard (C11), sondern C89 beschreibt, was aber auch kein
großes Problem darstellt, da die neueren Features nicht allzu zahlreich
sind und auch nicht zwingend benötigt werden.

Hier im Forum wurde auch schon dieses neuere Buch empfohlen:

  http://knking.com/books/c2/index.html

Ich kenne es nicht, es ist auch bei Weitem nicht so schlank wie der K&R,
aber von der Beschreibung, dem Inhaltsverzeicnis und dem, was die Leute
im Netz darüber schreiben, macht es einen guten Eindruck.

Die AVR-GCC-Spezifika (bspw. das Schreiben von Interrupthandlern, das
Einbinden von Assembler in C-programme usw.) lernst du in den
einschlägigen Tutorials hier aus mikrocontroller.net oder in der
AVR-Libc-Dokumentation:

  http://www.nongnu.org/avr-libc/user-manual/index.html

Noch ein Tipp: Es gibt (nicht nur hier) zwei Parteien, die sich beim
Theme C immer wieder in die Haare geraten. Die einen finden C Klasse,
die anderen verteufeln es. Das Beste ist, du machst dir selbst ein Bild
davon. Zurückkehren zu Bascom kannst du anschließend immer noch.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Der eigentliche Witz am Programmieren ist nicht die Programmiersprache. 
Es ist die Denkweise und die Art ein Problem in (Quell-)Text fassen zu 
können.

Ein Peter Dannegger oder ein Karl-Heinz Buchegger wird ein Problem 
garantiert effizienter in Code umsetzen können als jeder Anfänger. Egal, 
welches Buch der gelesen hat. Die beiden werden das aber auch mit Bascom 
besser können oder mit Assembler oder mit sonstwas. Denn sie werden das 
Problem anders analysieren und umsetzen. Und warum? Ganz einfach: weil 
sie schon zigtausend Fehler gemacht und daraus gelernt haben. Denn 
lernen kann man nur, wenn man etwas übt. Wieder und wieder.

Hier mal eine kurze Abhandlung über diese Denkweise und Irrwege:
Beitrag "Zahlenschloss - Fehler"

Ein Tipp von mir: vergiss die Funktion wait() oder delay() spätestens 
einen Monat, nachdem du sie das erste Mal verwendet hast.

von TB (Gast)


Lesenswert?

Reiner schrieb:
> Oh ja, das hatte ich vergessen:
> Vieles, was sog. C-Profis als smart ansehen (absolute Unverständlichkeit
> des Codes) wird in anderen Programmiersprachen zu recht als absolut
> schlechter Prigrammierstil angesehen.
> Das grösste Problem mit solchem Code ist aber, dass man trotzdem
> verstehen muss, was diese "smart assholes" mit ihren Konstrukten
> erreichen wollen.

Naja solche Aussagen kommen meistens von Leuten die von Codeoptimierung 
nicht viel Ahnung haben. ASM, C und C++ bieten halt einfach sehr viel 
Möglichkeiten den Progammablauf deutlich schneller zu machen, was oft zu 
lasten der Lesbarkeit geht. Vorallem C++ Templates sind ein grandioses 
Konstrukt aber furchtbar zum Lesen, wenn sie wirklich intensiv genutzt 
werden.

Also nicht immer gleich ärgern, wenn ein Code schwierig zu lesen ist. 
Wirkliche Profis wissen schon was sie tun. Blöd nur, dass es selten auch 
ausreichend dokumentiert ist ;)

von Reiner (Gast)


Lesenswert?

TB schrieb:
>
> Naja solche Aussagen kommen meistens von Leuten die von Codeoptimierung
> nicht viel Ahnung haben. ASM, C und C++ bieten halt einfach sehr viel
> Möglichkeiten den Progammablauf deutlich schneller zu machen, was oft zu
> lasten der Lesbarkeit geht. Vorallem C++ Templates sind ein grandioses
> Konstrukt aber furchtbar zum Lesen, wenn sie wirklich intensiv genutzt
> werden.
>
> Also nicht immer gleich ärgern, wenn ein Code schwierig zu lesen ist.

Nee, nicht ärgern, nur amüsieren.
Nach 40 Berufsjahren nach dem Studium in der IT im Bereich 
Programmierung, Systementwicklung und Produktverantwortung kann man das 
nicht wissen.
Vor allem wenn man solch antiquierte Sprachen wie PL1, COBOL, FORTRAN, 
TOTAL, IDL, SQL, C, C++ und viele ASM-Dialekte von Mainframes gelernt 
und verwendet hat. Die Nerds, die nicht lesbar programmiert haben, habe 
ich, falls sie beratungsresistent waren, gefeuert. Lesbarkeit, 
Rechtschreibung und Dokumentation geht vor.

Gruss
Reiner

von Frank M. (frank_m35)


Lesenswert?

Kannst du Englisch. Wärst du bereit ein englisches Buch zu lesen? Denn 
auf Englisch wirst du viel mehr dazu finden.

Tutorials, wie du schon sagtest, sind meist für Anfänger und/oder nicht 
sonderlich gut geschrieben.
Anhand eines Beispielcodes lassen sich leicht Implementierungen erlernen 
und schnell kopieren, aber grundlegende Prinzipien eher weniger. Auch 
das Grundlegende Verständnis bleibt dabei hin und wieder auf der 
Strecke.

Ich würde dir zu einem Buch raten.
Da du schon programmieren kannst würde ich dir auch nicht zu einem 
Anfängerbuch raten.

Ich selbst konnte sehr gut programmieren, habe den C Syntax etwas an der 
Uni gelernt, und habe richtig C mit einem andwendungsbasierten Buch für 
PIC24 
http://www.amazon.com/Programming-16-Bit-PIC-Microcontrollers-Second/dp/1856178706/ref=sr_1_1?s=books&ie=UTF8&qid=1405872302&sr=1-1&keywords=learning+to+fly+the+pic24
(zusammen mit der dazugehörigen Entwicklungsplatform in Soft- und 
Hardware) gelernt. Ich fand den Weg sehr effizient, einfach und 
erfolgreich.

Daher wäre meine Empfehlung:
Schau mal nach Büchern für AVR (oder vielleicht andere uC falls du 
umsteigen willst, was die Sache noch interessanter und lebendiger macht 
und es vermutlich auch bessere Literatur gibt als für den 'alten' AVR) 
die Grundlegende C Kenntnisse vorraussetzen, dennoch kurz und knapp 
darauf eingehen, aber deren primäres Ziel weniger die Programmiersprache 
ist (denn programmieren kannst du schon, der Syntax ist in C halt 
anders) sondern die Implementierung spezieller Funktionen (an der dann 
auch gerne C spezielle Eigenschaften erläutert und benutzt werden).

Ich würde auf der englischen Amazon Seite mal die Bücher anschauen und 
die Reviews lesen. Wenn ein paar sagen, dass nur Basics dran kommen, 
dann würde ich das Buch meiden. Sagen ein paar, dass es für Beginners 
ungeeignet ist, dann würde ich mich dafür mehr interessieren.

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.