- Labornetzteil AliExpress         
Ergebnis 1 bis 5 von 5

Thema: 2-pin Matrixdisplay für µC

  1. #1
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077

    2-pin Matrixdisplay für µC

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Hier möchte ich meine geprüfte Idee zeigen. Weil ich mit den kleinsten PIC12F629 angefangen habe, und auch etwas auf dem Display sehen wollte, habe ich mir als Ziel gesetzt (und glücklicheweise erreicht), eine Schnittstelle für Display, die nur 2 pins zum Betreiben braucht, zu enwickeln. Um die zwei pins maximal auszunutzen, habe ich auf denen noch 3 Taster gehängt. Und es funktioniert!

    Ich habe eben bemerkt, dass beim Beschreiben des 9-bittigen Schieberegisters (74HC164 + linke Hälfte von 74HC74) die steigende Flanke von _DT immer ein Prozessortakt vor der steigender Flanke von _CK kommt und habe es durch Vertauschen der Funktionen von _CK und _DT zum Erzeugen vom Enable (E) ausgenutzt (siehe das Zeitdiagramm im Code).

    Bei der Tastenabfrage gibt es folgende Kombinationen der _CK und _DT:

    _CK=1 und _DT=1 -> keine Taste gedrückt
    _CK=1 und _DT=0 -> Taste T1 gedrückt
    _CK=0 und _DT=1 -> Taste T2 gedrückt
    _CK=0 und _DT=0 -> Taste T3 gedrückt

    Vielleicht braucht jemand von euch so was. Wer keine Taster braucht, kann sie, alle Resistoren und beide Transistoren weg lassen (untere Skizze). In dem Fall könnte man die beiden IC's in SMD auf der Displayplatine mit doppelseitigen Klebeband befestigen und mit dünnem Kupferlackdraht verbinden. Vorteil: man kann das Display vielseitig mit diversen µC's verwenden.

    Zur Skizze. Um es durchschaulicher zu gestalten sind folgende Verbindungen noch zu machen, die auf der Skizze nicht berücksichtigt sind:

    An GND (Masse): IC1 pin7, IC2 pin7
    An VCC: IC1 pin 14, IC2 pin 14 und IC1 pins 1,4,10,13.

    IC1 ist 74HC74 und IC2 ist 74HC164. Die Transistoren sind beliebig.

    Sollte ich was übersehen haben, bitte fragen. Weil es nur eine Idee ist, habe ich kein Layout (Platine) dafür.

    Das Testprogram ist für übliches 2x16 Zeichendisplay geschrieben. Auf dem Display soll in der ersten Zeile "0123456789ABCDEF" und in der zweiten "FEDCBA9876543210" erscheinen.

    Übrigens, es funktioniert auch mit anderen Zeichendisplays (z.B. 4x16 Zeichen) mit gleichen Anschlüssen: R/W, RS, E und D0 bis D7 (ausprobiert).

    MfG
    Code:
                 _   _   _   _   _   _   _   _   _____________
         _CK ___| |_| |_| |_| |_| |_| |_| |_| |_|             |_____
    
                |   |   |   |   |   |   |   |   |
                V   V   V   V   V   V   V   V   V
    
                D7  D6  D5  D4  D3  D2  D1  D0  RS
                ___     ___     ___     ___     ___    _        _
         _DT __|   |___|   |___|   |___|   |___|   |__| |______| |__
    
               |       |       |       |       |      |        |
               V       V       V       V       V      V        V
                                                       ________
          E  _________________________________________|        |____
    
    
    
                                vom PIC
    
                             _CK V   V _DT
       GND                       |   |                VCC
       ===      T1     R1 1k     |   |          R3 10k +
        |      ---      ___      |   |            ___  |
        +--+---o o---+-|___|---------+-----+-----|___|-+
        |  |    T2   | R2 1k     |   |     |    R4 10k |
       .-. |   ---   |  ___      |   |     |      ___  |
     R7| | +---o o-+---|___|-+---+-------------+-|___|-+
     10k |         | |  VCC  |   |   |     |   |       |
       '-'      T3 | |   +   | .-------. .-------.     |    .------.
        |      --- | |   |   | | 3   2 | |11   12|     +----|2     |
        +--+--+o o-------+   | |     5 | |     9 |       +--|1,3,5 |
           |  |    | |       | '-------' '-------'       |  |      |
          .-..-.   | |       |       | IC1     |        === |      |
        R5| || |R6 | |       +---+   | 74HC74  |        GND |      |
        10k || |10k| |           |   |         +------------|6  E  |
          '-''-'   | |           |   +----------------------|4  RS |
           |  |  |/  |           |   |                      |      |
           |  +--|   |         .-------.                    |      |
           |     |>  |         | 8  1,2|                    |      |
           | TS1   | |      VCC|      3|--------------------|7  D0 |
           |      ===|       + |      4|--------------------|8  D1 |
           |      GND|       | |      5|--------------------|9  D2 |
           |         |       +-|9     6|--------------------|10 D3 |
           |       |/          |     10|--------------------|11 D4 |
           +-------|           |     11|--------------------|12 D5 |
                   |>          |     12|--------------------|13 D6 |
               TS2   |         |     13|--------------------|14 D7 |
                    ===        '-------'                    '------'
                    GND        IC2 74HC164                   DISPLAY
    
       PIC Miniterminal
    
                     vom PIC           
    
                   _CK V   V _DT
                       |   |
                       |   +-----+
                       |   |     |
                       |   |     |
                  +----+-------------+           VCC
                  |    |   |     |   |            +  .--------.
                  |  .-------. .-------.          |  |        |
                  |  | 3   2 | |11   12|          +--|2       |
                  |  |     5 | |     9 |          +--|1,3,5   |
                  |  '-------' '-------'          |  |        |
                  |        | IC1     |           === |        |
                  +----+   | 74HC74  |           GND |        |
                       |   |         +---------------|6  E    |
                       |   +-------------------------|4  RS   |
                       |   |                         |        |
                     .-------.                       |        |
                     | 8  1,2|                       |        |
                 VCC |      3|-----------------------|7  D0   |
                  +  |      4|-----------------------|8  D1   |
                  |  |      5|-----------------------|9  D2   |
                  +--|9     6|-----------------------|10 D3   |
                     |     10|-----------------------|11 D4   |
                     |     11|-----------------------|12 D5   |
                     |     12|-----------------------|13 D6   |
                     |     13|-----------------------|14 D7   |
                     '-------'                       '--------'
                     IC2 74HC164                       DISPLAY
    
    
    ;	Test programm for display with 2-pin serially connection 
    	LIST      P=12F629
    	include "P12F629.inc" 	                 ;  4.000 MHz internal clock
    	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
    #define  _DT	GPIO,0			; display data line
    #define  _CK	GPIO,1			; display clock line
    #define  _C	STATUS,C
    DTemp    EQU 	0x20
    DTemp1	 EQU	0x21
    DTemp2	 EQU	0x22
    DTemp3	 EQU	0x23
    		ORG     0x0000
    		call	Init
    Main		call    FstLine
    		movlw   0x01
    		call    ValLCD
    		movlw   0x23
    		call    ValLCD
    		movlw   0x45
    		call    ValLCD
    		movlw   0x67
    		call    ValLCD
    		movlw   0x89
    		call    ValLCD
    		movlw   0xAB
    		call    ValLCD
    		movlw   0xCD
    		call    ValLCD
    		movlw   0xEF
    		call    ValLCD
    		call    SndLine
    		movlw   0xFE
    		call    ValLCD
    		movlw   0xDC
    		call    ValLCD
    		movlw   0xBA
    		call    ValLCD
    		movlw   0x98
    		call    ValLCD
    		movlw   0x76
    		call    ValLCD
    		movlw   0x54
    		call    ValLCD
    		movlw   0x32
    		call    ValLCD
    		movlw   0x10
    		call   	ValLCD
    		goto	Main
    FstLine		movlw	0x80
    		goto	CmdLCD
    SndLine         movlw   0xC0
    CmdLCD          movwf   DTemp2
    		bcf	_C		; clear RS
    		goto    SendLCD
    ValLCD 		movwf   DTemp1		; display value (00-FF)
    		swapf   DTemp1,0
    		call    NumLCD
    		movf    DTemp1,0
    NumLCD  	andlw   0x0F		; display number (0-F)
    		movwf   DTemp
    		movlw   0x0A
    		subwf   DTemp,0
    		btfsc   _C
    		addlw   7
    		addlw   0x3A
    CharLCD 	movwf   DTemp2		; display ASCII character
    		bsf	_C		; set RS
    SendLCD		bcf	_CK		; clear display enable
    		bcf	_DT
    		bsf	_DT
    		movlw   9
    		movwf   DTemp
    SerSend		bcf	_CK		; send a byte+RS
    		bcf     _DT
    		btfsc   DTemp2,7
    		bsf     _DT
    		bsf     _CK
    		rlf	DTemp2,1
    		decfsz  DTemp,1
    		goto    SerSend
    		bcf	_DT		; set display enable
    		bsf	_DT
    		return
    Init		movlw	7		; set comparator off
    		movwf	CMCON		; and RA0-3 to digital I/O
    		bsf     STATUS, RP0	; bank1
    		bcf	OPTION_REG,7	; enable pull-ups
    		movlw	0xFC		; set GP5 to GP2 as inputs
    		movwf	TRISIO		; and set GP0 and GP1 as outputs
    		call	0x3FF 		; call calibration value
    		movwf   OSCCAL		; calibrate internal RC oscillator
    		bcf     STATUS, RP0	; bank 0
    		movlw   0x38		; 8 bit, 2 lines , 5x7 dots
    		call    CmdLCD
    		movlw   0x0C		; display on, cursor off, no blink
    		call    CmdLCD
    		movlw   6		; increment, no shift
    		goto    CmdLCD
    		END
    Geändert von PICture (02.09.2016 um 21:12 Uhr)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    Hi, nette und praktische Idee, aber
    wäre die ganze Sache mit einem 8-bit - I2C-Portexpander (PCF8574) nicht einfacher?
    Dazu müsste zwar das Display im 4-bit-Modus ansteuerbar sein, aber das sind die meisten. (zumindest HD44780)
    Man müsste im Prozessor nur einen Software-I2C-Master implementieren (es gibt vorgefertigte Libs), und kann dann auch beliebige zwei Prozessorpins benutzen.
    Insgesamt wäre der Hardwareaufwand deutlich geringer, von den 8 Ports können 6 direkt mit dem Display verbunden werden (4*Daten , EN und RS) und 2 blieben für die Tasten, die man beim PCF8574 auch direkt anschließen kann. Man benötigt eigentlich nur den Stromanschluss und Pull-Ups für I2C, was aber schnell gemacht ist.
    Gruß
    ASUR0

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von ASUR0 Beitrag anzeigen
    Hi, nette und praktische Idee, aber
    wäre die ganze Sache mit einem 8-bit - I2C-Portexpander (PCF8574) nicht einfacher?
    Dazu müsste zwar das Display im 4-bit-Modus ansteuerbar sein, aber das sind die meisten. (zumindest HD44780)
    Man müsste im Prozessor nur einen Software-I2C-Master implementieren (es gibt vorgefertigte Libs), und kann dann auch beliebige zwei Prozessorpins benutzen.
    Insgesamt wäre der Hardwareaufwand deutlich geringer, von den 8 Ports können 6 direkt mit dem Display verbunden werden (4*Daten , EN und RS) und 2 blieben für die Tasten, die man beim PCF8574 auch direkt anschließen kann. Man benötigt eigentlich nur den Stromanschluss und Pull-Ups für I2C, was aber schnell gemacht ist.
    Gruß
    ASUR0
    Beim I²C wird es dann aber mit den 3 Tastern schwer
    Aber ansonsten ist das eine super Idee

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Kampi Beitrag anzeigen
    Beim I²C wird es dann aber mit den 3 Tastern schwer
    Aber ansonsten ist das eine super Idee
    Nicht wenn man die mittels verdrahtetem OR an die 2 übrigen PIN's anschließt, dann können es auch 3 Taster sein.

    Gruß Richard

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    Nicht wenn man die mittels verdrahtetem OR an die 2 übrigen PIN's anschließt, dann können es auch 3 Taster sein.
    So ist es natürlich auch möglich...

    Die Idee ist übrigens schon an meinem ASURO real erprobt:
    https://www.roboternetz.de/community...-Minimallösung

    Außerdem habe ich mir aus einem Kinderlerncomputer von Ravensburg die Tastatur "geklaut" und habe mit 2 Expandern das 10x6 Matrix ansteuern können. Alles klappt bis auf Phantom Keys

    Wenn Ihr daran interessiert seid könnt ich ein paar Bilder hochladen

    Gruß ASUR0

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test