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

Problem interfacing 2 PIC

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



Joined: 31 Jan 2009
Posts: 59

View user's profile Send private message

Problem interfacing 2 PIC
PostPosted: Tue Jun 28, 2011 4:56 am     Reply with quote

PIC 18F2550 -is writer

Code:

#include <18F2550.h>

#use delay(clock=48 000 000,RESTART_WDT)

#use rs232(baud=115200  ,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#define START_COMM PIN_B0
#define CLOCK_COMM PIN_B1
#define DATA_COMM PIN_B2

const int DELAY_CLOCK=100;
const int NR_BITS_TO_SEND=16;//max 65535 unsigned and signed +/-32767

void init_comunications () {
     output_high ( START_COMM );
     output_high ( CLOCK_COMM );
     output_high ( DATA_COMM );
}
void send_output (int32 watt) {
     int counter = 0;
     output_low ( START_COMM );
     output_high(DATA_COMM);
     output_high(CLOCK_COMM);
     while (counter < NR_BITS_TO_SEND) {
         delay_us ( DELAY_CLOCK );
         output_low ( CLOCK_COMM );
         if ( bit_test ( watt, counter ) )
              output_low ( DATA_COMM );
         delay_us ( DELAY_CLOCK );
         output_high ( DATA_COMM );
         output_high ( CLOCK_COMM );
         //starting next clock signal
         counter++;
     }
     output_high(START_COMM);

}
void main () {
   
  init_comunications ();
while (true){
     send_output ( 525 );
delay_ms(10);





PIC 18F8527 is reader
Code:


#include <18F8527.h>
#use delay(clock=40 000 000,RESTART_WDT)
#use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7,bits=8,restart_wdt,timeout=250)
//rs 232 used only for test in proteus.. i wil not use it in real app

#define START_COMM PIN_E0
#define CLOCK_COMM PIN_E1
#define DATA_COMM PIN_B0

long read_serial () {
     int index = 0;
     long value = 0;
     if ( input ( START_COMM ) )
         while (input ( START_COMM )) {
         }
     while (!input ( START_COMM )) {
         if ( input ( CLOCK_COMM ) )
              while (input ( CLOCK_COMM )) {
                  if ( input ( START_COMM ) ) {
                       break;
                       break;
                  }
              }
         if ( !input ( DATA_COMM ) ) {
              bit_set ( value, index );
         }
         index++;
         while (!input ( CLOCK_COMM )) {
         }
     }
     return (value);
}
void main () {
     while (true) {
         printf ( "reading\r\n" );
         long td = read_serial ();
         printf ( "%Lu\r\n", td );

     }
}





i've done this because it seems that serial interrupts doesnt work,
i tryied int rda / rda2
int rtcc does works
and this is a faster and a better way to send data, no errors..
but i'm missing something.. can anywone help me a little bit here ?


this is the output from 2550





Last edited by noyz on Tue Jun 28, 2011 6:52 am; edited 1 time in total
temtronic



Joined: 01 Jul 2010
Posts: 9226
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Jun 28, 2011 5:27 am     Reply with quote

Quick comments.

You need to 'cleanup' your programs...to make it easier for us to read and figure out what you're doing.

1) get rid of any unused ISRs (like int_TIMER)

2) if you're not using serial then delete the use rs232(...)

3) get rid of any commented out lines ( // ...)

4) get rid of the setup_spi(..), again, you're not using it.
but if using it use the 'mode_0, mode_1' version as it's cleaner and 'industry standard' format.

5) always add the 'errors' option to the use RS232(...) for any program that uses the serial function.

Once that's cleaned up, what is it that you're missing ?

BTW the CCS included example 'ex_sisr.c' int the examples folder does work, 'everyone' has modified it for their programs.
noyz



Joined: 31 Jan 2009
Posts: 59

View user's profile Send private message

PostPosted: Tue Jun 28, 2011 6:52 am     Reply with quote

Take a look now, i've edited code.

And i know abous sisr but i am telling you it doesn't work, i've modified it for me.

I really need to try this, there is some strange thing that happens on serial, when i read and then try to draw to a screen a graph.
This doesn't have to do with reading.
The value read is ok, but the registers seem to be a little tricky.
...
Never mind.
I just need to make this code work.
So if i am not using uart. Then i will have no registry overwrite.
temtronic



Joined: 01 Jul 2010
Posts: 9226
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Jun 28, 2011 4:40 pm     Reply with quote

I just figured out you're using Proteus..


"//rs 232 used only for test in proteus.. i wil not use it in real app "

if true, then that explains most if not all of the problems you're having.

Get rid of Proteus as it's full of bugs, quirks, etc.

Cut code for real PICs, run them in the real world,you'll save youself dayze of grief !!
noyz



Joined: 31 Jan 2009
Posts: 59

View user's profile Send private message

PostPosted: Wed Jun 29, 2011 3:14 am     Reply with quote

Yes you may be right but this is a very simple test.
It should work this way.
I know that I am missing something
on the reading part.
One infinite loop:-?


Btw what I was telling you about sisr, was tested on MCU.
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