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
Lesezeichen