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.
Konstgheter med USART på PIC
Konstgheter med USART på PIC
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Konstgheter med USART på PIC
Notera att INTOSC är stabilare i de mer moderna processorfamiljerna.
Sannolikt har du fått ett gränsläge. En kristall i varje ände skulle
sannolikt stabilisera det hela om du måste köra med dessa gamla
processorer.
Sannolikt har du fått ett gränsläge. En kristall i varje ände skulle
sannolikt stabilisera det hela om du måste köra med dessa gamla
processorer.
Re: Konstgheter med USART på PIC
Den interna klockan på PIC är väl inte superstabil? Har för mig att den ligger på +/- 2%.
Max tillåten error ligger på +/- 1.5% för protokollet, så det är inte jätte konstigt att de inte fungerar.
Max tillåten error ligger på +/- 1.5% för protokollet, så det är inte jätte konstigt att de inte fungerar.
Re: Konstgheter med USART på PIC
> Den interna klockan på PIC är väl inte superstabil? Har för mig att den ligger på +/- 2%.
Varför "ha för sig" något"? Det är väl dokumenterat...
Varför "ha för sig" något"? Det är väl dokumenterat...
Re: Konstgheter med USART på PIC
Det som är lite underligt är att *innan* jag lödde allt på experimentkort, när allt var provisoriskt uppkopplat på kopplingsplattan så funkade allt med rätt SPBRG (25). Jag har också samma PIC som jag använde och testade med på kopplingsplattan (dock sitter den i en IC sockel på mitt experimentkort om det nu kan ha någon inverkan). Så jag är inte säker på att det är PICen i sig som är grundproblemet. Om jag orkar kanske jag kopplar upp motsvarande krets på kopplingsplatta igen, bara för att testa.
Kanske är det kondingen jag satt vid Vdd och Vss vid PICen som är knas?. Jag skall prova löda loss den vid tillfälle få se om det blir skillnad. Allt annat funkar dock som det skall. Jag kan skriva ut på LCDn m.m. Det är bara själva mottagningen som dummar sig. Jag har gått igenom min uppkoppling på kortet 10 ggr nu, men man blir ju hemmablind efter ett tag.
Hur som helst så funkar det ju bara jag sätter "fel" SPBRG, så för min del kan jag ha överseende i detta fall, dock vore det ju intressant att veta hur det kunde bli så här.
Kanske är det kondingen jag satt vid Vdd och Vss vid PICen som är knas?. Jag skall prova löda loss den vid tillfälle få se om det blir skillnad. Allt annat funkar dock som det skall. Jag kan skriva ut på LCDn m.m. Det är bara själva mottagningen som dummar sig. Jag har gått igenom min uppkoppling på kortet 10 ggr nu, men man blir ju hemmablind efter ett tag.

Hur som helst så funkar det ju bara jag sätter "fel" SPBRG, så för min del kan jag ha överseende i detta fall, dock vore det ju intressant att veta hur det kunde bli så här.
Re: Konstgheter med USART på PIC
Grejen är ju att om det ligger precis på gränsen så är skillnaden
mellan "fungerar" och "fungerar inte" hårfin. Notera att vid 4 Mhz
(nominellt) så blir det ett fel oavsett vilken SPBRG då sätter.
Med ett oscilloskop är det rellativt enkelt att se var felet är.
Om du har en frekvensräknare så kan du även kolla INTOSC.
mellan "fungerar" och "fungerar inte" hårfin. Notera att vid 4 Mhz
(nominellt) så blir det ett fel oavsett vilken SPBRG då sätter.
Med ett oscilloskop är det rellativt enkelt att se var felet är.
Om du har en frekvensräknare så kan du även kolla INTOSC.
Re: Konstgheter med USART på PIC
Ja, det bästa är nog faktiskt mäta klockfrekvensen - om du har utrustning för det.
Är det en ren 16F628 eller råkar det vara en 16F628A?
På 16F628 så är den interna oscillatorn specad till 3.65-4.28MHz så den är inte speciellt noggrann.
På A-varianten är det lite bättre, 3.92-4.08MHz vid "normala" temperaturer. Men om sändaren ligger i överkant med sin oscillator och mottagaren ligger i nederkant så blir det ändå några procents skillnad.
Felet som 4MHz klocka och SPBRG=25 ger är ~0.17% vilket ensamt inte ska ställa till det men tillsammans med resten är det klart att det kan inverka.
Är det en ren 16F628 eller råkar det vara en 16F628A?
På 16F628 så är den interna oscillatorn specad till 3.65-4.28MHz så den är inte speciellt noggrann.
På A-varianten är det lite bättre, 3.92-4.08MHz vid "normala" temperaturer. Men om sändaren ligger i överkant med sin oscillator och mottagaren ligger i nederkant så blir det ändå några procents skillnad.
Felet som 4MHz klocka och SPBRG=25 ger är ~0.17% vilket ensamt inte ska ställa till det men tillsammans med resten är det klart att det kan inverka.