Forum: Mikrocontroller und Digitale Elektronik VW Beta CDC emulator


von Carl (Gast)


Angehängte Dateien:

Lesenswert?

Hallo
ich bin gerade dabei einen CDC emulator zu bauen trete jedoch seit tagen 
auf der stelle. in der theorie sieht das echt machbar aus und es gibt 
auch einige seiten auf denen man das eigentlich alles nachlesen kann. 
nur ich habe alles ausprobiert und bekomme einfach nicht das "no cd 
Changer" vom display weg. kann ich einfach immer die sequenz
0x74,0xBE,0xFE,0xFF,0xFF,0xFF,0x00,0x7C
sender oder muss ich vorher noch etwas anderes initialisiren? in sachen 
intervall habe ich auch viel verschiedenes gelesen. viele verwenden 
einen intervall von 41ms andere sagen dass es einmal in der sekunde 
reicht das zu senden.
mein radio ist ein Beta V und als Controller verwende ich einen 
Attiny2313A
vielen dank schonmal im vorraus!
Carl

von Hannes H. (mui)


Lesenswert?

Du schickst:

    send_package(0x74,0xBE,0xFE,0xFF,0xFF,0xFF,0x00,0x7C);

mit 500 ms Abstand. Die letzten 3 Byte sind bei mir anders, außerdem 
kommt mir das Delay von 300µs zwischen den einzelnen Bytes etwas kurz 
vor.

Bei meinem CDC-Emulator habe ich folgende Paramter für ein Skoda 
Symphony genutzt (sollte bei dir trotzdem funktionieren):
1
void SpiInit(void)
2
{
3
  DDRB |= (1<<PB7)|(1<<PB6); // UCLK und DO als Ausgang
4
//  USICR |= (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); //Three wire mode, clock source externeal-positive edge, output clock on pb7
5
}
6
7
unsigned char master_trans(unsigned char byte)
8
{
9
 
10
  USIDR=byte; //data to be sent
11
  USISR=(1<<USIOIF); //set counter overflow flag
12
    do
13
    {
14
      USICR=  (1<<USIWM0)|(1<<USICS1)|(1<<USICS0)|(1<<USICLK)|(1<<USITC); //send data bits
15
    }
16
    while (!(USISR&(1<<USIOIF))); //when 8 bits shifted out, overflow flag will be cleared
17
   _delay_us(700); //delay between bytes sent in one frame
18
  return USIDR; //return received data in case data from radio is processed (RC-5 similar protocol)
19
}
20
21
//send 0x74,0xBE,0xFE,0xFF,0xFF,0xFF,0xCF,0x7C
22
23
void OpenSymphonyAux (void)
24
{
25
  master_trans (0x74);
26
  master_trans (0xBE);  //disc
27
  master_trans (0xFE);  //track
28
  master_trans (0xFF);  //min
29
  master_trans (0xFF);  //sec
30
  master_trans (0xFF);  //state
31
  master_trans (0xCF);
32
  master_trans (0x7C);
33
34
  //state: 
35
  //Value   0x00   0x10   0x20   0x04   0x08
36
  //Info    normal   scan   random   random   repeat
37
}

700µs zwischen den einzelnen Bytes, mit einem Intervall von 10ms, statt 
wie bei dir 500ms.

Funktioniert bei mir, aber aus irgendeinem Grund sagt er bei CD4 - no 
cd. Geht trotzdem. Ist auch ein Tiny 2313, mit nativem SPI.

von Carl (Gast)


Lesenswert?

Hallo Hannes
ich habe deinen Vorschlag mal ausprobiert und leider ist bislang noch 
kein erfolg eingetreten. muss ich noch irgendwelche fuses setzen ? die 
clkdiv8 fuse ist nicht gesetzt

LG Carl

von Hannes H. (mui)


Lesenswert?

Hardwaremäßig ist alles richtig angeschlossen? Poste mal deine 
Schaltung.
Portpins, Porteinstellungen passen alle?

Ansonsten musst du die Fuses natürlich entsprechend deiner Taktfrequenz 
setzen. In deinem Code hast du 8MHz für F_CPU gesetzt, das sollte passen 
mit CLKDIV8 nicht gesetzt.
Ich glaube, ich hatte bei mir die Fuses auf default gelassen, also 8MHz 
interner Oszilator mit CLKDIV8 = 1MHz.

Kannst du die Taktfreuenz nachvollziehen? Mit einer LED? Hast du sonst 
Messmittel (Oszi?)

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.