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
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.:-)
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!!!!
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.
@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... ...
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.
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.
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. ...
@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.
@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
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
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.
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.
@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
> 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...
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.
@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.
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.
@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
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.
> 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"
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.
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 ...
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.
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!
> 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!
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). ...
>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.
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)
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.
Du meinst also, wenn an einem Port die Led leuchtet, dann kann an keinem anderen port was anderes passieren bis die LED aus ist?
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
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! ;)
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.
@ 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...
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!
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
"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 :(
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.
wie wärs denn mal mit ein bisschen eigeninitiative?! Ist es wirklich so schwer bei amazon nach bascom zu suchen?
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..
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.