Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

PIC16F628 ja seriali katkestus

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    PIC16F628 ja seriali katkestus

    Hommik

    On selline probleem et PIC-i serial porti tuleb pidevalt daatat. Seda saaks ära keelata kuid siis peaks rauda mõned transs-võtmed panema. Probleemiks on enneaegne data seepärast, et siis seriali katkestust ei tunta ja midagi vastu ei võeta (MPLAB-is jookseb küll kuid seal on suht raske liigset daata simuleerida).
    Work-around, mis toimib, on pordi resettimine peale registrite ja muu tarviliku setup'i.
    Kui töötab, ära näpi? Nojah aga tahaks ikka põhjust teada. Tavaliselt sellist vee peale tõmbamist vaja ei ole.
    Ehk on kellelgi ideid?

    Tänks!

    PS. Sama skeem ja kood toimivad (ilma porti nullivate käskudeta) kenasti, kui andmed veidi hiljem peale anda (nt. PC terminalilt). What the kakk...?
    - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
    - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

    #2
    Jutt segane veidi, seetõttu ei saa probleemist aru. Kas seriali tuleb nii palju infot, et PIC ei suuda läbi töötada? Ei tahaks uskuda. Teine võimalus, et sa lülitad seriali tööle suvalisel hetkel, serial võib mitte sünkroniseeruda startbitile. Nimelt kui serialdata tuleb ilma pausideta, siis sünkroniseerub esimese 1-biti peale. Ja ka järgmine bait loetakse vale biti pealt ja nii edasi. Serial sünkroniseerub ainult siis, kui datal on paus ühe baidi pikkuselt vähemalt.

    Ehk aitab, minul oli kunagi selline probleem.

    Comment


      #3
      Aga säti näiteks RCSTA registri 6 ja 7 bitid alles initsialiseerimise lõpus. Kui RCSTA seitsmes bitt on 0 siis ei tohiks mingit vastuvõttu toimida (st vastav pin peaks olema tavaline digitaalsisend, kui kivi ei ole kuidagi teisiti konfitud).

      Comment


        #4
        RCSTA hiljem sättimise idee on hea. Proovin.
        Tegelikult mul kood töötabki umbes nii, nullin pordi peale üldist init'it samuti, nagu sa ütled:
        bcf RCSTA,CREN ;nullime pordi
        bsf RCSTA,CREN



        Mis värk see on? Võtan inffi vastu raadiokivilt nRF0433. Kui remootne saatja ei tööta, on kivi väljundis "müra". Seda saaks keelata vaid kivilt toidet maha võttes (noh ja sisendit lahti lülitades muidugi ka - ei ole eriti mugav).
        PIC ei sisene üldse seriali katkestusprogrammi.
        Kui teen eelkirjeldatud reseti peale init'it enne info ootamise algust, saab ta suurepäraselt hakkama, otsib mürasse ilmuva data üles ja dekodeerib õigesti.

        Kummaline, et port nii käitub. Selle põhjust tahakski teada...

        PS. Proovisin teha ainult serialpordi initi veelkord, kui muud registrid juba paigas ja isegi 50mS oodatud. Ei aita. Ainult too RCSTA plõksimine mõikab!?
        - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
        - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

        Comment


          #5
          vot siin on minu mõistus otsas. Aga picil on riistvaraline rs 232, st high speed shifter, mis hakkab pärast startbitti usart vastuvõturegistrisse bitte kirjutama ja neid ühe võrra edasi nihutama, võib olla läheb see defaulina käima ja porti tuleva vaheaegadeta läbu tõttu läheb side sünkroonist ära ja ongi jama majas. Teine võimalus on seal rcsta registris või mõnes muus usartiga seotud registris on mingi bitt continious recieve (ma olen võib olla valesti aru saanud aga continious recieve puhul kirjutatakse vana läbu üle aga single recieve puhul peab recieve register tühi olema ja katkestus kutsutakse välja alles siis kui sinna tühja registrisse midagi kirjutatakse).

          Comment

          Working...
          X