UART in PIC

Het ging toch over een PIC16F1847 naar USB?

Damn the torpedoes, full speed ahead!
Arco

Special Member

Ja, maar ik neem aan dat die serieele poort op dat bordje aan de ESP vast zit...

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

De vraag was met een PC, dat komt er ineens een ESP bij. Is dat voor de duidelijkheid?

Tussen een PIC en PC kan je gewoon een FTDI-interface/kabeltje gebruiken.

Damn the torpedoes, full speed ahead!
Bavelt

Golden Member

De verwarring komt misschien doordat ik in dit topic een vraag stelde, maar voortborduurde op een ander topic.

De casus: Ik heb een lichtkrant gemaakt, met een PIC16f1847 als microcontroller en MikroBasic als programma.
6 matrix Leds van 8*8.

Ik vond het al heel wat dat ik dat voor elkaar kreeg.

De te tonen tekst is echter als literal opgeslagen in het programma. Ik dacht het zou leuk zijn als de te tonen tekst van een externe bron komt.
Het liefst via Wifi of Bluetooth.

Vandaar dat de ESP32 ten tonele verscheen.
Maar om 'eenvoudig' te beginnen dacht ik om de tekst vanaf een PC of laptop te sturen.
Daarom ben ik nu bezig om deze tekst naar de PIC te brengen via UART van de PIC.
En daar strandde ik.

Ik heb weliswaar een oude Laptop met een oude, vertrouwde RS-232 seriële poort, maar wilde het via de USB doen vanaf mijn PC.
En ik dacht misschien kan ik dat boardje met de ESP32 er op gebruiken als USB-UART omzetter. Er zit ook een CP2102 chip op.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Dat ESP printje is bedoeld om aan een PC aan te sluiten, niet aan een microcontroller...
Je zult er e.e.a. aan moeten verbouwen als er een pic tussen moet... (serieel gaat nu direct van pc naar esp)

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

Golden Member

Ok, dan dus maar een CP2102 bestellen met USB socket.
Dan kan ik daarmee testen.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Tussen een PIC en PC kan je gewoon een FTDI-interface/kabeltje gebruiken.

Hoe moet ik me dat voorstellen? Zonder conversie USB - UART?
Of zit dat in het kabeltje (chip)?

[Bericht gewijzigd door Bavelt op zaterdag 22 februari 2020 22:21:09 (10%)

Fouten zijn het bewijs dat je het probeert..
marcob

Golden Member

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years
Bavelt

Golden Member

Daar zit dus een chipje in de plug.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

USB sluit je aan op een pic met USB poort, of op de UART via een USB naar UART omzetter als de CP2102
Voor testen voldoet ieder terminal programma. (bijv. HTerm )

Heb je misschien toevallig een voorbeeldje van MikroBasic i.c.m. de Uart Library?
M.a.w. hoe je op de juiste manier een Uart buffer uitleest?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Simpel. Uitgaande data verstuur je met UART1_Write_Text(...)
Inkomende data verwerk je in de interrupt routine, je stopt het in een buffer.

pic basic code:



CONST MAXBUFFSIZE = 64

Dim Buffer   As Char[MAXBUFFSIZE]
    BufWrPtr As Byte
    BufRdPtr As Byte

Interrupt:

If RCIF_bit Then
  Buffer[BufWrPtr] = RCREG
  Inc(BufWrPtr)
  If BufWrPtr > MAXBUFFERSIZE Then BufWrPtr = 0 End If
  RCIF_bit = 0
End If
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ah, dus zelf een inputbuffer maken, M.a.w. niet rechtstreeks uitlezen van een COM-porrt van bv een laptop.

In afwachting van een USD .> UART moduultje dat is besteld, kan ik e.e.a. testen.
Ik heb hier nog een oude laptop met RS-232 seriële poort. Een kabeltje heb ik ook nog wel.

Ik herinner me nog van vroeger dat je zo'n COM poort moest initialiseren met
het DOS Commando MODE COM1:9600,N,8,1,P

Dan de TX en RX aansluiten. Staat me wel bij dat ik destijds RTS (ready to Send) en CTS (Clear to send) op de plug moest verbinden.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik ziet dat je hier werkt met een interrupt. Je maakt hierdoor geen gebruik
van de routine UARTx_Data_Ready()?
(Die aangeeft dat er iets te lezen valt)

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Nee, dat heeft toch geen zin? (er is toch een interrupt als er een karakter binnenkomt)
Interrupt is altijd het beste, anders kun je karakters gaan missen, zeker bij hogere baudrate.

In main() kun je dan op je gemak bestuderen wat je allemaal hebt 'gevangen' in je buffer...

[Bericht gewijzigd door Arco op zondag 23 februari 2020 18:49:39 (21%)

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

Golden Member

Ik ga het uittesten. Een nieuwe uitdaging... ;)

Fouten zijn het bewijs dat je het probeert..

Een echte comport heeft de signalen geinverteerd en hoger niveau. Die switchen tussen plus en min 12V. Om die te koppelen aan een micro-controller moet je de signaal niveaus inverteren en op je juiste spanning brengen.

Als je een USB naar TTL seriele poort moduletje gebruikt dan kun je direct koppelen.

Bijvoorbeeld
https://www.ebay.com/itm/USB-To-RS232TTL-CH340G-Converter-Module-Adapt…

Bavelt

Golden Member

Zo'n ding had ik inmiddels al besteld. Maar zal wel even duren voordat het geleverd wordt.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik zag het MAX232 IC. Die converteert de RS232 naar TTL-UART, klopt dat?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Ja, maar met USB heb je daar dus niks aan...

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

Golden Member

I know, Maar om even met de RS-232 te testen vanuit mijn oude laptop
(Tot ik de USB-Uart heb ontvangen).
Dan kan ik in ieder geval de Uart in MikroBasic zelf proberen.

Fouten zijn het bewijs dat je het probeert..

Die MAX232 doet conversie van de signalen tussen RS232 niveau en TTL, en gebruikt een charge-pump om de benodigde + en - (bijna) 12 Volt voeding op te wekken uit 5V.

Er zijn een aantal varianten in omloop, maar de meeste hebben 2 ingangen en 2 uitgangen.

Lambiek

Special Member

Op 22 februari 2020 18:34:59 schreef Bavelt:
Ik heb weliswaar een oude Laptop met een oude, vertrouwde RS-232 seriële poort, maar wilde het via de USB doen vanaf mijn PC.

Ik heb het op deze manier opgelost, kijk op BLZ. 52.

https://www.circuitsonline.net/downloads/werken_met_profilab_expert_4.…

Dit kan direct op een seriële poort van je PC of via een USB/SERIEEL adapter via je USB poort. Bij mij werkt dat uitstekend, is wel via picbasic, maar dat moet ook gaan via MikroBasic lijkt mij.

Als USB naar serieel adapter gebruik ik deze.

https://www.allekabels.nl/rs232-kabel/4568/933/usb-a-naar-rs232-1.5-me…

Als je haar maar goed zit, GROETEN LAMBIEK.
Bavelt

Golden Member

Ik heb het op deze manier opgelost, kijk op BLZ. 52.

Wat grappig, via een Opto coupler! De PC817 is ook verkrijgbaar als PC827, daar zitten er meteen twee in.

Zit er in het kabeltje dat je gebruikt nog een actieve component?

Anders zou ik dit wellicht ook kunnen gebruiken: een snoerloze adapter van RS-232 naar USB. Ik had deze nog liggen.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Da's voor een keyboard/muis. Die zijn daar speciaal voor gemaakt. (keyboard/muis detecteert of 'ie voor USB slave of COM poort moeten spelen...)
Op een 'gewoon' apparaat gaat dat volgens mij niet werken...

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

Special Member

Op 24 februari 2020 11:06:01 schreef Bavelt:
Wat grappig, via een Opto coupler! De PC817 is ook verkrijgbaar als PC827, daar zitten er meteen twee in.

Het voordeel is dat het galvanisch gescheiden is. Arco heeft volgens mij ook eens zoiets gemaakt.

Zit er in het kabeltje dat je gebruikt nog een actieve component?

Ja, in de negen polige stekker zit een schipset. Je krijgt er ook een driver bij of je download er een.

Als je haar maar goed zit, GROETEN LAMBIEK.