Konstgheter med USART på PIC
Postat: 22 september 2013, 13:33:52
Halloj!
Har haft en uppkoppling på två labbplattor där jag använder de billiga RF enheter som finns hos Kjell&co med en sändare på ena plattan och en mottagare på andra. Sändaren skickar data med en 16F627 och mottagaren har en 16F628 som tar emot och skriver ut data och statistik på LCD. Båda PICarna kör på intern oscillator på 4MHz. Både RF sändaren och mottagaren kommunicerar med PICarna via PICarnas inbyggda USART.
Allt fick jag att funka perfekt med 2400 bps på labbplattorna. När jag sedan flyttade över projektet och lödde allt på två experimentkort uppstod en del konstiga fenomen. Det mesta var klantfel av mig, men ett fel har jag inte lyckats reda ut, även om jag fått det att fungera via workaround.
När jag körde igång allt på experimentkorten så fick jag framing errors (FERR) i mottagningen hela tiden. Datan som kom till mottagaren *verkade* var korrupt. Jag kopplade då en USB serial TTL interface till RX pinnen på PICen på mottagarkortet och körde med terminalprogram på datorn på 2400 baud. Datan som visades på datorn i terminalen var helt korrekt. Så då antog jag att det inte var något fel med sändarkortet eller själva RF mottagarmodulen. Dock fick PICen fortfarande framingerror, och när jag skriver ut paketen på LCDn så är det skräptecken (paketen består av vanlig ASCII kod).
Efter mycket kliande i huvudet så höftade jag och satte 24 istället för 25 i SPBRG registret som styr vilken baudrate PICen skall köra på. Jag ändrade detta enbart i mottagaren, PICen som sänder sitter fortfarande på SPBRG=25. Men nu funkade det på mottagar PICen. Alla paket kom in perfekt.
Jag har även provat med en annan PIC på mottagaren en 16F628. Samma fenomen där. Kör jag SPBRG på 25 som det skall vara för 2400 bps om BRGH=0 så blir det fel, ändrar jag till 24 så funkar det.
Detta får mig att tro att något på experimentkortet på mottagaren gör att PICens interna oscillator ändrar frekvens. Jag har satt avkopplingskondingar runt spänningsregulatorn (7805) och en keramik alldeles vid Vcc och Vss på PICen. Detta verkar dock inte ha någon betydelse. Jag matar mottagarkretsen med ett batteri via 7805, så det borde inte vara några strömpikar in heller.
Är det någon som har någon teori om vad det kan vara?
Bifogar schema nedan. Det gröna blocket är RF_Modulen där datautgången är direkt kopplad till RX på PICen. CON1 är ansluten direkt mot LCD pinnarna.
Har haft en uppkoppling på två labbplattor där jag använder de billiga RF enheter som finns hos Kjell&co med en sändare på ena plattan och en mottagare på andra. Sändaren skickar data med en 16F627 och mottagaren har en 16F628 som tar emot och skriver ut data och statistik på LCD. Båda PICarna kör på intern oscillator på 4MHz. Både RF sändaren och mottagaren kommunicerar med PICarna via PICarnas inbyggda USART.
Allt fick jag att funka perfekt med 2400 bps på labbplattorna. När jag sedan flyttade över projektet och lödde allt på två experimentkort uppstod en del konstiga fenomen. Det mesta var klantfel av mig, men ett fel har jag inte lyckats reda ut, även om jag fått det att fungera via workaround.
När jag körde igång allt på experimentkorten så fick jag framing errors (FERR) i mottagningen hela tiden. Datan som kom till mottagaren *verkade* var korrupt. Jag kopplade då en USB serial TTL interface till RX pinnen på PICen på mottagarkortet och körde med terminalprogram på datorn på 2400 baud. Datan som visades på datorn i terminalen var helt korrekt. Så då antog jag att det inte var något fel med sändarkortet eller själva RF mottagarmodulen. Dock fick PICen fortfarande framingerror, och när jag skriver ut paketen på LCDn så är det skräptecken (paketen består av vanlig ASCII kod).
Efter mycket kliande i huvudet så höftade jag och satte 24 istället för 25 i SPBRG registret som styr vilken baudrate PICen skall köra på. Jag ändrade detta enbart i mottagaren, PICen som sänder sitter fortfarande på SPBRG=25. Men nu funkade det på mottagar PICen. Alla paket kom in perfekt.
Jag har även provat med en annan PIC på mottagaren en 16F628. Samma fenomen där. Kör jag SPBRG på 25 som det skall vara för 2400 bps om BRGH=0 så blir det fel, ändrar jag till 24 så funkar det.
Detta får mig att tro att något på experimentkortet på mottagaren gör att PICens interna oscillator ändrar frekvens. Jag har satt avkopplingskondingar runt spänningsregulatorn (7805) och en keramik alldeles vid Vcc och Vss på PICen. Detta verkar dock inte ha någon betydelse. Jag matar mottagarkretsen med ett batteri via 7805, så det borde inte vara några strömpikar in heller.
Är det någon som har någon teori om vad det kan vara?
Bifogar schema nedan. Det gröna blocket är RF_Modulen där datautgången är direkt kopplad till RX på PICen. CON1 är ansluten direkt mot LCD pinnarna.