Ok, also wir nehmen als Prescaler 512 *einfach mal so festleg* *g*
Den Timer laden wir wie folgt vor (bei 3,68 MHz)
c': 3686400 / 512 / 261,63 = 27,5 = 27 --> 256 - 27
a': 3686400 / 512 / 440 = = 16,3 --> 256 - 16
c'': 3686400 / 512 / 523,25 = 13,7 --> 256 - 14
Müsste soweit richtig sein.
In Assembler sieht das dann erstmal so aus:
[edit]Code:.equ time0_1 = 256-27 ;Timer für c' .equ time0_2 = 256-16 ;Timer für a' .equ time0_3 = 256-14 ;Timer für c''
Michi: Ich hab das hier: AVR Studio 4.11 (build 401) (41 MB, updated 01/05)
hi,
danke ich seh gerade hier gibt's auch ein gutes Tutorial!
Gruß Michi
Wieso brauchen wir eigentlich nur die Werte für die 3 Töne? Berechnen
wir die anderen irgendwie? Aber hab auch grad festgestellt, dass die Töne nciht alle denselben Abstand haben.
Ähh, ich will ja echt nicht stören, aber so viel wie ihr postet wird euer " Tutorial für alle Assembler-Anfänger" doch etwas zu unübersichtlich und geht nach hinten los.
Ich glaub nicht das sich da ein Anfänger durchquälen möchte...
Hat jemand Lust das alles zusammen zu tragen und eine strukturierte Einführung in Assembler zu machen? *niemand anguck*
Gruß,
Mehto
-
Hallo Thomas!
Wir wollen erstmal klein anfangen, da reichen 3 Töne erstmal! ;o)
Ich meine mich dunkel erinnern zu können, dass man ab 5 nach dem Komma aufrundet! *lol*c': 3686400 / 512 / 261,63 = 27,5 = 27 --> 256 - 27
a': 3686400 / 512 / 440 = = 16,3 --> 256 - 16
c'': 3686400 / 512 / 523,25 = 13,7 --> 256 - 14
Also:
c' : 28
a' : 16
c'' : 14
Sehr gut, ich habe jetzt nicht nachgerechnet! *lol*
Nee, wir wollen jetzt die Töne nicht als Konstante im Code ablegen, das wird zu kompliziert! ;o).equ time0_1 = 256-27 ;Timer für c'
.equ time0_2 = 256-16 ;Timer für a'
.equ time0_3 = 256-14 ;Timer für c''
Du erstellst jetzt ein neues Programm, mit Standarddefinitionen, wie Stack usw. plus einem Timer, z.B. dem Timer0 oder 2!
Dann setzt Du ganz unten folgendes an den Code:
Die Null am Ende ist nur Füllmaterial, da wir ja nur drei Töne derzeit haben! ;o)Code:tonleiter1: .db 28 , 16 , 14 , 0
Und dann zeige mal Deinen bisherigen Code!
Man könnte ja hinterher die "weniger wichtigen" Beiträge löschen, das dient dann auch der Übersicht. Oder das wichtigste zusammentragen, wär auch ne Möglichkeit
Aber erstmal müssen wir unser Tutorial zu Ende machen.
Gruß
Thomas
Hallo,
ich hab jetzt das AVRStudio und such noch wie ich das Programm einstellen muss um ne hex zu erstellen! Gibt es kein gescheites Tutorial?
Gruß Michi
Hallo Mehto!
Ich werde das später mal machen! *freiwillig meld*
Hi Michi, einfach das Programm, was du geschrieben hast, kompilieren, dann ist automatisch eine *.hex Datei in deinem Ordner.
Kompilieren kannst du mit F7.
@Florian:
So, erstmal gut soweit:
Allerdings muss hier noch die daten_laenge angepasst werden, oder? Also jetzt sind das ja 4 Bytes und nicht mehr 6, oder?Code:.include "m8def.inc" .def tmp = r16 ;Mein Universallregister .def lpm_reg = r0 ;Mein lpm-Register .equ time0 = 256-90 ;Damit wird der Timer0 vorgeladen .equ daten_laenge = 6 ;Länge des Strings .org 0x000 rjmp reset ;Interruptvektor "reset:" reset: ;Stack einrichten ldi tmp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, tmp ldi tmp, LOW(RAMEND) ;Low-Byte der obersten RAM-Adresse out SPL, tmp ;Timer Register werden belegt, hier Timer 0 ldi tmp, (1<<CS02) ;Prescaler ist 1024 out TCCR0, tmp ;Register TCCR0 ist für den Prescaller zuständig ldi tmp, time0 ;Hier wird der Timer vorgeladen out TCNT0, tmp ldi tmp, (1<<TOIE0) ;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet out TIMSK, tmp ;Register TIMSK ist dafür zuständig ;Z-Register mit daten1 füllen ldi ZH, HIGH(tonleiter1 * 2) ldi ZL, LOW(tonleiter1 * 2) sei ;Interrupts zulassen main: lpm ;Daten laden mov tmp, lpm_reg ;in temp verschieben adiw ZL, 1 ;Z um eins erhöhen ldi tmp, LOW ((tonleiter1 * 2) + daten_laenge) ;vergleiche LOW-Byte cp ZL, tmp ldi tmp, HIGH ((tonleiter1 * 2) + daten_laenge) ;vergleiche HIGH-Byte cpc ZH, tmp breq ende ;springe zu ende, wenn letztes Byte ausgelesen rjmp main ;nochmal ende: ;Endschleife rjmp ende tonleiter1: .db 28, 16, 14, 0 ;Werte zum Vorladen des Timers für die Töne ;c', a' und c''
Gruß
Thomas
Lesezeichen