einfacher serieller Debugger für ATMega16

OP Persönliche Seite #371254
Lesenswert?

Hallo,

anbei ein kleines Testprogramm für den ATMega16. Es ist aus der Not
heraus entstanden, um ein einfaches Durchmessen von Schaltungen zu
erlauben.

Features:
 + Schalten von Port A-D als digitale Ein-/Ausgänge
 + Bedienung mit Terminalprogramm ohne Zusatzsoftware möglich
 + Benachrichtigung bei Signaländerung an ausgewählten Pins

Voraussetzungen:
 + der Mega16 muss natürlich in der Schaltung lauffähig sein
 + funktionierende UART-Schaltung (MAX232 o.ä.)

Bedienung:
 + hex-File auf den Controller laden
 + mit Terminalprogramm (z.B. Hyperterm) verbinden
 + jede Eingabe, die das Programm nicht versteht, wird mit einer
   Kurzanleitung quittiert
 + jedes erkannte Kommando wird sofort ausgeführt

Das beigefügte hex-File ist für 4MHz Takt ausgelegt und kommuniziert
dann mit 19200 Baud, 8 Bit, Even Parity, 1 Stop bit.
Überwachte Eingänge werden bei 4MHz 100x pro Sekunde geprüft.

Vielleicht hilft's dem ein oder der anderen ;)

Grüße,

Hans
Angehängte Dateien:
Gast #371256
Lesenswert?

Hallo,

erstmal Danke für das Lob, Felix.

Anbei ein kleines Update:

- keine nervtötenden Compiler-Warnings mehr (hoffentlich)
- ein kompletter Port läßt sich jetzt auf einmal setzen
  z.B.: "out pc=ff" um Port C komplett auf high zu setzen

Grüße,

Hans

P.S.:
Hatte ich ein Forenlogin? Gibt es sowas wie Password-Recovery?
Angehängte Dateien:
#371257
Lesenswert?

Ein kleiner Tip:
Du musst in C nicht solch lange 'Monsterstrings' in einer Zeile
basteln.
In C gibt es ein nettes Feature:
Der Compiler muss 2 aufeinanderfolgende Zeichenketten, die
nur durch Whitespace (Leerzeichen, Tab, CR) getrennt sind,
zusammenfassen.

D.h. ob du
   "dies ist ein langer String"
oder
   "dies " "ist " "ein " "langer " "String"
oder (und jetzt kommts)
   "dies "
   "ist "
   "ein "
   "langer "
   "String"

schreibst, ist Jacke wie Hose. Kommt immer aufs selbe hinaus.

Damit kannst Du aber machen:

const prog_char help[] =

  "\r\nAVR-Diagnose"
  "\r\n============"
  "\r\n"
  "\r\nKommandos:"
  "\r\n\tDISPLAY - zeigt den aktuellen Status der PINS an"
  "\r\n\tWATCH   - ueberwacht einen einzelnen Pin oder einen"
                  "Port (z.B. WATCH PB0 oder WATCH PD)"
  "\r\n\tUNWATCH - beendet die Ueberwachung eines Pins oder
Ports"
  "\r\n\tOUT     - schaltet einen Pin auf Ausgang und legt das "
                  "angeg. Signal an (z.B. OUT PB7 1)"
  "\r\n\tOUT     - schaltet einen kompletten Port als Ausgang und
"
                  "legt den Wert an (z.B. OUT PB=7F)"
  "\r\n\tIN      - schaltet den angegebenen Pin oder Port als "
                  "Eingang OHNE internen Pull-Up"
  "\r\n\tINPU    - schaltet den angegebenen Pin oder Port als "
                  "Eingang MIT internem Pull-Up"
  "\r\n";


Über den Unterschied in der Lesbarkeit (und damit Wartbarkeit)
brauchen wir, glaub ich, nicht diskutieren. :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren