So, seit ihr beiden, Thomas und Tekeli, da? ;o)
Dann kann es ja theoretisch los gehen mit der Aufgabe! *freu*
Moin, moin!
Schade, dass Sebastian heute arbeiten muss! *schluchts*
Ich weiß leider nicht, wie viel Zeit ich heute habe bzw. wie lange ich an den PC kann, 5 Wochen habe ich nämlich noch meine Schwester als Anwärterin auf den PC! ;o)
Naja, ich werde versuchen das Ganze einzurichten!
Achso, nagut, ich gebe mich geschlagen! ;o)@Florian: Das mit den Kommentaren mach ich ja, also einrücken und alle Kommentare in der gleichen Spalte. Sieht man nur hier im Forum nicht, aber im AVR Studio isses wunderbar.
Ok, den Code könnt man noch mehr einrücken, wenn man Blöcke hat, die zusammengehören.
Ich muss zugeben, dass ich noch nicht so oft Code gepostet habe! *lol*
Ich habe angefangen mit www.mikrocontroller.net, danach habe ich mit www.avr-asm-tutorial.net weiter gemacht und zum Schluss habe ich noch die Tutorials von Gerhard Paulus durchgearbeitet.Ich habe nur mit Dieser Seite und mit Dattenblättern gelernt.
Ich werde versuchen es zeitlich einzurichten!Warum Florian soviel Wert drauf legt wirst Du Morgen erfahren.
Ich muß Morgen leider arbeiten womit ich mir das Spielchen leider nicht
angucken kann, aber ich hoffe der Florian hat mehr Zeit und stellt Dir das vor.
Und vor allem auch die Datenspeicher-Direktiven DW. und DB. und wo die Unterschiede liegen!Bis dahin kannst Du dich im Tutorial über Zahlen jenseits der 255 marke , den Befehl lpm und die Zeigerregister informieren, glaube mir, es ist wirklich einfach beschrieben.
Ich persönlich liebe DB. und lpm, es sind meine Lieblingsthemen! ;o)
Ich freue mich auch, aber ich bin auch gespannt, wie lange wir für das nächste Kapitel brauchen werden!?Ich freue mich wirklich , daß wir das heute mit der Sirene hinbekommen haben.
So, seit ihr beiden, Thomas und Tekeli, da? ;o)
Dann kann es ja theoretisch los gehen mit der Aufgabe! *freu*
Ist kein Problem wegen der Zeit. Einfach schreiben, wenn man Zeit hat Hab mir gestern schon das mit den Zahlen durchgelesen und ich glaub, dass ich mir schon irgendwie vorstellen kann, wie man sie verbindet.
Bin gespannt, was sonst noch auf mich zukommt *g*
Muss jetzt eh erstmal einkaufen gehen, schau aber gleich wieder rein, wenn ich da bin *suchti* :/ *g*
Gruß
Thomas
[edit]
Da bin ich, pünktlich zum Unterrichtsbeginn Aber wie gesagt, bin dann erstmal kurz wech.
Gut, dann bis gleich!
Melde Dich dann bitte, wenn es losgehen kann! ;o)
Ist Tekeli auch da?
Als online wird er ja angezeigt
Meinte er nicht, er macht im Hintergrund mit? Najo, kannst ja schon die Aufgabe posten, dann kann ich mir im Auto schon Gedanken machen *g*
[edit]
So, nun wech, ich meld mich dann.
Moin moin,
bin ganz Ohr
Hier kommt die Aufgabe!
Seit bitte nicht zu geschockt, es ist nicht ganz leicht, aber Sebastian und ich werden euch langsam darauf hinzuführen!
Wir haben als nächstes vor, ein Soundmodul zu programmieren.
Wir werden einfach eine C-Dur-Tonleiter *für die Musiker unter uns* einmal rauf und einmal runter spielen.
Die Frequenzen findet ihr hier:
http://www.pianotip.de/frequenz.htm
Wir werden ersteinmal bei dem c' mit 261,63 Hz anfangen, über den Kammerton a' 440,00 Hz bis hin zum c'' 523,25 Hz.
Die Halbtonschritte lassen wir im ersten Teil weg, ich will euch ja nicht mit der Musiktheorie überfordern! ;o)
Damit wir nun nicht alle Töne einzeln mit großem Aufwand programmieren müssen, werden wir die Werte für die Töne im Speicher des AVR's ablegen.
Das machen mir mit den so genannten Direktiven .DW oder .DB!
Ich persönlich mache es gerne, dass ich die Daten ganz an's Ende des Codes lege.
Das sieht dann folgendermaßen aus:
Wenn man nun die Daten auslesen möchte, muss man das mit Hilfe des Z-Registers und des Befehls lpm machen.Code:.include "m8def.inc" . . . main: ... subroutienen: ... daten1: .dw 65535 , 0 ; zwei sogenannte Words daten2: .db "Hallo!" , 10 , 13 ; immer eine gerade Anzahl an Bytes
Lest euch das bitte durch: http://www.avr-asm-tutorial.net/avr_...ner/index.html
Mit Hilfe des Z-Registers, welches ein 16-Bit-Register ist, legen wir die Position des Zeigers im Speicher fest.
An der Position wird dann mit lpm das Byte ausgelesen und in das Register 0 geschoben. Das können wir dann auslesen.
Schreibt jetzt bitte einen Code, der mit Hilfe des AVR-Speichers in r16 (temp) den Text "Hallo!" ausgibt. Ganz wichtig ist immer, dass ihr eine gerade Anzahl an Bytes benutzt, das hängt mit der Speicherstruktur zusammen.
So weit, so mehr oder weniger gut! ;o)
ich hoffe ihr habt wenigstens etwas verstanden, was ich von euch verlange! *g -> schäm für diesen unverständlichen Post*
Wenn ihr Fragen habt, dann fragt!
Viel Erfolg!
Also ich hab jetzt mal geschaut, aber irgendwie ist das ziemlich kompliziert geschrieben. Einmal benutzt er da Y und einmal Z. Muss ich da nun auch beide Register mit der "Adresse" belegen?
Vor allem seh ich da gar nicht durch, was ich da nun zum Lösen der Aufgabe brauch und wie sollen wir den Text denn ausgeben? Können wir den Text nicht einfach irgendwie in r16 kopieren?
Sorry, aber wahrscheinlich bin ich echt zu doof dafür *g*
Und dann multipliziert er im Tutorial einmal die Adresse mit 2, ja, weils ein Wort ist, also 2 Bytes. Versteh ich aber leider nicht, warum man das dann x2 nehmen muss.
Ich hatte bis jetzt immer Bücher zum lernen, aber da gibts ja leider keine guten...
So wie ich das verstanden habe, ist der Programmspeicher WORD-weise organisiert. Also unter einer Addresse im Programmspeicher findet man 2 Byte. Also z.B.
$3400 "0011 0100" "1000 0001"
Byte1 = "0011 0100"
Byte2 = "1000 0001"
Deswegen beim Zugriff sollte man schon sagen, was man will. Will man Byte1 oder Byte2.
Ist das richtig so?
[EDIT]
Und da man mit dem Programmspeicher arbeitet, benutzt man Z-Register.
@Masters
Wo sollen wir den "Hello!" ausgeben? Oder sollen wir eine Schleife machen, die Daten aus dem Programmspeicher byteweise einliest, und in der r16 schreibt?
Ja, das denk ich auch. Im Tutorial steht folgender Code:
Und weiter unten dann das hier:Code:.EQU Adresse = RAMEND ; In RAMEND steht die höchste SRAM-Adresse des Chips LDI YH,HIGH(Adresse) LDI YL,LOW(Adresse)
Aber das versteh ich nicht, brauch ich denn da nun beide Register, kann ich mir aber nicht vorstellen, reicht doch, wenn ich nur ein Registerpaar nehme, oder?Code:LDI ZH,HIGH(2*Adresse) LDI ZL,LOW(2*Adresse) LPM
Aber wie gesagt, versteh nicht, warum der mit 2 multiplizieren muss.
Lesezeichen