Hallo liebe leut,
ich versuche gerade einen RFID reader (mfrc522) zum laufen zu bringen.
Doch dabei habe ich Probleme (evtl. beim SPI)
1 | MFRC -> Arduino Uno -> ATmega328
|
2 | SDA -> Pin10 -> PB2
|
3 | SCK -> PIN13 -> PB5
|
4 | MOSI -> PIN11 -> PB3
|
5 | MISO -> PIN12 -> PB4
|
6 | IRQ -> nicht angeschlossen
|
7 | RST -> PIN9 -> PB1
|
8 | GND -> GND
|
9 | 3.3V -> 3.3V
|
main.c
1 | int main(void)
|
2 | {
|
3 | sei();
|
4 | uart_init(MYUBRR);
|
5 | spi_initMaster();
|
6 | uart_putstring("start action\n");
|
7 | char mfrc522Info[100];
|
8 | mfrc522_init();
|
9 | uart_putstring("lese dumpVersion...\r\n");
|
10 | (void)mfrc522_getDumpVersionData(mfrc522Info);
|
11 | uart_putstring(mfrc522Info);
|
12 | while (1)
|
13 | {
|
14 | _delay_ms(1000);
|
15 | uart_putstring("blabla\n");
|
16 | }
|
17 | }
|
1 | void mfrc522_init(void)
|
2 | {
|
3 | DDRB |= (1 << PINB2); /* Set the chipSelectPin as digital output */
|
4 |
|
5 | uart_putstring("0\n");
|
6 | mfrc522_writeRegister(MFRC522_COMMAND_REG, MFRC522_SOFT_RESET);
|
7 | uint8_t count_u8 = 0;
|
8 | uint8_t tempVal_u8 = 0;
|
9 | do
|
10 | {
|
11 | _delay_ms(50);
|
12 | mfrc522_readRegister(MFRC522_COMMAND_REG, &tempVal_u8);
|
13 | }while((tempVal_u8 & (1 << 4)) && (++count_u8 < 3));
|
14 | uart_putstring("ios\n")
|
15 | }
|
16 |
|
17 |
|
18 | static uint8_t mfrc522_writeRegister(uint8_t reg, uint8_t value)
|
19 | {
|
20 | uint8_t retVal_u8 = 1;;
|
21 | DDRB &= ~(1 << PINB2);
|
22 | uart_putstring("1\n");
|
23 | retVal_u8 = spi_transmitData(reg);
|
24 | uart_putstring("2\n");
|
25 | retVal_u8 = spi_transmitData(value);
|
26 | uart_putstring("3\n");
|
27 | DDRB |= (1 << PINB2);
|
28 | return retVal_u8;
|
29 | }
|
30 |
|
31 | uint8_t spi_transmitData(uint8_t byte)
|
32 | {
|
33 | /* start transmission */
|
34 | SPDR = byte;
|
35 |
|
36 | uart_putstring("before while transmit\n");
|
37 | /* wait for transission complete */
|
38 | while(!(SPSR & (1 << SPIF)));
|
39 |
|
40 | uart_putstring("after while transmit\n");
|
41 |
|
42 | //return SPDR;
|
43 | return 1;
|
44 | }
|
Mein Output wie folgt aus: (benutze HTerm für UART)
1 | start action
|
2 | 0
|
3 | 1
|
4 | before while transmit
|
5 | after while transmit
|
6 | 2
|
7 | before while transmit
|
Dann bekomme ich keine Nachrichten mehr am PC.