View previous topic :: View next topic |
Author |
Message |
mariemee12
Joined: 16 Apr 2014 Posts: 7
|
uart pic18F pic16F |
Posted: Wed Apr 16, 2014 8:33 am |
|
|
hi
please i need help ....
well i am using pic c compiler for the first time ...
i made a usb communication between pc and pic18F4550 but .. i can't made the uart communication between pic 16F877 and the pic18F .. do you have some examples even a simples ones .. like reading 8 inputs from 16F and and display their statements in the hyperterminal ..
waiting any help thnx )))) |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Wed Apr 16, 2014 9:57 am |
|
|
Hi,
Your request is a bit confusing? You mention 'uart communication between pic 16F877 and the pic18F', but later also mention 'display their statements in the hyperterminal', which is a bit contradictory......
What do you want to do, (1) send data back and forth between the 16F and the 18F using the UART's, or (2) send data back and forth between the 16F (or the 18F) and the PC using the UART? Big difference, hardware-wise, in your request.
On a hunch, what version of Proteus are you using?
John |
|
|
mariemee12
Joined: 16 Apr 2014 Posts: 7
|
|
Posted: Wed Apr 16, 2014 11:07 am |
|
|
well .. firstly thank you so much for your interest .
Secondly , i gonna explain to you my project in general ..
i must create a communication between pc and machines by using 2 cards :
master card (18F) communicate with{ pc(by usb) , and slave card (16F) by uart } and i gonna create a gui in vb.net .
So at this stage am using hyperterminal to display the result and until now I failed to make the communication uart between the 2 pic
mariem |
|
|
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Wed Apr 16, 2014 11:34 am |
|
|
you need to show your code as a starting point. |
|
|
mariemee12
Joined: 16 Apr 2014 Posts: 7
|
|
Posted: Wed Apr 16, 2014 11:52 am |
|
|
Here are the two codes. But excuse me if there are many mistakes because like i told you it's my first code with pic c compiler.
Code: | #include <16F877.h>
#FUSES HS,NOWDT,NOLVP
// Fuses ??
// HS High Speed donc quartz > 4 Mhz ds notre cas 20 M
// MCLR on va utiliser la pin 1 comme entrée de reset
// NOWDT watch Dog Timer Désactivé
// NOLVP No Low voltage programming ( ce pic se programme a 13.1v)
#use delay(clock=20M) // frequence 20 Mhz
#include <math.h>
#use rs232(uart1,baud=9600, bits=8, parity=N,xmit=pin_c6,rcv=pin_c7)
#include <string.h>
int8 data;
void main()
{
delay_ms(100);
while(true)
{
input_d();
data = get_tris_D();
puts ( data );
}} |
*****
Code: |
#include <18F4550.h>
#FUSES HS,MCLR,NOWDT,NOLVP
// Fuses ??
// HS High Speed donc quartz > 4 Mhz ds notre cas 20 M
// MCLR on va utiliser la pin 1 comme entrée de reset
// NOWDT watch Dog Timer Désactivé
// NOLVP No Low voltage programming ( ce pic se programme a 13.1v)
#use delay(clock=20M) // frequence 20 Mhz
#include <math.h>
#include <usb_cdc.h> // framework USB Microchip
#use rs232(uart1,baud=9600, bits=8, parity=N,xmit=pin_c6,rcv=pin_c7)
int8 data;
void main(void){
while(true)
{
while(true)
{
if (kbhit()) //wait until a character has been received
data = getc();
printf (data);
}
}} |
|
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Wed Apr 16, 2014 4:20 pm |
|
|
Hi,
I realize that English is probably not your native language, but the 'clarification' of your earlier post raises more questions than it answers! So, let me ask you several direct questions:
1. You want your 18F device to communicate with the PC via USB, right?
2. You want your 16F device to communicate with the PC via serial communications using the UART, right?
3. There is no 18F to 16F communications directly, or vice versa, correct? It's all PIC <> PC, but never PIC <> PIC, is that right??
John |
|
|
mariemee12
Joined: 16 Apr 2014 Posts: 7
|
|
Posted: Thu Apr 17, 2014 1:26 am |
|
|
yes .. sorry coz my french is better than my english
1. yes i want my 18F device to communicate with the PC via USB (done)
2. and i want my 18F device (master) to communicate with the 16F device (slave) via UART .
16F device cant comunicate with pc directly ..
i wish that it is clear now .. |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Thu Apr 17, 2014 8:29 am |
|
|
Hi,
Frankly, it's not much more clear !
So, this is what you want to do? I'll try a graphic:
PC <USB> 18F <Serial> 16F <Serial> PC
So, reading the graphic from left to right:
The PC communicates with the 18F via USB
The 18F communicates directly (PIC to PIC) with the 16F via serial
The 16F communicates with the PC via serial
Is that correct? If so, why in the world are you doing this? Please tell us in detail your 'concept'.....
John |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9244 Location: Greensville,Ontario
|
|
Posted: Thu Apr 17, 2014 8:57 am |
|
|
John
I've read and re-read this and here's what I get.
The 18F PIC is the 'master' and talks to the 16F PIC to get 'data'. It then transfers that 'data' to a PC via the USB peripheral.
so...
PC<---USB---> PIC18F <---RS-232---> PIC16F
I'm only using 'RS-232' as one method of interPIC communications, though it would be the easiest to code/test/confirm...
Jay |
|
|
mariemee12
Joined: 16 Apr 2014 Posts: 7
|
|
Posted: Thu Apr 17, 2014 12:21 pm |
|
|
exactly like Jay say
PC<---USB---> PIC18F <---RS-232--RS485---> PIC16F <--->industrial machine
my problem now is how to create a communication between PIC16F and PiC18F ..
please help :( :( |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1355
|
|
Posted: Thu Apr 17, 2014 12:42 pm |
|
|
For serial input:
Look at the file ex_sisr.c in your examples folder in the PICC install directory. This provides interrupt driven serial data that you can process at your leisure.
For serial output:
You can simply send the serial data using putc, printf, etc. The manual has descriptions and examples on how to use these. |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Thu Apr 17, 2014 2:04 pm |
|
|
Hi,
Physically, how far apart will the 18F and the 16F be located?
John |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19545
|
|
Posted: Fri Apr 18, 2014 1:31 am |
|
|
Yes.
Ezflyr's question is critical.
First, understand what RS232 is (and isn't....). The PIC does not use RS232!....
The PIC chips talk async serial TTL. Attach a MAX232, and this becomes 'RS232' signalling, but it is not what the chips themselves talk...
RS232 is a voltage signalling standard over which you can _send_ async serial data. You can equally well (better in many cases), use other standards like RS485 etc..
Now if the two chips are inches or feet apart, you don't want/need to get involved in 'RS232' at all. Just directly connect the async TTL signal.
If distances are longer, then RS485 is superior, but requires more wires, or only half duplex (one way at a time) communication.
You need to start as a 'multi step' process.
First decide how far you need to send, and at what speed?.
Half duplex, full duplex?.
Then from this decide what signalling standard needs to be used.
Then with that decided, start by getting the PIC's themselves talking 'on the bench' without any signalling hardware between (just connect the async serial directly).
Only once you have this working, move on to adding the signalling hardware, and stretching the distance involved.
Single steps at each point.
Best Wishes |
|
|
mariemee12
Joined: 16 Apr 2014 Posts: 7
|
|
Posted: Fri Apr 18, 2014 2:24 am |
|
|
thank you all for your interesting..
well i want to send for about 1300 m.
baud=9600
Half duplex.
now i start by getting the PIC's themselves talking 'on the bench' without any signalling hardware between. my problem is here because like i told you it's my first program with picC compiler.
thank you jeremiah i gonna take a look at the file ex_sisr.c ) |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9244 Location: Greensville,Ontario
|
|
Posted: Fri Apr 18, 2014 5:55 am |
|
|
I seriously doubt you can go 9600 baud for 1.3 kilometers, though I haven't checked the data sheet for newer RS-485 devices.
The actual wire you use has a BIG impact upon the speed vs distance, so you MUST read the datasheets, follow mfr. guidelines about material/devices.
That being said, since the PIC 18F is the 'master', it's easy to use RS-485 for your project. Examples are in the examples folder that CCS supplies. I suggest getting the code to work 'on the bench' with say, 3-6 meters of wiring.
Once you've confirmed it does, then add wire as required. Typically a spool of 4C telco is 305 meters.4 spools = 1300M.
There are other ways of building 'long distance - hard wired' serial links, the one I did 20 years ago (still in operation), was about 15 miles on good old solid copper wires. Speed was only 24 Baud. Yes, that's 24 bits per second. There is a tradeoff of speed vs distance, something you must figure out.
hth
jay |
|
|
|