16F690, MAX232 a nefunkční USART - zarušený signál z PC

Zdravím
Snažím se oživit seriovou komunikaci a 16F690 mi stále nechce přijímat znaky po RS232. Vysílání znaků funguje

už jsem zkoušel kde co, ale furt nic

zde je kód

LIST P=16F690, R=DEC
INCLUDE<P16F690.INC>


__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

;*****************************************************************************************
;****************** DEKLARACE PROMENNYCH A KONSTANT ******************************
;*****************************************************************************************
DATAL EQU 0x20
#define RC1 PORTC,1
COUNT4 equ 0x24 ; CITAC PRO DELAY
COUNT5 equ 0x25 ; CITAC PRO DELAY
COUNT6 equ 0x26 ; CITAC PRO DELAY
COUNT7 equ 0x27 ; CITAC PRO DELAY
COUNT8 equ 0x28 ; CITAC PRO DELAY

;ostatni KONSTATNTY
;*******************************************************************************
;************************* ZACATEK KODU ********************************
;*******************************************************************************

ORG  0x00

; ----------------
; INITIALIZE PORTS
; ----------------
;
BCF STATUS,RP0 ;Bank 0
BCF STATUS,RP1 ;
CLRF PORTA ;Init PORTA
BSF STATUS,RP1 ;Bank 2
CLRF ANSEL ;digital I/O
CLRF ANSELH
BCF ANSELH,3
BSF STATUS,RP0 ;Bank 1
BCF STATUS,RP1 ;
MOVLW b’00001000’ ;
MOVWF TRISA ;
;
BCF STATUS,RP0 ;Bank 0
BSF RCSTA, SPEN
BSF RCSTA, CREN

BCF STATUS,RP0 		;Bank 0
BCF STATUS,RP1 		;
CLRF PORTB 		;Init PORTB
BSF STATUS,RP0 		;Bank 1
MOVLW b'01111111'	;
MOVWF TRISB 		;
BCF STATUS,RP0 		;Bank 0


BCF STATUS,RP0 		;Bank 0
BCF STATUS,RP1 		;
CLRF PORTC 		;Init PORTC
BSF STATUS,RP1 		;Bank 2
CLRF ANSEL 		;digital I/O
BSF STATUS,RP0 		;Bank 1
BCF STATUS,RP1 		;
MOVLW b'00000000'	;Set vse jako Output
MOVWF TRISC 		;
			;
BCF STATUS,RP0 		;Bank 0


    bsf STATUS,RP0          ; RAM PAGE 1 

; ------------------------------------
; SET BAUD RATE TO COMMUNICATE WITH PC
; ------------------------------------
; Boot Baud Rate = 9600, No Parity, 1 Stop Bit
;
movlw 0x19 ; 0x19=9600 bps (0x0C=19200 bps)
movwf SPBRG
movlw b’00100100’ ; brgh = high (2)
movwf TXSTA ; enable Async Transmission, set brgh

    bcf STATUS,RP0          ; RAM PAGE 0 

    movlw b'10010000'       ; enable Async Reception 
    movwf RCSTA 

;
; ------------------------------------
; PROVIDE A SETTLING TIME FOR START UP
; ------------------------------------
;
clrf dataL
settle decfsz dataL,F
goto settle

    movf RCREG,W 
    movf RCREG,W 
    movf RCREG,W            ; flush receive buffer 

;
; ---------
; MAIN LOOP
; ---------
;
BCF STATUS,RP0
call message ; send “16F690 alive”
BCF STATUS,RP0

loop call receive ; wait for a char
call send ; send the char

    goto loop 

;
; -------------------------------------------
; RECEIVE CHARACTER FROM RS232 AND STORE IN W
; -------------------------------------------
; This routine does not return until a character is received.
;
receive
BSF PORTC,1
BSF PORTC,0

btfss PIR1,RCIF         ; (5) check for received data 
    goto  receive 
    movf RCREG,W            ; save received data in W 

    return 

;
; -------------------------------------------------------------
; SEND CHARACTER IN W VIA RS232 AND WAIT UNTIL FINISHED SENDING
; -------------------------------------------------------------
;
send movwf TXREG ; send data in W

TransWt bsf STATUS,RP0 ; RAM PAGE 1
WtHere btfss TXSTA,TRMT ; (1) transmission is complete if hi
goto WtHere

    bcf STATUS,RP0          ; RAM PAGE 0 
    return 

;
; -------
; MESSAGE
; -------
;
message movlw ‘1’
call send
movlw ‘6’
call send
movlw ‘F’
call send
movlw ‘6’
call send
movlw ‘9’
call send
movlw ‘0’
call send
movlw ’ ’
call send
movlw ‘a’
call send
movlw ‘l’
call send
movlw ‘i’
call send
movlw ‘v’
call send
movlw ‘e’
call send
movlw 0x0D ; CR
call send
movlw 0x0A ; LF
call send
return

END

:arrow_right: administrator: přejmenováno z "16F690 problém s USART"
Kopie - UART690_01.ASM (4.37 KB)

Nevím jak tobě, ale mě to MPLAB nepřeloží.

[code]Release build of project `F:\project\Pokus\Pokus.mcp’ started.
Language tool versions: MPASMWIN.exe v5.43, mplink.exe v4.41, mplib.exe v4.41
Wed Sep 12 05:28:59 2012

Make: The target “F:\project\Pokus\UART690_01.o” is out of date.
Executing: “C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe” /q /p16F690 “UART690_01.ASM” /l"UART690_01.lst" /e"UART690_01.err"
Warning[207] F:\PROJECT\POKUS\UART690_01.ASM 11 : Found label after column 1. (DATAL)
Warning[207] F:\PROJECT\POKUS\UART690_01.ASM 13 : Found label after column 1. (COUNT4)
Warning[207] F:\PROJECT\POKUS\UART690_01.ASM 14 : Found label after column 1. (COUNT5)
Warning[207] F:\PROJECT\POKUS\UART690_01.ASM 15 : Found label after column 1. (COUNT6)
Warning[207] F:\PROJECT\POKUS\UART690_01.ASM 16 : Found label after column 1. (COUNT7)
Warning[207] F:\PROJECT\POKUS\UART690_01.ASM 17 : Found label after column 1. (COUNT8)
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 34 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 35 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 36 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 40 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 52 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 60 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 64 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 79 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 81 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[113] F:\PROJECT\POKUS\UART690_01.ASM 92 : Symbol not previously defined (dataL)
Error[113] F:\PROJECT\POKUS\UART690_01.ASM 93 : Symbol not previously defined (dataL)
Message[302] F:\PROJECT\POKUS\UART690_01.ASM 136 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.

Release build of project `F:\project\Pokus\Pokus.mcp’ failed.
Language tool versions: MPASMWIN.exe v5.43, mplink.exe v4.41, mplib.exe v4.41
Wed Sep 12 05:29:02 2012

BUILD FAILED[/code]

Mě to přeloží bez problému, jen jsem musel přejmenovat soubor
přikládám všechny soubory i zkompilovaný HEX.
UART690_01_a.LST (30.8 KB)
UART690_01_a.HEX (571 Bytes)
UART690_01_a.ERR (1.61 KB)
UART690_01_a.ASM (4.37 KB)

Tak jsem na to konečně přišel.
Chyba byla v hardwaru. Nakonec jsem zjistil, že mi z PC přichází zarušený signál a MAX232 jej ještě víc změnil. Tak jsem to odrušil kondenzátorem 10nF a také jsem na Pin 12 PICu zapojil 2k2 pull up rezistor. Nyní vše OK
Zapojeni_RS232_PIC_PC.jpg

MAX 232 nema mať 4 kondíky na prevod napäťových úrovní? … Teda možno ich len namáš v schéme nakreslené…

pokud si dobře vzpomínám, tak pin6 a pin2 nejsou určený pro napájení obvodu. pro napájení sou pin15 a pin16. na pin6 a pin2 jsou připojeny kondenzátory, jeden proti GND a druhej proti VCC. a pullup neni potřeba,

díky za odezvu

zdravím. Omlouvám se za schéma, jen jsem to tak zbastlil. Hlavně šlo o pull up rezistor a kondenzator na tx pinu z PC. MAX je ve skutečnosti zapojen správně. Pokud tam nedám ten kondík a resitor, tak mi to MAX pro PIC prostě nepřežvejká. Ale to rušení měřím už před MAXem. Používám USB redukci na RS232.

udělej schéma přesně tak jak to máš zapojený. Pin3 z CAN konektoru nemůžeš připojit na MAXe pin7, ale na pin13.

tak jo. Omlouvám se za špatné podklady, přikládám opravené schema. Snad už naposled :astonished:))
Taky přikládám snímky z osciloskopu. Měřený signál je proti zemi na pinu 3 bez zapojeného a se zapojeným kondenzátorem 10nF.
Měřil jsem to bez připojené ostatní elektroniky, tak je evidentní, že to posílá USB redukce na RS232. ale je mi to záhadou
díky všem za snahu
Signal.jpg
Zapojeni_RS232_PIC_PC_3.jpg

mno, u MAXe ten kondík na pinu2 přepoj na druhou stranu zenerky. a jestli koukám dobře, tak nemáš náhodou votočený piny v CAN konektoru? asi přehod pin2 s pin3.