|
|
View previous topic :: View next topic |
Author |
Message |
D-Kens
Joined: 09 May 2005 Posts: 35 Location: Toulouse (France)
|
Setting software UART pins on a 18F4620 |
Posted: Tue Sep 22, 2009 8:41 am |
|
|
Hi...
We are currently using an architecture based on a PIC18F4620, with hardware UART on pin C6/C7, and a software UART configured on pin C1/C2.
To add some new features to that prototype, we would like to interface with another RS232 driven device using a dedicated UART. How many software UARTs can I set on this PIC, and what are the available/recommended pins for that purpose ?
I found nothing about that in the datasheet (maybe I didn't look carefully enough).
Regards,
Christophe. |
|
|
Ttelmah Guest
|
|
Posted: Tue Sep 22, 2009 2:54 pm |
|
|
Data sheet has nothing to do with it. The software UART, is a CCS function, _software_, not 'hardware' (which is what the data sheet covers....).
You can use any pins at all, but with the following limitations:
1) Obviously hardware pin limitations apply, so you can't use a pin that is 'input only' for an output. Similarly signalling level limitations, will be those of the hardware pin.
2) You can only be sending/receiving on any _one_ pin at a time. If you want to receive from two sources, these _must_ do things at different times. While sending, you can't receive (and will miss any data that arrives while you are sending).
This later is the 'killer' for most things. Unless the comms are completely under your control, and 'one thing at a time', the software UART won't help at all.
A search here, will find timer interrupt driven software UARTs (I posted one only a few weeks ago), and these can be modified to support multiple channels, and simultaneous send/receive, but obviously this involves moe and more processor time being involved. Another alternative is to add external hardware UARTs (Maxim, and Phillips both do units, that can be interfaced with relatively few pins).
Best Wishes |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Sep 22, 2009 3:06 pm |
|
|
You can have several software UARTs and they can go on most i/o pins.
Limitations: You can't put a Tx pin on an input-only pin. An open-drain
pin will require an external pull-up resistor when used as a Tx pin.
But be aware that CCS uses software delay loops to count off the bit
intervals in their software UART library code. This requires that the
full attention of the PIC be concentrated on the Tx or Rx pin, while it's
transmitting or receiving a byte. This means it can't be interrupted.
This also means it's half-duplex. (The hardware UART is full duplex).
One improvement that can be done is to use the INT0 pin (on pin B0)
as the Rx pin, to detect the start bit of an incoming byte, and then have
it go to an #ext_int routine to receive the byte with a getc() statement.
Additonal information:
CCS uses the 3rd type of software UART method, as listed on this page:
http://www.8052.com/faqs.phtml?FAQ=124758
---
Edit:
Ttelmah did his post while I was typing mine in. I'll leave mine up anyway. |
|
|
Guest
|
|
Posted: Tue Sep 22, 2009 6:20 pm |
|
|
There is a way but you need more hardware.
Using multiple MAX-3100 external SPI uarts might help you if your C3,4,5
pins are free or can be shared. |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Tue Sep 22, 2009 6:50 pm |
|
|
The MAX-3100 is not easy to interface to in interrupt mode. Personally I like the NXP UART chips better. |
|
|
D-Kens
Joined: 09 May 2005 Posts: 35 Location: Toulouse (France)
|
|
Posted: Wed Sep 23, 2009 2:18 am |
|
|
Ttelmah wrote: | Data sheet has nothing to do with it. The software UART, is a CCS function, _software_, not 'hardware' (which is what the data sheet covers....). |
Ouups, I did it again... ! Seems I had a blonde moment : you're obviously right. Dunno why I was expecting to find something about that topic in the datasheet.
Ttelmah wrote: | A search here, will find timer interrupt driven software UARTs (I posted one only a few weeks ago) |
Lately, I didn't check the forum on a regular basis. I'll search for your code and try to understand/adapt it... Thanks !
PCM Programmer wrote: | This requires that the full attention of the PIC be concentrated on the Tx or Rx pin, while it's transmitting or receiving a byte. This means it can't be interrupted. |
Yeah, I'm aware of that problem. As stated in my first post, I'm yet using one software UART for some requests, and I noticed that I couldn't send/receive datas with it while having a timer interrupt enabled. But I guess it's not such a big deal if the PIC is the only master in the system and decides whenever it wants to communicate with its peripheral : I can have it fully dedicated to one COM at a time. It'll be more tricky if the peripherals can send messages at any time...
PCM Programmer wrote: | One improvement that can be done is to use the INT0 pin (on pin B0) as the Rx pin, to detect the start bit of an incoming byte |
Sounds like an idea !!! I'm not sure to use that interrupt, but I think I'll suggest that B0 is used as RX pin for one software UART : it'll be up to me then to use (or not) this functionnality, depending on the requirements of my software.
PCM Programmer wrote: | Ttelmah did his post while I was typing mine in. I'll leave mine up anyway. |
Well, better read the same twice advice than read nothing at all... And you added some extra informations that weren't in Ttelmah's post.
Ok, thank you both for your answers : guess I'll try to gather a little bit more informations before wiring a first prototype and making tests, but that's yet a god basis for hours and hours of brainstorming. Thanks also to the others for their feedback about using external devices : I'm trying to avoid that solution at the moment, but I'll keep it in mind if the software UART is too limitative.
Regards,
Christophe. |
|
|
Ttelmah Guest
|
|
Posted: Wed Sep 23, 2009 2:58 am |
|
|
The 'multiple reply while posting' thing, is very common. I do it with PCM Programmer a lot. Usually have three quarters typed a post, get a phone call, then push 'send', to find that PCM had posted five minutes before me. This time I beat him!...
The timer based code, was about implementing RS232 on a chip that hadn't got a hardware UART.
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|