Hallo,
ich habe einiges gelesen - darum kann ich erst nun schreiben - aber mit Erfolg - zumindes ein bisschen![]()
Den Befehl zum senden habe ich nun aufgeteilt in: #Slave,Parameter:Wert"CR"
so kann ich genau sagen für welchen µC die Nachricht ist, um welche Daten es sich handelt (Strom, Spannung...) und natürlich den Wert, der später dafür auf das LCD soll:
Der Sender hat nun (zum testen)den Befehl: Print "#S1,Strom:1234"
Leider zeigt der Empfänger das Wort "Strom" nicht an?!
Die Anzeige auf dem LCD vom Empfänger ist nun: S1,0:1234
soweit richtig - bis auf die 0 - da sollte "Strom" stehen - kann mir das einer erklären?
TobiasCode:'------------------------------------------------------------------------------- 'Konfiguration µC: $regfile = "m8def.dat" 'AT-Mega8 $crystal = 8000000 'Quarz: 8 MHz $baud = 9600 'Baudrate definieren '------------------------------------------------------------------------------- 'Ein / Ausgänge definieren: Ddrb = &B11000001 'PB7-0: 1 Ausgang, 0 Eingang = Pin PB5-1 als Eingang Ddrc = &B0000001 'PC6-0: 1 Ausgang, 0 Eingang = Pin PC6-1 als Eingang 'PullUps setzen: Portb = &B00111110 '1 = PullUp AKTIV ->PB 7,6,0 nicht aktiv Portc = &B0111110 '1 = PullUp AKTIV ->PC 6,0 nicht aktiv '------------------------------------------------------------------------------- 'LCD konfiguration Config Lcd = 16 * 2 'LCD größe Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , Rs = Portb.6 , E = Portb.7 Cursor Off Noblink '------------------------------------------------------------------------------- 'Alias Taster1 Alias Pinb.1 Taster2 Alias Pinb.2 Taster3 Alias Pinb.3 '------------------------------------------------------------------------------- 'Variablen Dim Test1 As Integer Dim Test2 As Integer Dim Wert1 As Integer Dim Wert2 As Integer '-- Dim Slave As String * 3 , Para As String * 10 , Wert As String * 4 , Parameter As Integer Dim E_byte As Byte , E_flag As Byte '------------------------------------------------------------------------------- 'Timer 'Timer1 = 2x / sec bei 8MHz Config Timer1 = Timer , Prescale = 256 'Teiler Const Timervorgabe = 49910 Enable Timer1 Enable Interrupts On Timer1 Lcd 'timer einschalten '------------------------------------------------------------------------------- 'Für RS232: On Urxc Onrxd 'Interrupt-Routine setzen Enable Urxc 'Interrupt URXC einschalten Enable Interrupts 'Interrupts global zulassen '------------------------------------------------------------------------------- Main: 'Hauptschleife 'analogeingang auslesen und in Variable Wert1 schreiben 'IRGENDETWAS MACHEN: Incr Test1 If Test1 = 65000 Then Toggle Portc.0 'LCD Beleuchtung Incr Test2 Test1 = 0 End If '-- If E_flag = 4 Then 'Empfangsstring komplett Parameter = Val(para) 'aus String Integer machen Cls Locate 2 , 1 Lcd Slave ; "," ; Parameter ; ":" ; Wert 'LCD Waitms 200 Slave = "" 'Slave löschen Para = "" 'Parameter löschen Wert = "" 'Wert löschen E_flag = 0 'Empfang neu setzen End If Goto Main '------------------------------------------------------------------------------- Onrxd: E_byte = Udr Select Case E_byte Case 35 : E_flag = 1 '"#" = Slave wird gesendet Case 44 : E_flag = 2 '"," = Parameter kommt Case 58 : E_flag = 3 '":" = Case 13 : E_flag = 4 '"ENTER" = Empfang komplett Case Else : If E_flag = 1 Then Slave = Slave + Chr(e_byte) If E_flag = 2 Then Para = Para + Chr(e_byte) If E_flag = 3 Then Wert = Wert + Chr(e_byte) End Select Return '------------------------------------------------------------------------------- 'Timer0zähler: 'Timer1 = 49910 'Incr Timer0_60 ' 'If Timer0_60 > 30 Then 'Timer0_60 = 0 'Gosub Lcd 'und später das Programm hier fortführen! 'Toggle Portc.0 'End If 'Return '------------------------------------------------------------------------------- Lcd: Timer1 = 49910 'Cls 'Display löschen (IMMER ERST LCD LÖSCHEN UND DANN POSITION ANGEBEN!!!) Locate 1 , 1 Lcd "Test2: " ; Test2 'Locate 2 , 1 'Lcd + Str(timer0_60) Return
@python_rocks:
benötige ich für RS485 wirklich nur das IC und den Pin der den MAX485 in den Sendemodus schaltet? Das wäre ja "einfach"![]()







Zitieren

Lesezeichen