Forum: Projekte & Code Mechatronisches System


von Niki Beier (Gast)


Lesenswert?

hallo,
wir machen in der uni einen versuch "mechatronische systeme" und
sollen folgendes machen:
ein schrittmotor soll angesteuert werden,die bedienung soll über eine
serielle tastatur erfolgen, die beteibsart soll über ein
alphanumerisches lcddisplay angezeigt werden.
habe schon eine grobe lösung. aber kann jemand weiter helfen?

danke

von Florian (Gast)


Lesenswert?

Genauer Fragen.

von Niki Beier (Gast)


Lesenswert?

also nach dem restart soll folgendes zu sehen sein:
der cursor blinkt links oben und es soll folgendes zu sehen sein:

goto=---
ziel=00
step

durch lesen des kommadoregisters kann das busy-flag und die aktuelle
zeichenplatzadresse überprüftwerden. YxxxxxxB
durch beschreiben des daten registers mit einem ascii zeichen wird dies
auf der aktuellen zeichenplatzadresse gespeichert und das zeichen auf
dem zugeordneten platz gestellt.
wie bekomme ich solch eine displayanzeige hin?

von Rahul (Gast)


Lesenswert?

>wie bekomme ich solch eine displayanzeige hin?
Man suche sich das Datenblatt eines LC-Display's und schaue nach, was
so ein Display bzw. dessen Controller als Steuersignale erwartet.
Dann wähle man einen Mikrocontroller, und realsiere einen Algorithmus,
der diese Funktion implementiert.

Ich hab zwar nicht (lange) an der Uni studiert, aber deine
Fragestellung ist etwas sehr abstrakt...Satzzeichen würden helfen...

Vielleicht mal so: Was sollst du machen?

von nik (Gast)


Lesenswert?

die aufgabenstellung ist nicht abstrakt, denn genau so steht es fast auf
dem blatt...habe auch nicht behauptet, dass es einfach ist. deswegen
frage ich ja nach und naja gut.
kann mir jemand helfen?
vielleicht hat ja jemand schon mal was mit einem schrittmotor
programmiert oder dergleichen...

von Rahul (Gast)


Lesenswert?

In deinem ersten Post schreibst du was von Schrittmotor, im deinem
zweiten dann was von LCDisplay.
Schrittmotorsteuerungen zu programmieren ist recht simpel (aus
"Pippifax" genannt).
Für die Lösung deiner Aufgabe fehlen ein paar Randbedingungen
(Controller, Programmiersprache, LCD-Controller etc.)

Hast du schon mal überlegt, die Aufgabe in Teilaufgaben zu teilen?
Einerseits hast du die Motorsteuerung, andererseits die HID (Tastatur
und LCD).
Was willst du zuerst realsieren?
In der Aufgabe sind doch schon die drei Teilaufgaben aufgeführt:
Eingabe über die serielle Tastatur, Anzeige auf dem LCD und die
Motorsteuerung. Hangel dich einfach von einer Aufgabe zur nächsten.

[Kritik]
Hier sind ne Menge Leute bereit, dir zu helfen, allerdings wird dir
niemand die Lösung auf einem silbernen Tablett servieren. Dafür sind
hier überwiegend technisch-interessierte Leute unterwegs, und keine
Sozialpädagogen...Jammern hilft also nicht.
Hier gibt es Hilfe zur Selbsthilfe, und wenn du an einer Uni studierst,
erwartet man von dir, dass du dich in Probleme und deren Lösung
einarbeitest. Zumindest wurde mir eine entsprechende Vorgehensweise an
der FH beigebracht.
[/Kritik]

von nik (Gast)


Lesenswert?

ja du hast ja recht! sorry....
nur manchmal verliert man etwas die geduld und die nerven..also
sorry..
ich kann ja mal den code hier posten und du schaust in dir mal an??
hoffe es ist nicht zu lang:


;*********************************************************
;Benjamin Moenius & Nadine Huebner************************
;*********************************************************
;
  CMD  equ  3000H    ;Kommando-Register
  DAT  equ  3001H    ;Daten-Register
  GOTOH  equ  30H
  GOTOZ  equ  31H
  GOTOE  equ  32H
  ZIELH  equ  33H
  ZIELZ  equ  34H
  ZIELE  equ  35H
  STEPH  equ  36H
  STEPZ  equ  37H
  STEPE  equ  38H
  org  0      ;Reset
  LJMP  Haupt      ;nach Reset
  org  23H      ;SINT
  LJMP  EMP      ;weiter Interuptprogramm
  org  100H      ;Hauptprogramm

Haupt:  MOV  TMOD,#00100000B    ;Timer 1 im Reload Mode
  MOV  TH1,#(-26)    ;Nachladewert
  MOV  TL1,#(-26)    ;Startwert
  SETB  TR1      ;Timer1 starten
  MOV  SCON,#01010000B    ;Serielle Schnittstelle, 8bit UART
  MOV  IE,#10010000B    ;Generelle + Serielle Interuptfreigabe

;  ACALL  INIT_DISPLAY_MODS
  ACALL  DISPLAY_INITIAL
  ACALL   DISPLAY_RESTART


  SJMP  $      ;Verweihlschleife am Ende

EMP:
  MOV  A,SBUF      ;Zeichen aus SBUF holen
  CLR  RI      ;Empfangsflag loeschen
  CLR  P1.7      ;Taste liefert beim Druck 0 an P1.7
  JB  P,SPEI      ;Paritaet richtig, wenn P=1
  RETI


SPEI:  MOV  R1,A      ;Zeichen ins Register schreiben
;  CJNE  R1,#'i',LABEL_1
;  ACALL


  RETI        ;Ruecksprung


DISPLAY_INITIAL:
  MOV  DPTR,#3000H    ;Displayinitialisierung

  MOV  A, #30H      ;8-Bit_Modus_initialisierung ohne Busy-Flag abfrage
  movx  @DPTR, A    ;Indirekte Adressierung des externen Datenspeichers
  LCALL  WARTE_5MS    ;5ms warten (Unterprogramm)

  MOV  A, #30H
  movx  @DPTR, A
  ACALL  WARTE_5MS

  MOV  A, #30H
  movx  @DPTR, A
  ACALL  WARTE_5MS

  ACALL  MARK
  MOV  A, #38H      ;4-Zeilen Darstellung
  movx  @DPTR, A

  ACALL  MARK
  mov  A, #01H      ;Display loeschen und Zeichenplatz 0 einstellen
  movx  @DPTR, A

  ACALL   MARK
  mov  A, #06H      ;Autoinkrement, aktueller Zeichenplatz um 1 erhöht
  movx  @DPTR, A

  ACALL   MARK
  mov  A, #0FH      ;Display aktiv und Cursor blinkt auf dem aktuellem
Zeichenplatz
  movx  @DPTR, A    ; Ende Display-Initialisierung

  ACALL   WARTE_5MS
  ret

SET_ADDR:        ; Zeichenplatzadresse aktualisieren
  ACALL  MARK
  mov  DPTR, #CMD
  setb  0E7H
  movx  @DPTR, A
  ret

WARTE_5MS:
  mov R2, #05H
ZEIT:  mov R3, #250
  DJNZ R3, $
  DJNZ R2, ZEIT
  RET

MARK:
  push ACC
  push DPL
  push DPH
  MOV DPTR, #3000H
WAIT_LCD:
  MOVX A, @DPTR
  JB ACC.7, WAIT_LCD
  POP DPH
  POP DPL
  pop ACC
  ret

        ;BUSY-Flag-Abfrage
BUSY:  PUSH  ACC    ;Akku sichern
  PUSH  DPL    ;Low-Byte des Datenpointers sichern
  PUSH  DPH    ;High-Byte des Datenpointers sichern
  MOV  DPTR,#CMD  ;Datenpointer zeigt auf Kommandoregister
MARK_1:  MOVX  A,@DPTR    ;CMD in Akku
  JB  ACC.7,MARK_1  ;Warten, wenn BUSY-Flag gesetzt
  POP   DPH    ;Datenpointer wiederherstellen
  POP  DPL
  POP  ACC    ;Akku wiederherstellen
  RET

INIT_DISPLAY_MODS:
  mov  GOTOH,  #'-'
  mov  GOTOZ,  #'-'
  mov  GOTOE,  #'-'

  mov  ZIELH,  #'0'
  mov  ZIELZ,  #'0'
  mov  ZIELE,  #'0'

  ;Prüfe falls Motor auf Null
  mov  STEPH,  #'S'
  mov  STEPZ,   #'Y'
  mov  STEPE,  #'N'

  ret

DISPLAY_RESTART:
  CALL  BUSY    ;Zeichenplatzadresse:1.Zeile 1.Platz
  MOV  DPTR,#DAT
  MOV  A,#'G'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'O'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'T'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'O'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'='
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#' '
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'-'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'-'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'-'
  MOVX  @DPTR,A

  MOV  DPTR,#CMD  ;Zeichenplatzadresse:2.Zeile 1.Platz
  CALL  BUSY
  MOV  A,#0C0H
  MOVX  @DPTR,A

  CALL  BUSY
  MOV  DPTR,#DAT
  MOV  A,#'Z'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'I'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'E'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'L'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'='
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#' '
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'0'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'0'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'0'
  MOVX  @DPTR,A

  MOV  DPTR,#CMD  ;Zeichenplatzadresse:3.Zeile 1.Platz
  CALL  BUSY
  MOV  A,#94H
  MOVX  @DPTR,A

  CALL  BUSY
  MOV  DPTR,#DAT
  MOV  A,#'S'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'T'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'E'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'P'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'='
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#' '
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'S'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'Y'
  MOVX  @DPTR,A
  CALL  BUSY
  MOV  A,#'N'
  MOVX  @DPTR,A
  RET

  end        ;Ende der Assemblierung

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.