Hallo, ich bekomme aus einem IC ein jeweils demoduliertes Byte. Auf dem
Foto ist ein FSK Signal zu sehen (grün), blau ist ein Carrier Detect
Signal, was quasi als Select verwendet wird, lila das daraufhin vom IC
(ist Master) erzeugte Taktsignal, gelb Daten. Empfänger ist ein Atmega
1284 im SPI Slave Modus. Clk idle low, Daten auf rising edge.
Das Problem ist, dass die Bytes nicht richtig vom SPI gelesen werden. Da
kommt nur selstsamer murks raus. Sende ich z.B. die Folge
33333333333333333333 kommt 3pÌ3pÎÃ8ÎÆpÎÆpÎ an. Ich lese die Bytes so
ein:
1 | CLRREG_DATA // IC Datenempfang aktivieren
|
2 | SETRXTX
|
3 | int i=0;
|
4 | int k=0;
|
5 | char rec[21]; // Empfangsspeicher
|
6 | SPION // SPCR |= (1<<SPE);
|
7 | do {
|
8 | while (PINB & (1<<CD_PD)); // auf Carrier Detect low warten
|
9 | rec[k]=spi_slave_receive(); // Byte empfangen und speichern
|
10 | k++;
|
11 | } while(k<21); // empfängt 20 Zeichen am Stück
|
12 | for (int l=0;l<k;l++) // Terminalausgabe
|
13 | {
|
14 | uart_putc(rec[l]);
|
15 | }
|
16 | }
|
17 |
|
18 | char spi_slave_receive(void)
|
19 | {
|
20 | /* Wait for reception complete */
|
21 | while(!(SPSR & (1<<SPIF)));
|
22 | /* Return Data Register */
|
23 | return SPDR;
|
24 | }
|