Hallo..
probier ich gleich mal aus.
ich glaube es aber eher nicht denn ich hab noch ein paar test durchgeführt undfolgendes festgestellt:
Da wird ja eine art string initialisiert (was ist das eigentlich wirklich ??) un ihm der inhalt "Test!" zugewiesen und dann wird das ganze gesendet.. Funktioniert perfekt kein datenmüll hinterher...Code://-----------------------------------------------------------------------------------------// //-----------------------------------------------------------------------------------------// // RS485- Implementierung mit MAX 485 // // Autor: Niels Göran Blume 2007 für ROUVus // // www.hardegser-sv.de/rov // //-----------------------------------------------------------------------------------------// //-----------------------------------------------------------------------------------------// /* Hardware- Konzessionen: Atmega8 mit UART an PORTD0 und PORTD1 und Switch Receive/Send für MAX 485 an PORTD2 Halb-Duplex */ /* Protokoll- Definition: Das Protokoll ist auf den One-Master-Multi-Slave-Betrieb ausgelegt. Bei entsprechender Programmierung ist auch ein eingeschränkter Multi-Master-Betrieb möglich. Standard: Jede Nachricht startet mit "!". Es folgt die Adresse des Ziels in einem Byte. Nun folgen 5 Datenbytes, die beliebig gefüllt werden können (Erweiterung einfach möglich). Am Ende steht in der Zielmaschine ein char- Array bereit, dass alle Bytes seit dem "!" (sprich Adresse und 5 Datenbytes) enthält. | ! | a | L | E | D | 1 | 1 | als Beispiel... An Adresse "a" ergeht die Nachricht "LED11", was vielleicht als "LED1 auf Status 1 setzen" interpretiert werden könnte. */ #define F_CPU 16000000UL #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #include "rs485.c" int main(void) { int i = 0; char *test = "Test!"; // USART initialisieren (8n1 - 19200) rs485_init(); //Output DDD2 setzen für Send/Receive- Wechsel / DDD3 für ne LED DDRD = (1<<DDD2)|(1<<DDD3); warte(5000); rs485_puts('a',"Melde mich zum Dienst ! Meine Adresse: b"); rs485_puts('a', test); sei(); PORTD |= (1 << 3); while(1) //Reaktion in Schleife { if (befehl_fertig == 1) { warte(5000); rs485_puts('a',buffer); befehl_fertig = 0; } } ; }
ich habe den verdacht, dass das an dem array liegt in dem ich die datenbytes speichere.. ich habs mal mit:
char *data;
char *buffer;
und dann buffer = buffer + data;
versucht..
aber da wollte er dann nicht so wirklich, weil er "+" nicht auf binary anwenden wollte..
ich denke irgendwo liegt der sprichtwörtliche hund begraben..
MfG
ngb







Zitieren

Lesezeichen