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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.