PIC18LF452 USART ett rent elände att få igång - några id
Postat: 11 oktober 2007, 13:57:03
Håller på som mest med att försöka få igång USART-delen i en PIC18LF245. Men det vill sig inte - det kommer bara ut slumpmässigt skräp ur porten.
Info:
* PIC'en körs på 5V
* En MAX232ACPE används (även denna går på 5V)
* Loopback-test ända fram till PIC'en är OK (bygling över RC6/RC/, skicka tecken från terminal, samma tecken tas emot utan fel) - nivåomvandlingen och kablar/PCB är OK. PIC'en raderad under detta test (alla pinnar är ingångar då).
* Programmering sker med Wisp628 + XWisp2
* Testprogrammet skrivet i assembler, miljön är MPLAB IDE v7.62
* Det som kommer ur porten är totalt slumpmässigt - det går inte att se något mönster i galenskapen.
* Har testat både med Hyperterminalen och ett annat terminalprogram - ingen skillnad.
* PC'n ställs på 115200, 8/1/None, ingen handskakning (samma som vid loopback-testet).
* Har fått "blinka-LED" programmet att fungera, så PIC'en kan exekvera kod.
Uppkoppling:
* RC6/TX (pin 44) -> T1IN (pin 11)
* RC7/RX (pin 1) -> R1OUT (pin 12)
* T1OUT (pin 14) -> Pin 3 på DSUB9-Male
* R1IN (pin 13) -> Pin 2 på DSUB9-Male
* PIC'en är i TQFP-44, därav bennumreringen (> 40)
Så nu hoppas jag på lite hjälp från alla PIC-gurus här på forumet. Jag har testat det mesta och nu står jag bara och stampar på samma ställe.
Koden för testprogrammet som skickar ut några textsträngar på serieporten. Det är ursprungligen skapat av samma person som ligger bakom Tiny PIC Bootloader för just teständamål (dock med mycket mer textdata). Endast några smärre ändrignar har gjorts (minskat ner mängden text som skickas, sätter RC6 & RC7).
Info:
* PIC'en körs på 5V
* En MAX232ACPE används (även denna går på 5V)
* Loopback-test ända fram till PIC'en är OK (bygling över RC6/RC/, skicka tecken från terminal, samma tecken tas emot utan fel) - nivåomvandlingen och kablar/PCB är OK. PIC'en raderad under detta test (alla pinnar är ingångar då).
* Programmering sker med Wisp628 + XWisp2
* Testprogrammet skrivet i assembler, miljön är MPLAB IDE v7.62
* Det som kommer ur porten är totalt slumpmässigt - det går inte att se något mönster i galenskapen.
* Har testat både med Hyperterminalen och ett annat terminalprogram - ingen skillnad.
* PC'n ställs på 115200, 8/1/None, ingen handskakning (samma som vid loopback-testet).
* Har fått "blinka-LED" programmet att fungera, så PIC'en kan exekvera kod.
Uppkoppling:
* RC6/TX (pin 44) -> T1IN (pin 11)
* RC7/RX (pin 1) -> R1OUT (pin 12)
* T1OUT (pin 14) -> Pin 3 på DSUB9-Male
* R1IN (pin 13) -> Pin 2 på DSUB9-Male
* PIC'en är i TQFP-44, därav bennumreringen (> 40)
Så nu hoppas jag på lite hjälp från alla PIC-gurus här på forumet. Jag har testat det mesta och nu står jag bara och stampar på samma ställe.
Koden för testprogrammet som skickar ut några textsträngar på serieporten. Det är ursprungligen skapat av samma person som ligger bakom Tiny PIC Bootloader för just teständamål (dock med mycket mer textdata). Endast några smärre ändrignar har gjorts (minskat ner mängden text som skickas, sätter RC6 & RC7).
Kod: Markera allt
;Memory filled with strings; All of them are sent only once to UART.
LIST P=18F452
#include "p18f452.inc"
RADIX DEC
; __CONFIG _CONFIG1H, b'11111010' ;_OSCS_OFF_1H & _HS_OSC_1H
; __CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_ON_2L
; __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
; __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
; __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
; __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
; __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
; __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
; __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
; __CONFIG _CONFIG7H, _EBTRB_OFF_7H
CONFIG OSC=HS, OSCS=OFF
CONFIG PWRT=ON, BOR=ON, BORV=25
CONFIG WDT=OFF, WDTPS=128
CONFIG STVR=ON, LVP=OFF, DEBUG=OFF
CONFIG CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
CONFIG WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
CONFIG EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
CBLOCK 0x20
cnt1
cnt2
cnt3
ax
ENDC
variable _tab_cnt=0
;******************** MACROS **********************
SendLWait macro
btfss PIR1,TXIF ;empty?
goto $-2
movwf TXREG
endm
;************************ START *******************
ORG 0x0000
goto init
nop
nop
nop
init
bsf TRISC,RC7
bcf TRISC,RC6
movlw d'10' ; at 20Mhz with 115200 => 10
movwf SPBRG ; at 4Mhz with 19200 => 12
movlw b'00100100' ; TXEN+BRGH
movwf TXSTA
movlw b'10010000'
movwf RCSTA
start
movlw UPPER Table1
movwf TBLPTRU
movlw HIGH Table1
movwf TBLPTRH
movlw LOW Table1
movwf TBLPTRL
movlw 125
movwf cnt2
hop2
clrf cnt1
hop1
TBLRD*+
movf TABLAT, w
SendLWait
decfsz cnt1
goto hop1
decfsz cnt2
goto hop2
goto $ ; freeze
Table_size set Table1_end - Table1
messg #v(Table_size)
;TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
ORG 0x200
Table1
DB "1. If You can read this, then the UART is working (at least the code that runs it). 1234567890 ABCDEFGHIJKLMNOPQRSTUVXYZ !&#¤%&/()"
DB "2. If You can read this, then the UART is working (at least the code that runs it). 1234567890 ABCDEFGHIJKLMNOPQRSTUVXYZ !&#¤%&/()"
DB "3. If You can read this, then the UART is working (at least the code that runs it). 1234567890 ABCDEFGHIJKLMNOPQRSTUVXYZ !&#¤%&/()"
Table1_end
END