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.