stm32 si4703 rds

Gast #4905483
Lesenswert?

ich versuche mich gerade an der rds-entsclüsselung.

Versucht habe ich:
Beitrag "Re: RDS beim Si4703 FM Tuner"

- geht nicht.

mein code:
1
void readRDS()
2
{ 
3
  u8 buffer[17];
4
  si4703_read();
5
  u8 blockerrors = (registers[STATUSRSSI] & 0x0600) >> 9;
6
  if (blockerrors!=0) return;
7
//  if(registers[STATUSRSSI] & (1<<RDSR)){
8
    
9
          u8 i,nr;
10
          nr=registers[0xC+1]& 15;
11

12
          for(i=0;i<8;i+=2){
13
       buffer[i]   = (registers[0xC+i/2]>>8);
14
       buffer[i+1] = (registers[0xC+i/2] & 0xff);
15
     }
16

17
  buffer[8] = '\0';
18

19
lg(4,1);li(nr);lw(" ");
20
lg(4,4);lw(buffer);
21
}

zeigt Fragmente zur Senderkennung etc. an.

Leider ist mir das RDS-Protokoll nicht klar:
rdsa, rdsb, rdsc, rdsd mit jeweils 2bytes, rdsa ist die Senderkennung, 
rdsc + rdsd scheinen einzelne Buchstabenschnipsel zu sein.

Jetzt fehlt die Information, wie diese Schnipsel sinnvoll 
zusammengesetzt werden. Steht wahrscheinlich in rdsb.

Weiß jemand wie die Injformationen in rdsc+rdsd zusammengesetzt werden?


Danke für jede Unterstützung.
Gast #4905871
Lesenswert?

gelöst:
1
v  u8 buffer[9]={'\0','\0','\0','\0','\0','\0','\0','\0','\0'};
2

3
void readRDS()
4
{ 
5
  si4703_read();
6
  u8 blockerrors = (registers[STATUSRSSI] & 0x0600) >> 9;
7
  if (blockerrors!=0) return;
8
    
9
          u8 i,nr,gt,number,sp;
10
          nr=(registers[RDSB]& 0x03);
11
          gt=(registers[RDSB]& 0xf000)>>12;
12
          sperre=(registers[RDSB]& 0x10);
13

14
          if ( (registers[RDSB]& 0xF000)==0
15
 //              && (registers[RDSB]& 0x10)==0
16
               ) {
17
              number = (registers[RDSB]&0x03);
18
        switch (number){
19
        case 0:
20
            buffer[0]=registers[RDSD]>>8;
21
            buffer[1]=registers[RDSD]&0xff;
22
          break;
23
        case 1:
24
            buffer[2]=registers[RDSD]>>8;
25
            buffer[3]=registers[RDSD]&0xff;
26
          break;
27
        case 2:
28
            buffer[4]=registers[RDSD]>>8;
29
            buffer[5]=registers[RDSD]&0xff;
30
          break;
31
        case 3:
32
            buffer[6]=registers[RDSD]>>8;
33
            buffer[7]=registers[RDSD]&0xff;
34
          break;
35
        default:
36
          return;
37
        }
38

39
           }
40

41

42

43
lg(4,1);li(gt);lw(" ");
44
li(number);lw(" ");
45
lg(4,6);lw(buffer);
46
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren