Antworten

Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Zusammenfassung

Autor Ottmar
 - 15.03.2025, 09:08:23 CET
Hi
Ich kann nicht verstehen, warum die LCD-Ansteuerung, wie von picass dargestellt,
so schwierig sein soll. Ich habe in meinen Anfangszeiten, so um 2010 herum,
angelehnt an "SPRUT" begonnen meine LCD-Initialisierungen und Subroutinen fuer LCD zu schreiben. Diese verwende ich problemlos bis heute. I2C gehe ich nur aus Neugierde an, weniger aus Notwendigkeit.

Mit nachstehenden Subroutinen ist bei mir das komplette Ausgabespektrum einesHD44780- LCD's abgedeckt. Die Subs werden auf einen Rutsch mit
#INCLUDE <HD44780_2Wire.INC> 
in JEDES ASM-File geladen, wurden also nur 1x
erstellt (natürlich habe ich das auch für 8/4bit ohne 2Wire).
Soll dann z.B. "T" & "E" in Zeile 2, in Digit 5 ausgegeben werden, geht das so:

; LINE1 EQU 0x00 ;all LCDs
; LINE2 EQU 0x40 ;" "
;
movlw LINE2+5
CALL   OutDDRAM_Addr
movlw "T"
CALL   OutLcd_Data
movlw "E"
CALL   OutLcd_Data
u.s.w
natuerlich wird ein zusammenhaengender Text in einem Rutsch mit TableRead ausgeben
und nicht so unflexibel wie hier dargestellt.

Mfg Ottmar

; File: HD44780_2Wire.INC
; Author: Ottmar
; Created: 2014.01.08
; 2Wire Interfache mit HD74LS164
;******************************************************************
;-SUBROUTINEN - nicht zum direkten Aufruf bestimmt!
; Control8Bit: " mit 8Bit-Interface (nur intern)
; Clear_ShiftReg: " Löscht das Shiftregister
; Delay: " 1,5ms Delay zwischen LCD-Befehlen
; HD44780 Ausfuehrungszeit je cmmand = 37us+4us
; ausgenommen: RETURN HOME] = 1.52ms
; OutLcd: Ausgabe des oberen/unteren Nibbles (nur intern)
;
;-SUBROUTINEN - können aus anderem Code heraus aufgerufen werden
; Lcd_Init: Initialisierung von HD44780-LCD mit 4Bit-Interface
; OutDDRAM_Addr: Ausgabe einer DDRAM-Adresse an das LCD
; OutLcd_Ctrl: Ausgabe einer Instruktion an das LCD
; OutLcd_Ascii: Ausgabe eines Ascii-Zeichens, Wert im WREG
; z.B. movlw .35 -> Ausgabe '[' ROM Code A00!
; OutLcd_Data: Ausgabe eines einzelnen Zeichens Wert im WREG
; z.B. movfw BCD9 (darf nur 1 Stelle enthalten!"
; Lcd_Clear: Löscht den Text im LCD
; Lcd_Ready: Funktionstest! Ausgabe von "LCD 2Wire READY!"
; CGRAM_Load: ;Selbstdifiniertes Zeichen in das LCD laden
;
; Delay1ms: delays 1ms - 255ms /FOSC_MULT
; Delay100ms: delays 0.1s - 25.5s /FOSC_MULT
;*********************************************************************
; LCD-INITIALISIERUNG
; Die Initialisierung des LCD folgt der Vorgabe im Hitachi-Datenblatt
; "HD44780.pdf", Seite 213.
;;*********************************************************************
;; LCD-PROPERTIES (Eigenschaften an aktuellen LCD-Typ anpassen)
;;*********************************************************************
;; LCD_TYPE EQU 1 ;=1 LCD 2x8 und 2x16
;; LCD_TYPE EQU 2 ;=2=LCD 4x16
;; LCD_TYPE EQU 3 ;=3=LCD 4x20
; ;
; IF LCD_TYPE == 1 ;Uncomment LCD_DIGITS 2x8 OR 2x16 !!!
; LCD_LINES EQU .2 ;LCD 2x8 * 2x16
;; LCD_DIGITS EQU .8 ;LCD 2x8
;; LCD_DIGITS EQU .16 ;LCD 2x16
; ENDIF
;;-------------------------------------
;; NO CHANGES AFTER THIS LINE ALLOWED!
;;-------------------------------------
; LINE1 EQU 0x00 ;all LCDs
; LINE2 EQU 0x40 ;" "
; ;
; IF LCD_TYPE==2
; LINE3 EQU 0x10 ;LCDs 4x16 only
; LINE4 EQU 0x50 ;" " "
; LCD_LINES EQU .4 ;Lines
; LCD_DIGITS EQU .16 ;digits/line
; ENDIF
; ;
; IF LCD_TYPE==3
; LINE3 EQU 0x14 ;LCDs 4x20 only
; LINE4 EQU 0x54 ;" " "
; LCD_LINES EQU .4
; LCD_DIGITS EQU .20 ;digits/line
; ENDIF
; ;
; #DEFINE LCD_DATA LCD_LAT,LCDDAT ;Strobe Data (H->L -> Enable)
; #DEFINE LCD_CLK LCD_LAT,LCDCLK ;Strobe Clock (H->L)
; #DEFINE LCD_RS LcdFlags,7 ;0/1 Data-Mode/Instruction-Mode
; #DEFINE NIBBLE LcdFlags,6 ;1/0 send Upper/Lower Nibble to LCD
; ;
; SET_DDRAM_ADDR EQU 0x80 ;Function "SET DDRAM-ADDRESS"
; SET_CGRAM_ADDR EQU 0x40 ;"Set CGRAM Address" b'01000000
; ;
; DISPLAY_OFF EQU 0x08 ;Function "Display Disabled"
; DISPLAY_ON EQU 0x0C ;Function "Display enabled, Crsr On, Blink
Off
; ;; OHM
;;--SONDERZEICHEN gemeinsam HD44780+SPLC780A1 (keine Umlaute)
; OHM EQU b'11110100' ;Omega
; PI EQU b'11110111' ;Pi
; GRAD EQU b'11011111' ;° Grad
; MICRO EQU b'11100100' ;μ
; Komma EQU b'00101100' ;
Autor pic18
 - 14.03.2025, 22:18:23 CET
Ich finde es nicht verkehrt, wenn man Assembler programmieren kann. Gerade wenn man so wie ich Schaltungen selbst entwirft, sollte man wissen wie der Prozessor aufgebaut ist und wie er funktioniert. Auch sollte man die Grundkenntnisse haben um die verschiedenen Zahlenformate umzurechnen. Eine 4*20  -zeilige LCD Anzeige hatte ich schon in den 80er Jahren verschaltet. Damals benötigten diese LCD-Anzeigen noch eine negative Kontrastspannung, welche ich mit einem Timer IC (NE555) herstellte. In der Schaltung werkelte ein 8085 Prozessor mit IO 8155, die Porterweiterung wurde mit mehreren CMOS IC CD4502 bewerkstelligt welche mit einem Dekoder CD4028 angesprochen wurden. Was ich nicht verstehe, dass die LCD-Anzeigen bis heute immer noch auf zwei Zeilen arbeiten, also Zeile 1 und Zeile 3 eine Zeile ist.
Autor picass
 - 14.03.2025, 18:56:41 CET
Ottmar schrieb über seine Motivation fürs Programmieren in Assembler. Dass für mich diese Prog-Art bis auf nicht vermeidbare Andwendungen out ist, hatte ich ja schon gesagt. Hier noch ein Beispiel:
Der Betrieb einer LCD-Anzeige an einem PIC !!! What 'ne funkel-nagel-neue Technik ! Wenn ich so an die Vielzahl der Maschinen denke, welche mit solcher Anzeige ausgerüstet sind, wie nur als Beipspiele: Brotbackgeräte, Rasierer....., dann sollte es an fix-und-fertigen Beispielen und Routinen im Netz nur so wimmeln und NIEMAND sollte es nötig haben, mehr als 4 Minuten nach solch funktionsfähigem Beispiel zu suchen und das dann maximal mit ein paar Port-Änderungen übernehmen können. Und wie sieht die hatte Praxis aus? Zum Fremdschämen !
 
Weder die kleinen noch die großen Verkaufshandlungen kommen auf die Idee, für ihre Produkte zur Verkaufsförderung was anzubieten und in den Foren - egal, welchen - liegt wenn überhaupt ein skurieles Beispiel, das dann letztlich auch nicht funktioniert oder aber nur kryptisch zusammen zu setzende Schnipsel.
Habe mal in ein Handbuch von Microchip geschaut, in das "Embedded Control Handbook" von 1994/95. Das wimmelt von praktischen Beispielen, allerdings sind da PIC16 die fortschrittlichsten µCs. Und - is klar - der Assembler-Speech ist heutzutage kaum mehr verstehbar.
Ne, Jungs, ich bin nicht mehr bereit, für den Einsatz solche stonealter Technik Tage oder gar Wochen zur Verfügung zu stellen. Meine Einsicht und Toleranz sind futsch. Nix mehr mit solcher Technik von irgendwann-dunnemals. Meine grauen Zellen lassen sich auch mit in die Zeit passender Technik in Trab bringen. Und in der vielen gesparten Zeit kann ich mit dem Flugsimulator die atemberaubende Landschaft in Patagonien anschauen - oder aber mal wieder gegen einen aus dem Takt geratenen Windows-PC ankämpfen.
Grüße, picass
lcd1.jpglcd2.jpglcd3.jpglcd4.jpglcd5.jpglcd6.jpglcd7.jpg
Autor pic18
 - 13.03.2025, 23:11:18 CET
ich habe gerade gesehen, ich habe den MCP23S17, dieser scheint neuer zu sein.
Autor Ottmar
 - 13.03.2025, 17:14:19 CET
Ist wirklich interessant dieser Expander, die beiden Ports sind getrennt adressierbar. Vielleicht besorge ich mir einmal solch ein Teil bei Reichert fü 1.85€ zum spielen.
Zunächst bleibe ich aber bei pcf8754.
Autor pic18
 - 13.03.2025, 15:55:00 CET
das ist der große 16 Bit, der kleine ist  MCP23008/MCP23S08
Autor Ottmar
 - 13.03.2025, 14:19:29 CET
So wie ich das lese:
Send slaveadress = h'40' (A0:A2 offen/high)
input mode als slave Pcf8754 Portpins sind OUTputs können nun vom Master gesetzt werden

Send slave adress = h'41' ouput mode als slave Pcf8754 Portpins sind INputs können nun vom Master ausgelesen werden

Schau mir gleich mal das Datenblatt zum MCP23017 an.
Autor pic18
 - 13.03.2025, 13:39:41 CET
Freud mich wenn es funktioniert, ich hatte mir gerade das Datenblatt des PCF8754 angeschaut, hier habe ich aber nicht gefunden, wie man die Ports auf Ein- bzw. Ausgabe stellt. Ich kenn nur den Microchip IO MSP23S17 bzw. MSP23017 da ist alles schön erklärt.
Autor Ottmar
 - 13.03.2025, 12:29:04 CET
Hallo PIC18
Du bist wirklich sehr freundlich und hilfsbereit daumen_hoch !
Mit LCD's und einfachen Grafikdisplays kenne ich mich wirklich gut aus. Die meisten Moeglichkeiten (tableRead, Menueumschaltung, Messwertausgabe, Laufschrift, selbst definierte Zeichen usw.) habe ich durchgearbeitet. Zumindest, was den 4/8bit Modus in indirekter Verbindung mit der PIC16F/18F betrifft.

SPI habe ich bereits hinter mir und da mir bei der Programmierung eines Arduino ein LCD mit PCF8754 untergekommen ist, kam ich auf den Gedanken mir das MSSP Modul (I2C) naeher anzusehen, etwas sinnvolles damit zu tun.

Kurz gesagt, LCD_Init4Bit.INC ist umgestellt, MSSP-Setup und die I2C-Routinen stehen schon (Start,Adressbyte,ACK, SendByte.... STOP, Restart, Readbyte)
Der praktische Test steht noch aus.
Auf jeden Fall: VIELEN DANK FUER DEINE ANGEBOTENE HILFE!

Gruss Ottmar

P.S. Meine Motivation für Assembler:
  • Training alternder Gehirnzellen
  • Macht einfach Spass
  • Keine Absicht stets fertige Geräte zu erstellen
  • Funktion auf Steckbrett genügt meistens
Autor picass
 - 13.03.2025, 12:12:22 CET
Zitat von: Ottmar in 12.03.2025, 16:04:05 CET........gerade dabei, mich in I2C mit dem MSSP-Modul eines 18F einzuarbeiten......
......Ein HD44780 LCD soll mittels des Portexpanders PCF8754 angesteuert werden......
Das war auch meine letzte Übung, die allerdings auf einem 32-Bitter und MicroPython umgesetzt werden sollte. Liegt aber genauso auf der langen Bank, wie das Programmieren überhaupt. Die Demenz eines alten Freundes ist seit etlichen Wochen zu allem anderen noch dazu gekommen, der arme Kerl hat sonst niemanden, der sich zuständig fühlt.

Macht mal hinne, ich schaue mit Interesse zu. Aber Unterstützung wird erst mal nicht sein. Leider!
Grüße, picass

🡱 🡳

Similar topics (3)