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
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?
>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?
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...
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]
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.