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

RC522 RFID module SPI
Goto page 1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
josb86



Joined: 15 Apr 2013
Posts: 8

View user's profile Send private message

RC522 RFID module SPI
PostPosted: Tue Oct 29, 2013 11:00 am     Reply with quote

I am trying connect a RC522 RFID module SPI to a pic16F887 but I can't make that this read the code in a RFID card.

datasheet of MFRC522 http://www.nxp.com/documents/data_sheet/MFRC522.pdf

http://www.ebay.com/itm/Mifare-RC522-Card-Read-Antenna-RF-Module-RFID-Reader-IC-Card-Proximity-Module-/170846290768
Code:

#include <pru_spi.h>
#use SPI( MASTER, baud = 100000, DO = PIN_C5, DI = PIN_C4, CLK = PIN_C3, ENABLE=PIN_C2, BITS = 8, MSB_FIRST, stream = RFID, ENABLE_ACTIVE=1 )
#use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8,stream=RF)


void main()
{
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   int i=0;
   Char value[8];
   INT8 t_bucle=0;

   while(TRUE)
   {
   

   output_high(pin_C2);
   fprintf(RF,"%s\n\r",value);
   value[0] = spi_xfer(RFID, 0b10000000);
   output_low(pin_C2);
   fprintf(RF,"%s\n\r",value);


   }

}

the output on serial port RF blank. Anybody help with this module?
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Tue Oct 29, 2013 11:59 am     Reply with quote

What is your schematic look like? What supply voltage are you using - while the pic16F887 will do 5v, the RFID looks like it is 3.3v only - are you using 3.3v or 5 v?

mikey
_________________
mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3
josb86



Joined: 15 Apr 2013
Posts: 8

View user's profile Send private message

I am use a 3.3 power supply for the pic and the rfid reader.
PostPosted: Tue Oct 29, 2013 1:35 pm     Reply with quote

I am use a 3.3 power supply for the pic and the rfid reader. the conection:




SS to PIN_C2
SCK to PIN_C3
MOSI to PIN_C5
MISO to PIN_C4
GND to GND
RST to GND
+3.3 to 3.3v



PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Oct 29, 2013 2:29 pm     Reply with quote

Quote:
#include <pru_spi.h>

Post this file so we can see your #fuses and everything.


Quote:
#use SPI( MASTER, baud = 100000, DO = PIN_C5, DI = PIN_C4, CLK = PIN_C3, ENABLE=PIN_C2, BITS = 8, MSB_FIRST, stream = RFID, ENABLE_ACTIVE=1 )

Look at this timing diagram on page 78 of the MFRC522 data sheet:
Quote:
Fig 25. Timing diagram for SPI

It shows the NSS signal (ie., slave select for the MFRC522) is a low true
signal. But you have it set for high true in the #use SPI() statement
above. Fix that.

Also, in the #use spi() line above, you don't have FORCE_HW specified
so the CCS compiler will put in software SPI code. It will use bit-banging
to do the SPI. I'm just making you aware of that.

Also, in the #use spi() statement, you didn't specify the SPI mode.
That's important. The MFRC522 appears to use Mode 0. You need to
add a parameter to the #use spi() to specify that. See the CCS manual.


Quote:
#use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8,stream=RF)

Here you have reversed the pins from the hardware assignments on the
16F887. Look at the pinout for the 40-pin package in the 16F887 data
sheet. Because you have done this, the compiler will create a software
UART on those pins. And, it won't inform you of this. Change the pins
to the correct pins for the hardware UART. Then you'll get hardware UART
code from the compiler. Also, we like to add the ERRORS parameter
to the #use rs232() statement above.

Quote:
void main()
{
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
int i=0;
Char value[8];
INT8 t_bucle=0;


Variable declarations go at the start of a function. Don't put lines of
code above any variable declarations. Also, you're changing the case
and you're using aliases for data types. This is very poor technique.
CCS is case-insensitive by default. Most C compilers are not. It's a bad
habit to get into. Also 'int' is the same as 'int8' in CCS. They are both
unsigned 8-bit integers. It's suggested that you use 'int8' when writing
CCS programs.

Quote:

while(TRUE)
{
output_high(pin_C2);
fprintf(RF,"%s\n\r",value);
value[0] = spi_xfer(RFID, 0b10000000);
output_low(pin_C2);
fprintf(RF,"%s\n\r",value);
}

Here, you are manually controlling the Slave Select line on pin C2.
But you have told the compiler to do it in the #use spi() statement.
So why do it manually again ? It's not needed. And the way you're
doing it is incorrect, because the MFRC522 data sheet shows that
Slave Select is active low. You're controlling it as if it's active high.
It wouldn't work. Get rid of those two lines in bold above.
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue Oct 29, 2013 3:01 pm     Reply with quote

Such a short program and so many problems detected by PCM Programmer. Wink
Couldn't help myself to point another problem:
Code:
   value[0] = spi_xfer(RFID, 0b10000000);
   output_low(pin_C2);
   fprintf(RF,"%s\n\r",value);
Printing a value with %s requires a string, i.e. an array of bytes terminated by a zero. Yours is not zero terminated.
Using %c would have fit your job perfectly without the need for an array.
josb86



Joined: 15 Apr 2013
Posts: 8

View user's profile Send private message

#include <pru_spi.h>
PostPosted: Tue Oct 29, 2013 3:32 pm     Reply with quote

Code:

#include <16F887.h>
#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=20000000)

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




if I understand, if I set the serial com for software I can put the TX and RX where a needed.
josb86



Joined: 15 Apr 2013
Posts: 8

View user's profile Send private message

PostPosted: Tue Oct 29, 2013 4:18 pm     Reply with quote

ckielstra wrote:
Such a short program and so many problems detected by PCM Programmer. Wink
Couldn't help myself to point another problem:
Code:
   value[0] = spi_xfer(RFID, 0b10000000);
   output_low(pin_C2);
   fprintf(RF,"%s\n\r",value);
Printing a value with %s requires a string, i.e. an array of bytes terminated by a zero. Yours is not zero terminated.
Using %c would have fit your job perfectly without the need for an array.


thanks, one less problem.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Oct 29, 2013 4:38 pm     Reply with quote

Quote:
#use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8,stream=RF)

if I understand, if I set the serial com for software I can put the TX and RX where a needed.

You do that, but a software UART is not nearly as good as a hardware
UART, and if you have the hardware UART available you should use it.

I'm about done with this thread.
josb86



Joined: 15 Apr 2013
Posts: 8

View user's profile Send private message

PostPosted: Tue Oct 29, 2013 4:53 pm     Reply with quote

PCM programmer wrote:
Quote:
#use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8,stream=RF)

if I understand, if I set the serial com for software I can put the TX and RX where a needed.

You do that, but a software UART is not nearly as good as a hardware
UART, and if you have the hardware UART available you should use it.

I'm about done with this thread.


Ok thanks for all Wink I learned some things today.

I find this library for arduino, I hope this help me

https://github.com/JoyLabs/arduino/blob/master/libraries/RFID/MFRC522.h
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Wed Oct 30, 2013 1:12 am     Reply with quote

I suggest you start by reading the PIC data sheet.

What clock rate is the maximum if you are running at 3.3v?. It is _not_ the normal full speed of the processor. To run at 20MHz, requires a supply of 4.5v or greater....

You may find things start to work, if you change your crystal for a 10MHz one, and recompile to use this speed.....

Best Wishes
josb86



Joined: 15 Apr 2013
Posts: 8

View user's profile Send private message

PostPosted: Wed Oct 30, 2013 9:35 am     Reply with quote

Ttelmah wrote:
I suggest you start by reading the PIC data sheet.

What clock rate is the maximum if you are running at 3.3v?. It is _not_ the normal full speed of the processor. To run at 20MHz, requires a supply of 4.5v or greater....

You may find things start to work, if you change your crystal for a 10MHz one, and recompile to use this speed.....

Best Wishes


I will try to work with 5v source on PIC, thanks.
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Wed Oct 30, 2013 9:45 am     Reply with quote

Hardware SPI won't work then to your module.....
Requires the signals to go up to about 4v when running at 5v.

Better to either switch to a more modern chip that can run at 20MHz at 3.3v, or go down to 10MHz.

Best Wishes
tienchuan



Joined: 25 Aug 2009
Posts: 175

View user's profile Send private message Yahoo Messenger

PostPosted: Tue Dec 10, 2013 12:01 am     Reply with quote

Have anyone tested with this module OK?
I'm having a trouble when doing with it.
The module can't not read mifare S1 card.
_________________
Begin Begin Begin !!!
electromaker



Joined: 07 Jul 2016
Posts: 1

View user's profile Send private message

Test RC-522
PostPosted: Thu Jul 07, 2016 1:56 pm     Reply with quote

Hi everyone,
I have tested module RC-522 with Arduino 2009...I have used the code of this tutorial http://etabetastudio.blogspot.it/2016/07/tutorial-lettore-rfid-rc522-arduino-idea.html and all is ok,
I hope that it can help you.
Thanks
Bye Smile
sambo



Joined: 17 Jun 2009
Posts: 4
Location: POLAND

View user's profile Send private message

PostPosted: Tue May 30, 2017 10:58 pm     Reply with quote

Can anyone share working code for RC522 ?
_________________
sory for my eng
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, 4, 5  Next
Page 1 of 5

 
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