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
MfGCode: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 PICCode:; 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







Zitieren

Lesezeichen