und den AVR mit 3Hz Tackten und du hast deine eine Sekunde ( laut Sim ).Code:.include "2313DEF.inc" sbi DDRB,7 ;Port als Ausgang für die LED Main: inc R16 ;R16 um eins erhöhen out PORTB,R16 rjmp Main
Eigentlich nicht. Du verwendest mehr Maschinen-Befehle. Im Assembler-Code stehen zwar nur 3 Zeilen Code, aber es geht eben um die verwendeten Maschinen-Befehle. Und das sind bei die _recht_ vieleZitat von Rofo88
Wo deine Masch-Codes herkommen ist ja egal. Ob sie vom Himmel fallen oder explitit in der Assembler-Quelle stehen, du brauchst sie und kommst nicht ohne sie aus.
Übrigens: würde das Programm z.B. durch einen Bootloader gesaugt und gestartet, würde es rummsen. Mehtos Programm funktioniert auch dann.
Ganz nebenbei sind es illegal Opcodes. Insbesondere sind es keine NOPs.
Bisher hab ich in keiner Spezifikation was gefunden, welchen Effekt FF:FF auf die Maschine hat. Es gab sogar mal einen Thread dazu, der ergebnislos blieb. Und Quellen wie die von avr-objdump sagen nur, daß FF ein Loch in den Opcodes ist und nichts implementiert.
Disclaimer: none. Sue me.
und den AVR mit 3Hz Tackten und du hast deine eine Sekunde ( laut Sim ).Code:.include "2313DEF.inc" sbi DDRB,7 ;Port als Ausgang für die LED Main: inc R16 ;R16 um eins erhöhen out PORTB,R16 rjmp Main
mhh, da könnte man jetzt aber diskutieren...![]()
im Grunde brauchen alle Programme gleich viel Maschienen-Befehle, bei Rofo werden sie ohne zu springen nacheinander verarbeitet, und bei mir halt immer wiederholt.
Ich hab seine Version jetzt mal getestet, funktioniert wunderbar, und das sozusagen mt drei Befehlen. Nur etwas zu langsam, etwas zwei Sekunden in der Minute zu wenig.
Aber genauso wie meine Timerversion ist die leider nicht anpassbar geschweige denn auf einen anderen µC aanpassbar (aber trotzdem genial).
Was für ein Hexcode sind eigentlich Nop's? Ich bin mir nicht sicher, aber ich glaube entweder 0x00 oder 0xff.
Was mich aber wirklich interessiert ist, was mit dem schon beschriebenen Inhalt passiert wenn man einen neueren, kleineren Code einspielt. Wird der automatisch auf 0xff gesetzt und das geht so schnell das man es nicht bemerkt, oder wie ist das?
Gruß,
Mehto
-
@teslanikola
*g* schonmal einen AVR mit 3HZ getaktet?
Ich glaub das niedrigste sind mit speziell gesetzten Fusebits ca. 33KHZ.
Dein Code stimmt aber glaube ich nicht, nim statt inc com dann stimmts.
Sonst brauchst du einen Takt von ca. 768 (wenn ich retzt richtig gedacht habe). Aber ist ja wie gesagt nicht machbar, nur im Simu.
Gruß,
Mehto
-
Man kan ein Uhrenquarz benutzen, dann ist man doch schon bei 32,768 kHz. Und über das Clock Prescale Register (gibt es zumindest beim Mega4Zitat von Mehto
kann man die 32 kHz noch durch 256 teilen, macht 128 Hz ^^
Oder per externer Taktquelle mit nem Funktionsgenerator dran, dann geht's noch weiter.
Klopp mal den Simulator in die Tonne. Eine Schleife dauert 4 Takte (1+1+2 laut Brain 1.0).Zitat von teslanikola
Mit externem Oszillator geht das schon, nen Takt von 4Hz zu machen. AVRs arbeiten ja voll statisch.
Wie passt du deine Quelle auf andere Taktraten an?
Ein NOP ist 00:00. FF:FF ist wie gesagt Illegal Opcode.Zitat von Mehto
Vor dem Flashen wird z.B. mit "erase device" der Flash gelöscht, also auf FF gesetzt. Ansonsten steht da Müll rum bzw das, was vorher da stand und man kommt nen Fehler beim Proggen. Die meisten Progger machen das ohne das man was davon merkt.
Disclaimer: none. Sue me.
Mal so als Anregung: Hat schon einer mal geschaut ob man den 16bit-Timer mit 9 Takten so initialisieren kann dass er ne 1Hz-PWM erzeugt? (bzw. 0,5 Hz wenn das mit "im Sekundentakt blinken" gemeint ist)?
Mit Clear Timer on Compare Match könnte man den an den Takt anpassen.
Noch eins:
Falls Unklarheit über den Flashverbrauch eures Programms bestehen, macht einfach ein Disassemble eurer "Spielwiese".
Das Programm darf natürlich auch Konstanten enthalten, die im Flash gespeichert sind.
Disclaimer: none. Sue me.
Tipp: Bei der Lösung, die ich gefunden habe, verwende ich einen Interrupt.
Welchen, verrat ich jetzt mal nicht. Sonst wisst ihr direkt, wie es geht![]()
Disclaimer: none. Sue me.
Kann es sein, dass deine Lösung auf nem 90S8515 nicht funktioniert? Den hätt ich grad auf meinem Steckbrett drauf und wollte grad anfangen zu proggen, aber so wie ich denke das du es gemacht hast gehts mit ihm nicht...
Lösungansatz per PN...
[EDIT: Lösungansatz durch SprinterSB bestätigt, aber das mit den 90S8515 ist Quatsch]
Lesezeichen