Hey..
Hier der Code...
Ich habe gerade nur einen etwas anderen teil zur verfügung..
der einzige unterschied ist nur, dass statt dem Ausgang mit einer LED der ausgang mit dem Gate genutzt wird (habt den code angepasst, könnte aber minimale abweichungen vom verwendeten haben - den poste ich heut abend - sorry)
Hoffe das hilft bei der lösung
MfG
ngb
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) { rs485_init(); //USART initialisieren (8 Datenbits, no Parity, 1 Stopbit) //Baud: 19200 DDRD = (1<<DDD2)|(1<<DDD3); //Output DDD2 setzen für Send/Receive- Wechsel //DDD3 für ne LED warte(5000); rs485_puts('a',"Melde mich zum Dienst ! Meine Adresse: b"); sei(); //Interrupts enablen PORTD &= ~(1 << 1); //Gate-Port ausschalten while(1) //Reaktion in Schleife { if (befehl_fertig == 1) //Befehl vorhanden { warte(5000); //Zeit damit ich den Sende-Mode am PC mit der Maus beenden kann if(strcmp(buffer, "bpwm11") == 0) //Beispielkommando als Vergleichsgrundlage { PORTD |= (1 << 1); //mit einzelnem Byte (&buffer[i]) | Gate an }; if(strcmp(buffer, "bpwm10") == 0) //Beispielkommando als Vergleichsgrundlage { PORTD &= ~(1 << 1); //mit einzelnem Byte (&buffer[i]) | Gate an }; befehl_fertig = 0; //Befehl abgearbeitet - Status zurücksetzen } }; }







Zitieren

Lesezeichen