USB Serieel verbinding met een microcontroller

Ik ben een schoolproject aan het ontwikkelen waarbij 1 microcontroller moet communiceren met een computer via USB. Dit hoeft slechts op een lage snelheid. (9600 baud)
M'n groepsleden hebben me hiervoor een stapeltje Chinese USB-serieel convertors in handen gedrukt. Echter krijg ik de communicatie tussen mijn microcontroller en de PC niet werkend met deze convertors.

Dit is een scoopbeeld van een A die verzonden wordt vanaf de PC met de Chinese convertor:
http://www.stijnsontrop.be/dump/Chinees-Achar.jpg
En dit is een beeld van dezelfde A met een FT232:
http://www.stijnsontrop.be/dump/FT232-Achar.jpg

Het zal wel duidelijk zijn dat de kwaliteit van een FT232 wat hoger is dan die Chinese rommel. Spijtig genoeg zit ik nu met die Chinese dingen opgescheept en moet ik proberen om daar iets werkend uit te krijgen.

De microcontroller herkent geen characters uit het signaal van de Chinese convertor. Data van de microcontroller wordt door de PC herkend als allerlei vage tekens. Met een FT232 werkt alles prima.

Is er nog iemand die deze problemen kent met dergelijke convertors? Of nog beter: iemand die weet hoe ik dit kan oplossen?

Alvast bedankt,

Stijn

De Chinese convertor geeft een RS232-signaal, hoewel niet helemaal de juiste signaalniveaus. De FT232 geeft een TTL-niveau.

Het TTL-niveau kun je direct inlezen op een hardware UART.

Het RS232-signaal moet eerst omgezet worden naar TTL, bijvoorbeeld met een MAX232. Daarbij wordt het meteen geïnverteerd.
Een goedkope oplossing zou nog kunnen zijn om gewoon een transistor te gebruiken om het signaal te inverteren... wel het signaal naar 5V begrenzen!

Ik heb dezelfde. Er is een oplossing:

Raam open. Ding naar buiten. Raam dicht.

Drivers werken ruk, TTL niveau en beweert RS232 te zijn. Je ziet ook dat er hij geinverteerd is. Verder lijk je wel je startbit te missen als ik vergelijk met de FTDI.

Ik zie dat er 2 modellen ook in omloop zijn. Een met level converter en een zonder. Die ik heb heeft alleen een blob.

Beetje offtopic maar toch: DX heeft bluetooth serial modules voor 6.60$ die eigenlijk prima werken. Direct met de standaard win7 driver ene compoort op 9600baud. Het enige nadeel is dat je alleen via de hardware serieele kant dmv AT commands de naam, pin en baud kan veranderen. Maar het kost dan ook maar een paar euro...

[Bericht gewijzigd door Ganzz op 23 november 2011 23:29:25 (47%)

-

Op 23 november 2011 23:23:17 schreef Franzki:
De Chinese convertor geeft een RS232-signaal, hoewel niet helemaal de juiste signaalniveaus. De FT232 geeft een TTL-niveau.

Beide zijn TTL niveau, niks rs232! Alleen is er een geinverteerd.
Gewoon even een invertertje ertussen zetten en kijken of de Chinese het dan wel doet.

-edit- Dat van het startbit heb ik ook gezien, is dat misschien een trigger probleem?

-edit- Nog iets, bijna alle USB/RS232 zijn RUK bijna allemaal buiten spec. en dan maakt het niks uit waar ze vandaan komen.
Kijk je naar de scoop beelden is afgezien van het startbit de Chinese converter kwa level een mooier(lees beter/hoger) 5V signaal.

[Bericht gewijzigd door henri62 op 23 november 2011 23:32:24 (22%)

Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.

Ik zie die Chinese naar 6V gaan... Weliswaar in de buurt van TTL-niveau. Maar de polariteit is wel volgens RS232.

RS232 kan al met +3V/-3V... alleen hier is dat dus opgeschoven t.o.v. de nul volt.

[Edit] Volgens mij lees ik de scoopbeelden verkeerd af qua spanning.... Hoeveel Volt per division is het nu?

[Bericht gewijzigd door Franzki op 23 november 2011 23:35:47 (22%)

Op 23 november 2011 23:31:29 schreef Franzki:
Ik zie die Chinese naar 6V gaan... Weliswaar in de buurt van TTL-niveau. Maar de polariteit is wel volgens RS232.

TTL niveau is: L<=0,4, H>=2.4 V (zend zijde) dus eigenlijk moeten we het daar niet over hebben, want dat is nog slechter!

Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.

@ Henri62

Ja en nee, RS232 is geïnverteerd, ze hebben alleen de spanning niet aangepast. Het werkt soms namelijk wel. Dus of het is een geïnverteerde TTL uitgang, of een serieele uitgang met niet de officiële spanningen, maar het is het in ieder geval allebei net niet.

Of het een trigger probleem is zou ik niet direct gokken. Dat je chinees krijgt komt omdat je geen stopbit hebt en je data zorgt soms toevallig voor je startbit...

[crap, ik schrijf allebei blijkbaar altijd fout...]

Op 23 november 2011 23:31:29 schreef Franzki:
PS: Let op ... de schaal van de scoop is 1.2V per division.

Nee, de trigger staat op 1.2V, de V/div is 1V.
Je ziet ook de spanning readout, de ene 4.5V, de andere 5V

[Bericht gewijzigd door Henry S. op 24 november 2011 21:39:22 (22%)

-

Op 23 november 2011 23:34:44 schreef Ganzz:
@ Henri62

Ja en nee, RS232 is geïnverteerd, ze hebben alleen de spanning niet aangepast. Het werkt soms namelijk wel. Dus of het is een geïnverteerde TTL uitgang, of een serieele uitgang met niet de officiële spanningen, maar het is het in ieder geval allebijei net niet.

Omdat de spanning niet klopt is het RUK, precies zoals ik zeg.
Als het wel toevallig wel werkt is het dom toeval. Ook de slew-rate, maximale stroom er is niks wat er bij de meeste USB-RS232 klopt.

Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.

Die Chinezen verkopen dit spul voor PDA's en telefoons en daarmee werkt het meestal wel omdat die over het algemeen niet kritisch naar het signaalniveau kijken..

Bij een microcontroller gebruik je voor RS232-communicatie normaal gesproken een MAX232 zodat het signaal geïnverteerd wordt en de levels kloppen.

Als je TTL gebruikt, is dat niet nodig. Die sluit je direct op de UART van de Pic aan.

De Chinese convertor kun je trouwens wèl direct gebruiken als je software UART gebruikt en dan zelf in de software inverteert.

Op 23 november 2011 23:38:44 schreef Franzki:
Die Chinezen verkopen dit spul voor PDA's en telefoons en daarmee werkt het meestal wel.

Fijn voor je klanten! Wat staat er in de handleiding?
"Als U geluk heb en U sluit het kabeltje aan werkt het ook"

Daar moeten ze een import verbod op maken, onder het motto van een milieu delict, die kunnen rechtstreeks de kliko in.

De Chinese convertor kun je trouwens wèl direct gebruiken als je software UART gebruikt en dan zelf in de software inverteert.

Soms kun je de uC pin kwa polariteit omschakelen op de ingebouwde UART.

En dan sluit je een keer een echte (voor zover je er een kunt vinden) converter op aan die wel de juiste spanning geeft: Dan is je controller naar de filistijnen.

Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.

Ik heb er hier een paar (goedkope) liggen... en die Chinezen documenteren het inderdaad slecht. Sommigen geven 5V... andere 3V. En ik heb ook een duurdere die misschien wel gewoon RS232-levels geeft. Maar ik heb geen scoop om te testen.

Overigens heb ik de kabeltjes niet om een RS232-interface te hebben die 100% volgens de normen werkt. Ik heb ze om een 'el cheapo' verbinding met een PIC op te zetten.

Zelf ga ik er vanuit dat je een RS232-poort op een microcontroller-project gewoon met een MAX232 maakt... dan kan hij vermoedelijk met een grote variëteit aan signaalniveaus overweg.

Wow, wat een hoop antwoorden!

Ik werk niet met een MAX232 omdat het plan was om deze convertors te ontdoen van de DB9 en ze te solderen in ons project.
Ik heb nu de RX en TX door een 7404 lopen.
De microcontroller ontvangt de data van de usb/serieel omzetter prima.
Microcontroller->PC wilt nog niet lukken, er blijven rare tekens binnen stromen.

Edit, en dat laatste leek dus een driver probleem. Convertor er uit en er terug in en het werkt wel. Rare Chinezen...

Mocht er iemand een suggestie hebben voor een driver die wel goed werkt (Windoos, OSX en eventueel Linux zou fijn zijn) dan hou ik me aanbevolen!

Alvast bedankt allemaal!

Voor de driver moet je gewoon even uitzoeken welke chipset er in de convertor zit.

Vervolgens kun je op de website van de fabrikant (van de chipset) de nieuwste downloaden.

Deze dingen doen zich voor als een PL2303 van Profilic. Maar als je de driver van Profilic installeert doen de convertors helemaal niks. Als je de RX en TX doorverbind krijg je geen echo in de terminal. Nu heb ik een of andere rare driver van het mini cdtje dat er bij zat geinstalleerd ("810driver") en deze werkt "af en toe".

Heb je wel de goede communicatie-instellingen in de terminal staan?

Het is misschien geen PL2303! (Maar vaak met hetzelfde vendor en product id) Je kunt de driver voor de 'CH341 USB-SERIAL BRIDGE' downloaden op de site van de fabrikant: http://www.wch.cn/download/list.asp?id=65

Een andere PL2303 'clone' driver is deze, hier heb ik ooit een vergelijkbare dongle (pcb zag er hetzelfde uit) op windows aan de praat gekregen (deze werkte wel met de linux pl2303 driver maar niet de windows pl2303 drivers (device gezien, maar geen TX en RX activiteit)): http://arailla.info/USB_BF.rar

Ik zou beide drivers eens proberen, kans dat een clone pl2303 dongle met 1 van de 2 werkt is behoorlijk groot.

Niet helemaal mee eens...

Er zijn inderdaad verschillende chipsets en ook daar zijn de Chinezen nooit helemaal duidelijk over.

Maar ik zag ergens een 810-driver (via Google) en die was dan weer voor een convertor met een Prolific chip.

Het kan trouwens wel zo zijn dat de drivers elkaar nu een beetje in de weg zitten. Heb je de oude drivers allemaal verwijderd?

Op 24 november 2011 00:01:37 schreef Stijn S:
Mocht er iemand een suggestie hebben voor een driver die wel goed werkt (Windoos, OSX en eventueel Linux zou fijn zijn) dan hou ik me aanbevolen!

Linux drivers werken over het algemeen gewoon goed. Zeker voor iets wat veel gebruikt wordt als een PL2303 driver.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

De driver-hell zal ik dan maar laten oplossen door wat groepsleden.
Ik maak gebruik van een MSP430F2132 microcontroller. Bij z'n hardware UART is het blijkbaar niet mogelijk om de polariteit om te keren.
Ik zal dan maar eens uitzoeken hoe ik een software UART geprogrammeerd krijg.

Niet aan beginnen. Een inverter of torretje+R kost maximaal 25 cent.
Daar kun je niet tegen werken met een SW uart oplossing, dan heb je twee keer ellende.

Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.

Het zoeken naar een software UART heb ik ondertussen ook al opgegeven, dat kost echt te veel moeite. Zo hebben de pennen waar nu de usb/Serial aan hangt geen pinchange interrupts en das dan "redelijk vervelend" programmeren.
Het zal inderdaad een convertortje bestaande uit 2 torren en 4 weerstanden worden, kost toch bijna niks.

Je kan in plaats van een USB <->RS232 converter ook een GSM kabel kopen.Als je zoekt op CA-42 ,da's een seriele communicatie kabel voor een oud model Nokia telefoon.Die kabels worden volop aangeboden tegen belachelijk lage prijzen.Hier zit een 'soort' PL2303 chip in de USB stekker,aan de andere kant van de draad zit een rare connector voor de Nokia telefoon en die kun je er gewoon afknippen.
Hier heb je dan Rx en Tx op TTL nivo en kan direkt op een UART worden aangesloten zonder inverteren.
Goed,klinkt leuk, maar er zijn toch een paar maaren :Er zit namelijk geen echte PL2303 chip in,maar een kloon.Ze leveren een CD'tje bij met driver software en da's een oude versie van de Prolific driver.
De nieuwe Prolific drivers testen of er een 'echte' PL2303 chip inzit,en als dat niet zo is weigert deze te werken.
Je kunt dus voor deze kabeltjes nog wel een betrouwbare driver vinden voor Windows XP,maar niet voor W7 of Vista.
Ik heb ook al CA-42 kabels gehad met een andere soort IC erin van Akmicro.Je weet dus eigenlijk niet wat je gaat krijgen.

Je weet dus eigenlijk niet wat je gaat krijgen.

En dat is het grootste probleem. Ik heb hier nog 10 stuks van dx liggen van vorig jaar waar een PL-2303HX & ADM211 op zit. Die werken prima, maar als ze op zijn moet ik weer opzoek ...

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Frederick E. Terman

Honourable Member

Ik vind het wel heel vreemde schermfoto's.
Om te beginnen, de "A" is in ascii 0100 0001 (met 8 databits), of 100 0001 (met 7 databits). Er zijn dus 5 nullen op een rijtje.
In het eerste schermplaatje is het lange blok inderdaad vijfmaal zo lang als de korte pulsen. Maar in het tweede plaatje is het lange blok maar viermaal zo lang!

--
Volgens de RS232 omschrijving is de 'stop' polariteit (dus wat er in rust op de lijn staat) dezelfde als waarmee de '1' verzonden wordt. We weten ook dat het LSB als eerste verstuurd wordt; op de scoop staan de bitjes dus van laag naar hoog, 'verkeerdom' dus.

Kijk ik nu naar het bovenste plaatje, dan zie ik, na de rustperiode, het volgende:
start, 1, 0, 0, 0, 0, 0, 1, 0, stop_____ (waarbij stop uiteraard overgaat in de rustpolariteit).
Dat is dus een correcte 'A' (0100 0001) met 8 databits en geen pariteit, en met dezelfde polariteit als normaal op een RS232 verbinding tussen computers of van een computer naar een modem.
De plus is hoog genoeg, meer dan 3V; het enige wat afwijkt van de RS232 omschrijving is dat de 'min' nul volt is. Maar goed, dat doet de compoort van mijn laptop ook.

Het tweede plaatje heeft de rustpolariteit omgedraaid. Dat is OK, maar voor je daarmee naar 'buiten' gaat moet je nog inverteren. Klassiek was dat bv. met een 1488/1489 paartje.
Afgezien daarvan, maar er wel rekening mee houdend, staat daar dus:
start, 0, 1, 0, 1, 1, 1, 1, 0, stop_____
Dat is dus 0111 1010, een 'z' (kleine letter). Ik krijg daar met geen mogelijkheid een hoofdletter 'A' uit, of ik nu de bitjes inverteer of de volgorde omdraai.

Lang verhaal samengevat:
Plaatje 1: Correcte A, correcte spanning en polariteit om rechtstreeks aan de RS232 connector (een DB9 bijv) te verbinden.

Plaatje 2: Géén A, eerder een z; geïnverteerde spanning, moet nog via een inverter/line driver voordat je naar de DB9 gaat.

Keramisch, kalibratie, parasitair: woordenlijst.org

Toen ik van de week even snel keek, kreeg ik we wel 2 keer een A uit, alleen miste bij een een startbit, maar ik kan er naast zitten. Verder nog dit

klik

Dus als je win7 hebt en een officiële profilic converter, kun je al de Chinese weg gooien...

-