Forum: Projekte & Code AVRMon (Wozmon) für Arduino pro mini


von Dirk R. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Hugo H. (hugo_hu)


Lesenswert?

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
Noch kein Account? Hier anmelden.