CD-tár protokoll "kinyomozása"

Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

Sziasztok!

Nos, a kocsiban van egy régi magnó CD tár vezérlővel és persze tárral.
Már ez egy pöttyet elavult, nem túl jó már a fej sem, CD-t írni is macera (már CD író sincs a netbookomban) szal csak a baj van vele.
Mivel a kocsi hobby, a gyári magnót meg akarom tartani mindenképp, de a tár helyére kellene valami más. (Arduino emulátor, ami tárnak hazudja magát, és vezérel egy mp3 lejátszót, de inkább egy A2DP-s bluetooth modult, AVCPR-rel, s akkor a számváltás is menne, de nem is a lényeg most, ha a protokoll megvan, ez már nem nehéz.)

Szóval 1990 körül az eszköz. Azt hittem, hogy valami sima 4800-as vagy 9600-as 8 bites valami, de sajnos nem az :(
PC-s soros porttal semmire se mentem...

Sony CDX-a15 a tár, régi 13 pines Sony csati ami csak önmagával kompatibilis.
Ennyit tudtam meg róla:

A kommunikációhoz 5 vezetéket használ a rendszer:
-adat a fejegységtől a tárhoz
-adat tártól a fejegységhez
-órajel (ezt ki küldi, passz)
-REQH (fejegység "kérvényező" jele)
-REQC (tár "kérvényező" jele)

Kérdésem, hogy van-e bárkinek ötlete, hogy a fenében lehetne beletúrni a lelkivilágába?
Azon töröm a fejem, hogy Arduino-val minden vezetéket figyelek folyamatosan, serial monitoron meg is tudnám jeleníteni, de onnan hogyan tovább?!

Köszi!
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

Sziasztok!

update:
Vettem ebay-ről egy logikai analizátort (USBee AX) amivel szépen belehallgattam a kommunikációba.
(Sima serial-al semmire se mentem, mert mint az USBee-vel kiderült, full egyedi minden, nem húzható rá semmi protokol)

Úgy néz ki a dolog, hogy van egy külön órajele mind a tárnak, mind a vezérlőnek.
Amikor bármelyik "beszélgetni" akar, akkor órajelet generál (ami alapból HIGH-on van) és az értéket a másik fél felfutó élre figyelni csak.
A másik szépen válszol egy meghatározott sorozattal.

Megnéztem így a gombokat, valamint sikerült visszafejteni a másodpercenként küldött CD és lejátszási adatokat is. Szépen BCD-ben küldi a percet, másodpercet, stb-stb.


Ezek után a kérdésem a következő: hogy tudom ezt szimpulálni Arduino-val?
Ami kellene: egy fix órajel az egyik lábon, aminek a felfutó élére be kell állítani a szükséges bit-et.
A gondom, hogy ha sima delay-el csinálok órajelet, akkor közben hogy állítok bitet?
Ha meg nem delay-el csinálom a jelet, akkor hogyan tudom pontosan belőni, hogy jó legyen a szinkron?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: kapu48 »

Beállítod az egyik Timeren a osztás frekvenciát, és engedélyezed a megszakítást.
Megszakításban intézed az aktuális Port műveleteket.

Kérdés miben akarsz programozni (Bascom, Gcc, Arduino, …)?
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

kapu48 írta:Beállítod az egyik Timeren a osztás frekvenciát, és engedélyezed a megszakítást.
Megszakításban intézed az aktuális Port műveleteket.

Kérdés miben akarsz programozni (Bascom, Gcc, Arduino, …)?
kapu48 írta:Beállítod az egyik Timeren a osztás frekvenciát, és engedélyezed a megszakítást.
Megszakításban intézed az aktuális Port műveleteket.

Kérdés miben akarsz programozni (Bascom, Gcc, Arduino, …)?
"Ezek után a kérdésem a következő: hogy tudom ezt szimulálni Arduino-val?"

Tehát csak Arduino-hoz "értek". Túl vagyok az online tanfolyamon :D
(A többit még csak nem is láttam.)
Amit írtál, az nekem tök kínai :(

A vétel még hagyján, csinálok egy megszakítást felfutó órajelre, s megnézem mi van az adat vezetéken.

De hogy adok?


(picit részletesebb leírás:
4 kábel van, ezen megy a kommunikáció.
1: fejegység órajel
2: fejegység adatjel
3: tár órajel
4: tár adat

Én a tárat szeretném szimulálni, ehhez 1 mp-ként kell egy heartbeat szerűséget küldeni, ami tartalmazza az éppen játszott CD sorszámát, idejét, stb.
Adáskor a végig HIGH állapotban lévő 3-as clk lemegy LOW-ba és felfutó élre beállítja a küldendő bitet.
Ezt kéne megcsinálnom valahogy Arduino-ban)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: kapu48 »

Ha még csak a: 60 nap alatt Arduino-ban tanultakat ismered?
Tovább kel folytatnod a tanulást!

Sajnos az egész Arduino Helpet még nem fordította le a Robert!

A vázolt adat átviteled megoldható HW SPI üzemmódban is.
Ehhez tanulmányozd az alábbi oldalt:
http://arduino.cc/en/Reference/SPI

Az időzítéshez pedig az alábbi lib-et ajánlom:
http://playground.arduino.cc/Main/MsTimer2
8)
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

kapu48 írta:Ha még csak a: 60 nap alatt Arduino-ban tanultakat ismered?
Tovább kel folytatnod a tanulást!

Sajnos az egész Arduino Helpet még nem fordította le a Robert!

A vázolt adat átviteled megoldható HW SPI üzemmódban is.
Ehhez tanulmányozd az alábbi oldalt:
http://arduino.cc/en/Reference/SPI

Az időzítéshez pedig az alábbi lib-et ajánlom:
http://playground.arduino.cc/Main/MsTimer2
8)
Még csak azt ismerem nagyjából magabiztosan, de tanulok folyamatosan.
De csak úgy "magától" nehéz, könnyebb így, hogy adott feladatot kell megoldani, s annak utána nézni.

Az SPI úgy tűnik pont az amit keresek (kisebb módosításokkal) hétvégén kipróbálom, s írok mit sikerült.

Köszönöm az infót! :wink:
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

UPDATE!!!

Nos, az előző SONY cd-tár, amivel ez a project indult kiesett a pikszisből.. :D
Természetesen az "új" rádióm meg már mást támogat.
Nevezetesen a FORD ACP (Audio Control Protocol) szerint működik a hozzá kapcsolódó CD-tár.

Ehhez találtam elég korrekt leírást, és egy kis digital-analyserrel meg pár mintával kiderült, hogy jók a doksik:
- RS485, két vezetéken, 9 bit
- viszont csak az utolsó checksum 9 bit-es, (ezzel jelzi az üzenet végét) a többi 8 bites.

Itt jelenleg, így hogy a bit számmal is variálni kell, ötletem sincs hogy induljak el...

(Első kőrben egy "lehallgatót" szeretnék csinálni adás nélkül, hogy elkapjam a CD tár által küldött üzeneteket s mondjuk LCD-n kiírom, hogy melyik CD, melyik track. A tár minden másodpercben elküldi ezt a fejegységnek.)

Egyáltalán rá lehet venni az Arduino-t 9 bites soros kommunikációra?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: Robert »

Arduino simán lehet 9 bites kommunikációval. Adatlap, usart regiszterek. Vagy Bascom alatt: "config comx="
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

Hatalmas előrelépés történt az ügyben!!! 8)

Ma reggel sikerült végre odáig eljutni, hogy a magnó azt hiszi CD tár van hozzá kötve.
A "handshake" tökéletesen lezajlik. :D :D :D

Vagyis majdnem.
Működik a dolog, csak apróság.

2 vezetékes rs485-ös a kommunikáció, amikor adok rá kell ülni a vonalra, adás végén meg el kéne engedni azonnal, hogy megkapjam az ACK jelet (itt is 0x06)
Viszont ha kiadom a serial.write-ot, és utána egyből leszállok a vonalról, akkor elveszik az adás :(
Most parasztosan delay-el várok picit, de így nem tudom pontosan az adás végén elengedni a drótot, lemaradok az ACK-ról.

Találtam egy serial.flush() cuccot, de nem működik... nem vár, mintha nem csinálnék semmit. :cry:

Bármi ötlet, hogyan tudom meg, hogy lezajlott az adásom?
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

Hogy konkrét legyen ez van most (működik):

Kód: Egész kijelölése

void acp_sendmsg(byte length)
{
  int k=0;
  acp_txenable(1);
  delay(3);
  for (k=0;k<=length;k++){
    Serial.write9bit(acp_tx[k]);
    delayMicroseconds(1400);
  }
  delay(1);
  digitalWrite(13, LOW);
  
}
Egyrészt ha nincs delay a for ciklusban, nagyon egymásra torlódik az adat. (menni az átlagos várakozási idő két byte közt baud9600-nál?!)

De a nagyobb gond, hogy a végén ha nincs a delay, akkor még az adás vége előtt visszamegy a PIN 13 LOW-ba, tehát nem megy ki az üzi. :(
delay-el meg nem kapom meg az ACK-ot, mert ülök a vonalon.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: Robert »

Az utoló byte kimenete után beesik a TXCx interrupt.
http://www.atmel.com/Images/doc8161.pdf
19.6.3 fejezet

Ez nem jó? (Arduinoból kinyúlva kezelhető...)

Tipp:
http://forum.arduino.cc/index.php/topic,42014.0.html
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

Az a baj, hogy én csak Arduino-ul tudok, kinyúlni nem megy még magamtól...
A doksi szép és jó, de nekem elég nagy része sajna semmit se mond.
Az alsó kód úgy néz ki működik, hosszabb tesztnél van, hogy a TX led "beragad" s világít folyamatosan, de adás még sincs. Majd kinyomozom, hogy ilyenkor mi baja van.

Amúgy alapvetően működik a dolog, a rádió azt hiszi ott a cd tár.

Ezek után vagy mp3-at, ipod-ot de a legvalószínűbb, hogy egy A2DP-s bluetooth-t fogok ráaggatni. :)

Remélem a következő versenyre elkészül :D

Jelenlegi állapot: (nem szép, sőt, randa)
https://www.youtube.com/watch?v=TNw89MgFtyI
Avatar
volkov
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2012. november 10. szombat, 7:00

Re: CD-tár protokoll "kinyomozása"

Hozzászólás Szerző: volkov »

Nya, már hang is van.
Végül picit módosult a dolog, mert bejött a képbe egy gyári virtuális cd tár, de arduino akkor is kell hozzá, mivel egyes parancsok (pl pont a cd váltás :) ) nem működik 1:1-ben, ezért az Arduino "dekódol" majd továbbítja a megfelelő parancsot.

http://youtu.be/TcUQFLxqGm4
Válasz küldése