Forum: Mikrocontroller und Digitale Elektronik MFRC522 Probleme bei Ansteuerung


von Johannes (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.