KWP-1281 im AVR
Verfasser Nachricht
fireball
Lehrling
**


Beiträge: 10
Gruppe: Registriert
Registriert seit: Sep 2007
Status: Offline
Bewertung: 0
Beitrag: #1
KWP-1281 im AVR

Hmm... ich weiss noch nicht, ob das hier so der recte Platz ist... bei Bedarf einfach mal verschieben...

Code wie folgt (WinAVR, AVR-GCC, COM-Simulation via "hapsim", daran angebunden über virtuelle Schnittstellen VAG-COM):

Code:
#include <avr/io.h>

#ifndef F_CPU

//define cpu clock speed if not defined

#define F_CPU 4000000

#endif

void USART_Init(unsigned int baudrate, char databits, char parity, char stopbits)
{
/*
UMSEL   Mode
  0     asynchronous
  1     synchronous
  
UPM1  UPM0  Parity mode
0     0    disabled
0     1    reserved
1     0    enabled: even parity
1     1    enabled: odd parity

USBS  Stop Bit(s)
0      1-bit
1      2-bit

UCSZ2 UCSZ1 UCSZ0  character size
  0     0     0     5-bit
  0     0     1     6-bit
  0     1     0     7-bit
  0     1     1     8-bit
  1     0     0     reserved
  1     0     1     reserved
  1     1     0     reserved
  1     1     1     9-bit

UCPOL transmitted data
0     rising XCK edge
1     falling XCK edge

*/

    unsigned long UBRRVAL=((F_CPU/(baudrate*16UL))-1);

    unsigned char pH, pL = 0;
    if (parity == 'N') {
        pH = 0;
        pL = 0;
    } else if (parity == 'O') {
        pH = 1;
        pL = 1;
    } else if (parity == 'E') {
        pH = 1;
        pL = 0;
    }

    unsigned char sb = 0;
    if (stopbits == 1) {
        sb = 0;
    } else     if (stopbits == 2) {
        sb = 1;
    }    

    unsigned char db0 = 0;
    unsigned char db1 = 0;
    unsigned char db2 = 0;
    if (databits == 7) {
        db0 = 0;
        db1 = 1;
        db2 = 0;
    } else     if (databits == 8) {
        db0 = 1;
        db1 = 1;
        db2 = 0;
    }    
        
    
    //Set baud rate
    UBRRL = UBRRVAL; //low byte
    UBRRH=(UBRRVAL>>8); //high byte

    //Set data frame format
    UCSRC=(1<<URSEL)|(0<<UMSEL)|(pH<<UPM1)|(pL<<UPM0)|(sb<<USBS)|(db2<<UCSZ2)|(db1<<UCSZ1)|(db0<<UCSZ0);

    //Enable Transmitter and Receiver
    UCSRB=(1<<RXEN)|(1<<TXEN);
}

char USART_GetByte()

{
  while(!(UCSRA&(1<<RXC))){};
  return(UDR);
}

char USART_PutByte(char outByte)
{
   UDR=outByte;
}

int main(void)
{
    while(1) {
        unsigned char input;
        USART_Init(5, 7, 'O', 1);
        input = 0x00;
        while (!(input == 0x01)) {
            input = USART_GetByte();
        }
        USART_Init(5, 8, 'N', 1);
        USART_PutByte(0x55);
        USART_Init(5, 7, 'O', 1);
        USART_PutByte(0x01);
        USART_PutByte(0x8A);
    
        input = USART_GetByte();
        input = USART_GetByte();
        input = USART_GetByte();
        input = USART_GetByte();
        input = USART_GetByte();
        input = USART_GetByte();
        
    }
}



Hat einer ne Idee, wieso ich bei Anwahl der ECU in VAGCom irgendwann mal ne 1 bekomme (dafür die Warteschleife oben), aber die Werte, die ich im folgenden als Antwort auf meine gesendeten Bytes erwarte, überhaupt nicht dem entsprechen, was wirklich ankommt? Allein, bis die 0x01 kommt, um die ECU zu adressieren, das dauert schon...

06.09.2007 20:56
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
s_heinz
Administrator
*******


Beiträge: 393
Gruppe: Administrator
Registriert seit: Mar 2007
Status: Offline
Bewertung: 2
Beitrag: #2
RE: KWP-1281 im AVR

Hallo! Wink

Hast Du hier schonmal gelesen...
http://www.blafusel.de/misc/obd2_kw1281.html#1
?

Leider kenne ich mich mit dem KWP nicht aus. Aber oftmals hilft es zu wissen, wo es steht. Cool

Halte uns bitte auf dem Laufenden.
Bei Bedarf kann ich mich ja auch mal stärker einklinken.


Gruß
Sebastian



http://www.passatw8.de
06.09.2007 22:47
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
fireball
Lehrling
**


Beiträge: 10
Gruppe: Registriert
Registriert seit: Sep 2007
Status: Offline
Bewertung: 0
Beitrag: #3
RE: KWP-1281 im AVR

Ah fein... ich kannte bisher nur einige der Seiten, die hier verlinkt wurden...

Auf der Seite findet sich ja auch source zum Lesen der ECU-Daten - mit den Routinen dort sollte es möglich sein, auch den umgekehrten Weg zu implementieren, vielen Dank!

Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2007 08:27 von fireball.

07.09.2007 08:21
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen

Gehe zu Forum: