mdorian Postat Octombrie 1, 2008 Partajează Postat Octombrie 1, 2008 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 spre comentariu
Vizitator PicNick Postat Octombrie 2, 2008 Partajează Postat Octombrie 2, 2008 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 spre comentariu
mdorian Postat Octombrie 2, 2008 Autor Partajează Postat Octombrie 2, 2008 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 spre comentariu
mdorian Postat Octombrie 3, 2008 Autor Partajează Postat Octombrie 3, 2008 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 spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum