The module you need is the UART ( Acronym of: Universal Asynchrone receiver and Transmitter afaik)
Available in all PSoC versions.
10xthx for your answers! indeed using the UART module I managed to establish the communication between the PLC and the kit but the LCD dose not display's the data I'm sending from the PLC witch is a constant on 16 bites. For example I am sending from the PLC the number 3 (on 16 bites) and on the display of the PSoC kit appears all kind of strange characters. I thought it is because of the bits/seconds rate but I didn't solved this problem even if I fixed the same baude rate to both devices. Any ideas how to solve this problem?
Well, zip your project and let us have a look at it, there are some pitfalls one can make...
You mentioned not showing the data, there can be
1. you are not sending the data or the data is not is the correct format
2. The psoc doesnt see the signal from the input pin whcih could be a problem with the buffer/level shifter...
3. The spindoes get the signal, but Psoc Uart doesn't peform the receiving funtion
4. The Psoc handles the receiving correctly but your program get the data from a wrong address or decoding in a wrong format
5. the data is receved and decoded correctly, but the LCD display fucntion not outputing it to the LCD correctly
6. The data is output to the LCD module correctly but the LCD module not displaying the right thing.
This would be the way I check.
Check this, upload the project and tell people here which one is your problem, some one may be able to help
Here is my project. As I said before the PSoC Kit has to recive and display on the lcd 3 long variables data witch I am sending to it from a PLC witch has a baude rate of 19200. Insted of the 3 variables it dispays continousely some strange characers.(I also tryed to use the sprintf() function but without succes).
testing2.zip 3.8 MB
1. First of all
I would change
int16 ch; /* Data received from the Serial port */
char ch; /* Data received from the Serial port */
2. What do you send from PLC, ASCII 0-9 or a byte of 0-255 ( ie an int from 0x00 to 0xffff? If you are send a binary value, you need to convert it to ascii string to display.
3. Have you use hyperterminal to check what you are sending from the PLC?4. As I menention in my last post, have you check as what list on the steps? which step does it project failed?
to send 3 long variables with an UART may be complicated: An UART is an 8-Bit device, you have to send one long as four separate bytes and on the receiving side, you have to combine them to form again a long integer. A bit of shifting or indexing or use of a union seems nessecary on both sides.
You ought to check first with a program whether your separating into bytes and the re-combination works, before you sent them via UART.
The LCD-Component is a CHARACTER component, it only displays ASCII chars (the one is 0x31, the letter "A" is 0x41) you will have to convert your numbers into a character string to display it. Fortunately there is a function for that:
uint32 MyVar = 0x7FFFFFFF;
// and now the bit cryptic sprintf:
Hope, there's no typo...
Ooops! Insert ")" where needed!
1. I tryed also with 'char ch' insted 'int16' but it dose not work.
2. I think the plc is sending byte. The data that the plc can send are boolean, word and long(binary value I think).
3. I have tested the program posted here with the hiper terminal and it works. It recives data from the PC rs232 port, and I also tested a program so that the PC recives data that the PSoC sends and also worked, but when I used the hyperterminal to see what is the plc sending....appeared some strange characters. But to send the same data to another PLC works.
4. I think is a problem of codification of the information. Let me see if I understood correctly: the LCD can display only ACSII code so if the PLC is sending binary code, using fprintf() function i have to convert it to ASCII.
Yes, perfectly right. When you use sprintf as I showed in the example, you can easylier debug, look at Buffer or the input-value before printing to LCD.
And exactely how can i see what PSoC is reciveing whithout printing on the LCD? How can Iook at what is in the buffer?
Do you have the ICE? If you do, use the debugger to step and trace
If you don't have the ICE, then you may use the following functions
You can find the descritpion of this function in the LCD DATA sheet from the designer.
THe first one let you print one byte at a time, try this first. This way you print it out as four seperate bytes.
If that works, your receiving should be OK. The rest would be how to groupt the 4 bytes to form a long and also how to display it, using printf and these printing fucntion should work, you just need to read thru the specificationa and pick the one the suits you.