hey, ich habe das make update draufgespielt, rechner neu gestartet. die sache mit dem "make all" geht aber immer noch nicht.
MfG
Michi
Druckbare Version
hey, ich habe das make update draufgespielt, rechner neu gestartet. die sache mit dem "make all" geht aber immer noch nicht.
MfG
Michi
Falls du das verlinkte Make installiert hast: Wirf es wieder runter.
Du brauchst WinAVR, das ist ein ganzes Programmpaket welches unter anderem den bereits von Schumi erwähnten Compiler (AVR-GCC) sowie verschiedene weitere Werkzeuge beinhaltet. Außerdem kommt mit Programmers Notepad (das ich nie genutzt habe) auch noch ein mächtigerer Texteditor mit.
Um Schumis Ausführungen noch etwas zu ergänzen:
Dein AVR versteht eine eigene Sprache aus Nullen und Einsen. Dein Computer versteht eine andere Sprache, die sogenannten Maschinenbefehle sind bei jeder Prozessorfamilie anders ausgestaltet. Die Aufgabe des Compilers besteht jetzt darin, deinen Programmcode in Maschinencode zu übersetzen, was er in mehreren Schritten macht. Das bereits erwähnte Makefile steuert diesen Prozess, indem es dem Programm "make" sagt, welche Dateien benötigt werden. Am Ende hast du ein HEX-File, das im Endeffekt den Maschinencode enthält.
Zur C-Programmierung:
Rechner sind dumm, sie machen nur genau das was du ihnen sagtst, und kein bisschen mehr. Sie können nicht hellsehen und sind furchtbar versessen auf Regeln nach denen sie arbeiten können. Wenn dein Code nicht tut was du willst, hast du vermutlich eine der Regeln verletzt oder dich missverständlich/falsch ausgedrückt.
Die Ausführung von Programmen erfolgt normalerweise eine Zeile nach der anderen, das ist der sogenannte Programmfluss. An einer definierten Stelle geht die Ausführung los (das ist main()) und folgt von da an deinen Anweisungen. Du kannst über sogenannte Fallunterscheidungen Bereiche deines Programmes überspringen und mit Schleifen bestimmte Stellen wiederholen. Um nicht alles hintereinander schreiben zu müssen gibt es Unterprogramme, sogenannte Prozeduren oder Funktionen, die häufig benutzte Abläufe zusammenfassen können. Gibst du den Befehl eines solchen Unterprogramms ein, wird dieses gestartet und nach Beendigung wird normal weitergearbeitet.
Solche Vorgänge lassen sich in Flussdiagrammen darstellen, ich habe Mal ein Beispielbild mit einer Fallunterscheidung und einer Schleife angehängt. Jedes Rechteck steht dabei für eine Reihe von Anweisungen die hintereinander ausgeführt werden, die Raute für eine Fallunterscheidung. Pfeile zeigen den Programmfluss. Solche Diagramme sind nützliche Werkzeuge um sich im Voraus darüber Gedanken zu machen, wie dein Programm ablaufen soll.
mfG
Markus
Hey Richard,
Ich weis, du meinst es nur gut, aber wie gesagt, genau solche ausdrücke wie "Menonics, LDI oder STR" sollten dann auch erklärt werden und nicht nur hingeschrieben werden, sodass es eben der "Idiot" versteht.
Noch eine frage: Wie muss man sich zum beispiel einen "2313" vorstellen zum vergleich? Kann man solch einen ic als "Extrem dummen Computer" bezeichnen, der nur eben die eine Aufgabe erledigen kann, die man ihm aufspielt? Hat solch ein ic auch einen Prozessor oder wie sind die Teile Augfebaut? Ich verstehe nicht, wie es mithilfe des PCs möglich ist etwas auf einen hardwarebaustein aufzuspielen, der dies dann erledigt. Ich meine in einem Schmitttrigger-ic weis ich zum beispiel, dass sich darin nichts anderes als eine fertige schaltung im miniformat darin befindet. wie ist das bei den AVRs?
Hey
@ markusj
--> danke markus, dank dir funktioniert das "make all" jetzt endlich. Habe das andere winavr geladen und draufgespielt, jetzt funkt alles, megacool... dann kann es ja jetzt losgehen mit dem programmeschreiben in C :D
Wenn jemand gute Seiten weis, wo man als neuling "reinschnuppern" kann um etwas wind von der Sache zu bekommen, nur her damit!
Der Tiny2313 (oder besser gesagt, Mikrocontroller im allgemeinen) ist einfach nur ein kleiner Computer (der im Vergleich zu deinem SEHR schwach auf der Brust ist), der neben dem Prozessorkern selbst noch zusätzliche Hardware wie Timer, Schnittstellen, AD-Wandler etc. hat.
Die kleinen AVRs haben alle gemeinsam, dass sie ihr Programm nur vom internen Speicher (Flash) ausführen können, bei anderen (wie auch bei den "normalen" Computern) werden Programme aus dem Arbeitsspeicher ausgeführt.
So, jetzt zu deiner Frage, wie ein AVR aufgebaut ist/funktioniert: Es gibt innerhalb des Prozessorkerns verschiedene Komponenten. Eine Arithmetisch-Logische-Einheit (ALU), die für Berechnungen zuständig ist. Einen Registersatz, das sind wenige (bei AVRs 32) Speicherplätze, auf die der Prozessor direkt (schnell) zugreifen kann und die für Zwischenergebnisse benutzt werden. Mehr Speicher steht in Form des langsameren SRAMs zur Verfügung, auf den über ein Speicherwerk zugegriffen wird, für Zugriffe auf den Flashspeicher wird ebenfalls eine Komponente benötigt. Dann gibt es da noch das Steuerwerk, es signalisiert den einzelnen Komponenten, wann sie was zu machen haben, die Bedeutung der Maschinenbefehle ist hier fest verdrahtet. Das Steuerwerk "weiß" also, dass eine Instruktion 0x0B01 bedeutet, dass die Werte aus den Registern 0 und 1 addiert und dann in Register 0 gespeichert werden soll, und teilt dies zur richtigen Zeit den jeweiligen Komponenten mit.
Und weil niemand mit 0x0B01 um sich werfen will, hat man für diese Maschinenbefehle lesbare Kürzel erfunden, das sind die von Richard erwähnten Mnemonics. Das ergibt dann die Assemblersprache, 0x0B01 wäre in ihr formuliert: add r0, r1.
Übrigens, wie das bei Sprachen üblich ist, braucht man auch hier wieder einen Übersetzer, der die Mnemonics dann wieder in eine Kolonne von Bits umformt, das macht der Assembler.
mfG
Markus
PS: Zum 0x0B01: Das ist die hexadezimale Schreibweise für (binär) 0000 1100 0000 0001 falls dir das Binär- und Hexadezimalsystem noch nicht geläufig ist, kann ich dazu ein paar Worte sagen.
Es gibt sowohl im RN-Wissen als auch im Wiki von Mikrocontroller.net gute Tutorials, wobei letzteres weniger an C-Neueinsteiger sondern eher an Umsteiger gerichtet ist.
mfG
Markus
hey, was es genau mit hexadezimalen zahlen zu tun hat weis ich ehrlich gesagt nicht. außer, dass mein Taschenrechner eine hex funktion hat, falls das das Gleiche ist...
MfG
Michael
Es gibt verschiedene Zahlensysteme. Die wichtigsten zähle ich hier auf:
Name des Systems => Gesamtanzahl der Zahlen => mögliche Zahlen
Binärsystem => 2 => 0, 1
Oktalsystem => 8 => 0 - 7
Dezimalsystem => 9 => 0-9
Hexadezimal (hex) => 16 => 0-9 und A-F
Das Binärsystem wird bei Bitoperationen verwendet (einzelne Ports setzten bzw rücksetzen,...)
Das Oktalsystem wird nicht so oft verwendet. Die Ports sind z.B. in Oktalsystem aufgebaut.
Das Dezimalsystem wird nicht nur in der Elektronik verwendet.
Das Hex-Format wird eigentlich immer in der Elektronik verwendet. Dieses System wird zum Auslesen vom ADC verwendet, zum setzten von PWM Kanälen, Komunikation bei Bussystemen,... verwendet.
MfG Hannes