Forum: Mikrocontroller und Digitale Elektronik Programmieren lernen?!


von Alex A. (Gast)


Lesenswert?

Hallo, Leute!
Habe ein Problem, und zwar ich möchte programmieren von den µC lernen.
Habe schon viele Tutorials gelesen...
aber ganz ehrlich ich verstehe da überhaupt NICHTS!!!
Habe schon ISP und ein Programmierer gebastelt. funzt auch.
ein Atmega16 habe ich auch zur Verfügung.
Wie soll ich anfangen?
Wenn ich Tutorials lese steht da zwar, was ich machen muss, aber ich
verstehe schon von Anfang an nicht, wocher diese Worte (Zeichen)
kommen, und wie ich die benutzen soll.
So wie ein Affe kann ich das auch abschreiben, und dann blinkt meine
LED natürlich, aber den Prinzip verstehe ich nicht! Wie das gemacht
wird.
Welche Sprache ist am leichtesten und am schnellsten erlernbar?
Danke!
  Alex

von Tim (Gast)


Lesenswert?

Ich würde ganz klar Assembler empfehlen. Das mag zwar etwas kryptischer
auschaun, aber wenn du noch Probleme hast, nachzuvollziehen was beim
hello world Programm passiert (die blinkende led) dann ist hilft das
Programmieren in Assembler einfach den Controller zu verstehen.

Das kommt durch die Kleinschrittigkeit, wie im Tutorium ja auch gesagt.
Schneller zu erlernen im Sinne von schneller ein Programm ans laufen zu
bekommen mag etwas wie bascom sein, aber da hast du dann zu 99% dein
Leben lang eine black box vor dir.

Weil ich vermute dein Problem ist zur Zeit noch weniger die Sprache,
als vielmehr das was du mit einer Sprache überheupt erreichen willst.
Hast du schon was c auf dem pc gemacht, ist das gcc tutorium auch
wirklich sehr gut hier auf der Seite.

Am besten googlest du noch mal, guckst in die beiden tutorien (avr
allg. und gcc) und dann läuft das.
Für konkrete Fragen gibts ja das Forum. Die ersten 5 Antworten gehen
meistens sogar, bis die üblichen Verdächtigen warm werden. ^^

Also durchbeißen, mittelfristig lohnt sich das.:-)

von Alex A. (Gast)


Lesenswert?

Tim, Danke erstaml für die Antwort!
Kannst du mir einen Link zu einer Seite geben, wo man es verständlich
beschreibt?
Also BITTE NICHT sagen, dass ich faul bin!!!!

von Karl heinz B. (kbucheg)


Lesenswert?

Das sagt auch niemand.

Aus meiner Sicht:
Wenn du noch nie irgendein Programm geschrieben hast, dann
solltest du nicht unbedingt mit einem µC anfangen.
Das Problem ist, dass du auf viele Dinge aufpassen musst,
die dir ansonsten ein Betriebssystem abnimmt. Nur auf einem
AVR gibt es kein Betriebssystem.

Also: Wenn du kompletter Neuling in Sachen programmierung
bist, dann würde ich dir enpfehlen: Besorge dir einen
freien C-Compiler für Windows (ich geh mal davon aus, dass
du einen PC unter Windows zur Verfügung hast), zb. MinGW
Dann ab in den nächsten Buchladen und ein Einführungsbuch
zum Thema 'C-Programmierung' gekauft. Es gibt zwar auch Online-
Tutorials für die Programmierung, aber:
  1) kenne ich kein wirklich gutes
  2) sind in praktisch allen Tutorials Fehler drinnen
  3) hat es seinen Grund, warum ein Buch 150 Seiten hat,
     ein Online-Tutorial aber selten mehr als 20.

Es gibt auch viele Bücher, die mit einer CD geliefert werden.
Da kannst du dann davon ausgehen, dass da eine Entwicklungs-
umgebung (Compiler samt drumherum) drauf ist und im Buch auch
besprochen wird.

Das würde ich dir empfehlen. Wenn du da dann deine ersten
Sporen verdient hast und sagen wir mal, Datei-Handling auf
dem PC hinkriegst, kannst du mal auf deinen Mega16 schielen.
Du hast dann die Grundlagen der Programmierung an sich, die
Grundlagen von C intus, und kannst dich auf die neuen
Probleme der Programmierung eines µC ohne Betriebssystem
konzentrieren.

von Hannes L. (hannes)


Lesenswert?

@Alex:

Du versehst also derzeit "gar nichts".
Das macht nix, so ging es uns allen mal, dem Einen beim
Mikrocontroller, dem Anderen (Älteren) bei diversen Homecomputern, mit
denen sie die ersten Programmierversuche wagten.

Beim (kleinen) Mikrocontroller (speziell beim AVR) programmierst du
direkt an der Hardware (Register, I/O...). Da ist es sehr vorteilhaft,
eine sehr hardwarenahe Sprache (Assembler) zu verwenden. Dann ist es
wichtig, die "Architektur" kennen zu lernen, also z.B. zu wissen,
welche Speicherformen wie ansprechbar sind und in welchen
Adressbereichen sie liegen. Dann die I/O-Features wie Timer, ADC usw.
Dies lernst du am besten durch Lesen und Verstehen des Datenblatts.
Dabei solltest du aber klein anfangen, die Datenblätter der ATMegas
sind sehr umfangreich, da diese AVRs so verdammt viele Features
enthalten. Einfacher wird es, wenn man erstmal mit einem kleinen AVR
beginnt, dessen Datenblatt überschaubarer ist. Ich würde dir dazu den
ATTiny15 empfehlen, der hat zwar kein SRAM, ist aber trotzdem sehr
leistungsfähig und dabei recht übersichtlich. Wenn du gelernt hast, mit
dem Tiny15 umzugehen, dann hast du bedeutend bessere Chancen, auch die
umfangreichen Datenblätter der ATMegas zu verstehen.

Schau dir mal die Beispielprogramme und Projekte auf meiner HP an:
www.hanneslux.de/avr/

Weiterhin ist es zum Programmieren wichtig, dass man die Aufgabe, die
der AVR erledigen soll, gut formulieren kann (damit haben Viele ihre
Schwierigkeiten, Einige können es einfach nicht). Dazu gehört auch,
dass man die Aufgaben in viele kleine überschaubare Jobs zerlegt, die
dann in der entsprechenden Programmiersprache umgesetzt werden müssen.

Viel Erfolg...
...

von Philipp B. (philipp_burch)


Lesenswert?

Also da muss ich dir aber widersprechen Karl-Heinz. Ich progge schon
seit längerer Zeit am PC VB (Visual Basic 6 und .net), aber das ist mit
Assembler, insbesondere Assembler für µC wirklich nicht zu vergleichen.
Wenigstens grundsätzlich schonmal zu verstehen, wie ein Programm (Egal
welche Sprache) aussehen kann ist wohl schon nicht schlecht, aber ich
denke mal, in die AVRs kann man auch ohne selbiges einsteigen.
@Alex:
Was verstehst du denn nicht (Sag jetzt nicht "alles" ;))? Hier im
Tutorial ist es doch eigentlich recht gut erklärt
(http://www.mikrocontroller.net/tutorial/io-basics).
Da du bereits etwas aufgebaut hast um deine LED blinken zu lassen, gehe
ich jetzt mal davon aus, dass du doch etwas Ahnung von Elektronik hast,
das ist sicher schonmal gut.

von Tim (Gast)


Lesenswert?

Was ich eigentlich ganz gut finde ist dieser Artikel:
http://www.elektronik-projekt.de/content/download/wie%20sag%20ichs%20meinem%20avr.pdf

Als allgemeine Grundlage sicher:
http://www.elektronik-projekt.de/content/download/assembler%20ab%200%20und%201.pdf

Außerdem wie gesagt das tutorium hier und auch das avr-gcc tutorium

Wichtig finde ich auch, das datenblatt daneben zu legen und die
entsprechenden Stellen zu suchen, dort lesen und nachvollziehen, sonst
läuft man ja Gefahr, nur 'Kochrezepte' zu kennen.

Außerdem der Tip von Hannes, einfach mal kleine Projekte im Netz
angucken und sich inspirieren lassen.

von Hannes L. (hannes)


Lesenswert?

Sorry, auch ich bin nicht der Meinung, dass man erstmal
PC-Programmierung lernen sollte.

Die AVRs (besonders die kleineren) haben eine überschaubare
Architektur.
Die Programmieroberfläche (AVR-Studio) ist akzeptabel (wenn auch nicht
perfekt).
Vorhandene PC-Programmierkenntnisse erziehen zum verschwenderischen
Umgang mit den knapp bemessenen Ressourcen des AVRs und bereiten oft
mehr Schaden als Nutzen.

Besorg dir also einen kleinen AVR mit überschaubarem Datenblatt und
beginne damit in Assembler, um die Architektur des AVRs kennen zu
lernen. Konkrete Verständnisfragen kannst du dann gerne stellen, sie
werden mindestens mit einem Hinweis auf Datenblatt,
ASM-Befehlssatzbeschreibung oder Onlinehilfe des AVR-Studios
beantwortet, meist jedoch auch etwas umfassender.

...

von Karl heinz B. (kbucheg)


Lesenswert?

@Phillip
Wenn jemand noch nie programmiert hat, hat er keine
Ahnung von Variablen, Schleifen, Abfragen etc. bzw
all dem was wir selbstverständlich im Hintergrund machen:
algorithmisches Denken, Denken in kleinen Schritten, etc.

Es hilft ungemein, wenn man sich am Anfang nicht um jeden
'Kleinscheiss' kümmern muss, wie stimmt mein DDRx Register,
hab ich den Interrupt tatsächlich aktiviert, wie ist das
mit dem 2-er Komplement, etc.

Vergiss nicht: Ein Neuling kämpft zunächst mal an mehreren
Fronten gleichzeitig. Jede Front die du ihm am Anfang
ersparen kannst, bringt weniger Verwirrung.

von Chief Brady (Gast)


Lesenswert?

@Karl Heinz
>Es hilft ungemein, wenn man sich am Anfang nicht um jeden
>'Kleinscheiss' kümmern muss, wie stimmt mein DDRx Register,
> hab ich den Interrupt tatsächlich aktiviert, wie ist das
> mit dem 2-er Komplement, etc.

Ich würde eher sagen, es hilft ungemein, wenn man diesen
"Kleinscheiss" von Anfang an versteht!!

CB

von Pieter (Gast)


Lesenswert?

moin moin,

man braucht noch nicht mal einen PC.
Nimm einfach das "normale" Leben und formuliere das als Prog.
Dabei besteht jedes Prog. aus 3 Teilen:
1. Init (Einrichten)
2. Run  (Ausführen des Progs)
3. Done (Beenden)

Danach ist mein Lieblingsprogramm:
1. zu bettgehen
2. Endlosschleife ( schlafen )

Mit diesem Grundprog. lassen sich nun alle Dinge klären.
Z.B. was ist ein Timer-Interrupt -> das Ding was morgens so einen Krach
macht
Wie darauf reagieren ->> ignorieren???

Mit Gruß
Pieter

von Wolfram (Gast)


Lesenswert?

Warum kommt auf die Anfrage "Ich moechte programmieren lernen"
meist als erstes lerne Assembler.
Wenn jemand neu einsteigt ist sein erstes Problem das algorithmische
Denken, egal welche Programmiersprache er dann am Schluss benutzt.
Denn als erstes muss ich mir nun mal einen Algorithmus zur Lösung
meines Problems ueberlegen. Dann wird das ganze in einer Sprache
ausformuliert.
Bei Assembler geht da nur sehr schnell die Übersicht verloren für den
eigentlichen Algorithmus, weil da Sachen aufkommen wie "Verdammt ich
brauch noch ein Register!" oder jetzt muss ich das erstmal
freibekommen.
Was einen dann erstmal 10 Zeilen kostet die eigentlich nichts mit der
Lösung des Problems zu tun haben. Das Verständnis der Architektur
(nicht der Peripherie!) ist auch ein Muss in Assembler. Sowas sind aber
erstmal ganz schöne Hürden die eigentlich zu diesem Zeitpunkt nicht
genommen werden muessten bei Verwendung einer Hochsprache. Das kann
auch erstmal Basic sein. Zum Schreiben eines Spieles auf dem PC wuerdet
ihr doch auch kein Assembler verwenden, weil man diese Komplexitaet in
Assembler nicht mehr im Kopf behält und man es in einer Hochsprache in
einem Zehntel der Zeit gemacht hat.
Wenn irgendein Programm nicht funktioniert und er es ins Forum schiebt,
hat man das in der Hochsprache sehr schnell ueberblickt, in Assembler
kann man sich erstmal versuchen zusammenzureimen was er tut.
und in diesem Programm sind mit Sicherheit Fehler!
Man denke nur an solche Fragen "Wie mache ich ein 32 Bit
Multiplikation?" Mir stellt sich da eher die Frage "Warum benutzt du
nicht einfach eine Hochsprache?"
Die Hochsprache gibt einem Programmierer auch weniger Möglichkeiten
Fehler zu machen. (Aus einem Statement können mehrere Befehle
resultieren etc.)

Mich wuerde wirklich interessieren was es fuer Gruende gibt einem
Anfaenger als erstes Assembler zu empfehlen.

Ich muss gestehen das ich es sehr genossen habe den AVR in Assembler
kennenzulernen. Allerdings waren da auch andere Voraussetzungen
vorhanden. Assembler habe ich schon auf dem x86 gemacht und zwar sehr
intensiv. Trotzdem wuerde ich heute ein groesseres Programm niemals in
Assembler schreiben( egal ob AVR oder x86). Wenn noetig vielleicht
zeitkritische Teile.

von Tim (Gast)


Lesenswert?

Unter Worten, die einem nichts sagen, hab ich mir Register und Port
pseudonyme vorgestellt. Und das Programmieren lernen konkret für uc.

Wenn man GAR keine Ahnung hat, wie man ein Problem angeht,
ausformuliert und in ne Sprache übersetzt, dann ist der Gedanke
sozusagen erst mal bubblesort au dem pc zu implementieren gar nicht so
abwegig.

Das muss man für sich entscheiden und feststellen, wo es hakt. Wo das
verständnis aufhört. Wenn dir ein c=a&b nichts sagt, hakt es einfach an
den Grundlagen - die bekommt man aber auch mit wenn man leds blinken und
shiften lässt denke ich. Denn das hat ja nichts mit algorithmischem
Denken an sich zu tun.

Da kann man denke ich jetzt auch nichts mehr zu sagen bzw. empfehlen,
da  fehlt einfach Wissen um was es geht. denke ich.

von Chief Brady (Gast)


Lesenswert?

@Wolfram
Alex möchte nicht (nur) "Programieren lernen", sondern

"[...]und zwar ich möchte programmieren von den µC lernen[...]"

Und bei µC's ist m. E. Assebmler die beste Einstiegsdroge.

CB

von Hannes L. (hannes)


Lesenswert?

> Trotzdem wuerde ich heute ein groesseres Programm niemals in
> Assembler schreiben

Trotzdem wirst du nicht leugnen, dass dir deine ASM-Kenntnisse auch
beim Benutzen einer Hochsprache recht hilfreich sind. Denn auch der
beste Hochsprachencompiler erzeugt nur Maschinencode, der 1:1 in ASM
darstellbar ist. Und ohne jegliche ASM-Kenntnisse neigt man schnell mal
dazu, z.B. durch ungeeignete Datentypen Ressourcen zu verschwenden, die
dann am Ende fehlen. Das liegt aber nicht an der Hochsprache, sondern
daran, dass einem die Hochsprache die Verwaltung der Ressourcen abnimmt
und man da schnell die Übersicht über die Ressourcenauslastung
verliert.

Ich behaupte jedenfalls, dass du ohne die unter ASM erworbenen
Kenntnisse in deiner Hochsprache lange nicht so effizient programmieren
könntest wie du es derzeit kannst. Ich meine dabei den AVR, nicht
irgendein System mit Betriebssystem.

Bit- & Bytebruch...
...HanneS...

von Stefan (Gast)


Lesenswert?

Assembler oder C.

Ich tendiere zu C, weil man damit µC unabhängig programmieren lernen
kann. Schleifen, Abfragen, ... kann auf dem PC durchexerziert werden.

Später ist es dann auch fast Wurscht, ob man einen AVR einen ARM oder
einen R8C malträtiert. Parallel mehrere ASM-Befehlssätze im Kopf zu
haben, ist mir inzwischen zuviel ;-)

"Habe schon viele Tutorials gelesen...
aber ganz ehrlich ich verstehe da überhaupt NICHTS!!!"

Das ist ziemlich übel und schreckt viele ab dir Hilfe zu geben (zu
ALLEM?). Teile das NICHTS in kleinere Portionen auf und hole dir dazu
Hilfe in Datenblättern, Tutorials oder Foren.

"So wie ein Affe kann ich das auch abschreiben, und dann blinkt meine
LED natürlich, aber den Prinzip verstehe ich nicht! Wie das gemacht
wird."

Anhand von Beispielen lernen ist keine verkehrte Methode, wenn man die
Arbeit reinsteckt und sich das Beispiel erarbeitet. Ich behaupte, die
meisten Programmierer schauen bei einer neuen Aufgabe erstmal, ob es
irgendwo Beispielcode gibt ;-) Dann Zeile für Zeile detektivisch
rausfinden, was dort gemacht wird und warum. Im Idealfall ergänzt du
das Beispiel/Tutorial mit deinen Erklärungen und machst es dem nächsten
leichter.

von Wolfram (Gast)


Lesenswert?

@Hannes:
>Trotzdem wirst du nicht leugnen, dass dir deine ASM-Kenntnisse auch
>beim Benutzen einer Hochsprache recht hilfreich sind.
Oh ja stimmt.
>Und ohne jegliche ASM-Kenntnisse neigt man schnell mal
>dazu, z.B. durch ungeeignete Datentypen Ressourcen zu verschwenden,
>die dann am Ende fehlen
ja; und jetzt kommt das grosse ABER
am Ende meiner Assemblerphase war ich der Meinung dass durch die
Kenntnis der Architektur und der Resourcennutzung sich das effektivste
Programm ergibt. Heute bin ich eher der Meinung das der Algorithmus und
die Abbildung in eine Datenstruktur die Effizenz eines Programmcodes
ergeben und da stört Assembler bei der Ausformulierung etwas, da es den
Blick weg vom Algorithmus auf "kleinliche" Probleme lenkt.
Ein Anfänger hat ein ähnliches Problem er muss eigentlich einen
Algorithmus formulieren und sollte davon moeglichst wenig abgelenkt
werden. Wenn er etwas daran aendern moechte dann wird es in Assembler
aber ganz ganz boese. Hannes ich weiss du programmierst gerne in ASM
aber du kannst grosse Programme nur durch Selbstbeschraenkung
beherrschen. (Calls mit festgelegten Arbeitsregistern etc.) damit
machst du aber genau das, was ein Compiler ohne Optimierung tut.
Wenn du jetzt Optimierst und danach etwas aendern willst wird es
unschoen. Ein Compiler hat dieses Problem nicht.

>Ich meine dabei den AVR, nicht irgendein System mit Betriebssystem
und genau hier kann ich dir nicht zustimmen, durch die Verwendung einer
Hochsprache ist es (fast) vollkommen egal ob ich mich auf einem AVR oder
unter einem Betriebssystem auf irgendeinem Prozessor befinde.
als nettes Bsp: Ich hatte mal ein FAT-Dateisystem zu entwickeln
das habe ich unter Visual Studio 6 auf Win2000 geschrieben und dann auf
dem AVR verwendet. effektive Aenderungszeit 3 Stunden
Die Ansteuerung der SD-Karte hat mich etwas aufgehalten, es war nur
eine Datei zu aendern und zwar die Fkt. fuer die Kartendetektierung,
die Sektorlese und die Sektorschreibroutine.

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

Ich habe damals (ca. 22 Jahre her; wie alt ich damals war, hab ich
inzwischen vergessen...) auf einem Apple ][ prgrammieren mit
Applesoft-Basic gelernt.
Der Vorteil einer solchen Maschine war, dass sie nicht klickibunti war,
sondern textorientiert.
Da konnte man mit ?10+20 eingeben und bekam in der nächsten Zeile 30
ausgegeben. Man konnte sehr schnell, einfache Programme realisieren,
ohne sich um irgendwelche Register etc kümmern zu müssen.
Irgendwann habe ich mich wegen des Geschwindigkeitsvorteils auch mit
der Assembler-Programmierung auseinandergesetzt...

Worauf ich hinaus will:
Wenn man (gar) keine Ahnung vom Programmieren hat, dann ist es meiner
Meinung nach besser, mit einer Programiersprache auf einem PC
anzufangen, weil man dort eher sieht, was daneben geht.
Wenn man sich erst darum kümmern muß, wie man den Stack initialisiert
oder so, dann ist das für mich eher abschreckend (deswegen bin ich wohl
bei C hängen geblieben...)

>Alex möchte nicht (nur) "Programieren lernen", sondern
>"[...]und zwar ich möchte programmieren von den µC lernen[...]"
>Und bei µC's ist m. E. Assebmler die beste Einstiegsdroge.
Solche Aussagen sind mal wieder typisch, und an Spitzfindigkeit nicht
zu überbieten. Kann es sein, dass du in deiner Freizeit irgendwas mit
Rosinen machst?

Karl-Heinz und Wolfram haben es ja schon deutlich gemacht, dass es noch
schwieriger ist, programmieren anhand von Mikrocontrollern statt am PC
zu lernen. Es spricht ja nichts dagegen, wenn man dann irgendwann einen
AVR in Assembler (oder Basic oder C oder ...) programmiert.
Ausserdem hat das mit dem PC auch noch einen weiteren Vorteil (der in
diesem Fall leider nicht greift): Einen PC hat man meistens schon
(sonst wäre man ja nicht hier im Netz...). Die Controller-Hardware muß
man sich erst besorgen, und wenn man dann doch die Lust verliert, dann
hat man das Zeug rumliegen...
Eigentlich kann man den PO nur raten, sich die verschiedenen Tutorien
hier auf der Seite anzugucken, zu verstehen und sich dann nicht mit
Hilfe der Fuses aus dem Controller auszusperren.

von Chief Brady (Gast)


Lesenswert?

@Der inoffizielle WM-Rahul

>Solche Aussagen sind mal wieder typisch, und an Spitzfindigkeit nicht
>zu überbieten. Kann es sein, dass du in deiner Freizeit irgendwas mit
>Rosinen machst?

Es kommt immer darauf an, für welches Zielsystem jemand programmiert
und hier soll augenscheinlich für ein µC programmiert werden. Wenn
jemand allgemein programmieren lernen will, würde ich natürlich auch
etwas "höheres" empfehlen.

CB

PS: Hab' nix mit Rosinen zu tun. Ausserdem kommt es gerade beim
Programmieren auf jede Rosine (Bit) an

von Thomas O. (Gast)


Angehängte Dateien:

Lesenswert?

Einem absolutem Anfänger lege ich dieses Buch ans Herz, das Buch ist
sehr ausführlich und leicht verständlich. Jeder Befehl wird mit
praktischen Beispielen erklärt. Ist halt ne Hochsprache aber das Buch
gibt sehr viel her, die ganzen logischen Funktionen werden erklärt,
Variablen, Konstanten, Genauigkeit, Werteberieche, Festkomma-,
Gleikommawerte, Sprunge, Bedingte Sprünge, Unterprogramme, Schleifen
usw. Will dich jetzt nciht zur Hochsprache bewegen, finde persönlich
Assembler auch besser da ich hier genau weiß was passiert. Aber das
Buch vermittelt sehr viel Grundwissen deshalb meine Empfehlung. Bei so
ner Hochsprache halt sehr wenig mit der Speicherverwaltung zu tun.

Über einen Stack, Stackpointer, Programmpointer, Interrupts usw erfährt
man hier nichts. Hierüber empfehle ich dir folgende Bücher Bücher.
Mikrocontroller Kochbuch(scheints nciht mehr neu zu geben) und
Mikrocontroller Experimentierbuch, hier fast geschenkt
http://www.buecherbillig.de/isbn-3772350054/Mikrocontroller_Experimentierbuch.html

Es gibt aber sehr viele AVR-Assembler Tutorials im Internet auch in
Deutsch. Auch die Applikations Notes des Herstellern sind ne reine
Fundgrube.

von Alex A. (Gast)


Lesenswert?

Habe alles durchgelesen! Das meiste verstanden!
DANKE!!!!!!!!

von Karl heinz B. (kbucheg)


Lesenswert?

> Es kommt immer darauf an, für welches Zielsystem jemand programmiert
> und hier soll augenscheinlich für ein µC programmiert werden. Wenn
> jemand allgemein programmieren lernen will, würde ich natürlich auch
> etwas "höheres" empfehlen.

Genau so lese ich dir Urfrage:
"Ich hab keine Ahnung von Programmieren, aber ich möchte
es mal versuchen".

Daher mein Vorschlag erst mal auf nem PC anzufangen.
(Gründe bereits dargelegt).

Um es klar zu sagen: Ich gehe davon aus, dass Alex über
keinerlei Programmiererfahrung verfügt. Und so mancher
Satz in seiner Frage lässt in mir den Verdacht aufkommen
er hat noch keine Ahnung was da auf ihn zukommt.

Das ist so wie mit 'Clemens' (der Typ der auf nem 8051
ne vorhandene Uhr zu einer Stoppuhr umgebaut hat):
Ohne ihm zunahe treten zu wollen oder ihn beleidigen zu
wollen: programmieren ist nicht seins. Der Typ kommt
mit Assembler einfach nicht zurecht. Wenn er nicht auf
eine Hochsprache ausweicht, dann wird das auch nie was
werden. Obwohl: ich bin mir allerdings auch nicht sicher, ob
er mit einer Hochsprache zurecht kommen würde. Einen Versuch
waere es wert. Nur eines weiss ich mit Sicherheit: Bei Assembler
ist bei ihm Hopfen und Malz verloren. Er muss sich um zuviele
Dinge gleichzeitig kümmern und versinkt in der Komplexität.
Klar, die Komplexität dieser Uhr ist für euch und für mich ein
Lercherlschas(*), ihn stellt sie aber vor unüberwindliche
Hindernisse.

(*) Lercherlschas
österr. Ausdruck.
Gase die bei der Verdauung entstehen und zwar vom Verdauungstrackt
einer Lerche (kleiner Vogel). Man meint damit: "nicht der Rede wert"

von Markus N. (Gast)


Lesenswert?

Hi Alex.
Ich hab mir auch einfach eines Tages gedacht, hey ich muss jetzt lernen
wie man µC programmiert. Und dafür 1000000 Dank an diese Seite sonst
könnte ich heute nicht mal ne LED blinken lassen.
Mein großer Vorteil allerdings war das ich mit 10 Jahren mit GW Basic
angefangen hatte, dann mit 14 auf Visual Basic umgestiegen bin und mit
18 hab ich dann Delphi gelernt. Jetzt programmiere ich meine µCs in C
und es ist schon wirklich sehr vorteilhaft gewesen. Es geht z.B. darum
das wenn du in Basic oder Delphi nen Fehler hast dann kannst du direkt
im programm debugen und dir den Wert angucken. Was bei einem µC leider
überhaupt nicht geht. Da wird es schon schwieriger einen Fehler zu
finden. Also mein Tipp is ganz klar lern jetzt erst ma 1-2 Monate
bissal VB oder Delphi kenntnisse und steig dann um. So wirst du dir
viel leichter tun. Dann kannst du dir auch hier das Tutorial in C
durchlesen und sofort loslegen (damit ich hab ich eigentlich die
meisten kenntnisse vom Programmieren eines AVRs gelernt). ASM finde ich
für mich selber nicht geeignet da ich einfach eine Hochsprache gewont
bin und ASM einfach nicht brauch. Es gibt bisher kein Problem das ich
nicht in C lösen konnte.
Das mit den Beispielen Abtippen und lernen ist recht simpel.
Du schreibst das beispiel erst mal ab und schaust das es läuft. Jetzt
änderst du einfach was im Programm und guckst was nun passiert ... so
langsam wirst du dann verstehen was wo genau passiert und wie du es
selber erstellen kannst. Ausserdem ist das lesen von Datenblättern (wie
schon erwähnt) sehr sehr wichtig. Es gibt hier paar Leute die einem
Anfänger sagen schau doch in's Datenblatt. Aber (zumindest war das so
bei mir) ich hab am Anfang da hineingeguck und war danach genau so
schlau wie davor. Also ich finde es ist am Anfang echt nicht einfach so
ein Datenblatt genau zu verstehen. Das solltest du dir oft Aufmerksam
durchlesen und wenn du dann mal eines verstehst, ist es für die anderen
auch nicht mehr schwer.

von Chris (Gast)


Lesenswert?

Auch wenn ich selber nicht so fit in Assembler bin wollte ich auch mal
meinen Senf dazugeben:

Wenn man gar nichts versteht heisst das für mich man weiss weder was
eine Variable ist, eine Schleife oder eine Bedingung. Und sowas ist in
C am PC eindeutig einfacher zu lernen als in Assembler.

Wenn das schlimmste überstanden ist wären ein paar grundsätzliche Dinge
der Digitaltechnik wichtig zu wissen, sonst kann man zugegebenermaßen in
C auf einem Controller nicht allzu effektiv proggen.

Diese Kenntnisse sind es auch, die beim Verstehen von
Controller-Beispiel-Codes erst so richtig möglich machen.

Hatte selber bis vor Kurzem noch nur mehr oder weniger gute Kenntnisse
von Basic auf dem C64, dem C128, Q-Basic, Java-Script, Visual Basic und
PHP. Beim Verständniss des bitweisen Arbeitens (z.B. logische
Verknüpfungen) hätte diese Hochsprachen nichts geholfen.

Aber selbst Assembler nützt nichts, wenn man das Prinzip der 1en und
0en und was die miteinander machen nicht versteht ...

Also meine Meinung: C zunächst am PC - parallel
Digitaltechnik-Grundlagen - und dann später halt C auf dem Controller

Und wenn der Moment gekommen ist, dass man nicht mal mehr einen
Bruchteil einer Sekunde nachdenken muss, ob man jetzt beispielsweise
eine Schleife etc . braucht, kann man auch nochmal in Assembler
einsteigen ...

von thkais (Gast)


Lesenswert?

Ich halte ebenfalls Basic für den richtigen Anfang. Schließlich ist
Basic für Anfänger entwickelt worden. Für den PC gibt es viel Auswahl,
Visual-Basic oder .net würde ich aber nicht verwenden, da es viel zu
überladen ist. Der Vorteil beim PC: Man kann sich ohne weiteres die
Ergebnisse auf dem Bildschirm anschauen, beim µController geht das
nicht so ohne weiteres. Versuche es doch mal mit dem alten QBasic.
Läuft zwar "nur" im Dos-Fenster, ist aber sehr einfach gestrickt.
Später kann man dann auf den Bascom umsteigen oder sich mit C /
Assembler beschäftigen. Allerdings ist das Erlernen der Programmierung
von Null auf keine Sache von Stunden oder Tagen, sondern eher von
Wochen oder Monaten.
Schau Dich mal auf http://www.qbasic.de um, unter
http://www.antonis.de/qbdown/qbcompil.htm kannst Du Dir Qbasic 1.1
kostenlos herunterladen.

von Niels H. (monarch35)


Lesenswert?

Meiner Meinung nach kann man Programmieren nicht lernen. Entweder man
kanns, oder man kanns nicht. Jemand, der noch nie eine Codezeile selber
geschrieben hat, hat in einem Studium der Programmierungskategorie an
der Uni nichts verloren.

Ich weiss, diese Meinung ist etwas Krass und möglicherweise nicht
verallgemeinungsfähig (ausnahmen gibts natürlich immer), aber diese
Theorie bestätigt sich in meinem Alltagsleben nahezu tag-täglich.

Programmieren zu können erfordert meines Erachtens auch ein gewissen
Grundverständnis dafür, wie so ein Rechner überhaupt funktioniert. Man
liest nicht einfach ein paar Zeilen eines Buches und kann dann
loslegen. Es ist auf jeden Fall ein weiter und langer weg!

von Dj Beat (Gast)


Lesenswert?

Ich werde mit Basic anfangen!
 :)))

von Unbekannter (Gast)


Lesenswert?

> Meiner Meinung nach kann man Programmieren nicht lernen.
> Entweder man kanns, oder man kanns nicht.

Selten so ein Blödsinn gelesen. Du hast das Programmieren also mit der
Muttermilch aufgesogen?

Prinzipiell kann jeder Mensch alles lernen. Die Grundvoraussetzung
dafür ist Spaß und Interesse an der Sache und etwas Disziplin und
Geduld. Dann geht praktisch alles.

Niels, praktisch alles, was Deine Persönlichkeit ausmacht, hast Du
gelernt. Du bist Dumm-Beutel-Dumm auf die Welt gekommen. Konntest weder
sehen, hören, sprechen noch laufen. Alles musstes Du erst lernen.
Soziale Interaktion, Sprache, Logik, usw. alles hast Du gelernt. Du
wurdest mit keiner dieser Fähigkeiten geboren.

Denk mal drüber nach!

von Hannes L. (hannes)


Lesenswert?

Aber für manche Dinge braucht man Talent. Hat man kein Talent, dann
fällt jeder Schritt doppelt schwer. Oder warum spielst du nicht in der
Nationalmannschaft?

Es gibt halt Leute, die können nicht musizieren (mit Dur und Moll,
nicht mit Play und Stopp), da hilft der teuerste Musikunterricht nix.
Ähnlich ist es mit Sport, Malerei, Schriftstellerei und eben auch mit
der Fähigkeit, Aufgaben in Algorithmen zu formulieren und Programme zu
schreiben (seien es nun Wahlkampfprogramme einer Partei oder Programme
für Computer oder Mikrocontroller).

...

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

>Konntest weder sehen, hören, sprechen noch laufen.

sehen und hören kann man von anfang an, nur ob man das, was man sieht
und hört schon richtig deuten kann, steht auf einem anderen Blatt.

>braucht man Talent
genau. Und man muß das Interesse dafür haben, dieses Talent zu nutzen.

von Dj Beat (Gast)


Lesenswert?

So, weiter geht´s!
Habe jetzt in Basic sowas geschrieben:

$regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 4000000

Config Portc.0 = Output
Config Portc.1 = Output


Do
   Portc.0 = 0
   Waitms 20
   Portc.0 = 1
   Waitms 20

Loop

End

Soweit funktioniert alles! (am port PC0)
Aber jetzt will ich dass am port PC0 weiterhin das passiert, soll aber
noch was dazu kommen. und zwar am port z.B. PC1 will ich dass hier
haben:
   Portc.0 = 0
   Waitms 20
   Portc.0 = 1
   Waitms 900000

Die beiden Ports sollen aber gleichzeitig funktionieren.
Als der eine Port macht das Eine, der andere - das Andere!
Weiss jetzt nich, wie ich das aufbauen soll. Welchen Befehl soll ich
denn nehmen?
Kann das mal jemand für mich machen, und ich versuche das
nachvollziehen.!
Danke! :)))
 (Bin schon ein Stück weiter, als gestern)

von Stefan (Gast)


Lesenswert?

Geht so nicht. Wenn der µC Däumchen dreht (Waitms 900000) vernachlässigt
er die anderen ihm zugedachten Aufgaben...

Du solltest den Programmablauf anders schreiben:

Schalte einen Zähler oder eine Uhr (Timer) fürs Däumchendrehen ein.
Dann prüfe regelmäßig, ob das Däumchendrehen noch notwendig ist. Wenn
ja an PC1 nix machen aber PC0 bedienen.

Eine sehr weiter fortgeschrittene Methode verbannt die Uhr in einen
Interrupt und die Arbeitsroutinen werden angeworfen, wenn der Interrupt
auftritt. Solange das nicht passiert, kann der µC was anderes machen und
wenn er nur in einer Schleife Kreise dreht.

von Dj Beat (Gast)


Lesenswert?

Du meinst also, wenn an einem Port die Led leuchtet, dann kann an keinem
anderen port was anderes passieren bis die LED aus ist?

von Thomas O. (Gast)


Lesenswert?

Portc.0 = 0
Portc.1 = 1
Waitms 20
Portc.0 = 1
Portc.1 = 0
Waitms 20....

von Niels H. (monarch2)


Lesenswert?

nein, das wait verhindert die weitere Programmausführung.

Wenn du an zwei ports unterschiedliche Intervalle ausgeben möchtest,
musst du dein programm abändern, beispielsweise mit einem Zähler.
(sorry, ich kann das spezifische basic nicht)

for I= 1 to 10
   portc.0=i mod (2)
   if i<2 then portc.1=0 else portc.1=1
next

von Dj Beat (Gast)


Lesenswert?

ok, ich versuche das anders:
Ich möchte mit einem Port ein Triack ansteuern (soll immer
durchgeschaltet sein!!!)
und an den anderen Port kommt die Schrittmotorsteuerung!
;)

von Niels H. (monarch2)


Lesenswert?

hab natürlich prompt das wait in der for-schleife vergessen
grummel

von Dj Beat (Gast)


Lesenswert?

oder noch anders.
wie krige ich das hin, dass eine LED immer leuchtet, und die andere
blinkt?

von Dj Beat (Gast)


Lesenswert?

Kann mit jemand erklähren, wie das funktioniert?
vllt ein Programm kurz schreiben?!
Nimmt ja keine Zeit weg, dauert paar minuten bei den, die es können.

von Stefan (Gast)


Lesenswert?

@ Dj Beat

sorry, innerhalb von 10 Min. hast du dir nicht alle notwendigen
Gedanken gemacht, um das Problem zu umzingeln. Es nutzt nix bzw. es
nervt, im Minutentakt neue Ideen in die Menge zu werfen.

Angenommen es wäre jetzt 1 Uhr. Du willst eine Fernsehsendung um 9
schauen (PC1) und am Nachmittag alle 20 Minuten nachsehen, was die
Katze macht (PC0).

Deine jetzige Methode ist: Nachsehen was die Katze macht, 20 Minuten
warten (waitms 20), dann nur noch auf die Uhr schauen bis es 9 ist
(waitms 900000).

Die vorgeschlagene Methode ist: Uhr anwerfen. Auf Uhr kucken. 20 Min.
abgelaufen? Ja => Katze kucken. Auf Uhr kucken. 9 Uhr? Nein => Kein
Fernsehen kucken. Auf Uhr kucken...

von Dj Beat (Gast)


Lesenswert?

mache Ausbildung zum Elektroniker für Geräte und Systeme!
Beschäftige mich ganze Tage damit, und zu Hause aus.. bin erst um 12
nach hause gekommen, und bin wieder an überlegen...
bin noch der totale anfänger...
was ist kann ist nur dass:
http://www.roboternetz.de/wissen/index.php/Bascom
mehr weiss ich leider noch nicht :((((
Und finde auch kein Tutorial, wo es so beschrieben wird!

von Thomas O. (Gast)


Lesenswert?

ja ich dachte das die Ports immer genau das Gegenteil ausgebeben sollen.


Ansonsten wie oben beschrieben einen Zähler benutzen, ale entweder den
Zähler des Prozessors oder einen in Software.

Das Würde dann so aussehen, allerdings macht hier dein Prozessor dann
ncihts anderes als ständig zu zählen und zu vergleichen, wenn dann noch
was anderes ausgeführt werden soll kann man es dazwischen schreiben. Da
haste auch einige Möglichkeiten z.b. kannst du diese Rechenbefehle in
deinen Programm positionieren wo du Sie brauchst muss aber immer im
Hinterkopf haben wie lange das dann dauert. Wenn du einen Harwaretimer
nimmst dann kannste dein eigentliches Programm ganz normal laufen
lassen. Und der Timer vergleicht automatisch auf den eingestellten Wert
wenn dieser dann gleich ist wird dein Programm unterbrochen springt zu
einer festgelegten Routine erledigt dort z.b. das Umschalten des Pins
und springt wieder zu deinen normalen Program.

start:
a=0
a=a+1
if a=x then portc.0=1
if a=x then portc.1=0
Hier kannste dann noch andere Sachen erledigen
a=a-1
if a=x then portc.0=1
if a=x then portc.1=0
goto start

von Dj Beat (Gast)


Lesenswert?

"start:
a=0
a=a+1
if a=x then portc.0=1
if a=x then portc.1=0
Hier kannste dann noch andere Sachen erledigen
a=a-1
if a=x then portc.0=1
if a=x then portc.1=0
goto start"
was ist a, x und +1?
Bascom versteht das so nicht..
habe es so probiert:
Config Portc.0 = Output
a Alias Portc.0
Config Portc.1 = Output
X Alias Portc.1

was ich mit +1 machen soll verstehe ich nicht ganz :(

von Niels H. (monarch2)


Lesenswert?

a und x sind variablen....

wie auch immer; das bringt so nichts. Du kannst nicht durch Rede und
Antwort programmieren lernen. Du brauchst ein Buch und optimalerweise
ein spezifiziertes Ziel wo du hin willst.

Mehr tipps kann man dir leider nicht geben.

von Dj Beat (Gast)


Lesenswert?

hat vllt jemand so ein Buch?
würde ich kaufen!
am Besten Basic AVR oder so

von Niels H. (monarch2)


Lesenswert?

wie wärs denn mal mit ein bisschen eigeninitiative?!

Ist es wirklich so schwer bei amazon nach bascom zu suchen?

von Simon K. (simon) Benutzerseite


Lesenswert?

Und wie man bei Stefans Beispiel nummer 1 sieht, erkennt man, dass wenn
du am Fernsehgucken bist (wait 9000000 *10^6), dich nicht mehr um die
Katze kümmern kannst, weil du vollständig mit wait 9000000 *10^6
ausgelastet bist..

von AVRNIX (Gast)


Lesenswert?

www.rowalt.de

Und die Hilfe von Bascom.

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.