'===============================================================================
'------------[Steuergerät an Adresse 'addr' aufwecken]--------------------------
'===============================================================================
Sub Ecu_init(addr As Byte)
   Const Wait_ms = 200                                      ' Konstante für Pausen zwischen den einzelnen Bits (1/5bd = 200ms)

   Lcdat 1 , 46 , "5Bd-Init..."

   Reset Ucr.3                                              ' USART über UCR-Register deaktivieren (siehe Datenblatt ATMEGA32)
   Reset Ucr.4                                              ' USART über UCR-Register deaktivieren (siehe Datenblatt ATMEGA32)

   Portd.6 = 0                                              ' Bereitschaft Grüne LED aus

   Ucsrb.txen = 1                                           ' Vorbereitung: PD1 ein
   Portd.4 = 1                                              ' Wait LED-Anzeige an
   Waitms 800                                               ' Kleine Ruhepause
   Portd.4 = 0                                              ' Wait LED-Anzeige aus

   '------[Bitreihenfolge erstellen]--------------------------------------------
   Dim Address As String * 10
   Dim C As String * 1

   Address = Bin(addr)                                      ' Adresse in Bin-String umwandeln
   Address = Right(address , 7)                             ' Erstes Bit abschneiden da nur 7O1 verwenden wird (7 Datenbits) [Address = Mid(address , 2 , 7)]
   Address = "10" + Address                                 ' Stop- und Parity-Bit Anführend  ->| "10" für &h01 | "11" für &h7E | "01" für &h33
   Address = Address + "0"                                  ' Startbit anführen
   Lcdat 6 , 1 , Address

   ' ---------------------------------------------------------------
   ' |     I N I T I A L I S I E R U N G   b e i   5  B A U D:     |
   ' |-------------------------------------------------------------|
   ' |  Paritätsbestimmtung:                                       |
   ' |  --------------------                                       |
   ' |                                                             |
   ' |  Anzahl der Einsen des Informationswort ->                  |
   ' |                                                             |
   ' |  ..gerade Anzahl (0;2;4;6): ==> 1                           |
   ' |  ungerade Anzahl (1;3;5;7): ==> 0                           |
   ' |                                                             |
   ' |=============================================================|
   ' |             | Startbit   Parity                             |
   ' | Steuergerät | |          | Stopbit                          |
   ' | an Adresse  | | LSB<>HSB | |  ------------------------------|
   ' | Aufwecken:  | | <D-Bits> | | | Summe d.Einsen | eigentliche |
   ' |             | S 1234 567 P S | im Infowort    | Parität     |
   ' |-------------|----------------|------------------------------|
   ' | &h01 (Motor)| 0 1000 000 0 1 |   1 (ungerade) | 0 -> stimmt |
   ' | &h33 (EOBD) | 0 1100 110 0 1 |   4 (gerade)   | 1 ->?falsch?|
   ' | &h17 (Inst.)| 0 1110 100 1 1 |   4 (gerade)   | 1 -> stimmt |
   ' | &h7E (KWP2k)| 0 0111 111 1 1 |   6 (gerade)   | 1 -> stimmt |
   ' |-------------------------------------------------------------|
   ' | z.B. &h01:                                                  |
   ' | 1 -> 0 1000 000 0 1  ===> 1 Start-Bit (Wechsel von 1 auf 0) |
   ' |                           7 Daten-Bits;                     |
   ' |                           0 Paritätsbit;                    |
   ' |                           1 Stop-Bit                        |
   ' ---------------------------------------------------------------

   '  InB Kb1 Kb2 bei &H7E
   '  085 111 015
   '  015*128+111 = KWP2031 Vagcom aber 2081 ?
   '----------------------------------------------------------------
   For Cache = 10 To 1 Step -1
      C = Mid(address , Cache , 1)
      If C = "1" Then
         Ucsrb.txen = 1                                     ' PD1:ein [Start / Datenbit / Odd-Parity / Stop-Bit] -> HIGH
      Else
         Ucsrb.txen = 0                                     ' PD1:aus [Start / Datenbit / Odd-Parity / Stop-Bit] -> LOW
      End If
      Waitms Wait_ms
   Next Cache
   '----------------------------------------------------------------------------

   Set Ucr.3                                                ' USART über UCR-Register wieder aktivieren (siehe Datenblatt ATMEGA32)
   Set Ucr.4                                                ' USART über UCR-Register wieder aktivieren (siehe Datenblatt ATMEGA32)

   Portd.6 = 1                                              ' Bereitschaft Grüne-LED an
End Sub


'===============================================================================