Für eine kleine Steuerung brauchte ich eine flexible Eingabehilfe, um den AVR nicht jedes mal neu Flashen zu müssen. Vor einiger Zeit, hatte ich mal den Wozmon vom VC20, auf den C64 portiert und dachte mir, das muß doch auch auf einem AVR laufen. Da ich Schritt für Schritt vom Original (Apple I) übersetzt habe, habe ich den Sourcecode und die Kommentare zum besseren Verständnis im Programm gelassen. Der übertragene Monitor erfüllt seinen Zweck für mich voll und ganz und ist nebenbei noch eine nette Spielerei. Jetzt habe ich Zugriff auf die 32 Speicherregister (0x00-0x1F), sowie die Hardware-Register (0x20-0x5F/extended -0xFF) und das SRAM. Leider kann ein AVR kein Programm aus dem SRAM ausführen. Trotzdem habe ich den R Befehl mit umgesetzt (vorsicht Absturz). Wichtig ist daran zu bedenken, daß am Anfang die 32 Speicherregister R0-R31 stehen. Somit muß bei den unteren Registern plus 0x20 hinzuaddiert werden. Die oberen Memory Mapped Register bleiben wie sie sind. Nachzuschlagen sind die Adressen aber im Datenblatt, der io*.h vom gcc-avr oder der *def.inc vom Assembler. Eine ausführlichere Anleitung zum "Wozmon", findet sich im Netz. - Zum Flashen des Arduino avrdude -p m328p -P /dev/ttyUSB0 -c arduino -v -e -u -U flash:w:AVRMon-arduino_pro_mini.hex Hier nur eine kurze Anleitung zum lesen und schreiben von Registern (Die Kommentare dürfen nicht mit eingegeben werden). - Lesen von Registern: 0.F ; Listet den Inhalt von 00-0F .FF ; Listet weiter bis FF 1 A 8 1A ; Listet einzelne Register - Schreiben von Registern: AA:00 ; Ändert den Inhalt des Registers AA :01 02 03 ; Ändert jetzt weiter den Inhalt des Registers AB AC AD u.s.w Bei jeder Änderung, wird der alte Inhalt der aktuellen Speicheradresse gelistet. Alle Beispiele beziehen sich auf den Arduino pro mini (ATmega328p) mit 16MHz und einer voreingestellten Baudrate von 4800 (C5:00 C4:CF)! Diese kann dann im laufendem Betrieb auf z.B. 19200 (C5:00 C4:33) geändert werden. C5:00 ; UBBRH C4:33 ; UBBRL Einzugeben als: C5:00[RETURN] C4:33[RETURN] Nicht vergessen, das Terminal mit der neuen Baudrate neuzustarten und danach einmal [RETURN]! Um die LED an Ausgang PB5 auf der Platine zu schalten, gibt man im Monitor z.B. ein: 25:20 ; PORTB(PB5) einschalten 24:20 ; DDRB(PB5) als Ausgang 25:00 ; PORTB(PB5) ausschalten 23 ; PINB abfragen Die Eingänge an PORTB kann man abfragen mit: 25:FF ; PORTB alle internen Pullups ein 24:00 ; DDRB komplett als Eingang 23 ; PINB enthält den aktuellen Wert des Ports Einen Timer0 Overflow aktiviert man mit: 45:01 ; TCCR0B(CS00) 6E:01 ; TIMSK(TOIE0) 46 ; TCNT0 enthält den aktuellen Zählerstand Um eine PWM mit Timer0 einzustellen, gibt man ein: 45:02 ; TCCR0B(CS01) 44:83 ; TCCR0A(COM0A1|WGM01|WGM00) 2A:40 ; DDRD(PD6) 47:40 ; OCR0A Wichtig ist, alle Zeichen müssen groß geschrieben werden und mit ein bisschen Übung, kommt irgendwann die Routine. **** ACHTUNG! **** Nach dem Ausschalten oder einem Reset, sind sämtliche Eingaben gelöscht. Vielleicht kann ja jemand mit dem Programm etwas anfangen. Ansonsten, wünsche ich viel Spaß mit dem AVRMon.
Dirk R. schrieb: > Vor einiger Zeit, hatte ich mal den Wozmon vom VC20, auf den C64 > portiert und dachte mir, das muß doch auch auf einem AVR laufen. Wozu "Wozmon" - das ging mit "PEEK und POKE" auf dem VC20 / C64. Einen Sinn auf dem AVR kann ich nicht erkennen. Das geht mit einem JTAG und Debugger viel besser und übersichtlicher. Wenn ich den "Wozmon" geladen habe kann ich (logischerweise) ja wohl kein anderes Programm geladen haben und ausführen. Schön wohl nur für Dich :-)
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.