Jump to content
ELFORUM - Forumul electronistilor

Probleme cu portul serial la 16f628


mdorian

Recommended Posts

Am un circuit care foloseste PIC16f628A la care pinul de Rx este legat cu cel de Tx , se transmite pe Tx o secventa "abcfefg" de exemplu, si se receptioneaza pe rx pentru detectia erorilor pe linie. Initial am folosit MAESTRO(cu intreruperi) cu buffer de 32 de octeti si totul era in regula pana cand incercam sa introduc niste erori punand in scurt linia la masa , dupa eroare nu mai puteam reinitializa receptorul , am verificat si pe osciloscop si pe calculator pe portul serial si totul e in regula cu transmisia , mesajul e transmis corect , in schimb receptia este eronata. Am incercat si varianta pooled si acelasi lucru se intampla. Singurul mod in care se poate reveni din eroare este sa intrerup alimentarea . Nu revine nici cu reset MCLR. Asta este rutina de initializare uart banksel portb movlw b'11111101' movwf portb; banksel trisb movlw b'00111011' ; RB0 BUTON ; RB 1-2 RX-TX ; RB 3..5 DIPSW movwf trisbinituart banksel spbrg movlw 0x19 ; 0x19=9600 bps (0x0C=19200 bps) movwf SPBRG banksel txsta 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 ; sfarsitul initializarilor return Aveti vre-o idee unde gresesc?

Link to comment
  • Replies 3
  • Created
  • Last Reply
Guest PicNick

Am un circuit care foloseste PIC16f628A la care pinul de Rx este legat cu cel de Tx .

 

Vrei sa spui ca ai conectat cei 2 pini intre ei? sau ca rx este legat la tx la PC si tx la RX la PC?

 

Verifica urmatoarele:

 

1)

MCLR nu iti functioneaza pt. ca nu este configurat. Uita-te in byte-ul de configurare.

 

EX:

 

_CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _XT_OSC

 

 

2)

;****Rutina Receive****

 

Receive

Bank0

bsf RCSTA,CREN ;activeaza receptia

btfss PIR1,RCIF ;testeaza daca receptia s-a efectuat

goto Receive

movf RCREG,W ;salveaza datele receptionate (doar 8 biti)

movwf Reg1

bcf RCSTA,CREN ;dezactiveaza receptia

return

 

3)

Cum stai cu intreruperile, verifica daca se sterge flag-ul RCIF (dupa golirea reg RCREG).

Link to comment

Multumesc PikNik pentru raspuns, pinii sunt legati intre ei (pinul 7 cu pinul 8) 1- Mclr functioneaza , picul se reseteaza dar tot nu receptioneaza corect 2- rutina receive e un pic mai complicata pentru ca trebuie sa nu se blocheze si am un timeout de cuvant xtimer2 si unul de caracter xtimer1 care decrementati pina la 0 in intrerupere:uartgetch macro movf xtimer2,w xorlw .0 btfss status,z goto $+6 movf xtimer1,w bsf status,c xorlw .0 btfsc status,z goto $+9 banksel pir1 btfss PIR1,RCIF ; (5) check for received data goto $-.12 banksel rcreg movf RCREG,W ; save received data in W bcf status,c banksel pir1 bcf pir1,rcif clrf xtimer1 clrf xtimer2 endm La timeout se seteaza carryAm incercat varianta ta modificata ca sa nu pierd primul caracter:bsf RCSTA,CREN ;activeaza receptia (trimite caracter) (receptioneaza caracter)bcf RCSTA,CREN ;dezactiveaza receptia si tot nu merge bine Probabil e ceva cu bufferul dublu de la pic16f628a (scuze , in primul post am scris 16f628)

Link to comment

Se pare ca problema mea era in legatura cu bufferul hardware de receptie care cred ca nu se reseteaza decat la power off reset , dupa o eroare pe linie am facut din nou initializarea portului serial apoi inainte de orice transmisie am citit portul serial de trei ori ca sa fiu sigur ca bufferul e gol si acum merge bine. Probabil ca raman ceva "gunoaie" in el chiar si dupa reinitializare sau reset. Multumesc din nou pentru sugestii PicNik

Link to comment

Archived

This topic is now archived and is closed to further replies.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines