Kurze Zwischenmeldung, wir steigen jetzt mit dem 182. Post in die Top-Ten-Thread-Statistik ein!
https://www.roboternetz.de/phpBB2/statistics.php
Und das ist schon ein großer Fehler, so wird er Dir nie ein Ton rausgeben....Ich setz ihn gar nicht auf LOW
Wenn Du ihn einmal nur auf High setzt dann ist es so als ob Du ihn an eine Batterie anschließt und Fertig.
Deine Frequenz ist gleich null.
Dein Programm wird schon richtig funktionieren, also den Timer 0 mit verschiedenen Werten beladen, mehr auch nicht. Du mußt in dem Timer schon den Zustand vum PB2 ändern, damit er Piept sagt.
Im moment sieht es am PB2 so aus : 1111111111111111111111111111111
Es soll aber so aussehen :1010101010101010101010101010101
Jetzt nicht böse sein!!
Wieviel Ahnung hast Du von Elektronik / Elektrotechnik ?
Ich habe das Glück, daß ich aus der Branche komme, und irgendwann sowas in der Schule hatte,
das muß aber nicht bei jedem der Fall sein!
Kurze Zwischenmeldung, wir steigen jetzt mit dem 182. Post in die Top-Ten-Thread-Statistik ein!
https://www.roboternetz.de/phpBB2/statistics.php
In der Schule hatte ich nie was mit Elektronik zu tun, außer halt in Physik. Aber dann auch nicht sowas, sondern nur die Standardsachen wir Reihen- und Paralellschltung, sorry.
@Florian: Hehe, net schlecht Unser Thread is eben was besonderes *g*
Ich glaub es ist am besten, wenn ich nochmal von vorn anfang, denn ich blick echt nimmer durch den Code durch, durch das 1000x geändere.
ebendurch das 1000x geändere.
Je mehr Du geändert hast um so schlechter wurde das Program.
hier nochmal die Grundlagen:
Und ganz langsam, fang so an:
1.
Ein Timer, der mit 4 Khz arbeitet schaltet in der Interruptroutine den PB2 zwischen 1 und 0 um.
In dem Interrupt PB2 umschalten und Timer neu laden
Somit müßtest Du ein Piepen hören!
2. Zweiten Timer dazubasteln, der mit hilfe einer HilfsVariable 1 Sekundentakt erzeugt.
In diesem Interrupt nur die Hilfsvariable hochzählen und Timer neu laden.
Im Hauptprogramm Hilfsvariable überprüfen, und wenn Wert erreicht wurde leeren
und eine Diode umschalten.
Hier müßte es immernoch piepen, und Die Diode müßte blinken.
Somit siehst Du daß beide Timer funktionieren.
Wenn Du das hast, dann machen wir weiter!
@ Florian, seit wann heißt Dieser Thread "Tutorial für alle Assembler Anfänger" ?
@Thomas, genauso sollte man sich das immer Zeichnen
Seit eben! ;o)@ Florian, seit wann heißt Dieser Thread "Tutorial für alle Assembler Anfänger"?
Ich dachte, es wäre etwas besser vom Titel her, denn um das eigentliche Titelthema geht es ja im Grunde genommen nicht mehr!
War das nicht ok?
Ich denke schon, worum ging es sich eigentlich?War das nicht ok?
Achja eine LED ein und auszuschalten hehe
Gruß Sebastian
Ich finde da haben wir schon einiges geschafft!
So, wenn ich das Umschalten von PB2 in die Interrouptroutine mache, hör ich kein Piepen mehr. Nur wenn ich das Umschalten so mache, wie wir das bei dem "Lichtschalter" gemacht haben.
Hier der Code:
Finds irgendwie komisch :/Code:.include "m8def.inc" .equ time0_1 = 256-2 ;Damit wird der Timer vorgeladen .equ Summer = PB2 ;Summer an B.2 .def tmp = r16 ;Mein Universallregister .def statusreg = r17 ;Mein Statusregister ;.def zaehler = r18 ;Mein Zählregister .org 0x000 rjmp reset ;Interruptvektor "reset:" .org OVF0addr rjmp pruefZaehler ;Interruptvektor für Timer0 Überlauf, hier springt ;das Programm hin, wenn der Timer überläuft 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 sbi DDRB, Summer ;B.2 als Ausgang sbi PORTB, Summer ;B.2 auf HIGH stellen ;Timer Register werden belegt, hier Timer 0 ldi tmp, (1<<CS02) ;prescaler ist 512 out TCCR0, tmp ;Register TCCR0 ist für den Prescaller zuständig ldi tmp, (1<<TOIE0) ;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet out TIMSK, tmp ;Register TIMSK ist dafür zuständig ldi tmp, time0_1 ;Hier wird der Timmer vorgelaen und zwar mit 255-90 out TCNT0, tmp ;Er läuft 90 mal durch, bevor ein Interrupt auftritt sei ;Interrupts zulassen loop: rjmp loop ;immer wieder zu "loop:" springen pruefZaehler: in statusreg, SREG ;SREG sichern sbis PINB, Summer ;überspringe, wenn B.2 = 0 ist cbi PORTB, Summer ;wenn B.2 = 1 ist, dann auf 0 setzen sbic PINB, Summer ;überspringe, wenn B.2 = 1 ist sbi PORTB, Summer ;wenn B.2 = 0 ist, dann auf 1 setzen ldi tmp, time0_1 ;Hier wird der Timer vorgeladen out TCNT0, tmp out SREG, statusreg ;SREG wiederholen reti ;wieder zurück, wo du hergekommen bist
Ist Das richtig?sbis PINB, Summer ;überspringe, wenn B.2 = 0 ist
Lesezeichen