hallo
Ik ben me aan het verdiepen in rs232 omdat we daar binnenkort een projecht voor school mee moeten maken.
Ik heb een vraag over asynchroon verzenden van data je stelt bijde apparaten in op dezelfde snelheid start stopbit parity en dan kun je beginnen volgens mij. Nu was mijn vraag hoe kan de ontvanger de start en stopbits herkennen als hij bijvoorbeeld midden in een datastroom zit hoe kan hij dan weten of de bit een start stop bit is of een stuk data.
Of is het zo dat eerst de ontvanger aangesloten moet zijn en dan pas beginnen met zenden.
kan iemand mij er een verhelderend antwoord op geven.
Groeten Johan
wietn
Waar rook is is er.......geen componentje meer
Google levert algauw deze links:
http://www.lammertbies.nl/comm/info/nl_RS-232.html
http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html
enz...
grtz
Ben toevallig net bezig RS232 uit te lezen (signaal van m'n verwarmingsketel).
Er zit steeds een pauze tussen, dus startbit,7 of 8 databits stopbit en dan een relatief lange pauze voordat er weer een startbit komt. Door die pauze kan er herkend worden wanneer een datablok is afgesloten.
[Bericht gewijzigd door Zonnepaneeltje op ]
Die lengte van die pauzes valt wel mee - anders haal je bij een bepaalde bitrate niet het bijbehorend aantal characters/sec. Maar eh... tellen is toch niet zo moeilijk? Als je inderdaad full-speed staat te blazen over een lijn en er gaat een keer wat fout, kan het ook een aantal characters duren voordat eea. weer synced is. Als het wat rustiger gaat, gaat dat sneller.
treinfreak
Look at me, I can't fly.....
eeeeeh,
Ik zou zeggen, uC (een PIC) met ingebouwde USART, registertjes instellen en blazen maar met die data.
De PIC is in te stellen op weet ik hoeveel verschillende baudrate's en kan met of zonder par-bit worden gekozen. Ook kun je instellen of je voor asynchroon of synchroon gaat.
Moet het full-duplex. Geen probleem, instellingen alles het zelfde en je knalt gewoon je uitgaande data op een ander registertje en klaar. Het een en ander op interuptbasis en het is nog efficient ook.
Ik heb zelf voor een project op school de RS232 gebruikt en het is 5 min programeren voor de PIC, een MAX232 ic aansluiten om alles op het goede niveau te brengen en dan klaar. (tja, dan de PC-software onder Windows nog!!)
Bij RS232 moeten beide zijden wel aangesloten zijn als je begint, anders moeten de signalen op RTS/CTS en DTR/DSR aangeven dat je niet mag zenden. In de oude RS232 definitie (van bijvoorbeeld Digital) betekenen de DTR/DSR dat je apparaat aanstaat. RTS/CTS betekent dat het apparaat data kan ontvangen. Zijn die signalen er niet dan niet zenden...
Verder wordt de synchronisatie van een frame, dat is startbit, databits, paritybit, stopbit(s) samen, bepaald vanaf het startbit. In de UART zit een kloksignaal dat per bit 16 pulsen levert, bij de neergaande flank van het startbit wordt begonnen met tellen en na 8 pulsen het eerste dataniveau gesampeld. Dat niveau moet dus voor een startbit laag zijn, anders was het een stoorpuls. Daarna wordt telkens na 16 klokpulsen gesampeld, je zit dan telkens ongeveer midden op een bit.
Omdat je de UART hebt ingesteld met het aantal databits (8), het aantal stopbits (1) en het paritybit (N) weet de UART dat er totaal 10 bits komen (Startbit, 8 Databits en 1 Stopbit) en weet dus ook wanneer een frame compleet binnen is en er een nieuw startbit verwacht kan worden. Om synchronisatie problemen te voorkomen bij grote datapakketten wordt er ook vaak gezonden met 2 stopbits en ontvangen met 1 stopbit op dezelfde verbinding, dan zit er altijd minimaal 1 bit ruimte tussen 2 frames.
Op 8 mei 2007 20:34:28 schreef kweenie:
hoe kan de ontvanger de start en stopbits herkennen als hij bijvoorbeeld midden in een datastroom zit hoe kan hij dan weten of de bit een start stop bit is of een stuk data.
In eerste instantie zal de ontvanger starten op het eerste bit dat startpolariteit heeft. Grote kans dus dat dat niet het startbit is. Als dat zo is (en dus fout), is het bit op de plaats waar de ontvanger nu zijn stopbit verwacht, ook niet het stopbit. De polariteit zal daar dus vaak niet kloppen, misschien door toeval de eerste paar keer wel, maar het zal een keer mis gaan.
De ontvanger zal dan opnieuw gaan starten op het NU eerstvolgende bitje met startpolariteit.
Dit gebeurt dus steeds als het stopbit niet klopt.
Uiteindelijk zal de ontvanger werkelijk op het startbit starten, en daarna zal het stopbit altijd kloppen en herstart hij niet meer maar blijft de datastroom correct volgen.
Als er een pauze in de datastroom komt, is er niets aan de hand - het stopbit is dan gewoon heel lang - het volgende bit is het startbit van de nieuwe data. De ontvanger zal daarop starten en dat is correct.
Als de ontvanger toevallig in een data-pauze begint heeft hij dan ook geluk: de eerste keer starten zal dan meteen zijn op het echte startbit. Maar ook middenin de stroom aangezet komt hij er uiteindelijk altijd uit.
Er is een uitzondering, dat is als er data wordt verstuurd die zo regelmatig of speciaal gevormd is dat een ander paar (of nog meer paren) bits ook altijd overeenkomt met start- en stopbits. Dan kan de ontvanger op de verkeerde keuze blijven "hangen".
Bedankt iedereen dit is precies het antwoord wat ik verwacht nu kan ik mooi verder met het maken van de schakeling.
Groeten Johan