Gamma-View Megasquirt VE Tabelle abstimmen C-Control

Antworten
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Gamma-View Megasquirt VE Tabelle abstimmen C-Control

Beitrag von RG500 »

Hi Leute
Habe heute mein neues CO Projekt fast fertig gestellt
Ich habe schon lange eine alte Conrad C-Control rumliegen und habe meine Gamma auch schon fast fertig . Mein Problem ist es jetzt, da ich Alpha N und keine Lambda Sonde habe Meine VE Tabelle einzustellen. Das kennt ihr ja alle. Aber ich kann kein Laptop mitnehmen. Mein Ziel war es mit 3 Taster die VE Tabelle einzustellen plus vierte Taste um Daten in die Megasquirt zu brennen.
Da die C-Control grottenlangsam ist musste ich erstmal ein Assembler Programm schreiben , um die Daten von der Megasquirt auszulesen. Zudem habe ich ein super Programm gefunden um die komplette Kommunikation zwischen Megatune und Megasquirt aufzuzeichnen. Ich glaube die Programmierung sollte noch etwas verbessert werden aber ich kann jetzt die Daten ändern. Meine Frage ist jetzt ob hier im Forum Interesse besteht ?
Ich werde hier dann alles veröffentlichen.
Wünsche euch noch ein frohes Fest

Armin
id073897
Beiträge: 261
Registriert: Di Nov 01, 2005 9:35 am
Wohnort: Frankfurt

Beitrag von id073897 »

Ich bekunde hiermit reges Interesse :-)

Aber mal 'ne andere Frage: wie stimmst Du dann ohne Lambdasonde ab?

Gruss,
Gunter
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Lambdasonde

Beitrag von RG500 »

Ich habe in unterschiedlichen Foren gelesen, dass es beim Zweitakter nicht möglich sei, den Motor mit einer Lambdasonde abzustimmen.
Hat einer eine andere Information? Ich habe die Maschine im Leerlauf mit der Color Tune Glaszündkerze abgestimmt. Und ich bin immer begeistert wie gut das geht. Aber im oberen Leistungsbereich habe ich da noch keine Idee. Ich vergleiche halt die Abgastemperatur und stimme Zylinder nach Zylinder ab. Aber über einen guten Tip bin ich sehr dankbar.
id073897
Beiträge: 261
Registriert: Di Nov 01, 2005 9:35 am
Wohnort: Frankfurt

Re: Lambdasonde

Beitrag von id073897 »

RG500 hat geschrieben:Ich habe in unterschiedlichen Foren gelesen, dass es beim Zweitakter nicht möglich sei, den Motor mit einer Lambdasonde abzustimmen.
Womit wurde das denn begründet? Abgesehen von möglichem Ölnebel (der sich auch filtern lässt), warum sollte das nicht möglich sein?

Gruss,
Gunter
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Lambdasonde

Beitrag von RG500 »

Es wurde gesagt, dass sich zeitweise unverbranntes Gemisch im Auspuff befindet.
Das bedeutet kein Abgas sondern Luft. Die Sonde würde "MAGER" anzeigen.
Ich habe noch eine alte Sonde könnte es ja mal ausprobieren.
id073897
Beiträge: 261
Registriert: Di Nov 01, 2005 9:35 am
Wohnort: Frankfurt

Re: Lambdasonde

Beitrag von id073897 »

RG500 hat geschrieben:Es wurde gesagt, dass sich zeitweise unverbranntes Gemisch im Auspuff befindet.
Das bedeutet kein Abgas sondern Luft. Die Sonde würde "MAGER" anzeigen.
Ich habe noch eine alte Sonde könnte es ja mal ausprobieren.
Das ist wohl wahr. Allerdings sollte man auch die Zeiträume in Betracht ziehen, in denen sich das Frischgas dort befindet, innerhalb derer die Sonde darauf reagiert und wie oft der Sondenwert im µController abgefragt wird. Und nicht zuletzt ist es sicherlich auch eine Frage der Position der Sonde.

Ich bin eher zufällig über einen Yamaha Bootsmotor gestolpert, der wohl eine Lambda-Regelung verbaut hatte. Die Bezeichnung für die Einspritzung lautet OX66. Ausserdem hat Yamaha einen neuen 2T-Direkteinspritzer auf den Markt gebracht, allerdings ohne Lambdasonde, Baureihe ist Yamaha HPDI. Vielleicht findet sich da was von Interesse für Dich, ich habe es nur kurz mal überflogen, was Gugel so ausgespuckt hat.

Gruss,
Gunter
Marius
Beiträge: 55
Registriert: Do Jun 15, 2006 2:45 pm
Wohnort: Erftstadt
Kontaktdaten:

Beitrag von Marius »

Beim 2T ist das in der Tat nicht so einfach. Mein Chef könnte da jetzt mehr zu erzählen, der hat früher Motorradrennsport betrieben. Es sollen schon Motoren bei gemessenen Lambda 0,60 den Hitzetod gestorben sein...
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Der Link zum Programm

Beitrag von RG500 »

Hier ist der Link zu den Projektfiles ( Basic und Assembler File )
Bild
Bitte vor dem ersten laden des Basic Files den auskommentierten Befehl
'SYSCODE "gamma.S19" wieder aktivieren ->SYSCODE "gamma.S19"
Wenn das Assemblerprogramm einmal geladen wurde, den Befehl wieder auskommentieren. Das EEprom kann laut Motorola nur 10000 mal beschrieben werden. Wichtig Das Programm ist für die 12 X 12 VE Tabelle der MS_Extra geschrieben
Gruss
Armin
id073897
Beiträge: 261
Registriert: Di Nov 01, 2005 9:35 am
Wohnort: Frankfurt

Beitrag von id073897 »

Jetzt muss ich doch mal fragen: woher weisst Du, an welcher Stelle der veTable der Wert steht, denn Du ändern möchtest? Spuckt die MS das aus oder rechnest Du das selbst aus?

Gruss,
Gunter
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Beitrag von RG500 »

Ich sehe immer den aktuellen VE-wert für TPS / RPM.
Wenn ich auf den + oder - taster drücke änder ich den Wert und speichern ihn im RAM mit der B(urn) Taste spreicher ich es im EEProm
Das ist halt nur möglich bei konstanter Drehzahl und TPS.
Ich habe mir gedacht, wenn ich dei MS abstimme, arbeite ich mich langsam vor .
Im Programm lese ich erst mit "R" die aktuellen Werte aus. Byte 8 ist TPS und Byte 14 ist RPM
Dann sende ich Hex : 80 01 86 zur MS und erhalte die VE1 Tabelle
und suche den VE Wert der aus RPM und TPS gebildet wird .
MS1/Extra Format hr_10
Motorrad Suzuki RG 500 ( 500ccm Zweitakter )
LC1
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Beitrag von RG500 »

******************************************************
* Anzeige derTPS , RPM und VE Werte
* Variable
* a1 = TPS
* a2= RPM
* a3= RPMwert aus der VE Tabelle
* a4= TPS wert aus der VE Tabelle
* a5= TPS wertigkeit * 12 für das Byte aus der VE Tabelle
* a6= RPM wertigkeit für die VE Tabelle
* a7= a5 *12 + a6 +1 -> Nr. Byte aus der VE Tabelle
* a8= VE Byte aus der Tabelle resultierend aus TPS und RPM
* Programmname Gamma-View.ASM
* Compilat: m1.S19
* Basic: SYS &H0101
* syscode "m1.s19"
* (c) Armin Markus 12/2006
******************************************************
baudrate equ $0D ; Baudratenregister
cr1 equ $0E ; Controlregister 1
cr2 equ $0F ; Controlregister 2
status equ $10 ; Statusregister
daten equ $11 ; Datenregister

org $101

;############# RS232 initialisieren ######################

lda #$C0 ; 9600 Baud
sta baudrate
lda #$00 ; keine Interrupts
sta cr1
lda #$0C ; Sender und Empfaenger ein
sta cr2

;############### --->Befehl an Megasquirt gebe Onlinedaten aus ###########

lda #82 ;Befehl an MS LESEN
jsr writecom
ldx #$8 ; 7 Leerstellen bis TPS Werte

;############### lese IST TPS Gasschieberstellung aus #######################
l1 jsr read
decx
bne l1
jsr read ;lade jetzt aktuelle TPS werte
sta $a1 ;TPS Speicher im Byte 1 User Datenbereich

;##################### überspringe 5 bytes #######################

ldx #$5
l3 jsr read ; l5 Bytes überspringen bis zum RPM Byte
decx
bne l3

;############ lese IST Drehzal RPM #######################

jsr read
sta $a2 ;RPM speicher im Byte 2 User Datenbereich
ldx #27
l4 decx
jsr read
bne l4

;########################### kleine Pause nicht unbedingt notwendig #####
pause lda #10
loop1 ldx #10
loop2 decx ; X 1 weniger - decrementiert
bne loop2 ; branch not equal- wenn nicht 0,dann loop2
deca ; AKKU um eins verkleinern
bne loop1 ; branch not equal nach loop1


;################# ab hier werden die VE Werte geladen #######################



lda #80
jsr writecom
lda #01
jsr writecom
lda #86
jsr writecom ; Befehl Lese VE zur MS senden

ldx #161 ; überspringe VE Tabelle 161 157 ( 174 ohne rpm )Leerstellen bis RPM Werte
l5 jsr read
decx
bne l5

;################# HOLE VE RPM #########################################
jsr read
jsr read
sta $a4
ldx #0 ;12 TPS Daten vergleichen
stx $a6
l6 jsr read
stx $a6
cmp $a2 ;ist der Wert der VE Tabelle kleiner als der istwert RPM
bhi ve_rpm ;springe wenn kleiner speicher den wert und springe zurück
sta $a4
incx ; zähler
stx $a6
cmpx #11
bne l6

;####################### HOLE VE TPS ###################################
l6a jsr read
sta $a3
ldx #0 ;12 TPS Daten vergleichen
stx $a5
l7 jsr read
stx $a5
cmp $a1 ;ist der Wert der VE Tabelle kleiner als der istwert RPM
bhi ve_tps ;springe wenn kleiner speicher den wert und springe zurück
sta $a3
incx ; zähler
stx $a5
cmpx #11
bne l7



leere ldx #$7
l8 lda daten ; leere puffer
decx
bne l8


;################ errechne platz in der VE Tabelle ################

lda $a5 ;TPS wert multipliziert mit 12
ldx #12 ; multiplikator
mul
;sta $a7
add $a6 ;addiere rpm wert
add #1
sta $a7 ; speicherstelle für ve wert tps *12 + rpm
;rts
;####################### Wert aus Tabelle ##########################
lda #80
jsr writecom
lda #01
jsr writecom
lda #86
jsr writecom ; Befehl --> Lese VE zur MS senden

jsr read ; viermal lesen bevor Daten kommen
jsr read
jsr read
jsr read
ldx #0 ; Suche VE Wert
ho_ve jsr read
incx
sta $a8
cpx $a7
bne ho_ve

;################ Leere Puffer #############################

ldx #$ff
l9 lda daten ; leere puffer
decx
bne l9
rts ;zurück zum basic

;############### lese RS232 ################################

read brclr 5,status,read ; warte auf bit 5 =1
lda daten
rts

;############### Schreibe auf RS232 ##########################

writecom brclr 7,status,writecom; Schnittstelle frei?
sta daten
rts


;##########################################################

ve_tps jsr read
incx
cmpx #11
bne ve_tps
jmp leere

;#############################################################3
ve_rpm jsr read
incx
cmpx #11
bne ve_rpm
jmp l6a
MS1/Extra Format hr_10
Motorrad Suzuki RG 500 ( 500ccm Zweitakter )
LC1
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Beitrag von RG500 »

' Uebergabebyte fur Megasquirt
define ist_TPS byte[1]
define ist_RPM byte[2]
define TPS byte[3]
define RPM byte[4]
define Zaehler_TPS byte[5]
define Zaehler_RPM byte[6]
define VE_Byte byte[7]
define VE_istwert byte[8]
define VE_sollwert byte[9]

'LCD Anzeige
DEFINE hundert BYTE[10]
DEFINE zehn BYTE[11]
DEFINE eins BYTE[12]
define lcd_buf byte[13]
define lcd_param byte[14]
define speicherstelle Byte[15]
define LEERZ &H20
define lcd_port byteport[2]
define taster1 port[1]
define taster2 port[2]
define taster3 port[3]
define taster4 port[4]
define taster5 port[5]
define taster6 port[6]
define taster7 port[7]
define taster8 port[8]


define lcd_rw port[13]
define lcd_rs port[14]
define lcd_e port[15]
pause 10

gosub LCD_INIT
#Main
SYS &H0101
'SYSCODE "m1.S19"

gosub VE
hundert = TPS/100
zehn = (TPS MOD 100) /10
eins = TPS - (hundert * 100 + zehn *10 )+48
hundert = hundert +48
zehn = zehn + 48
'ende werte konvertieren
lcd_param =84 : gosub LCD_WRITECHAR
lcd_param =80 : gosub LCD_WRITECHAR
lcd_param =83 : gosub LCD_WRITECHAR
lcd_param =61 : gosub LCD_WRITECHAR
lcd_param = hundert : gosub LCD_WRITECHAR
lcd_param = zehn : gosub LCD_WRITECHAR
lcd_param = eins : gosub LCD_WRITECHAR
lcd_param =32 : gosub LCD_WRITECHAR
lcd_param =32 : gosub LCD_WRITECHAR
gosub VE
hundert = RPM/100
zehn = (RPM MOD 100) /10
eins = RPM - (hundert * 100 + zehn *10 )+48
hundert = hundert +48
zehn = zehn + 48

lcd_param =82 : gosub LCD_WRITECHAR
lcd_param =80 : gosub LCD_WRITECHAR
lcd_param =77 : gosub LCD_WRITECHAR
lcd_param =61 : gosub LCD_WRITECHAR
lcd_param = hundert : gosub LCD_WRITECHAR
lcd_param = zehn : gosub LCD_WRITECHAR
lcd_param = eins : gosub LCD_WRITECHAR
lcd_param = &H02 : gosub LCD_WRITECMD
gosub LINEFEED
gosub VE
hundert = VE_istwert/100
zehn = (VE_istwert MOD 100) /10
eins = VE_istwert - (hundert * 100 + zehn *10 )+48
hundert = hundert +48
zehn = zehn + 48
lcd_param =86 : gosub LCD_WRITECHAR
lcd_param =69 : gosub LCD_WRITECHAR
lcd_param =61 : gosub LCD_WRITECHAR
lcd_param = hundert : gosub LCD_WRITECHAR
lcd_param = zehn : gosub LCD_WRITECHAR
lcd_param = eins : gosub LCD_WRITECHAR
'lcd_param = &H02 : gosub LCD_WRITECMD
lcd_param =32 : gosub LCD_WRITECHAR
'lcd_param =32 : gosub LCD_WRITECHAR
gosub VE
' 86=V 69=E
hundert = VE_sollwert/100
zehn = (VE_sollwert MOD 100) /10
eins = VE_sollwert - (hundert * 100 + zehn *10 )+48
hundert = hundert +48
zehn = zehn + 48

lcd_param =61 : gosub LCD_WRITECHAR
lcd_param = hundert : gosub LCD_WRITECHAR
lcd_param = zehn : gosub LCD_WRITECHAR
lcd_param = eins : gosub LCD_WRITECHAR
lcd_param =32 : gosub LCD_WRITECHAR
'lcd_param = &H02 : gosub LCD_WRITECMD




hundert = speicherstelle/100
zehn = (speicherstelle MOD 100) /10
eins = speicherstelle - (hundert * 100 + zehn *10 )+48
hundert = hundert +48
zehn = zehn + 48

lcd_param =61 : gosub LCD_WRITECHAR
lcd_param = hundert : gosub LCD_WRITECHAR
lcd_param = zehn : gosub LCD_WRITECHAR
lcd_param = eins : gosub LCD_WRITECHAR
lcd_param = &H02 : gosub LCD_WRITECMD
gosub VE

Goto main

#LINEFEED
lcd_param = 2 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile
return

'*** LCD_Interface ***
'( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
#LCD_INIT
' alle ports 0
lcd_port = OFF
' 8-Bit-Modus aktivieren
lcd_param=&H38 : gosub LCD_WRITECMD
' mit 8-Bit-Command in 4-Bit-Modus umschalten
lcd_port=&B00000010
tog lcd_e
tog lcd_e
' ab jetzt 4-Bit-Modus
lcd_param = &H28 : gosub LCD_WRITECMD
lcd_param = &H0C : gosub LCD_WRITECMD
' Display loeschen
#LCD_CLS
lcd_param = &H02 : gosub LCD_WRITECMD
lcd_param = &H01 : gosub LCD_WRITECMD
return
' Zeilenwechsel
#LCD_GOTOLINE
if lcd_param = 1 then lcd_param = &H80
if lcd_param = 2 then lcd_param = &HC0
goto LCD_WRITECMD
' LCD-Kommando
#LCD_WRITECMD
lcd_buf = OFF
goto LCD_WRITE
' Zeichenausgabe
#LCD_WRITECHAR
lcd_buf = &B00100000
' Kommando oder Zeichen an Display senden
#LCD_WRITE
lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
tog lcd_e
tog lcd_e
lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
tog lcd_e
tog lcd_e
return

#ve
if taster8=on then VE_sollwert = VE_istwert :speicherstelle = VE_Byte-1
if taster7=on then VE_sollwert = VE_sollwert + 1:put 87:put speicherstelle:put VE_sollwert
if taster6=on then VE_sollwert = VE_sollwert - 1:put 87:put speicherstelle:put VE_sollwert
if taster5=on then Print "B";
'if taster6 = 0 then put 87:put speicherstelle:put VE_sollwert
return
MS1/Extra Format hr_10
Motorrad Suzuki RG 500 ( 500ccm Zweitakter )
LC1
id073897
Beiträge: 261
Registriert: Di Nov 01, 2005 9:35 am
Wohnort: Frankfurt

Beitrag von id073897 »

Das habe ich noch nicht verstanden.

Wenn Du nicht gerade genau auf dem rpm- und dem tps-Wert bist, der eine Kreuzungsstelle in der veTable bildet, dann hast Du doch vier Werte, in die theoretisch geschrieben werden könnten: der nächsthöhre rpm (rpm2), der nächsttiefere rpm (rpm1), der nächsthöhere tps (tps2) und der nächsttiefere tps (tps1).

Code: Alles auswählen


                 tps1   tps2
                    |      |
rpm1 -----------+----+---
                        * -------------- aktuelle Position von tps und rpm
rpm2 -----------+----+--- 

Woher bekommst Du das?

Gruss,
Gunter
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Beitrag von RG500 »

Nach Deiner Tabelle nehme ich TPS1 und RPM1 weil TPS2 bzw. RPM2 noch nicht erreicht worden sind.
Ich mach das so wie Megatune. zb ich habe den real istwert 1100 RPM und TPS 100
IN Der VE Tabelle steht für RPM 500, 1000, 2000, 3000, 4000,
und für TPS 20 40 60 80 100 120 ......
Ich nehme dann den Wert für RPM 1000 und TPS 100 und das steht auch auf dem Display RPM 1000 TPS 100 und die nächste Zeile der VEistwert 55 und dann der Sollwert wenn eine + / - Taste gedrückt wurde.
Wenn du bei Megatune auf " Basic Settings " und dann auf "Fuel VE Table 1 " gehst dann kannst du ja links und unten grüne Felder sehen die den istwert entsprechen. So kannst du es dir vorstellen.
MS1/Extra Format hr_10
Motorrad Suzuki RG 500 ( 500ccm Zweitakter )
LC1
RG500
Beiträge: 173
Registriert: Sa Mai 14, 2005 8:47 pm
Wohnort: ab 1.1.2008 wieder in Düsseldorf
Kontaktdaten:

Re: Gamma-View Megasquirt VE Tabelle abstimmen C-Control

Beitrag von RG500 »

Hier ist die neuste Version getestet auf der MS1 mit dem HR_10 code
Ich habe alles auf SPEED DENSITY umgestellt
Es ist die erste C-Control von Conrad elektronik V1.1
Ich habe alle Daten im Anhang gepackt.
Palmtue ist ok aber auf dem Motorrad ist es besser ein Tool zu haben was man direkt beim fahren bedienen kann.
@rmin
MS.zip
(3.89 KiB) 224-mal heruntergeladen
MS1/Extra Format hr_10
Motorrad Suzuki RG 500 ( 500ccm Zweitakter )
LC1
Antworten