Na dann mal von mir Glückwunsch :)
Druckbare Version
Na dann mal von mir Glückwunsch :)
Herzlichen Glückwunsch ihr beiden!
Ihr seit nun nicht mehr nur Anfänger, sondern schon fortgeschrittene Anfänger! *lol*
Nein, ihr könnt euch jetzt glaube ich mit ein bischen mehr Routine und Übung schon fast Fortgeschrittene schimpfen! ;o)
Macht weiter so!Sagen wir doch schon lange, aber irgendwie denken viele, dass nur "Hochsprachen" Spass machen können! ;o)Zitat:
Es macht echt Spaß mit dem Assembler zu programmieren!
Das kannst Du laut sagen, ich habe vor kurzem einen Timer für meine Frau gebaut,Zitat:
Irgendwie nerven die Töne meine Freundin
naja Du weißt schon, für Kuchen zu Backen z.B 0-90 Minuten, man könnte natürlich
bei Real irgendwas Fertiges kaufen für 4,99 , aber nein, ich muß basteln.
Da habe ich auch so ein Piezo verwendet, wenn die Zeit um war und habe Ihn auf
etwa 4kHz eingestellt.
O weh ich durfte mir war anhören, muße auch tiefer gehen, so bei 800 Hz war sie zufrieden.
Ich glaube Frauen können solche Töne nicht vertragen, so wie Katzen, naja manchmal benehmen sie sich auch so
:lol:
Ich freue mich ein lächeln auf Deinem Gesicht zu sehen!
Und warum vergleichen wir gerade im Interrupt vom summer?
Ganz einfach, hier wird der Timer neugeladen, also hier bestimmst Du welche Frequenz Du hast, und wenn Du sie verändern willst, mußt Du auch genau dort eingreifen!
Wie ich sehe haben wir noch einen Glücklichen hier (o man warum muß ich immer so langsam Tippen)
@Tekeli,
ging das nicht gegen VCC ? hmmm, na egal, aber die LED kannst Du trotzdem benutzen, oder?
Der Piezo müßte ziemlich hochohmig sein, so daß er da nicht stört (Theorie)
Mach mal ein Foto und sende das den Asuro Freunden auf "Roboter Bausätze" vielleicht finden sie das auch interessant...
@Sebastian: Mein Freundin meint, dass Männer die Frequenz nicht stört, weil sie schlecht hören, so wie die meisten Fliegen, manchmal sind sie auch ebenso lästig ;)
Ich glaub, die will Krieg *Totenlied auffer Gitarre spiel :-({|= *gg*
So, hier nun der fertige Quellcode ohne LED, so wies "verlangt" war ;)
GrußCode:.include "m8def.inc"
.equ time0_1 = 256-20 ;Damit wird der Timer0 vorgeladen
.equ time0_2 = 256-30
.equ time2 = 256-90 ;Damit wird der Timer2 vorgeladen
.equ Summer = PB2 ;Summer an B.2
.def tmp = r16 ;Mein Universallregister
.def statusreg = r17 ;Mein Statusregister
.def zaehlerSek = r18
.def statusSummer = r19 ;Mein Status-Summer-Register
.org 0x000
rjmp reset ;Interruptvektor "reset:"
.org OVF2addr
rjmp timerSek
.org OVF0addr
rjmp timerSummer ;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
ldi statusSummer, 0b00000000 ;statusSummer auf 0 setzen
ldi zaehlerSek, 0b00000000 ;Zähler auf 0 setzen
;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, time0_1 ;Hier wird der Timer vorgeladen
out TCNT0, tmp
;Timer Register werden belegt, hier Timer 2
ldi tmp, (1<<CS22) | (1<<CS21) | (1<<CS20) ;Prescaler ist 1024
out TCCR2, tmp ;Register TCRR2 ist für den Prescaller zuständig
ldi tmp, time2 ;Hier wird der Timer vorgeladen
out TCNT2, tmp
ldi tmp, (1<<TOIE0) | (1<<TOIE2);Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
out TIMSK, tmp ;Register TIMSK ist dafür zuständig
sei ;Interrupts zulassen
loop:
cpi zaehlerSek, 0b00010100 ;Wenn Zählerregister != 40 ist
breq pruefSek ;dann zu "pruefSek:" springen
rjmp loop ;immer wieder zu "loop:" springen
pruefSek:
clr zaehlerSek ;Zählerregister auf 0 setzen
sbrs statusSummer, 0 ;überspringe, wenn PIN 0 = 1 ist
rjmp umschalten ;wenn PIN 0 = 0 ist, dann springe zu "umschalten:"
ldi statusSummer, 0b00000000;wenn PIN 0 = 1 ist, dann PIN 0 auf 0 setzen
rjmp loop ;wieder zurück zu loop
umschalten:
ldi statusSummer, 0b00000001;wenn PIN 0 = 0 ist, dann auf 1 setzen
rjmp loop ;wieder zurück zu "loop:"
timerSummer:
in statusreg, SREG ;SREG sichern
sbis PINB, Summer ;überspringe, wenn B.2 = 1 ist
rjmp timerSummer1 ;wenn B.2 = 0 ist, dann spring zu "umschalten1:"
cbi PORTB, Summer ;wenn B.2 = 1 ist, dann B.2 auf 0 setzen
rjmp timerSummer2 ;zu "umschalten2:" springen
timerSummer1:
sbi PORTB, Summer ;wenn B.2 = 0 ist, dann auf 1 setzen
timerSummer2:
sbrs statusSummer, 0 ;überspringe, wenn PIN 0 = 1 ist
rjmp timerSummer3 ;wenn PIN 0 = 0 ist, dann springe zu "timerSummer3:"
ldi tmp, time0_1 ;wenn B.5 = 1 ist, dann 1 KHz-Timer laden
out TCNT0, tmp
rjmp timerSummer4 ;zu "timerSummer4:" springen
timerSummer3:
ldi tmp, time0_2 ;wenn B.5 = 0 ist, dann 4KHz-Timer laden
out TCNT0, tmp
timerSummer4:
out SREG, statusreg ;SREG wiederholen
reti ;wieder zurück, wo du hergekommen bist
timerSek:
in statusreg, SREG ;SREG sichern
inc zaehlerSek ;Zählerregister um 1 erhöhen
ldi tmp, time2 ;Hier wird der Timer2 vorgeladen
out TCNT2, tmp
out SREG, statusreg ;SREG wiederholen
reti
The Happy Thomas :-b
Ne,ne ich führe keinen Krieg gegen Frauen !!!!
Sie benutzen manchmal Waffen, wo wir arme schlucker nicht gegen ankommen !
Also schön den Ball flachhalten.
Das ohne LED hast Du auch gut gelöst, die Version mit war ja nur ein Übergang...
@Tekeli,
Du bist aber kein blutiger Anfänger ?
Hab mir Dein Code angeschaut, bin echt begeistert !
Ich find das gut daß Ihr zu zweit seid, Ihr könnt Euch gegenseitig helfen,
wenn was unklar ist.
Thomas, ich hoffe, Du hast Dir die Version von Tekli runtergeladen,
dort kannst Du sehen, daß es wie immer mehrere Wege gibt ein Problem zu lösen,
nur bedenke, der Asuro hat 8 Mhz, also hat er die Zeiten etwas anders.
Wenn Ihr Lust habt, haben wir beide mit Florian eine sehr schöne Aufgabe vorbereitet.
Ich war begeistert, was sich der Florian alles so einfallenlassen hat.
Nur um das anzupacken, müßten wir noch mehrere Sachen ansprechen, die erste wäre
was macht man, wenn man eine Zahl darstellen will, die größer 255 ist z.B 1000 ?
Irgendwelche Ideen ?
Kleine Nachricht, bevor ich in's Bettchen gehe und Bubu mache:
Wir sind jetzt in der Top-Ten-Statistik auf Platz 8! *angeb* ;o)
Und zur Ernüchterung, damit alle schlafen können:
Ihr solltet mal unbedingt an eurem Codedesign arbeiten!
Hier, lest das mal!
Sonst funktioniert der Code zwar, aber zwei Tage später wisst ihr nicht mehr was ihr da verbrochen habt! *g*
Ps:
Das Lied vom Tod auf einer Gitarre zu spielen ist unüblich, außerdem ist das eine Geige, auf der Du da rumgeigst! ;o)
Den Code von Tekeli hab ich mir runtergeladen und auch studiert. Wurde erstmal umgehaun von den rießigen Kommentaren oben *g*
Rechnen ist immer gut *g*
Bis jetzt haben wir ja immer nur mit 8 Bit gearbeite, und diese sind bei 255 (11111111) zu Ende.
Mit 16Bit bekommt man Zahlen bis 65025 (11111111 11111111). Also muss man irgendwie zwei 8 Bit Register miteinander verbinden.
Jaja, ich gebs ja zu, hab mich da schon ein wenig drüber informiert, interessiert mich halt, ist ja auch nicht verboten ;)
[edit] Dann eben Geige *g*
@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.
Thomas, es ist sogar angebracht selber zu forschen, ich hab Dir den link zum TutorialZitat:
ist ja auch nicht verboten
gegeben, damit Du auch ein Nachschlagewerk hast, und vor allem, daß Du Dir das alles da reinziehst!
Ich habe nur mit Dieser Seite und mit Dattenblättern gelernt.
Also Selbststudium ist wirklich das a und o.
Aber Du hast recht, man braucht zwei Register, und wenn die nicht reichen dann nimmst Du halt drei, oder 4 oder 8.
Zugegeben, mit solchen Zahlen ist es nicht einfach zu arbeiten, aber wenn man sie braucht
ist es kein Problem.
Spätestens in einem Monat, wenn Du Dir das anschaust, wirst Du froh sein,Zitat:
Wurde erstmal umgehaun von den rießigen Kommentaren oben
solche Komentare gemacht zu haben.
Das Problem an Assembler ist es, daß man verdammt viel Code hat, und wenn man
noch Programme von anderen Personen lesen und verstehen will, wo wenig oder keine Komentare sind, bekommt man graue Haare.
Warum Florian soviel Wert drauf legt wirst Du Morgen erfahren.Zitat:
Dann eben Geige *g*
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.
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 werde mich jetzt verabschieden, und Euch allen eine gute Nacht wünschen.
Ich freue mich wirklich , daß wir das heute mit der Sirene hinbekommen haben.
Gruß Sebastian
Ok, schade, dass du morgen arbeiten musst. Hoffentlich nicht so lange, wie in der Woche?
Najo, also dann bis morgen.
Gruß und gute Nacht
Thomas