Eenvoudige bitrate converter

Weet iemand toevallig een slimme/handige manier om een datastroom van

4800 bps (8 bits, geen pariteit, 1 stopbit) naar 38400 bps (idem) te converteren? Het hoeft maar 1 richting op, dus geen buffer en/of overflow problemen. Op TTL niveau is prima.

(Twee oude modems back-to-back had ik al bedacht, maar vind ik net al te simpel, daarnaast is dat RS232 en het gaat hier om NMEA, dus wordt het interfacen alsnog ingewikkeld ;-)

-- ted

Reply to
Ted Lindgreen
Loading thread data ...

De eenvoudigste, goedkoopste en snelste oplossing lijkt mij een microcontrollertje te gebruiken. Bijv. een PIC of AVR, dan ben je voor een paar aan onderdelen euro klaar.

Reply to
Dombo

OK, heb je nog iets meer info, misschien?

-- ted

Reply to
Ted Lindgreen

Wat bedoel je precies met "daarnaast is dat RS232 en het gaat hier om NMEA"? RS232 is een definitie van spanningsnivo's op de lijntjes, en NMEA(0183) is een protocol. Dat gaat dus over de bytes die verstuurd worden en wat ze te betekenen hebben.

Of bedoel je dat de seriele verbinding op TTL nivo is in plaats van RS232?

Van veel NMEA devices kun je de baudrate overigens wel instellen. Is er een reden waarom je dat niet wilt?

Reply to
Rob

"Ted Lindgreen" schreef in bericht news:4b0953d3$0$22936$ snipped-for-privacy@news.xsall.nl...

duur

formatting link

minder duur ;-)

formatting link

Voor zelfbouw moet je even zoeken naar het juiste IC type.

Maurits

Reply to
Maurits

NMEA definieert ook de lijntjes en wel als current-loop en opto-coupled. Soms lukt het wel RS232 direct met een NMEA apparaat te koppelen, maar het blijft houtje-touwtje en aardlus problemen (lees: rare storingen) liggen op de loer. Ik ga dus zowiezo rommelen met de aanpassing en dan is TTL of RS232 lood om oud ijzer, eigenlijk is TTL dan zelfs simpeler.

Helaas kun je de baudrate van veel NMEA devices juist niet aanpassen, de standaard was 4800. Met de komst van AIS is daar nu ineens 38400 bijgekomen.

Het gaat hier om heading-informatie van een autopilot, deze geeft alleen 4800bps, naar een AIS-transceiver en die wil het perse op

38400bps hebben. Beide dus niet instelbaar, helaas.

-- ted

Reply to
Ted Lindgreen

"Ted Lindgreen" schreef in bericht news:4b0966e6$0$22940$ snipped-for-privacy@news.xsall.nl...

Een mooi compact model:

formatting link

Maurits

Reply to
Maurits

Het idee is dat je microcontroller neemt waarvoor je een programmaatje maakt die de data die op een seriële port ontvangen wordt met 4800bps weer verzend met 38400bps. Je zult hiervoor naast wat solderen ook een stukje moeten programmeren. De software die je hiervoor nodig het is in de meeste gevallen gratis te krijgen, en een kabeltje om de microcontroller vanaf de parallel poort te kunnen programmeren heb je ook zo met spullen uit de oude rommel doos gemaakt.

Uiteraard vergt dit wel wat meer zelf werkzaamheid dan een kant-en-klaar oplossing (het is immers nl.hobby.elektronica), maar het is zeker geen rocket science.

Reply to
Dombo

Die modems moet je dan wel kunnen instellen, en dan heb je nog geen telefoonlijn etc. Dat is nog niet zo eenvoudig te maken.

Met een CPU met 2 seriële poorten kan het goed, wel wat eenvoudig programmeren vereist. Als je het betrouwbaar wilt hebben kun je het best een fatsoenlijke UART gebruiken die ofwel in een processor zit, of los is. Softwarematige UARTS zijn meestal minder nauwkeurig, startbit detectie gaat bij echte UARTS vaak beter.

Ben je iets voor in een boot aan het bouwen?

P.

Reply to
P.

Dit is geen bitrate convertor. Hij heeft iets nodig met 2 poorten.

P.

Reply to
P.

Met name voor de ontvangende kant is een UART handig, voor de verzendende kant kan je het ook met bit-banging (eentjes en nulletjes direct vanuit de software naar buiten sturen), hoewel veel microcontrollers ook naast een UART ook nog wel een voorziening hebben om een seriële datastroom (SPI achtig) op een pin naar buiten te sturen. Een microcontroller die dit in zich heeft is voor de hobbyist al voor minder dan ?2,- te krijgen, bijv:

formatting link

Reply to
Dombo

"Ted Lindgreen" schreef in bericht news:4b0966e6$0$22940$ snipped-for-privacy@news.xsall.nl...

Die RS232 naar current loop conversie en vice versa is toch al een behoorlijk oud kunstje. Ik heb me daar ooit wel eens mee bezig gehouden. Te lang geleden om alle details nog paraat te hebben maar ik herinner me wel dat het nou ook weer niet vreselijk moeilijk was. Ik sloot er destijds een Teletype mee aan op een PC. Het ding was drie straten verder nog te horen als hij stond te stampen op zijn 110Bd maar ik kon printen. Ik zal morgen eens kijken of ik er nog iets van kan vinden.

De conversie zou het gemakkelijkst kunnen met een zelfstandig werkende UART die in split Baudrate kan werken. Ik denk daarbij bijvoorbeeld aan AY-5-1013. Je hebt dan nog een Baudrategenerator nodig (CD4020, CD4040 of CD4960 met een kristal) maar veel meer ook niet. De vraag is alleen of deze oude jongens (de AY-5-1013 en dergelijke dus, niet de CMOS) nog ergens te koop zijn. De UARTs of USARTs van vandaag moeten bijna altijd met een micro bedreven worden. Meestal zitten ze er zelfs in.

Micro's met ingebouwde split Baudrate ken ik niet. Het komt er dan op neer dat je moet kiezen tussen een micro met twee USARTs of een met één (ontvang-)UART waarbij je de transmitterkant in software moet regelen. Een micro met twee USARTs is pas echt een atoombom om een mug uit te schakelen en als je toch moet programmeren kun je net zo goed de hele conversie in software doen. Dat is nogal wat werk, echt te veel voor een tussendoortje, maar je kunt wel met een kleine, 8-pins micro volstaan. Toch lijkt het me voor iemand die geen ervaring heeft in het programmeren van micro's en daar ook niet in verder wil, al gauw minstens één brug te ver.

Wat ik me al schrijvende afvraag, is, of dit probleem niet bij veel meer eigenaars van dit soort apparatuur speelt. Als dat zo is, kun je misschien lotgenoten vinden en samen naar een oplossing zoeken. Dan kun je allicht ook kosten delen.

petrus bitbyter

Reply to
petrus bitbyter

snipped-for-privacy@lapje.tednet.nl (Ted Lindgreen) wrote: | Weet iemand toevallig een slimme/handige manier om een datastroom van | 4800 bps (8 bits, geen pariteit, 1 stopbit) naar 38400 bps (idem) te | converteren? Het hoeft maar 1 richting op, dus geen buffer en/of | overflow problemen. Op TTL niveau is prima.

Ik zou een microcontroller gebruiken, b.v. een Atmel ATtiny2313. Deze heeft 1 ingebouwde UART, die je voor de 38400 bps kant kunt gebruiken. De 4800 bps kant moet je dan softwarematig doen.

--
Dick Streefland                      ////                      Altium BV
dick.streefland@altium.nl           (@ @)          http://www.altium.com
--------------------------------oOO--(_)--OOo---------------------------
Reply to
Dick Streefland

Dat lijkt me zeer onverstandig. Ik zou eerder de 38400 bps kant softwarematig doen.

Een softwarematige uart heeft slechtere startbit detectie. Ontvangst is dan minder betrouwbaar.

P.

Reply to
P.

Ik zou geen software uart maken. Er zijn genog processoren met 2 uarts. De software is zo simpel als maar kan zijn.

In een semi-taal:

instellen op bitrate; while forever { lees uart4800; send uart38400; }

Als het professioneel moet zijn kun je er nog een watchdog bijzetten. Da's echt alles. Slechts een paar regels code.

P.

Reply to
P.

P. wrote: | Dat lijkt me zeer onverstandig. Ik zou eerder de 38400 bps kant | softwarematig doen.

Dat kan ook ja, maar dan moet je geen langere interrupt handlers hebben.

| Een softwarematige uart heeft slechtere startbit detectie. Ontvangst | is dan minder betrouwbaar.

Dat hoeft niet, het hangt er vanaf hoe slim je de software maakt. Een

4800 bps signaal is langzaam genoeg om betrouwbaar te kunnen samplen.
--
Dick Streefland                      ////                      Altium BV
dick.streefland@altium.nl           (@ @)          http://www.altium.com
--------------------------------oOO--(_)--OOo---------------------------
Reply to
Dick Streefland

Dat kant en klare schemaatje wat ik gaf, doorscrollen onderaan de pagina, heeft ook galvanische scheiding dmv optocouplers. Ideaal ivm isolatie en aardproblemen. Om voor zoiets eenvoudigs een uPC te nemen gaat wel ver.

Maurits

Reply to
Maurits

Dat schemaatje geeft een RS232-RS485 converter, geen bitrate converter en doet dus niet wat gevraagd wordt.

Voor het gevraagde is een uC de eenvoudigste oplossing. Nadeel is wel dat je moet gaan programmeren, maar die code is heel eenvoudig zoals eerder al hier gezegd (nu moet daar nog initialisatie van alle uC onderdelen bij, maar het principe klopt).

2 losse UARTs pakken op verschillende baudrates gaat niet, je moet ze instellen en de data er tussen verschuiven en dat moet toch weer met een controller.

Met een kleine FPGA of grote CPLD lukt het ook, maar dat is gewoon meer werk en duurder dan een uC met 2 interne UARTs (in hardware of software).

Ook met losse TTL chips zal het wel lukken, maar een eurokaart vol chips wire-wrappen/vol bakken is niet meer van deze tijd. Als het echt moet en fouttolerantie is niet belangrijk, dan moet het wel met wat minder chips lukken, maar richting halve euro kaart zit je zo.

--
Stef    (remove caps, dashes and .invalid from e-mail address to reply by mail)

The best defense against logic is ignorance.
Reply to
Stef

Nee die UART waar petrus bitbyter mee kwam die kan dat wel. Zelfs met 1 exemplaar. Alle instellingen en toegangen zijn als discrete pennetjes uitgevoerd en kun je goed zetten zonder processor.

Maar dat is wel een geval van "opa vertelt". Ik had zo'n ding ook in gebruik in mijn eerste microcomputer. Maar dat is meer dan 25 jaar geleden. Ik denk niet dat ze nog te koop zijn.

(hij had het over de AY-5-1013 maar die had een vervelende voedingspanning, de opvolger AY-3-1015 had dat probleem niet)

Reply to
Rob

Het kastje met de RS232 current loop convertor heb ik uit een hoekje op zolder opgediept. Veel zit er niet in. Een dubbel voedinkje, een paar op-ampjes, een paar torren en een paar opto-couplers. Plus nog een beetje R en C natuurlijk. Alles op één eurokaart terwijl een kwart al genoeg zou zijn. Alleen, geen schema :(

Tja, die AY-3-1015 en hun soortgenoten waren in het begin van het micro tijdperk erg in trek. Als ik me goed herinner werd er onder andere een toegepast in de Elekterminal. Ik heb ze trouwens ook in professionele apparatuur van die tijd toegepast gezien. Maar of en zo ja waar die oude jongens nog te koop zijn.... Aan de andere kant, je hebt er maar één nodig.

Een andere antieke oplossing is een oude micro met een losse USART. Een Z80 processor met een CTC, een SIO en een enkele EPROM. Die SIO is trouwens een hels ding om te initialiseren, maar ook weer niet zoveel moeilijker dan de huidige USARTs in een micro. Alleen, het is wel erg zwaar geschut voor zo'n simpel probleem.

Een software UART hoeft helemaal niet onder te doen voor een hardware versie. Zeker niet voor dit simpele probleem. Elke micro heeft wel een timer aan boord waarmee je de tijd in gelijke stukjes van 1/16 keer de bittijd van

4800Bd kunt hakken. Neem hiermee drie samples uit het midden van elk bit. Beter doet een gewone hardware UART het ook niet. Voor de transmitter is het nog eenvoudiger, want die hoeft alleen maar een de uitgangspin op tijd te veranderen. Als je de datasheet van een (oudere) UART ernaast ligt, kun je het hele algoritme er zo uit aflezen. Om redenen van stabiliteit zou ik wel een micro met een kristal nemen.

Ik vind het best een interessante, maar niet interessant genoeg om daar echt uren in te gaan steken.

petrus bitbyter

Reply to
petrus bitbyter

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.