Lukuyrityksiä

timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Noh.. Nyt on päästy siihen vaiheeseen, että on yritetty lukea 7052:sta.

Ennen dummy bittejä AUDRST käytetty alahaalla neljän kellopulssin aja ja nostettu ylös.(onko oikein?)

Dummy bitit ja 1010 kirjoitettu....

Jää odottamaan Ready flag:ia sitä ei tule tulee vain bit3=0, bit2=0, bit1=1, bit0=1 eli 0011 ????

Mitattu että kun pysähtyy

Dir=1
AudSync=0 (eikös nosteta ylös vasta Ready flag tultua ?)
AudRst=1

helppiä, mistä alkaa etsimään vikaa...
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Hieno homma.

Myös mulla antoi pitkään tuota samaa kunnes löysin manuaalista että 0011 viittaisi siihen että RAM mode ei mene päälle. Tuo AUDRST pitää ajaa siinä alussa muutaman kellopulssin ajan niin että se vastuksella Vcc:hen kiinnitetty signaali on varmasti päällä tai kytketään viimeistään samaan aikaan päälle kun AUDRST menee alas.

Oletko katsonut skoopilla että meneekö pulssit interfacen lävitse ?

Tässä vielä varmuuden vuoksi toi mun toimiva softanpätkä niin että näet mitä mahdollisesti on eroja... (täähän löytyy softa-arkistosta, mutta voi olla haastavaa etsiä).

unsigned int GetAUDData(unsigned int MemAddr) // Get data from the MemAddr
{
volatile unsigned int counter=0;
volatile long result=0;
volatile char errormsg[]=" ";
volatile long nibble = 0;

// show that the process has started with a green led
LED0=LED_ON;

//routine that sets lines to default prior to starting the process
PBinitialize();
// set signals to default for start
DIR = signal_HIGH;
AUDCK = signal_HIGH;
AUDSYNC = signal_HIGH;
DIR = signal_LOW;

//routine to set RAM mode
AUDRST=signal_LOW;
for (counter=0;counter<=5;counter++) clockpulse();
AUDRST=signal_HIGH;
for (counter=0;counter<=5;counter++) clockpulse();

//set audsync to indicate that ecu will soon start receiving data
AUDSYNC = signal_LOW;

// send dummybyte
AUDDATA0 = 0;
AUDDATA1 = 0;
AUDDATA2 = 0;
AUDDATA3 = 0;
clockpulse();

//send command to read longword is 1010 / read byte is 1000
//if changed remember to set also the reading function to byte or longword
AUDDATA3 = 1;
AUDDATA2 = 0;
AUDDATA1 = 1;
AUDDATA0 = 0;
clockpulse();


// write the MemAddr to the AUD line
for(counter=0;counter<8;counter++) // process total 32 bits, 4 bits at a time
{
AUDDATA0 = (MemAddr & 0x01);
AUDDATA1 = ((MemAddr & 0x02)>>1);
AUDDATA2 = ((MemAddr & 0x04)>>2);
AUDDATA3 = ((MemAddr & 0x08)>>3);
clockpulse();
MemAddr >>=4;
}

//change the port direction and set AUD interface direction signal to read
PBsetinput();
DIR = signal_HIGH;

//loop until cpu sends ready byte %0001 ...
counter=0;
while (!((AUDDATA3==0)&(AUDDATA2==0)&(AUDDATA1==0)&(AUDDATA0==1))&(counter++<15))
{
clockpulse();
if (counter>=10){
LED3=LED_ON; // put on a red led to indicate an error in conversion
text_write("<timeout error>");
}}

// AUD line confirmed its ready lets continue, start reading after setting AUDSYNC high
AUDSYNC = signal_HIGH;
clockpulse();

//read out longword (8) 4bit nibbles of data requested
result=0;
for(counter=0;counter<8;counter++)
{
nibble = AUDDATA3<<3;
nibble += AUDDATA2<<2;
nibble += AUDDATA1<<1;
nibble += AUDDATA0<<0;
result += (nibble<<(counter*4));
clockpulse();
}


LED0=LED_OFF;
return (result); // return the memory contents of given address
}




Edited By PetriK on 1196019625
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Do dii..

Jatkoin sitä resetin alhaalla olo aikaa ja jo alko bittejä tulla, mutta nyt sieltä tulee 32 kertaa 00000400 ja sitten pysähtyy siihen Ready flag kohtaan ja on 0101 eli se bus

Lisää ehdotuksia pyytää hän... :bowdown:

Edit:

Antaa kirjoittaa osoitteet 00000080 saakka ja sit pysähyyy, koitin osoite+4 ja osoite+1 samaan kohtaan pysähtyy.
Ei näköjään tykkää, että luetaan osoitteesta 00000080 heh..




Edited By timo3 on 1196023393
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Veikkaan kahta vaihtoehtoa.

Ensiksi että sun osoitteen syöttöalgoritmi ei toimi. Jos toi tulee 32 kertaa, niin silloin olet onnistunut ensimmäisen longword:n lukemisessa, mutta se tulee ulos 32 kertaa joten yrität todennäköisesti lukea jotain väärää osoitetta seuraavaksi.

Toinen vaihtoehto on että sun kellopulssi on ihan pielessä. Eli ECU osaa käsitellä nollat mutta sitten ei muita.

Flashin eka tavu 0x00000000 pitäisi sisältää 0x00000400

Seuraava osoite pitäisi olla
0x00000004 ja siinä pitäisi olla osoite 0xFFFFxxxx

Sitten pitäisi tulla
0x00000008 ja sen pitäisi taas olla 0x00000400

ja taas
0x0000000A ja siinä pitäisi olla osoite 0xFFFFxxxx

Sitten pitäisi tulla monta kertaa sama osoite, eli ns. virhetilanteen hyppyvektori.

Kyllä se siitä... olet jo voiton puolella.
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Juu, tutkitaan, saattapi mennä pitkälle aamuyöhön :comp
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

:thumbup:

vaikka itse toitotin jokuaika sitten siitä bittijärjestyksestä niin mulla oli ne väärinpäin.

Nyt alko tulla keskeytymätöntä dataa juuri sillein kuin kuvasit.
Täytyy vielä kun saa ne pihalle tarkistaa löytyykö siitä selkeät kartat, niin tietää onko ne bitit vieläkään oikeassa järjestyksessä.
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Nyt olis ECU:ta luettu muutaman kerran eikä virheitä ole tullut ja mikä parasta pyörä lähtee vielä käyntiin.

Tämän näköistä Dataa sieltä alko tulemaan

00000400FFFFABA000000400FFFFABA000002B9800002B9800002B9800002B98
00002B9800002B9800002B98000012E00000133200002B9800002B9800002B98
00002B9800002B9800002B9800002B9800002B9800002B9800002B9800002B98
00002B9800002B9800002B9800002B9800002B9800002B9800002B9800002B98
00002B9800002B9800002B9800002B9800002B9800002B9800002B9800002B98
00002B9800002B9800002B9800002B9800002B9800002B9800002B9800002B98
00002B9800002B9800002B9800002B9800002B9800002B9800002B9800002B98
00002B9800002B9800002B9800002B9800002B9800002B9800002B9800002B98
0000136000001394000013C8000013FC00002B9800002B9800002B9800002B98
0000144C00002B980000148400002B98000014BC00002B98000014F400002B98

Polttoaine ja sytytys karttojakin sieltä pikaisella silmäyksellä löytyi.

http://www.fotopankki.fi/1234567/kuva/1362278267174916

Nyt sitten muuta, kuin kaivelemaan kaikki kartat esiin sieltä.
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Näyttää aikalailla oikealta tuo data.

Laitatko koko ladatun koodin ja myös sun pic ohjelman jakoon niin päästään vertailemaan ja oppimaan...

Noi kartat löytyy parhaiten tuolla analyze ohjelmalla. Kelaat sillä kahden ensimmäisen kartan alkuun ja syötät luvut exceliin. Excel laskee x-akselin ja y-akselin ja loput kartat. Noi löytyy tietysti tuolta download alueelta...

Voisin tutustua tuohon samaan editointisoftaan mitä säkin käytät. Mistäs se onkaan ladattavissa.

Ajoin tänään idapro:hon sisään noi busan kartat ja muutaman muunkin alirutiinin nimen. Alkaa vaikuttamaan siltä että pienellä opiskelulla tuokin RISC voisi tulla jonkin verran tutuksi.

Isoin homma on löytää nuo kaikki erilliset portit mitä käytetään I/O:hon.




Edited By PetriK on 1196232470
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Tässä on se koodi, jolla luku onnistui. Resetointia on jatkettu muutamalla kellopulssilla ja tiedot lähetetään PC:lle 32 bitin sarjassa, eikä neljän bitin, niinkuin alussa.


Device 16F628

DECLARE XTAL 20

DECLARE CCP1.1 PORTB.3
CONFIG WDT_OFF , HS_OSC , PWRTE_ON, lvp_off
SYMBOL AuData3 = PORTB.7
SYMBOL AuData2 = PORTB.4
SYMBOL AuData1 = PORTB.6
SYMBOL AuData0 = PORTB.5
SYMBOL SerInput = PORTB.1
SYMBOL SerOutput = PORTB.2
SYMBOL AudRst = PORTB.0

SYMBOL Dir = PORTA.0
SYMBOL Audck_pin = PORTA.1
SYMBOL AudSynk = PORTA.3

dim Write_Byte as word
dim Read_Byte as word
dim AudData3_0 as byte
dim AudData7_4 as byte
dim AudData11_8 as byte
dim AudData15_12 as byte
dim AudData19_16 as byte
dim AudData23_20 as byte
dim AudData27_24 as byte
dim AudData31_28 as byte
Dim x as byte
cmcon = 7

Input Audck_pin
intcon.7 = 0

vrcon = 0
trisb = %11100011
pr2 = 255
ccp1con = %00001100
t2con = %00000101
CCPR1L = 127
output dir
output AudSynk
output AudRst
Input AuData3
Input AuData3
Input AuData2
Input AuData1
Input AuData0
Input Audck_pin

alku:

SerInput1:

Serin SerInput , 6 , [Write_Byte]
if Write_Byte = 75 then Write_Byte = "K"
serout SerOutput, 6 , [Write_Byte]
if Write_Byte = 75 then goto SerInput2
goto SerInput1

SerInput2:

FOR x = 1 to 8
Serin SerInput , 6 , [Write_Byte]
if Write_Byte = 75 then serout SerOutput, 6 , ["V"]
if Write_Byte = 75 then goto SerInput1
if Write_Byte = 48 then Write_Byte = 0
if Write_Byte = 49 then Write_Byte = 1
if Write_Byte = 50 then Write_Byte = 2
if Write_Byte = 51 then Write_Byte = 3
if Write_Byte = 52 then Write_Byte = 4
if Write_Byte = 53 then Write_Byte = 5
if Write_Byte = 54 then Write_Byte = 6
if Write_Byte = 55 then Write_Byte = 7
if Write_Byte = 56 then Write_Byte = 8
if Write_Byte = 57 then Write_Byte = 9
if Write_Byte = 65 then Write_Byte = 10
if Write_Byte = 66 then Write_Byte = 11
if Write_Byte = 67 then Write_Byte = 12
if Write_Byte = 68 then Write_Byte = 13
if Write_Byte = 69 then Write_Byte = 14
if Write_Byte = 70 then Write_Byte = 15
IF x = 8 then AudData3_0 = Write_Byte
IF x = 7 then AudData7_4 = Write_Byte
IF x = 6 then AudData11_8 = Write_Byte
IF x = 5 then AudData15_12 = Write_Byte
IF x = 4 then AudData19_16 = Write_Byte
IF x = 3 then AudData23_20 = Write_Byte
IF x = 2 then AudData27_24 = Write_Byte
IF x = 1 then AudData31_28 = Write_Byte
next

output AuData3
output AuData3
output AuData2
output AuData1
output AuData0

GOSUB Audck

high Dir
high AudSynk
low Dir

GOSUB Audck

LOW AudRst

GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck

HIGH AudRst

GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck
GOSUB Audck

low AudSynk

LOW AuData3
LOW AuData2
LOW AuData1
LOW AuData0

GOSUB Audck

high AuData3
LOW AuData2
high AuData1
LOW AuData0

For x = 1 to 8

if x = 1 then Write_Byte = AudData3_0
if x = 2 then Write_Byte = AudData7_4
if x = 3 then Write_Byte = AudData11_8
if x = 4 then Write_Byte = AudData15_12
if x = 5 then Write_Byte = AudData19_16
if x = 6 then Write_Byte = AudData23_20
if x = 7 then Write_Byte = AudData27_24
if x = 8 then Write_Byte = AudData31_28

gosub Audck

if Write_Byte & 8 = 8 then high AuData3
if Write_Byte & 8 = 0 then low AuData3
if Write_Byte & 4 = 4 then high AuData2
if Write_Byte & 4 = 0 then low AuData2
if Write_Byte & 2 = 2 then high AuData1
if Write_Byte & 2 = 0 then low AuData1
if Write_Byte & 1 = 1 then high AuData0
if Write_Byte & 1 = 0 then low AuData0

next

GOSUB Audck

high Dir

input AuData3
input AuData2
input AuData1
input AuData0

Ready_Flaf:

GOSUB Audck

if AuData3 = 1 then goto Ready_Flaf
if AuData2 = 1 then goto Ready_Flaf
if AuData1 = 1 then goto Ready_Flaf
if AuData0 = 0 then goto Ready_Flaf

GOSUB Audck

high AudSynk

For x = 1 to 8

GOSUB Audck

Read_Byte = 0
Read_Byte = Read_Byte << 1
IF AuData3 = 1 THEN Read_Byte = Read_Byte + 1
Read_Byte = Read_Byte << 1
IF AuData2 = 1 THEN Read_Byte = Read_Byte + 1
Read_Byte = Read_Byte << 1
IF AuData1 = 1 THEN Read_Byte = Read_Byte + 1
Read_Byte = Read_Byte << 1
IF AuData0 = 1 THEN Read_Byte = Read_Byte + 1

if Read_Byte = 0 then Read_Byte = "0"
if Read_Byte = 1 then Read_Byte = "1"
if Read_Byte = 2 then Read_Byte = "2"
if Read_Byte = 3 then Read_Byte = "3"
if Read_Byte = 4 then Read_Byte = "4"
if Read_Byte = 5 then Read_Byte = "5"
if Read_Byte = 6 then Read_Byte = "6"
if Read_Byte = 7 then Read_Byte = "7"
if Read_Byte = 8 then Read_Byte = "8"
if Read_Byte = 9 then Read_Byte = "9"
if Read_Byte = 10 then Read_Byte = "A"
if Read_Byte = 11 then Read_Byte = "B"
if Read_Byte = 12 then Read_Byte = "C"
if Read_Byte = 13 then Read_Byte = "D"
if Read_Byte = 14 then Read_Byte = "E"
if Read_Byte = 15 then Read_Byte = "F"
IF x = 1 then AudData3_0 = Read_Byte
IF x = 2 then AudData7_4 = Read_Byte
IF x = 3 then AudData11_8 = Read_Byte
IF x = 4 then AudData15_12 = Read_Byte
IF x = 5 then AudData19_16 = Read_Byte
IF x = 6 then AudData23_20 = Read_Byte
IF x = 7 then AudData27_24 = Read_Byte
IF x = 8 then AudData31_28 = Read_Byte

next

serout SerOutput, 6 , [AudData31_28, AudData27_24, AudData23_20, AudData19_16, AudData15_12, AudData11_8, AudData7_4, AudData3_0,"L"]

goto alku

Audck:

If Audck_pin = 0 then goto Audck

Audck1:

If Audck_pin = 1 then goto Audck1

RETURN
end




Edited By timo3 on 1196248114
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

petrik joko olet yrittänyt kirjoittaa Flash:a k5 tai k6 ECU:sta?

Viittisitkö tarkistaa siitä k6 ECU:sta onko siinä MD0 ja MD2 toisiinsa yhteydessä.

Kawassa ne on vedetty yhteen, joten se rajoittaa tiettyihin modeihin pääsyä.

Ja meneekö se FWE suoraan liittimelle K6:ssa vai 8044:n kautta?

Oko sulla tietoa siitä ATU rekistereistä, palautuuko ne alkuperäisiin asetuksiin virrat sammuttaessa?
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Moi,

Sorry - En ole vielä ehtinyt aloittaa uudestaan kirjoitusprojektia. Oli eilen noi tyttären ylioppilasjuhlat ja se on vähän rajoittanut projektin levittämistä askarteluhuoneesta muille pöydille ;-)

Siitä on sen verran aikaa etten nyt suoraan muista miten noi signaalit on vakiona. Mutta jos käytät sitä mittauskaaviota jolla voi mitata miltä pinnojen arvojen pitäisi liittimessä näyttää niin sillä pääsee varmaan aika pitkälle.

Muistaakseni ATU pitää aina resetin jälkeen initialisoida, mutta soft ja hard reseteissä taisi olla joku ero. Löytynee hw manuaalista. ATU:a käsitelläään lähinnä ihan siinä alussa. Tuossa .idc tiedostossa on jonkin verran dokumentoitu tuota ATU:a.

Mä käytän vielä jonkin verran aikaa noihin karttoihin ennen kuin menen uudestaan ohjelmoimaan. RR:ltä tuli eilen jouluntoivotus viestissä joka sisälsi infoa että ms signaali tosiaankin on ns. karttojenvaihtosingaali. Ajattelin sen tarkistaa tänään.

Kirjoittelen tähän alla olevaan heti kun asia edistyy:
http://www.busanistit.org/foorumi....;t=4817
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
Vastaa Viestiin