;; (C) David Vajda ;; 2025-08-12 ;; LCD HD44780 Text Output AVR ATMega8 .include "m8def.inc" ;; Pin 1 - VSS - GND ;; Pin 2 - VDD - +5V Versorgungsspannung, sonst VCC - Voltages Currency Collector - VB - Betriebsspannung ;; Pin 3 - VEE - Kontrastspannung ;; Pin 4 - RS - Register Select: Command/Data ;; Pin 5 - RW - Read Write ;; Pin 6 - E - Enable ;; Pin 7 .. Pin 14: D0 .. D7 ;; Pin 15: A Anode ;; Pin 16: K Kathode ;; enable: ja, brauchen wir - Enable bit senden, noop noop noop Bit Clear -> nach jedem befehl ;; Read write brauchen wir nicht ;; RS - machen wir 0, fuer commmands, glaube ich, sonst umdrehen und 1 fuer data ;; D4 .. D7 sind im vier bit modus verwendet, dafuer senden wir init 3, 3, 3, 30, 20, ... oder so ;; .equ HD44780_ATMEGA8_PORTX_ENABLE = 6 .equ HD44780_ATMEGA8_PORTX_RW = 5 .equ HD44780_ATMEGA8_PORTX_RS = 4 .equ HD44780INIT0 = 0x03 .equ HD44780INIT1 = 0x03 .equ HD44780INIT2 = 0x03 .equ HD44780INIT2 = 0x02 .equ HD44780INIT3 = 0x20 .equ PORTX = PORTD .equ DDRX = DDRD ldi r16, HIGH (RAMEND) out SPH, r16 ldi r16, LOW (RAMEND) out SPL, r16 ldi r16, 0xff out DDRX, r16 end: rjmp end lcdhd44780cmdcomplete: ;;sbi set bits in register aber ports sbi PORTX, HD44780_ATMEGA8_PORTX_ENABLE nop nop nop cbi PORTX, HD44780_ATMEGA8_PORTX_ENABLE ret lcdh44780init: rcall delay ldi r16, HD44780INIT0 rcall lcdhd44780cmdsend rcall delay ldi r16, HD44780INIT1 rcall lcdhd44780cmdsend rcall delay ldi r16, HD44780INIT2 rcall lcdhd44780cmdsend rcall delay ldi r16, HD44780INIT3 rcall lcdhd44780cmdsend rcall delay ret lcdh44780cmdsend: ldi r16, ;; swap nibbles, CMD/DATA Entsprechend setzen usw. ret delay: push r16 ldi r16, DELAYVAL delay1: dec r16 breq delay1 pop r16 et