Hallo,
ich habe ein gerät, welches eine FIP (VFD) anzeige hat. der controller
für diese anzeige war ein nec upd7538a. dieser controller ist defekt.
ich habe anhand der schaltpläne gesehen, das dieser über einen motorola
prozessor angesteuert wird, data und clk nur in richtung zum nec. durch
den kauf eines zeroplus la konnte ich sehen, dass eine byte zur position
des zeichens im FIP und eines als ascii gesendet werden. ich habe keine
info über start stop bit usw. ich weis nur, es wird ein syncon modus
genommen. jedoch vermute ich, das dieser frei läuft. ich habe beim avr
keinen ser modus gefunden, womit sich dies realisieren kann, so habe ich
ein hc595 und ein paar ander bateile genommen um dies parallel zu
wandeln. ein zähler clockt das latch im 595 und gibt mir den interrupt.
es funktioniert hier nur teilweise, da neben den verstümmelten zu
erwartenden text auch massig hyroglyphen kommen. hier mein code. als
attachment die la datei.
; LCD Ansteuerung uber 8-Bit
; Port A als Datenport und Port C als Control Port
; Getestet am PLED Display Winstar WP2002A
; 2 Zeilen a 20 Zeichen
.include "8515def.inc"
;.include "m168def.inc"
.def temp1 = r16
.def DATA = r18
.def COUNT = r19
.def tmp = r24
.DSEG
.org 0x017c
.BYTE 40
.CSEG
.org 0x000
rjmp main ; Reset Handler
rjmp int0_1 ; IRQ0 Handler
rjmp int1_1 ; IRQ1 Handler
main:
ldi temp1, '_'
sts $01A3, temp1
ldi temp1, '_'
sts $01A2, temp1
ldi temp1, '_'
sts $01A1, temp1
ldi temp1, '_'
sts $01A0, temp1
ldi temp1, '_'
sts $019F, temp1
ldi temp1, '_'
sts $019E, temp1
ldi temp1, '_'
sts $019D, temp1
ldi temp1, '*'
sts $019C, temp1
ldi temp1, '*'
sts $019B, temp1
ldi temp1, '*'
sts $019A, temp1
ldi temp1, '*'
sts $0199, temp1
ldi temp1, '*'
sts $0198, temp1
ldi temp1, ' '
sts $0197, temp1
ldi temp1, ' '
sts $0196, temp1
ldi temp1, 'R'
sts $0195, temp1
ldi temp1, 'O'
sts $0194, temp1
ldi temp1, 'L'
sts $0193, temp1
ldi temp1, 'A'
sts $0192, temp1
ldi temp1, 'N'
sts $0191, temp1
ldi temp1, 'D'
sts $0190, temp1
ldi temp1, ' '
sts $018F, temp1
ldi temp1, 'M'
sts $018E, temp1
ldi temp1, 'K'
sts $018D, temp1
ldi temp1, 'S'
sts $018C, temp1
ldi temp1, '7'
sts $018B, temp1
ldi temp1, '0'
sts $018A, temp1
ldi temp1, ' '
sts $0189, temp1
ldi temp1, ' '
sts $0188, temp1
ldi temp1, '*'
sts $0187, temp1
ldi temp1, '*'
sts $0186, temp1
ldi temp1, '*'
sts $0185, temp1
ldi temp1, '*'
sts $0184, temp1
ldi temp1, '*'
sts $0183, temp1
ldi temp1, '*'
sts $0182, temp1
ldi temp1, '*'
sts $0181, temp1
ldi temp1, ' '
sts $0180, temp1
ldi temp1, ' '
sts $017F, temp1
ldi temp1, ' '
sts $017E, temp1
ldi temp1, ' '
sts $017D, temp1
ldi temp1, ' '
sts $017C, temp1
ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten
RAM-Adresse
out SPL, temp1
ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten
RAM-Adresse
out SPH, temp1
ldi temp1, 0xFF ; Port A = Ausgang
out DDRA, temp1
rcall lcd_init ; Display initialisieren
rcall lcd_clear ; Display löschen
ldi XL,0xA4 ; Adresse der Zeichen im RAM
ldi XH,0x01
rcall ausgabe1
; Interupupt festlegen
; MCUCR 1010 = Int0 und Int1 fallender Flanke
; 1111 = Int0 unt int1 steigende Flanke
ldi temp1, 0x00
out DDRD, temp1 ; Port D auf Eingang für Interrupt
ldi temp1, 0b00001111 ; INT0 und INT1 konfigurieren
out MCUCR, temp1
ldi temp1, 0b11000000 ; INT0 und INT1 aktivieren
out GIMSK, temp1
sei ; Interrupt enable
;reset Impuls auf PIN 0 Port D
sbi PORTD, 0
nop
nop
nop
cbi PORTD, 0
; Port B auf eingang setzten
ldi temp1, 0x00
out DDRB, temp1
ldi temp1, 0xff
out portB, temp1
; Zähler auf 1
ldi COUNT, 0x01
loop:
ldi XL,0xA4 ; Adresse des 1. Zeichen im RAM
ldi XH,0x01
ldi yH,0x01
rcall ausgabe1
rjmp loop
int0_1:
push r22
push r23
in DATA, PINB
mov temp1, DATA
andi temp1, 0b10000000
cpi temp1, 0x80
brne raus
;dec COUNT
mov yL, DATA
pop r23
pop r22
reti
raus:
ldi yh, 0x01
st y,DATA
;ldi temp1, 0x45
;sts $0190, temp1
;pop X
ldi COUNT, 0x01
;rcall ausgabe1
pop r23
pop r22
reti
int1_1:
reti
ausgabe1:
rcall delay5ms
rcall delay5ms
rcall delay5ms
rcall delay5ms
rcall delay5ms
rcall delay5ms
ldi tmp, 0x28 ;anzahl der Zeichen 28h = 40, 20h =32
loop40:
lpm
ld temp1, -x
rcall lcd_data
dec tmp
brne loop40
ldi temp1, 0x02 ;cursur home
rcall lcd_command
ret
.include "lcd-4bit.asm"
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.