Hallo..
probier ich gleich mal aus.
ich glaube es aber eher nicht denn ich hab noch ein paar test durchgeführt undfolgendes festgestellt:
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;
}
}
;
}
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...
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
Lesezeichen