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?
Code:
'-------------------------------------------------------------------------------
'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
Tobias
@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"
Lesezeichen