CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

PIC16F877 + USB

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Guest








PIC16F877 + USB
PostPosted: Tue Feb 23, 2010 3:57 pm     Reply with quote

Hi everyone

I am having a project with PIC16F877. I want to use ex_usb_serial.
My question: Does this example support PIC16F877? If yes, I hope if
there is any illustration about this example, but if it did not support it, I
hope to you can tell me any way how to make it.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Feb 23, 2010 4:02 pm     Reply with quote

The ex_usb_serial.c example does not support the 16F877.
It supports the 18F4550. You should buy that PIC. Then you
can test the example code.
microp



Joined: 23 Feb 2010
Posts: 6

View user's profile Send private message

PostPosted: Tue Feb 23, 2010 4:47 pm     Reply with quote

thanx for ur reply

Is there any other way to do that.
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Tue Feb 23, 2010 11:20 pm     Reply with quote

Not directly. You can use interface chips from FTDI quite readily, though. They connect to the PIC via a serial port.
microp



Joined: 23 Feb 2010
Posts: 6

View user's profile Send private message

PostPosted: Wed Feb 24, 2010 1:01 am     Reply with quote

Thank you for your reply John.

I have one last question. How can I make 2 serial ports in the PIC16F877 in code?

I want to use the default serial for tx/rx from the camera and the assigned serial to send data to PC.
husam



Joined: 17 Feb 2010
Posts: 10
Location: jordan

View user's profile Send private message

hi microp
PostPosted: Wed Feb 24, 2010 11:02 am     Reply with quote

try this example for pic 16f877a
Code:

// for transmitter
#include <16f877a.h>
#fuses xt,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_D0, rcv=PIN_D1, STREAM=COM_A, DISABLE_INTS)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STREAM=COM_B, DISABLE_INTS)

void main()
{
set_tris_b(0x00);
output_b(0x00);

while(TRUE)
{

if (input(PIN_A0)) // for port d rs232
{output_high(PIN_B0);// sending started 
fprintf(COM_A,"ABC");
delay_ms(1000);
output_low(PIN_B0);// sending end
}


if (input(PIN_A5))// for port c rs232
{output_high(PIN_B0);// sending started 
fprintf(COM_B,"xyz");
delay_ms(1000);
output_low(PIN_B0);// sending end
}

}}


and for receiver
Code:

#include <16f877a.h>
#fuses xt,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_D0, rcv=PIN_D1, STREAM=COM_A,DISABLE_INTS)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STREAM=COM_B,DISABLE_INTS)
/*
** kbhit() function return 1 when data deliverd to rx in pic
**in this case no need for interrupts
*/

int i;
int1  flag;
char RX[10] ; // if the array size doesn't enough the All data will be lost


void Zizo() // data delivered to port d
{
output_high(PIN_B0);// data comes right now
RX[i++] = getch(COM_A); // we use RX[i++] instead of for loop to save addresses in RX
flag=1;
delay_ms(100);
output_low(PIN_B0);// data end right now
}


void dodo() // data delivered to port c
{
output_high(PIN_B0);// data comes right now
RX[i++] = getch(COM_B); // we use RX[i++] instead of for loop to save addresses in RX
flag=1;
delay_ms(1000);
output_low(PIN_B0);// data end right now
}

void main()
{

while(TRUE)
{
if (kbhit(COM_A))
Zizo();

if (kbhit(COM_B))
dodo();

if(flag==1)
 { flag=0;
 i=0;
 }

if(RX[0]=='A') // by port d   rs232
output_high(PIN_A0);


if(RX[0]=='x') // by port c  rs232
output_high(PIN_A1);

}
}


i hope this helped you
microp



Joined: 23 Feb 2010
Posts: 6

View user's profile Send private message

PostPosted: Wed Feb 24, 2010 11:32 am     Reply with quote

Thanx husam I will try it and I will tell you the result.

Thanx again.
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Wed Feb 24, 2010 3:30 pm     Reply with quote

Getting two software-based serial ports to work properly is extremely difficult, unless you have some way to be sure that only one of them sends data to the PIC at a time. You obviously can't allow one port to hog all the processor's time if the other one might be talking. Sending data out isn't much of a problem, as then the processor can control the timing.
microp



Joined: 23 Feb 2010
Posts: 6

View user's profile Send private message

PostPosted: Wed Feb 24, 2010 5:37 pm     Reply with quote

John i want one as Tx/Rx and the other just Tx
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Thu Feb 25, 2010 6:56 pm     Reply with quote

I'm still not totally sure whether you intend to have two software-based serial ports, or just one along with another port made from the regular UART.

The trouble with having more than one half duplex port--whether you recieve or transmit--is that you may get the situation where the TX line is sending out a character, and while it's in progress, a character comes in on the RX line. One repetitive timer running at 9.6KB is easy enough, but syncing two (or more!) of them where the offset between the two is unpredictable, is just about impossible. I can imagine doing it with a ferociously fast timer at 4X the baud rate (38.4KB) and sampling the inputs plus sending out any outputs that may exist, but I'm not sure that's workable. The 16F877 may not be the right part for this job.
microp



Joined: 23 Feb 2010
Posts: 6

View user's profile Send private message

PostPosted: Fri Feb 26, 2010 10:05 am     Reply with quote

John I think you are right but that depends on the application.

I need one serial to send & rec. from camera and the other serial to send the stream to the PC. On my project I think that depends on the camera if I send a sequence of bits to it & if it sends back some of data not all of it, I can synchronize the operation easily without any issues.
But if the camera send all data one time I need an external memory to
store it. After it finish streaming I will send all data to PC. I think this is only the solution.

I hope if anyone got another solution to put it here.
Ttelmah
Guest







PostPosted: Fri Feb 26, 2010 10:18 am     Reply with quote

Do a search here.
I have in the past posted the core of a 'timer interrupt' based software serial.
With this, it is possible to code two full duplex serial streams if needed.

Best Wishes
microp



Joined: 23 Feb 2010
Posts: 6

View user's profile Send private message

PostPosted: Fri Feb 26, 2010 10:21 am     Reply with quote

thanx Ttelmah for your reply.

I will do the search.
husam



Joined: 17 Feb 2010
Posts: 10
Location: jordan

View user's profile Send private message

PostPosted: Fri Feb 26, 2010 10:25 am     Reply with quote

hi,
Check this site
http://www.electronics123.com/s.nl/it.A/id.2825/.f
It has suitable camera which can easily interface with pic & you can also
control the baud rate for the camera. The output of camera is a group of
packages can be stored using malloc() function then to mmc or external eeprom.

Quote:

but if the camera send all data one time I need an external memory to
store it after it finish streaming I will send all data to PC. I think this is
only the solution.

I think it will work but you have to consider 1: use big memory to store
the data from camera [200KByte or more] 2: check the clock frequency
of eeprom to avoid loss of data because of different speed [clock freq.
must be => baud from camera].
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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