[CP2102] Ring

[INTRO]
Op het moment ben ik bezig met een klein projectje, waarbij ik een CP2102 (USB naar UART) verbind met een AVR-microcontroller voor communicatie. De AVR wordt gevoed via een kleine Li-Ion accu (100 mAh). Deze accu kan eventueel opgeladen worden via de USB-poort.
De AVR moet ook kunnen communiceren via de UART met de PC.

[SITUATIE]
Ik wil graag de volgende opties inbouwen :
A) Via USB : laden accu
B) Via USB : laden accu en communiceren met AVR
C) Stand-alone : alleen AVR actief

In situatie A) zal de AVR niet actief zijn. In situatie B) is identiek aan situatie A, alleen nu is de AVR ook actief, zodat er gecommuniceerd kan worden met de computer. In situatie C wordt via een druktoets de AVR geactiveerd. Dit doe ik door met de druktoets tijdelijk de voeding naar de AVR in te schakelen. Vervolgens stuurt de AVR een digitaal relais aan om de voeding daarover te laten lopen (accu naar AVR).
Wordt nogmaals op de toets gedrukt, dan zal de AVR dit opmerken en het relais weer uitschakelen.

Situatie A) en C) zijn niet het probleem. Het gaat me juist om situatie B). Het is de bedoeling dat de CP2102 een signaal (wake-up) afgeeft (via de PC) naar de AVR. Dit zou dan via een pin van de CP2102 moeten gebeuren.

Maar, welke pinnen zijn hiervoor te misbruiken, zonder dat het effect heeft op de serieele communicatie ? Ik had eerst de RI-pin in gedachten, maar na lang puzzelen, kwam ik erachter dat deze PIN als INPUT wordt gezien voor de CP2102. Ik moet dus een OUTPUT-pin van de CP2102 gebruiken, die ook via de PC is aan te sturen.
DE CP2102 heeft 3 OUTPUT-pinnen : DTR, TXD en RTS.
TXD wordt al gebruikt voor de communicatie. Dan blijven DTR en RTS over.
Maar kunnen deze pinnen wel aangestuurd worden. En zo ja, zonder dat het effect heeft op de aansturing van de data-communicatie. Ik neig om de RTS-pin te gaan (mis)bruiken in dit geval.

[VRAAG]
Welke pin (DTR / RTS) is te misbruiken voor de gezochte situatie, zonder dat het effect heeft op de communicatie ?
Misschien onnodig om te melden, maar ik doe het toch : Ik wil de betreffende pin aansturen via Visual Basic.

Van elk bezoek aan CO leer ik weer meer...

Voor de arduino wordt traditioneel de dtr gebruikt. Deze hangt via een condensator aan de reset.

De dtr werd heel vroeger ook wel eens gebruikt in bepaalde IR ontvangers. (Als voeding voor de tssop)

Weet niet meer hoe het in VB zat, maar kon dacht ik wel.

GMT+1
Arco

Special Member

Normaal stuurt de PC een RTS, waarop de peripheral reageert met een CTS (indien handshaking wordt gebruikt)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Bedankt voor de reacties.
Ik heb net een oud (1999) boek gevonden "PC-poorten onder Windows". Daarin is een voorbeeld te vinden waarmee de DTR wordt aangestuurd om een LED aan/uit te schakelen via VB. Ik ga het denk ik met de DTR-pin doen.

-=[EDIT]=-
Hmpf,. het wordt moeilijker dan gedacht. Ik heb net een CP2102 gepakt en aan de USB geknoopt. Beide pinnen zijn hoog. Dat wordt het dus niet. Ik ga even verder sleutelen, om te kijken hoe ik het alsnog kan oplossen.

Vreemd, ik heb verder niets achter de CP2102 hangen en ik meet met de multimeter dat RI, DCD, DTR, CTS, RTS en DSR allemaal 3.3V geven. Vreemd, omdat enkele pins juist INPUT zijn. Op een OUTPUT kan ik nog wel een 3.3V verwachten, maar ook op een INPUT ?

Van elk bezoek aan CO leer ik weer meer...
EricP

mét CE

Het is maar wat je 'normaal' vindt... In printerland was het heel gebruikelijk om DSR te gebruiken (DTR had niet zoveel zin).

High met Henk

Special Member

uit je eigen datasheet:

CTS 23 3 D In Clear To Send control input (active low)
RTS 24 3 D Out Ready to Send control output (active low)
DSR 27 3 D in Data Set Ready control input (active low)
DTR 28 3 D Out Data Terminal Ready control output (active low)
DCD 1 3 D In Data Carrier Detect control input (active low)
RI 2 3 D In Ring Indicator control input (active low)

Ofwel alles ACTIVE low. Ik weet niet hoe je gemeten hebt, maar alles is nu dus inactief. Als je met een multimeter gemeten hebt, moge het probleem wellicht duidelijk zijn

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???

Eerst twijfelde ik over de multimeter, maar heb vanmiddag -vanwege een andere reden- een verse 9V batterij ingedaan. Herhaald meten, over de genoemde pinnen levert identieke resultaten op : 3.3V.
(De GND-pin is rechtstreeks verbonden met de GND van de USB-poort)

Dit is de CP2102-module die ik gebruik :
http://www.uploadarchief.net/files/download/usb_cp2102.jpg
Niets bijzonders, en het minimale om mee te kunnen werken.
Deze module heb ik gisteren notabene getest, door een ESP12 te flashen. (Heb ik ook nog veel (beginners)vragen over, maar dat terzijde.)

Van elk bezoek aan CO leer ik weer meer...
High met Henk

Special Member

maar heb je nu nog steeds met een multimeter gemeten
een oscilloscope met een geheugen is wel fijn om bitjes te zien. een la kan ook

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???

Scoop inmiddels aan de CP2102-module gehangen. De module zit alleen aan de PC. Er hangt niets verder aan de UART-zijde van de module. Ook na controle met de scoop blijven DSR, RTS, CTS, DTR, DCD en RI hoog. Ik zie geen data of wat dan ook langsvliegen.

Vervolgens de proef op de som genomen, door een ESP12 aan de UART-zijde te knopen. Metingen blijven onveranderd. Laat ik de ESP12 een reset uitvoeren, dan zie ik kort data over de RX-pin vliegen. De datapakketjes kan ik niet tot in detail bekijken, want dat gaat te snel. Is ook niet zo belangrijk. Waar het om gaat is dat die andere pinnen continu hoog zijn / blijven, terwijl dat niet zo zou mogen. Dus, zowel met scoop als met multimeter gemeten, blijken de pinnen continu hoog te zijn. En het maakt niet uit of er een UART-device aan hangt of niet.

Ik begin bijna te denken dat er iets is met de drivers, die misschien voor een standaard instelling zorgen op de pins. Of, zou het kunnen zijn dat de signalen over UART geinverteerd worden verzonden ? Maar dat zou voor de INPUT-pinnen alsnog geen hig mogen opleveren... Hmm,. vreemd.

Ik denk dat ik het als volgt ga oplossen : USB aangesloten, dan automatisch laden en AVR actief. Geen USB, dan via druktoets relais inschakelen. Dus,. optie A) laten vervallen.

Van elk bezoek aan CO leer ik weer meer...

Hoe belangrijk is het dat die AVR loskomt van je batterij?

Je kunt ook de AVR in slaapstand zetten, en wakker later worden op drukknop of seriele poort-activiteit.

Dan heb je geen extra pinnen van je CP2102 nodig, geen extra software op de PC, en waarschijnlijk is de stroom door de AVR in slaapstand minder dan de zelfontlading van je Li-ION.

Ik dacht hetzelfde :) Persoonlijk zou ik als dat enigszins mogelijk is nog een stap verder gaan en een microcontroller met ingebouwde USB nemen.
Als je met b.v. Arduino werkt zijn er een paar details om met de hand uit te puzzelen waarna dat soort controllers ook heel zuinig slaapt.

Let op dat de seriëele lijn in beginsel hoog is als hij inactief is, terwijl de Tx uit de CP uit is hij laag zal zijn. Ook kun je zo een I-lek krijgen over de Tx van de AVR naar de unpowered CP als de controller op de batterij werkt.
Overigens geld deze conventie bij mijn weten ook voor de handshaking, dit is overeenkomstig de metingen. Zie verder Google.