Translate

29 Oktober 2015

Kleines Zwischendurchprojekt: serielles Display für den Golf 3-Tacho anstatt der Uhr

Mit meinem Triebwerk gehts gerade nicht weiter, ich warte noch immer auf die Nabe.
Was den Eigenbau-Controller betrifft, da gäbs zwar ein paar Kleinigkeiten zu erzählen,
aber das wird zu gegebener Zeit mal nachgeholt, wenn ich auch sicher bin dass es
so klappt wie ich mir das vorstelle.......ich brauche mehr Leistung!!!!!! viel mehr!!!!
mindestens 150V (kein Problem bei 1200V-IGBT ;-)  ) 
und 500A besser 600A oder mehr, auch wenns normalerweise nicht genutzt wird
(schon ein Problem mit 400A IGBTs  :-(  )

Deshalb jetzt mal was ganz anderes.......

Ich hatte schon vor langer Zeit mal so eine Idee.........

Ein superwinziges Display, das ich anstelle der Digitaluhr in einen Golf3-Tacho
reinsetzen kann. Sehr viel Platz ist da wirklich nicht... 
Der Ausschnitt ist ca 31 x 12 mm groß und lediglich bei ganz bestimmten Typen
kann man das originale Display der Uhr überhaupt ausbauen so dass da Platz für 
was Anderes frei wird. Grundfläche maximal 51 x 31 mm und in die Tiefe ca 20mm.
Von Electronic Assembly gibts das EA DIPS082-HNLED -Display, und das ist ideal
für diesen Zweck. Aussenmaß 20 x 40 mm und 2 x 8 Zeichen auf 30 x 11 mm
Das passt tatsächlich da rein! Aber die Elektronik muss auch noch da rein!
(5V Spannungsregler, Siebkondensatoren, Quarz,  Pullup-Widerstände etc.)

Weil man das Rad nicht immer wieder neu erfinden muss will ich zur Datenübertragung
das "Curtis 840-Protokoll" benutzen, das ich schon vor einigen Jahren mal geknackt
habe. Erstens ist das nötige Programm schon "in der Schublade" so dass ich es ganz einfach anpassen konnte, zweitens ist es immer wieder mal vorgekommen, dass
jemandem das 840er Display mit seiner Gabelstapler-Optik so gar nicht gefällt.....

Das 840er Display hat eigentlich nur 1 x 8 Zeichen und einige LEDs als Ladezustandsanzeige sowie eine LED, die blinkt wenn geladen wird.

Die Ladezustandsanzeige brauche ich nicht, in einer früheren Programmversion
hatte ich die aber schon mal so umgesetzt dass der Balken auf einer LCD-Anzeige
in der unteren Zeile dargestellt wird.
Die Ansteuerung der LEDs erfolgt Bit-Codiert über ein bestimmtes Byte der Datenpakete.
Ich werde dieses Byte hier ein bisschen zweckentfremden und zunächst mal
dazu benutzen, damit zu steuern, ob der Text in der oberen oder in der unteren Zeile
angezeigt wird.

Aus Platzgründen muss ich hier wieder auf den eigentlich veralteten ATTINY 2313
zurückgreifen.Der Atmega8 bzw 48/168/328 passt leider nicht unter das Display.
Der 2313 ist der kleinste mit "richtiger" serieller Schnittstelle. Mit "Software-Uart"
habe ich nicht die allerbesten Erfahrungen gemacht, also 2313 und kein anderer.
(In SMD-Technik hat man wieder mehr Auswahl)
Den Prototyp habe ich auf einer Lochrasterplatine aufgebaut. vorerst ist das ein 
Einzelstück. Ich will damit ein paar Nachrichten meines Controllers anzeigen
Was genau, das weiss ich noch nicht so ganz, vor allem die Temperatur,
und so Dinge wie "Bereit" oder irgendwelche Fehlermeldungen.
aber die Leistung wäre auch interessant.Das ergibt sich schon noch.

Zur Erinnerung:
Den Aufbau des Protokolls habe ich schon vor einigen Jahren hier gepostet:
So ein "Curtis Datenpaket" besteht immer aus 13 Ascii-Zeichen die mit 9600Bd 9N1
gesendet werden. Keine Steuerzeichen wie [CR] oder [LF]


los gehts mit 58 (  = :  )
dann 83 (  = S  )
dann folgt der Text (acht Zeichen)
und die 40 (   = (   )
Dann kommt ein Byte,das die LEDs steuert
(das hat mich anfangs gefoppt, weil das bei all meinen Aufzeichnungen
immer 4 war........drum hielt ich das für das Ende-Zeichen)
und eine Zahl, die ich anfangs für das LED-Byte hielt, die sich dann
aber recht bald als Checksumme herausstellte.

>>>>Diese Zeichenfolge wird ständig gesendet,
keine weitere Kommunikation mit dem Display

Der Text war kein Problem, und mit den LEDs war auch schnell alles klar.
Die werden vom vorletzten Byte bestimmt und Bit-Codiert geschaltet.
Die ersten fünf Bit steuern die fünf LEDs des Balkens unterhalb des Displays,
Das sechste Bit schaltet die Störungsmeldung (die immer blinkt, wenn sie an ist)
und mit dem 7. und 8. Bit bringt man die erste und zweite LED zum Blinken.
(Die müssen dazu aber mit dem ersten bzw. zweiten Bit aktiviert sein)

Jetzt fehlte eigentlich nur noch die Checksumme...................
Da habe ich einige Zeit damit verbracht, die rauszubekommen,
das war einiges an Rechnerei.........
aber letztendlich wars dann gar nicht so schwer......
Hier werden einfach alle Bytes vor der Checksumme
xor verknüpft (Spaltenweise)  0 + 0 = 0  ; 0 + 1 = 1 ;  1 + 1 = 0
und da man in Bascom auch dezimal dargestellte Zahlen ganz einfach xor
verknüpfen kann wars dann auch ein lösbares Problem.



Das Programm für den ersten Prototyp habe ich wieder mal in Bascom geschrieben.
Ich habe die ganze LED-Auswertung entfernt und so kam ein recht überschaubares Programm heraus das auch in den winzigen 2k Flash des 2313 passt.

Hier fehlen auch noch ein paar Kleinigkeiten wie ein Timeout bei Signalausfall
(Die Texte sollen ja auch verschwinden, wenn ewig nichts neues nachkommt)
und das ehemalige LED-Steuerbyte werde ich noch etwas verfeinert auswerten.
8 Bit sind schliesslich auch als acht Steuerleitungen verwendbar.
Das alles gibt es schon als Atmega-Programm, müsste also nur wieder hier
hinzugefügt werden. Momentan würde das aber nur stören
Das folgende Programm stellt den empfangenen Text dar:
Ein Grundgerüst aus dem man noch viel mehr machen kann!
Viel Spass damit

Ach, beinahe hätte ich es vergessen.....Die Signale müssen noch angepasst
werden. Bei  RS232 ist +12V = 0 und -12V = 1 bei TTL ist +5V = 1 und 0V = 0
Aus Platzgründen und nur bei solch "unkritischen Anwendungen" wo auch mal
Daten verloren gehen dürfen macht das zur Not auch ein einfacher Transistor.
Weil hier die Daten auch nur in eine Richtung laufen könnte man statt einem TTL
zu RS232-Wandler wie dem MAX232 auch eine RS485-Verbindung einrichten 
ohne dass Senderseitig (Controller) eine zusätzliche Steuerleitung nötig ist.
(zur Umschaltung Senden/Empfangen) je ein SN75176 würde sich da anbieten.
5V TTL ist einfach zu störempfindlich, Da sollten die Leitungen die Platine 
nicht verlassen. Für RS232 braucht man ein 16-poliges IC und
mindestens vier kleine Kondensatoren, den Platz habe ich nicht.
Für RS485 genügt ein 8-poliges IC für ca 50 Cent ohne zusätzliche Bauteile.
Weil RS485 auch zu einem kleinen Bus erweitert werden kann ist es doppelt 
interessant. Vielleicht kann ich ja damit mal die wichtigsten Infos vom Controller 
und meiner "Franzbox" bzw einem noch nicht existierenden BMS auf dem kleinen 
Display vereinen.Ich meine hier nur Warnmeldungen und keine detaillierten Infos.
Das müsste dann aber alles aufeinander als Master-Slave-System abgestimmt
werden und das ist mir momentan noch nicht wichtig genug um dafür
jetzt schon Zeit zu opfern. Weil mir aber inzwischen bei meinem Controller
die Anschlüsse knapp werden und da das dort angeschlossene 4 x 20 Display
im Betrieb eigentlich überhaupt nicht benötigt wird, aber sechs Portleitungen
belegt bin ich gerade am überlegen wie ich die Anzeige auf das serielle Display 
auslagern kann.


genug gelabert, hier ist das Grundprogramm zur Curtis-Daten-Anzeige
es läuft so, aber es könnte durchaus sein, dass man da noch so manches verbessern kann
Insbesondere das Ablegen der einzelnen Werte könnte in einem Array erfolgen
und für die Checksummenberechnung wäre das dann per Array auch eleganter zu lösen.
(aber nicht so klar verständlich) Wie schon erwähnt muss noch ein Timeout rein
und eine Art automatischer Reset damit sich alles wieder synchronisiert wenn mal
"der Wurm drin" ist. Der Start bei Doppelpunkt ist dann problematisch wenn an anderer
Stelle zufällig auch dieses Zeichen steht. insbesondere auf die Checksumme hat man aber
keinen Einfluss.daher muss immer schön mitgezählt werden an welcher Stelle man gerade steht.




$regfile = "attiny2313.dat"
$crystal = 20000000
$baud = 9600


Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
>>>>gehört alles in eine Zeile, Belegung/Zuordnung der Display-Pins

Config Lcdbus = 4
Config Lcd = 16 * 2
>>>> 8 x 2 gibt es nicht bei Bascom

Cursor Off

Config Serialin = Buffered , Size = 30
>>>> mit Puffer ist einfach besser wenn manche Dinge wie LCD beschreiben
>>>> auch mal etwas dauern

Enable Interrupts



Cls
Locate 1 , 1
Lcd "********"
Wait 1
>>>>kleine Spielerei beim Einschalten


Dim S0 As Byte        >>>>eingelesenes Byte
Dim Led As Byte       >>>>Der Name für die Variable ist nicht ideal......
                                >>>> zählt die Byte

Dim Chs As Byte       >>>>Checksumme
Dim B0 As Byte        >>>> einzelne Byte des Pakets
Dim B1 As Byte
Dim B2 As Byte
Dim B3 As Byte
Dim B4 As Byte
Dim B5 As Byte
Dim B6 As Byte
Dim B7 As Byte
Dim B8 As Byte
Dim B9 As Byte
Dim B10 As Byte
Dim B11 As Byte
Dim B12 As Byte


Dim Str00 As String * 1     >>>> Zeichen das zum Byte gehört
Dim Strx As String * 9      >>>> Zeichenkette zum Anzeigen

B11 = 0
Led = 13
>>>> klare Verhältnisse beim Start schaffen

Do

If Ischarwaiting() = 1 Then
 S0 = Inkey()
 Gosub Onrxd
 End If

Loop
>>>> ein kurzes Hauptprogramm!

Onrxd:
If S0 = 58 And Led > 11 Then
Led = 0
Strx = ""
End If
>>>> löschen/starten des neuen String bei Doppelpunkt

Str00 = Chr(s0)
>>>>Zeichen aus dem Byte erzeugen
If Led > 1 And Led < 10 Then Strx = Strx + Str00
>>>>zusammensetzen

If Led = 0 Then B0 = S0
If Led = 1 Then B1 = S0
If Led = 2 Then B2 = S0
If Led = 3 Then B3 = S0
If Led = 4 Then B4 = S0
If Led = 5 Then B5 = S0
If Led = 6 Then B6 = S0
If Led = 7 Then B7 = S0
If Led = 8 Then B8 = S0
If Led = 9 Then B9 = S0
If Led = 10 Then B10 = S0
If Led = 11 Then B11 = S0
If Led = 12 Then
B12 = S0
Chs = B0 Xor B1
Chs = Chs Xor B2
Chs = Chs Xor B3
Chs = Chs Xor B4
Chs = Chs Xor B5
Chs = Chs Xor B6
Chs = Chs Xor B7
Chs = Chs Xor B8
Chs = Chs Xor B9
Chs = Chs Xor B10
Chs = Chs Xor B11
End If
>>>> Einzelne Zeichen/Byte merken und Checksumme berechnen

If Led = 12 And Chs = B12 Then
>>>> wenn auch die Checksumme passt, dann.....
'Cls
'Locate 1 , 1
>>>> würde nur in die obere Zeile schreiben bei 1 x 8 Display
If B11 < 128 Then Locate 1 , 1 Else Locate 2 , 1
Lcd Strx
End If
>>>>oben oder unten ausgeben je nach Wert von B11
>>>>

Incr Led
If Led > 13 Then Led = 13
>>>> nächstes Byte verarbeiten

Return

End


03 Oktober 2015

Mein VW-Bausatz, Bestandsaufnahme, Platzangebot im Golf 3

Wie versprochen gibt es jetzt gaaanz viele Bilder!
 


Seit gestern hat mein silberner 92er 90PS Automatik wieder frischen TÜV! 
Ich habe ihn extra dafür wieder für ein paar Wochen angemeldet.
Der ist jetzt fast zwei Jahre (und zuvor auch schon fast anderthalb......)  nur
nutzlos rumgestanden. Erschreckend, wie die Zeit verrinnt!


 Das E-Gas vom Golf 3 TDI
....eine furchtbar aufwändige Konstruktion



andere Seite, der Geberzylinder für die Kupplung



Die Plastikklammer, die es nur zusammen mit einem
neuen Bremspedal gibt! Aufpassen beim Zerlegen!
Die Stange des Bremskraftverstärkers geht da nicht
ohne Spezialwerkzeug raus!


 Zwei Pedalerien, die ich schon mal besorgt habe. Wie befürchtet hat mein 92er noch nicht die Bohrungen im Pedalträger wo der Halter des Gas-Gebers festgeschraubt wird.
Die Aufnahmen für E-Gas und Kupplungs-Geberzylinder sind extra Teile und verschraubt.
Am linken Teil sind die drei Bohrungen für den Gas-Geber gut erkennbar.
Ich muss also doch die komplette Pedalerie tauschen oder mir was anderes einfallen lassen


Die Pedalerie aus dem TDI (rechts)hat wohl schon so einiges hinter sich......
Ich werde also die Halterungen für den Geberzylinder an das andere Teil schrauben oder 
eben gleich in mein Auto.Bohrungen für die Hydraulik sind vorhanden.
Sogar die Durchbrüche in der Spritzwand! (mein roter 95er hat die Löcher dafür nicht!)
Das hängt jetzt davon ab, wie ich die Frage des Gaspedal-Gebers löse



Hmmm.... noch ein Problem! Diese Schaltung ist vom Corrado.
Für das Golf-Getriebe müssten die Seilzüge übereinander
liegen und nicht nebeneinander. Das ist Baujahrbedingt.
Die ganze Hebelei wurde mal überarbeitet und bei diesem Getriebe
müsste das obere Seil halt direkt über dem anderen eigehängt werden.
Da muss ich noch eine passende Schaltung besorgen.
Ich habe zwar eine Aufnahme gebastelt mit der man schalten kann,
aber das ist keine saubere Lösung. Die passenden Teile gibt es,
also müssen sie auch eingebaut werden. Alles andere ist Murks!



Der Motorraum meines silbernen Automatik-Golf 3


 Platzangebot: ca 1,10m in der Breite


und etwa 25 cm bis Oberkante Getriebe



Alle Leitungen zum Motor (Zündung, Geber für Temp. und Öl, Einspritzung) 
laufen über diesen Stecker. Das finde ich sehr gut gelöst!
 

 Eine Menge Platz im Luftkasten. Hier sitzt die Motorsteuerung



 Der Motorraum meines 1,6er 75PS. Wegen des kleineren Kühlers ist da viel mehr Platz.
Die komplette Front ist nur ein Plastikteil das da hingeschraubt ist.
Das lässt sich sicher noch besser ausnutzen wenn man den Kühler samt Aufnahme entfernt









Im "kleinen" Golf gibt es einen gewinkelten Stutzen für die Unterdruckleitung.
Gut zu wissen! Das spart Platz!


 Die 12V-Batterie soll mal da hin, wo der Anlasser war. Die hat da ganz locker Platz
und die Kabel sind lang genug. (hier noch das kleine Diesel-Getriebe)








Die komplette Batteriehalterung (da ist auch der Behälter fürs Öl der Servolenkungdran) ist auf den
linken Längsträger geschraubt. Das muss alles wo anders hin! da gibts bessere Plätze


 Unter der Rücksitzbank wäre noch viel ungenutzter Raum
 

 Das Blech unterm Rücksitz sitzt etwas tiefer, ca 5cm unterhalb der Auflage der Rücksitzbank und die Handbremsseile stören auch, trotzdem könnte man hir so manches unterbringen. Ich denke da z.B. an ein Ladegerät.Der Platz wo links der Auspuff sitzt ist rechts auch noch frei.
Zur Orientierung: der Meterstab liegt am senkrechten Blech unterhalb der Rücksitzbank
Gleich hinter dem Auspufftopf ist der Querträger der Hinterachse (nicht im Bild)
 

 Der Tank ist rechts von der Reserveradmulde etwa 25 cm hoch
 
Der Kofferraumboden ist nur ein einfaches Blech Breite 80cm

Höhe 60cm
Da drunter sitzt nichts als der Tank.
Hier kann man problemlos ein Batteriefach 60 x 80 reinsetzen
Die Beule rechts ist die Aussparung für den Tankstutzen




 Na bitte! es geht doch! Die Manschette des linken inneren
Gelenks ist viel kleiner als das Riesenteil, das rechts montiert war.
Es passt trotzdem auf die rechte Welle.
So muss nicht noch mehr aus dem Motorgehäuse rausgeschliffen werden
Der Schwingungsdämpfer muss noch runter.
Es geht auch ohne dieses Teil.

Kleiner Update vom 09.10.15:
Alles einfach mal zusammengesteckt um zu sehen ob alles pass wie erhofft.
Passt! zumindest fast...... Die Antriebswelle sitzt ein bisschen tiefer und auch etwas weiter
vom Getriebe in Richtung Rad. Da muss noch eine winzige Kleinigkeit weg. Kaum der Rede wert.


Im unteren Bereich der Mulde ist etwas wenig Platz für die Schraubenköpfe


Für die ersten Versuche muss eine Kupplung vom 90PS-Motor reichen. (gabs sehr günstig......)
Wenns irgendwann mal deutlich mehr sein müsste, dann gäbs für deutlich mehr Geld die
Möglichkeit, die VR6-Kupplung zusammen mit einer erleichterten G60 Schwungscheibe
zu montieren. Da ist man dann aber schnell mal gute 300 Euro los!
Weil die Kupplung vom 90PS-Passat aber ohnehin schon größer ist, als die vom Golf3 GTI 2,0
mit 115PS sollte die eigentlich auch schon genügen.
Hier ist das Ganze auch nur mal versuchsweise auf den Adapter fürs Entengetriebe montiert.
Der hat auch den VW-Kurbelwellenflansch, ist aber letztendlich nicht praxistauglich,
weil da die Nabe nicht ausreichend im Lager befestigt ist.
Auf die Nabe in aktueller Ausführung warte ich noch immer.......die ist etwas in Vergessenheit
geraten.....