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 support@ccsinfo.com

serial comminication
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

serial comminication
PostPosted: Fri Oct 06, 2023 5:01 am     Reply with quote

Hello
I am sending 5 bytes of data from PIC to PC. There is no problem. But I am sending 66bytes of data from my PC. I want to print that incoming data to the screen. It didn't work I send 66byte hex code from PC, for example ff 0d
Code:

#include <18F47Q83.h>
#use delay(crystal = 16MHz)

#pin_select U1TX=PIN_C6
#pin_select U1RX=PIN_C7
#use rs232(UART1, baud=9600, receive_buffer=256, parity=N, stop=1)

#define LCD_ENABLE_PIN  PIN_D2
#define LCD_RS_PIN      PIN_D0
#define LCD_RW_PIN      PIN_D1

#define LCD_DATA4       PIN_D4
#define LCD_DATA5       PIN_D5
#define LCD_DATA6       PIN_D6
#define LCD_DATA7       PIN_D7

#include <lcd.c>

#define SEND_DATA_SIZE 5
#define RECEIVE_DATA_SIZE 66

void SendTask(void)
{
   unsigned int8 i;
   char sendDataHEX[SEND_DATA_SIZE] = {0x1B, 0xE7, 0x01, 0x03, 0x0D};
   
   for(i=0;i<SEND_DATA_SIZE;i++)
   {
      putc(sendDataHEX[i]);
   }
}

void main()
{
  lcd_init();

    int1 doSend = TRUE;
   char receivedData[RECEIVE_DATA_SIZE];
   
   while(TRUE)
   {

      if(doSend)
      {
          SendTask();
         
          doSend = FALSE;
      }
     
     
      // PC'den gelen veriyi al
      for (int8 i = 0; i < RECEIVE_DATA_SIZE; i++)
      {
         output_high(PIN_C5);
         receivedData[i] = getc();
         lcd_gotoxy(i,1);printf("%02X ", receivedData[i]);
         output_low(PIN_C5);
         
      }
      doSend = TRUE;
     
   }
}

_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
Ttelmah



Joined: 11 Mar 2010
Posts: 19227

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 5:23 am     Reply with quote

One key thing. You need enable_interrupts(GLOBAL); at the start of your
main, or the receive buffer will not be working.
Can your LCD show this much?. You are printing 3 characters for each one
received, so the display would need 198 columns!....
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 5:34 am     Reply with quote

Yes I know. I fixed it. I press the PC screen. Or when I press the LCD, the character is printed in type T. 4x20 character LCD works fine. Now I corrected what you said. So why doesn't it run the SendTask() function after the er transaction? after for loop doSend = TRUE; I'm doing it.
Code:

#include <18F47Q83.h>
#use delay(crystal = 16MHz)

#pin_select U1TX=PIN_C6
#pin_select U1RX=PIN_C7
#use rs232(UART1, baud=9600, receive_buffer=256, parity=N, stop=1)

#define LCD_ENABLE_PIN  PIN_D2
#define LCD_RS_PIN      PIN_D0
#define LCD_RW_PIN      PIN_D1

#define LCD_DATA4       PIN_D4
#define LCD_DATA5       PIN_D5
#define LCD_DATA6       PIN_D6
#define LCD_DATA7       PIN_D7

#include <lcd.c>

#define SEND_DATA_SIZE 5
#define RECEIVE_DATA_SIZE 66

void SendTask(void)
{
   unsigned int8 i;
   char sendDataHEX[SEND_DATA_SIZE] = {0x1B, 0xE7, 0x01, 0x03, 0x0D};
   
   for(i=0;i<SEND_DATA_SIZE;i++)
   {
      putc(sendDataHEX[i]);
   }
}

void main()
{
  lcd_init();

    int1 doSend = TRUE;
   char receivedData[RECEIVE_DATA_SIZE];
   enable_interrupts(GLOBAL);
   
   while(TRUE)
   {

      if(doSend)
      {
          SendTask();
         
          doSend = FALSE;
      }
     
     
      // PC'den gelen veriyi al
      for (int8 i = 0; i < RECEIVE_DATA_SIZE; i++)
      {
         output_high(PIN_C5);
         receivedData[i] = getc();
         printf("%02X ", receivedData[i]);
         output_low(PIN_C5);
         
      }
     
      doSend = TRUE;
     
   }
}

_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 5:40 am     Reply with quote

And I also want to check if the RX is no longer receiving data, that is, if the data reception bus is empty. Is there such a flag? He did the retrieval. finished. I'll check it later.,
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
Ttelmah



Joined: 11 Mar 2010
Posts: 19227

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 6:13 am     Reply with quote

kbhit tells you if there are any characters waiting to be read.
rcv_buffer_bytes() returns how many characters are in the receive buffer
at any time. Look in the manual for both.
dyeatman



Joined: 06 Sep 2003
Posts: 1912
Location: Norman, OK

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 7:07 am     Reply with quote

#use rs232 is also missing ERRORS
_________________
Google and Forum Search are some of your best tools!!!!
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 8:06 am     Reply with quote

well I use gets and puts to receive and send strings. But I couldn't get it to work.
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 9:40 am     Reply with quote

So, can I use 2 rs232() streams in the PIC? For example.
#pin_select U1TX=PIN_C6
#pin_select U1RX=PIN_C7
#use rs232(UART1, baud=9600, receive_buffer=256, parity=N, stop=1,bits=8,ERRORS)
I will use it. This way I will press the screen on the PIC. I will push the other one to siow.exe for control purposes. If I make it #use rs232(ICD, baud=9600), will it work?
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
Ttelmah



Joined: 11 Mar 2010
Posts: 19227

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 1:35 pm     Reply with quote

Yes, BUT.

You chip has multiple hardware UART's, so 'yes'.

BUT. There are hardware restrictions on which pins can be used.
You need to read the data sheet. In particular Table 21-1, and the rest
of that section about the PPS. This shows which pins each port can
be allocated to.
You show just one #use RS232. You need to setup a second, and use
stream names for each. Then use getc and putc _with these names_.
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Fri Oct 06, 2023 11:32 pm     Reply with quote

I will take into account what you said and try it.

I am very sorry. I examined the lcd.c library. But when I added this code #define LCD_DATA_PORT getenv("SFR:PORTD") I connected it to D4-D4,D5-D5,D6-D6,D7-D7. But I didn't understand where to connect the RS, RW, and E pins. Where is it written. By the way, if I write as follows, the LCD works and there is no problem. But it seems better to write one line instead of defining them one by one.
Code:

#define LCD_ENABLE_PIN  PIN_D2
#define LCD_RS_PIN      PIN_D0
#define LCD_RW_PIN      PIN_D1

#define LCD_DATA4       PIN_D4
#define LCD_DATA5       PIN_D5
#define LCD_DATA6       PIN_D6
#define LCD_DATA7       PIN_D7

#include <lcd.c>

_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
Ttelmah



Joined: 11 Mar 2010
Posts: 19227

View user's profile Send private message

PostPosted: Sat Oct 07, 2023 4:17 am     Reply with quote

I suggest you foget the lcd.c library!....
Instead goto the code library here and get PCM_programmers flex_lcd
driver. This is vastly more flexible, and works really well. Much more
capable than the CCS supplied driver.
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Wed Oct 11, 2023 6:30 am     Reply with quote

Could there be a situation where the RX terminal times out? Data is coming to the PC. But when I try to read it with the processor, I cannot receive the data. RX seems like it can't receive data. It's like it's locked.
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
temtronic



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

View user's profile Send private message

PostPosted: Wed Oct 11, 2023 6:39 am     Reply with quote

You really need to post your current code as there can be several reasons why it may not work.

I always code/compile/test a simple 'PC ECHO' program when needing 'serial communications. I use the CCS supplied ex_sisr.c code and type in a PC terminal program, which sends bytes to PIC, the PIC then returns them to the PC screen. This is a simple test to confirm the hardware is correct as well as basic PIC C code functions as it should.
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Wed Oct 11, 2023 6:44 am     Reply with quote

I am using the 3.3v ethernet kit. There is a stereo jack on the rs232 part. When sending data, for example, I send characters with putc. Shouldn't I see a signal at the TX end? Also, I should see a signal at the RC end when receiving data. Is it true?
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
temtronic



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

View user's profile Send private message

PostPosted: Wed Oct 11, 2023 7:38 am     Reply with quote

no......
'RS-232' historically had +-12 volt signals ,over the years it's been 'modified' several times and today's PC don't have 'RS-232' comm ports

I suspect your PC has some form of USB serial interface ?? Some 'module' ?? Post that...it could be USB<> TTL or USB<>RS232 they are not the same....

That 'mini phone jack' isn't 'RS-232' by definition either........
then there's the '3.3v ethernet kit'... sigh... ethernet isn't 'RS-232' so now you're really confusing an old guy like me !!
You should post that product info as well,or a link to it....
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
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