Hello, Guest the thread was called301 times and contains 0 replays

last post from Dierch-Jentz at the

AVRMon für den Arduino-pro-mini

  • 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 ja mal den Wozmon vom VC20 hier im Forum, 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.