|
|
View previous topic :: View next topic |
Author |
Message |
Ken Guest
|
Trouble using 16f628a…. |
Posted: Sat Dec 31, 2005 7:45 am |
|
|
Hi all,
Here are my two questions…
1. Can I use TX pin of the USART as I/O if I’m only using it RX pin?? Should I remove xmit pin declaration like this #use rs232(baud=2400, rcv=PIN_B1) to do so??
2. Can I use MLCR/RB5 pin as I/O(source or sink current to drive LED)…..if yes, then how do I reset the uC??
Thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Dec 31, 2005 12:32 pm |
|
|
Quote: |
1. Can I use TX pin of the USART as I/O if I’m only using it RX pin??
Should I remove xmit pin declaration like this #use rs232(baud=2400,
rcv=PIN_B1) to do so?? |
If you do that, the compiler will make a software UART on Pin B1.
You can't have one pin as a hardware UART pin and the other pin
(Pin B2) as an i/o pin. This is due to a hardware limitation of the PIC.
The PIC is not as flexible as we would like it to be.
So if you want a hardware UART, you must declare both pins in the
#use rs232() statement. Example for 16F628A:
#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1, ERRORS)
Quote: |
2. Can I use MLCR/RB5 pin as I/O(source or sink current to drive LED)…..if yes, then how do I reset the uC?? |
In the 16F628A, in the Configuration bits section (in Special Features of
the CPU), it says if you disable MCLR, then:
Quote: | 0 = RA5/MCLR pin function is digital Input, MCLR internally tied to VDD |
I've done this with a 16F628 by using the NOMCLR fuse setting with CCS
and it still resets properly. You just can't reset it with some external
circuit (such as a pushbutton). But you don't normally do that, anyway.
If you're using a high voltage programmer, such as any of the ICD or
ICD2 units, as well as Mach-X, Warp13a, etc., then they will put about
13 volts on the MCLR pin during programming. Whatever circuit you've
attached to the MCLR pin must be isolated from the Vpp voltage which
is applied during programming. You will need to design a circuit to
do this. This restriction doesn't apply if you're using a Low Voltage
programmer (usually homebuilt). |
|
|
Ken Guest
|
|
Posted: Sat Dec 31, 2005 2:56 pm |
|
|
Hi PCM programmer,
Thanks a lot...I appreciate your help....
So far I've been using
#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1), whats the difference between the below one...
#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1, ERRORS)
Thanks again |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
Ken Guest
|
|
Posted: Sat Dec 31, 2005 11:04 pm |
|
|
My last question...
I was going to use PortB to drive 7 segment display....but since TX pin of the USART is not going to set free, I will use some pin of PortA for software USART!! Can I make MCLR/RB5 pin as RX input??
Another problem...I'm will be using RB0/INT pin as input for external interrupt, at the same time I will be sending data for 7 segment display using output_b() function, how can I make it work beacuse outport_b() will send a whole byte of data so RB0/INT pin will become output, which I really don't want!!
Thanks |
|
|
Ttelmah Guest
|
|
Posted: Sun Jan 01, 2006 3:27 am |
|
|
This is down to TRIS.
In CCS, there are three operating 'modes' for tris control. The default (standard_io), has the pins change direction, when accessed. If you output a byte, the tris for the whole register gets set. However you can take control of the tris register yourself. If you select #use fixed_io(b_outputs=PIN_B1,PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6,PIN_B7)
Then the tris BITS are cleared for the top seven bits, and the bottom bit is set, making this pin an input. You can then output a byte on the port, and only the top seven bits of the byte, will actually be output, leaving B0, to operate as an input. You can do the same, with #use fast_io(b), and then setting tris, with set_tris_b(0b00000001);
Best Wishes |
|
|
Ken Guest
|
|
Posted: Sun Jan 01, 2006 4:51 am |
|
|
Thanks...what about my first question.
Regards |
|
|
Ttelmah Guest
|
|
Posted: Sun Jan 01, 2006 6:29 am |
|
|
On the UART, declare a normal #use RS232 statement, with both pins declared. Otherwise the software UART will be used. You can then use the TX pin _as an input_, by changing the TRIS for this pin to '1' (this overrides the peripheral use of the pin). Alternatively, turn off the transmit 'side' of the UART, by clearing the TXEN bit, and you can then use the bit as I/O.
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
|