Steglös baud

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Kjelle
Inlägg: 972
Blev medlem: 25 december 2004, 23:01:46
Ort: Västsverige

Steglös baud

Inlägg av Kjelle »

Finns här någon duktig comportsprogrammerare(RS232), vill gärna veta
hur man ställer in steglös Baud i comporten ?

Tänkte börja forska lite i bilars OBD(diagnostik).

Många bilar har udda Baud, t.ex. GM har 160, 8192

Comportskretsen 16C550(eller kompatibel) kan jag köra på dom
vanliga hastigheterna 110, 4800, 9600, 14400 o.s.v. inga problem.

Genom att manipulera register DLM i 16C550'an kommer jag även
åt dom dolda baudhastigheterna 8861, 10472 m.m.

16C550 har ju en intern osc på 1.8432 MHz och den delas ju ner.
T.ex. med 1 i DLM ger 115200, 115200/12 ger 9600 o.s.v. ett alternativ vore ju att ändra osc i 16C550’an.
Men jag kan inte på något sätt se att det mjukvarumässigt går att ändra på 16C550'ans osc. det vore kul att ställa baudgeneratorn exakt på önskad hastighet, men jag har inte lyckats finna ett svar någonstans.

Steglös baud finns ju annars i emulatorerna till piratkortstv m.m. så på något sätt går det att lösa.

Nu kanske någon säger varför köper du inte en färdig OBD scanner för några hundralappar, men då är det ju inte tekniskt intressant. :)


Kjelle
Senast redigerad av Kjelle 4 maj 2007, 19:49:58, redigerad totalt 2 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Först...

> vill gärna veta hur man ställer in steglös Baud i comporten ?

Det kan du *aldrig* få.

Mycket *små* steg kanske, men *aldrig* "steglös"...

Jag vet inte hur man gör på en *PC* (om det är det som frågan
gäller), men på en vanlig mircocontroller (AVR/PIC/whatever) är
det bara att ställa baudrate registret som man vill.

T.ex när det gäller PIC, så kan man i de nyare modellerna
(med 16-bitars baudrate register istället för 8 bitars) få väldigt
fin upplösning.
Kjelle
Inlägg: 972
Blev medlem: 25 december 2004, 23:01:46
Ort: Västsverige

Inlägg av Kjelle »

Jag menar med steglös Baud t.ex. 8192, 8193, 8194 o.s.v alltså
ändra Baud med ett stegs upplösning.
Steglös kanske var fel uttryck av mig, ensteg är bättre.


Kjelle
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Men varför måste du ställa i baud i steg om 0.0122%
(i fallet med 8192 -> 8193) när en serielina (med
vanligt 8n1 UART protokoll) accepterar 1-2% "fel"
i baudrate utan att tappa data ????

Det borde alltså vara OK om du har en lösning som
kan stega baudrate i steg om ca 1%, t.ex 8192 -> 8274
(bara för att ta ett exempel)...

Så varför den väldigt fina upplösningen ?
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

I vilket operativsystem? I windows kan man nog glömma det, dock har man lite bättre förutsättningar i lunix/unix.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Inlägg av arvidb »

Du behöver en UART som kan klockas m.h.a. en timer. Jag behövde 500 kbaud i en liten dator som kör Linux på en Etrax LX100-processor (32 bit, 100 Mhz, ingen FPU). Det enklaste där blev att aktivera drivrutinens stöd för extern klocka, och hänga på en 4 MHz-kristall externt. Drivrutinen hade inget stöd för timer-klockning.

I en AVR/PIC kan det nog vara mycket enklare att använda en timer för att få "steglös" baudrate.

Arvid
Kjelle
Inlägg: 972
Blev medlem: 25 december 2004, 23:01:46
Ort: Västsverige

Inlägg av Kjelle »

Sodjan:

Jo dom lägre hastigheterna typ 8192 är säkert inga problem.
Tar jag och delar 115200/14 får jag 8228 och det hamnar inom feltoleransen så det lär säkert fungera bra.

Men vill jag läsa högre hastigheter mellan t.ex. 28800 och 38400
så blir det problem.
115200/3 = 38400
115200/4 = 28800
Bilfabrikanter vill försvåra för amatörer att komma in på databussarna
så därför kan dom välja kanske 31200 som hastighet och då faller
toleransen direkt.
Sen kör dom inverterad bitsföljd och bitsvärde men det är inte svårt att
fixa till.

Björn:

Det var intressant om det går med Linux.
Själv kan jag bara Windows miljön och programera i VB.
Kanske du kan utveckla mera ?

Kjelle
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Tyvärr vet jag inte så mycket om det, men jag håller själv på med ett enkelt OBD interface till BMW'n och den använder ISO 9141-2 med en datarate på 10.4 Kbaud samt 1 baud och i övrigt som vanlig RS232 kommunikation (fast 12V och 0v nivåer).
När jag började kollade jag på olika alternativ där jag hade valet att antingen använda en processor (AVR/PIC) för att skapa olika hastigheter eller också ett "dumt" interface med bara nivåomvandling, då hittade jag information om att det inte gick att skapa i Windows miljö pga multitaskingen men i linux är det lättare då man kan köra i realtidsläge och få ful kontroll.

Jag har inte gjort program för kommunikationen själv så jag vet inte hur det är programmerat utan jag hittade ett program för linux som funkar för mina enkla krav.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Inlägg av mri »

Kjelle: Jag har pysslat en del med RS-232 och UARTen under DOS, Windows och Linux man jag har aldrig hört eller läst om något annat sätt än att konfigurera Baud Rate Divisor registret, som ju delar ner 115200. Åtminstone inte standard UART kretsarna som sitter i PC'n.
Det finns speciella UART kretsar som garanterat fixar jobbet. T.ex. använde jag en gång ett kort med 4 portar som vardera hade 256 byte FIFO. Men det kortet hade egna drivrutiner, etc.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Vanliga FTDI usb->seriall chip har jag för mig klarar nästan valfri baudrate.
Skriv svar