Hallo!

Mit wachsender Erfahrung um Zeit zu sparen, baue ich immer öfter Schaltungen mit PICs gleich auf Platinen für fertige Geräte, die kein Display besitzen.

Um Programme mit Hilfe von PIC Miniterminal, wie auf dem Entwicklungsboard erstellen zu können bzw. ein Display während dieser Zeit zu benutzen, habe ich mir eine einfache Platine gebaut. Sie ist zwischen den Umschalter von ICSP, der bisher direkt mit dem Entwicklunsboard verbunden war, und der Platine mit PIC geschaltet. Der Schaltplan, wie es verbunden ist, habe ich im Code skizziert.

Auf der Skizze ist der Umschalter in der Position "Programmieren", weil das Netzteil ausgeschaltet ist. Man kann auch den Umschalter um 4 Stifte ergänzen und keine Zwischenplatine verwenden. Damit das Display auch für niedrige Versorgungsspannungen (z.B. 2 V) des PICs arbeitet, muss an sein VCC versorgende Spannung 5V zugeführt werden.

Die einzige Einschrenkung ist, dass der PIC Miniterminal immer mit PIC-Pins PGC und PGD, die für s Programmieren vorgesehen sind, verbunden ist. Meistens könnte man das bei der Entwicklung der Hardware berücksichtigen bzw. auf das verzichten und wie bisher mit dem Entwicklungsboard arbeiten.

Im unterem Code befinden sich zwei kurze Programme zum Prüfen der Hardware. Ich habe das Testprogramm für PIC16F870 und 2x16 Display geschrieben, weil ich mich gerade mit solchen beschäftige, aber es leicht für andere PICs und Displays umgeschrieben werden kann. Der "Minidisplay" muss in ein Programm, in dem das "PIC Miniterminal" als Display benutzt wird, eingebunden sein und "goto @Init" am Ende der Initialisierung vom Programm sein. Wenn das Programm schon fertig ist, kann man das entfernen.

Für Ausgabe in biliebigem Programm werden die UPs von "Minidisplay" benutzt. Damit sie nicht mit anderen UPs mit gleichen Namen kolidieren fangen sie alle mit "@" an. Die alle "@TmpX" Register können auch am oberem Ende des Speichers plaziert werden damit sie beim Erstellen des Programms nicht stören

MfG
Code:
                                PIC Miniterminal
                               .-----------------.
                               |.---------------.|
                               ||               ||
                               |'---------------'|
                               |   o    o    o   |
                               |                 |
                               | GND _DT _CK VCC |
                               '-----------------'
                                  A   A   A   A
                  .--------.      |   |   |   |
        / VCC <-----o__    |      |   |   |   |      .-------------.
       |          |    --o---<<---|---|---|---|---<<--- VCC (PIC)  |
       |          | o      |      |   |   |   |      |             |
    B  |          |  \-------<<---|---|---|---+---<<--- Netzteil   |
       |  VPP <-----o__    |      |   |   |          |             |
    r  |          |    --o---<<---|---|---|-------<<--- VPP (PIC)  |
       |          | o      |      |   |   |          |             |
    e  |          |  \-------<<---|---|---|-------<<--- PIC?       |
      /   PGC <-----o__    |      |   |   |          |             |
    n \           |    --o---<<---|---|---|-------<<--- PGC (PIC)  |
       |          | o      |      |   |   |          |             |
    n  |          |  \-------<<---|---|---+-------<<--- PIC?       |
       |  PGD <-----o__    |      |   |              |             |
    e  |          |    --o---<<---|---|-----------<<--- PGD (PIC)  |
       |          | o      |      |   |              |             |
    r  |          |  \-------<<---|---+-----------<<--- PIC?       |
       |          |        |      |                  |             |
        \ GND <--------------<<---+---------------><--- GND (PIC)  |
                  '--------'                         '-------------'
                  Umschalter                         Platine mit PIC
Code:
; Testprogramm für PIC Miniterminal als externes 2-pin Display
	LIST      P=16F870
	include "P16F870.inc"
	__CONFIG	_CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
		org	0
		call	Init
Main		call	@Fst
		movlw	"P"
		call	@Char
		movlw	"I"
		call	@Char
		movlw	"C"
		call	@Char
		movlw	" "
		call	@Char
		movlw	"M"
		call	@Char
		movlw	"i"
		call	@Char
		movlw	"n"
		call	@Char
		movlw	"i"
		call	@Char
		movlw	"t"
		call	@Char
		movlw	"e"
		call	@Char
		movlw	"r"
		call	@Char
		movlw	"m"
		call	@Char
		movlw	"i"
		call	@Char
		movlw	"n"
		call	@Char
		movlw	"a"
		call	@Char
		movlw	"l"
		call	@Char
		call	@Snd
		movlw	"a"
		call	@Char
		movlw	"l"
		call	@Char
		movlw	"s"
		call	@Char
		movlw	" "
		call	@Char
		movlw	"D"
		call	@Char
		movlw	"i"
		call	@Char
		movlw	"s"
		call	@Char
		movlw	"p"
		call	@Char
		movlw	"l"
		call	@Char
		movlw	"a"
		call	@Char
		movlw	"y"
		call	@Char
		movlw	" "
		call	@Char
		movlw	"t"
		call	@Char
		movlw	"e"
		call	@Char
		movlw	"s"
		call	@Char
		movlw	"t"
		call	@Char
		sleep
Init		clrf	ADCON0		; schalte ADC aus
		movlw	7		; sperre ADC
		movwf	ADCON1		; und definiere A0-A7 als digitale I/Os
		goto	@Init
		include	"Minidisplay.asm"
		end


;	"Minidisplay.asm" für PIC Miniterminal als externes 2-pin Display  
#define	@CK	PORTB,6
#define @DT	PORTB,7
@Tmp	equ	20
@Tmp1	equ	21
@Tmp2	equ	22	
@Tmp3	equ	23
@Fst		movlw	80		; Adresse der 1. Zeile
		goto	@Cmd
@Snd		movlw	0xC0		; Adresse der 2. Zeile
@Cmd		bcf	STATUS,C	; Befehl an Display schicken
		goto	@Send
@Val		movwf	@Tmp1		; Zahl (00-FF) an Display schicken
		swapf	@Tmp1,0
		call	@Num
		movf	@Tmp1,0
@Num		andlw	0F		; Ziffer (0-F) an Display schicken
		movwf	@Tmp2		
		movlw	0A
		subwf	@Tmp2,0
		btfsc	STATUS,C
		addlw	7
		addlw	3A
@Char		bsf	STATUS,C
@Send		movwf	@Tmp2
	  	movlw	9		; Byte + RS aus @Tmp2 (9 Bits) an Display schicken
		movwf	@Tmp3
@Ser		bcf	@CK
		bcf	@DT
		btfsc	@Tmp2,7
		bsf	@DT
		bsf	@CK
		rlf	@Tmp2,1
		decfsz	@Tmp3,1
		goto	@Ser
		bcf	@DT		; set
		bsf	@DT		; Display Enable
		movlw	27	
		movwf	@Tmp3
		decfsz	@Tmp3,1
		goto	$-1
		bcf	@CK		; clear
		bcf	@DT		; Display
		bsf	@DT		; Enable
		return
@Del		movlw	2
		movwf	@Tmp2
		clrf	@Tmp1
		clrf	@Tmp
		decfsz	@Tmp,1
		goto	$-1
		decfsz	@Tmp1,1
		goto	$-4
		decfsz	@Tmp2,1
		goto	$-7
		return
@Init		clrf	ADCON0		; schalte ADC aus
		movlw	7		; sperre ADC
		movwf	ADCON1		; und definiere A0-A7 als digitale I/Os
		clrf	PORTB
		call	@Init1
		call	@Del
@Init1		bsf	STATUS,RP0
		movf	TRISB,0
		andlw	3F
		movwf	TRISB
		bcf	STATUS,RP0
		movlw	38		; Display vom PIC Miniterminal initialisieren
		call	@Cmd
		movlw	0C
		call	@Cmd
		movlw	6
		call	@Cmd
		return
		end