Hallo,
ich versuche mit einem Atmel Atmega16 unter Nutzung der UART (RX/TX) Schnittstelle seit Tagen eine Kommunikation mit einem Motorsteuergerät von einem Golf 3 herzustellen. Um die TTL Pegel in ISO Pegel zu wandeln nehme ich den L9637d.
Das Steuergerät ist definitiv richtig angeschlossen, da ich es mit VAG-COM und USB Adapter auslesen kann.
Fuse Bits für externen Quarz im uC sind gesetzt!
Schaltung wurde x-mal durchgemessen.(ist korrekt)
Nach der 5 Baud Initialisierung aktiviere ich den Uart und erhalte nur Datensalat. Habe schon alle möglichen Baudraten versucht (4800,9600,10400,......). Bekomme nicht die gewünschten 3 Byte (0x55,0x01,0x8A), sondern insgesamt 7?
Es ist mir einfach nur noch ein Rätsel wieso es nicht funktioniert. Irgendwas klappt mit der Baudrate nicht.
Den Schaltplan habe ich als Attachement beigefügt. Ein Auszug aus dem Quellcode für die Konfiguration des UART befindet sich unten.
Hoffe, das mir vielleicht hier jemand weiter helfen kann!;)
void uart_init(){
UCSRC |= (1<<URSEL); //must be 1 when read/write UCSR UCSRC &=~((1<<UPM1)|(1<<UPM0));//Parität deaktiviert
UCSRC &= ~(1<<UMSEL);//Asynchronous oeration 0
UCSRC &= ~(1<<USBS);//1 Stop Bit 0
UCSRB &=~ (1<<UCSZ2);
UCSRC |= (1<<UCSZ1)|(1<<UCSZ0);
//8 Datenbits 011(Z2,Z1,Z0)
//Einstellen der Baudrate
UCSRC &= ~(1<<URSEL); //must be 0 when read/write UBRR
UBRRH = 0b00000000;
UBRRL = 0b00101111; //UBBR=47 da 7372800/(9600*16)-1
while ((UCSRA & (1<<RXC))) //Flush Receive-Buffer
{}
UDR;
UCSRA = (1 << RXC) | (1 << TXC);// Rücksetzen von Receive und Transmit Complete-Flags
}
void uart_enable(){
UCSRB |= (1<<TXEN); //Enable Transmitter
UCSRB |= (1<<RXEN); //Enable Receiver
UCSRB |= (1<<RXCIE);//RX Interupt Enable
}
Dateianhänge: |
Dateikommentar: Schaltplan
schaltplan1.pdf [33.8 KiB]
920-mal heruntergeladen
|
|