Olen monta vuotta miettinyt, että miten helposti autocheckin radion taajuusnäyttöä voisi käyttää esittämään jotain tarpeellisempaa tietoa. Homma sai alkusysäyksen siitä, kun parille kaverille rakentelin Arduino Nanosta 4F:n DRL-ohjainta. Joten ostin eBaysta hintaan 13 e pari tuollaista korttia. Terholta löytyi yksi Gamma-radio jo vuosi sitten ja lopulta sen kaivoin tallin hyllystä hyötykäyttöön.
Epäilys oli, että kommunikoinnissa käytetään SPI-väylää, koska radiosta löytyivät DATA, CL ja ENA. Vastaavat SPI:ssä ovat MOSI, CLK ja SS. Aluksi mittasin oskilloskoopilla radion pinnejä sain seuraavat tulokset:
CL: kellotaajuus 10 kHz, alhaalla aktiivinen
ENA: ylhäällä aktiivinen
MOSI: alhaalla aktiivinen
Koska oskilloskoopin kanssa data tarkastelu on vähän hankalaa, päätin käyttää Arduinoa hyväksi. Kytkin radion pinnit korttiin ja tallensin kellon tahtiin DATA-linjaa kokonaisluvuiksi 0 ja 1 riippuen pinnin tilasta. Lisäksi tallensin muutoksen ENA-pinnissä #-merkiksi. Nämä lähetin kortilta eteenpäin USB-väylällä läppäriin ja tulostin Realterm-ohjelmalla näytölle. Kopion pitkän rivin nollia ja ykkösiä notepadiin, pätkin 8 bitin jonoiksi ja tein Excelissä ascii-muutoksen. Tässä vaiheessa ensimmäisen kerran hymyilytti, kun radion näytöllä ollessa 98.5 "stereo" Excelissä luki:
Tässä vaiheessa pitää muistuttaa, että koko homma on tehty vain kiinnittämällä johtoja ja koodaamalla, mitään lisäkomponentteja ei tarvittu.
Seuraavaksi alkoi sitten tappelu sen kanssa, että miksi samaa dataa kortilta autochekille lähetettäessä ei tapahdu mitään. Säädin ja kääntelin kaikkia mahdollisia asetuksia, kunnes lopulta näytöllä luki isolla "TAPE". Tässä kohtaa testailin eri variaatioita ja totesin, että lähetysrutiini mittaristolle tulee olla seuraava:
ENA ylös
7 8-bittistä arvoa peräkkäin
ENA alas
ENA ylös
samat 7 8-bittistä arvoa peräkkäin
ENA alas
Tässä kohtaa näytöllä oli jo lukuja kolmessa rivissä, mutta ne eivät olleet lähellekään sitä mitä koodissa. Vika selvisi lopulta; Arduinossa datalinja on ylhäällä aktiivinen, eli 1 on ylhäällä ja 0 alhaalla, kun se radiossa on juuri toisinpäin. Arduinossa kuitenkin väylä lepotilassa pinni on ylhäällä, kuten radiossakin. Tätä en heti keksinyt. Homma korjautui invertoimalla tuo pinni toiseen kortin pinniin ja käyttämällä sitä datapinninä. Nyt näyttö alkoikin jo totella käyttäjää: klik. Tässä kohtaa testasin myös 20 kHz:n kellotaajuutta ja näyttö toimii hyvin myös sillä. Mitään muuta hyötyä siitä ei ole kuin prosessorin kellotaajuuden tuplaus, koska SPI-väylän kelloasetukset ovat aika suppeat ja ainoa vaihtoehto on tiputtaa prosessorin kellotaajuutta, joka on nyt 2 MHz. Huonona puolena tuossa on, että mahdolliset merkit riveittäin ovat:
Ylä: 4 merkkiä 0-9, käyttökelvottomat erikoismerkit
Keski: stereo-merkki, A-F, käyttökelvottomat erikoismerkit
Ala: M, U, V, AM, FM + "muistipaikkanumerot/-kirjaimet) 0-6, I, L (esim. U1, M2, V3 jne). Lisäksi U, V ja FM lisäävät yläriville pisteen 3. ja 4. merkin väliin.
Lisäksi yksikään merkki ei vastaa suoraan ASCII-merkkiä samalla numerolla. :)
Ajattelin, että ahtopaine olisi sellainen, mikä olisi helppo syöttää mittaristoon. EGT ja AFR myös sellaisia tietoja, mitkä olisivat hyviä. Kortillahan on 8 kpl 10 bit A/D-muunnoskanavia 0-5 V tulolla, joten 0.2-4.8 V ahtopainesignaali voidaan käyttää suoraan.Tällä hetkellä näyttöön syötetään ahtopaine suoraan boksin ahtopainelähdöstä (Urssissa käytössä). EGT odottaa eBaysta tilattua halpisnäyttöä (9 e K-termoparia lukeva digitaalinäyttö), jonka ajattelin teurastaa niin, että se syöttää 0-x V jännitettä kortille. AFR vaatiikin sitten vähän kalliimpia investointeja tai vaihtoehtoisesti itse rakennettua WBO2-ohjainta. Innovate LC-1 olisi reilun 100 e hintaan varmaan ihan järkeväkin ratkaisu. Lisäksi ajattelin lisätä tuonne dataloggauksen kaikista tulosignaaleista lähettämällä dataa USB-portin kautta läppärille. Esim. tuo em. Realterm osaa tallentaa tulevan datan tekstitiedostoon. Joten läppäriltä vain loggauskäsky kortille USB:llä ja se lähettää dataa takaisinpäin.
Näytön tiloja ohjataan pyyhinviiksestä ajotietokoneen reset-napista. Lyhyt painallushan ei tee mitään ajotietokoneessa, joten sitä voidaan käyttää tähän. Pitkä painallus on ajotietokoneen reset ja se taas hylätään näytön ohjauksessa. Laitan luultavasti tänään johdot paikalleen ja laitan kuvia.
Edelleen tässä kohtaa muistutan, että homma on tehty 13 euron prossukortilla, mihin ei ole tehty _mitään_ muuta kuin kiinnitetty johdot paikalleen. :)
Epäilys oli, että kommunikoinnissa käytetään SPI-väylää, koska radiosta löytyivät DATA, CL ja ENA. Vastaavat SPI:ssä ovat MOSI, CLK ja SS. Aluksi mittasin oskilloskoopilla radion pinnejä sain seuraavat tulokset:
CL: kellotaajuus 10 kHz, alhaalla aktiivinen
ENA: ylhäällä aktiivinen
MOSI: alhaalla aktiivinen
Koska oskilloskoopin kanssa data tarkastelu on vähän hankalaa, päätin käyttää Arduinoa hyväksi. Kytkin radion pinnit korttiin ja tallensin kellon tahtiin DATA-linjaa kokonaisluvuiksi 0 ja 1 riippuen pinnin tilasta. Lisäksi tallensin muutoksen ENA-pinnissä #-merkiksi. Nämä lähetin kortilta eteenpäin USB-väylällä läppäriin ja tulostin Realterm-ohjelmalla näytölle. Kopion pitkän rivin nollia ja ykkösiä notepadiin, pätkin 8 bitin jonoiksi ja tein Excelissä ascii-muutoksen. Tässä vaiheessa ensimmäisen kerran hymyilytti, kun radion näytöllä ollessa 98.5 "stereo" Excelissä luki:
Koodi:
# 00011000 24 "CAN" 00000010 2 "STX" 00110000 48 0 00111001 57 9 00111000 56 8 00110101 53 5 00100000 32 "SPACE" # # 00011000 24 "CAN" 00000010 2 "STX" 00110000 48 0 00111001 57 9 00111000 56 8 00110101 53 5 00100000 32 "SPACE" #
Seuraavaksi alkoi sitten tappelu sen kanssa, että miksi samaa dataa kortilta autochekille lähetettäessä ei tapahdu mitään. Säädin ja kääntelin kaikkia mahdollisia asetuksia, kunnes lopulta näytöllä luki isolla "TAPE". Tässä kohtaa testailin eri variaatioita ja totesin, että lähetysrutiini mittaristolle tulee olla seuraava:
ENA ylös
7 8-bittistä arvoa peräkkäin
ENA alas
ENA ylös
samat 7 8-bittistä arvoa peräkkäin
ENA alas
Tässä kohtaa näytöllä oli jo lukuja kolmessa rivissä, mutta ne eivät olleet lähellekään sitä mitä koodissa. Vika selvisi lopulta; Arduinossa datalinja on ylhäällä aktiivinen, eli 1 on ylhäällä ja 0 alhaalla, kun se radiossa on juuri toisinpäin. Arduinossa kuitenkin väylä lepotilassa pinni on ylhäällä, kuten radiossakin. Tätä en heti keksinyt. Homma korjautui invertoimalla tuo pinni toiseen kortin pinniin ja käyttämällä sitä datapinninä. Nyt näyttö alkoikin jo totella käyttäjää: klik. Tässä kohtaa testasin myös 20 kHz:n kellotaajuutta ja näyttö toimii hyvin myös sillä. Mitään muuta hyötyä siitä ei ole kuin prosessorin kellotaajuuden tuplaus, koska SPI-väylän kelloasetukset ovat aika suppeat ja ainoa vaihtoehto on tiputtaa prosessorin kellotaajuutta, joka on nyt 2 MHz. Huonona puolena tuossa on, että mahdolliset merkit riveittäin ovat:
Ylä: 4 merkkiä 0-9, käyttökelvottomat erikoismerkit
Keski: stereo-merkki, A-F, käyttökelvottomat erikoismerkit
Ala: M, U, V, AM, FM + "muistipaikkanumerot/-kirjaimet) 0-6, I, L (esim. U1, M2, V3 jne). Lisäksi U, V ja FM lisäävät yläriville pisteen 3. ja 4. merkin väliin.
Lisäksi yksikään merkki ei vastaa suoraan ASCII-merkkiä samalla numerolla. :)
Ajattelin, että ahtopaine olisi sellainen, mikä olisi helppo syöttää mittaristoon. EGT ja AFR myös sellaisia tietoja, mitkä olisivat hyviä. Kortillahan on 8 kpl 10 bit A/D-muunnoskanavia 0-5 V tulolla, joten 0.2-4.8 V ahtopainesignaali voidaan käyttää suoraan.Tällä hetkellä näyttöön syötetään ahtopaine suoraan boksin ahtopainelähdöstä (Urssissa käytössä). EGT odottaa eBaysta tilattua halpisnäyttöä (9 e K-termoparia lukeva digitaalinäyttö), jonka ajattelin teurastaa niin, että se syöttää 0-x V jännitettä kortille. AFR vaatiikin sitten vähän kalliimpia investointeja tai vaihtoehtoisesti itse rakennettua WBO2-ohjainta. Innovate LC-1 olisi reilun 100 e hintaan varmaan ihan järkeväkin ratkaisu. Lisäksi ajattelin lisätä tuonne dataloggauksen kaikista tulosignaaleista lähettämällä dataa USB-portin kautta läppärille. Esim. tuo em. Realterm osaa tallentaa tulevan datan tekstitiedostoon. Joten läppäriltä vain loggauskäsky kortille USB:llä ja se lähettää dataa takaisinpäin.
Näytön tiloja ohjataan pyyhinviiksestä ajotietokoneen reset-napista. Lyhyt painallushan ei tee mitään ajotietokoneessa, joten sitä voidaan käyttää tähän. Pitkä painallus on ajotietokoneen reset ja se taas hylätään näytön ohjauksessa. Laitan luultavasti tänään johdot paikalleen ja laitan kuvia.
Edelleen tässä kohtaa muistutan, että homma on tehty 13 euron prossukortilla, mihin ei ole tehty _mitään_ muuta kuin kiinnitetty johdot paikalleen. :)
Comment