Hallo,
ich habe einen Sensor, der seine Daten per RS485 an eine Anzeigeeinheit sendet. Wenn ich beide mega´s neu starte, klappt alles einwandfrei. Sobald ich die Anzeigeeinheit jedoch was in Richtung Sensor schicken lasse, kommt die Anzeige durcheinander und zeigt mir nicht mehr die richtigen werte an.
So sollte es aussehen:
118 cm ( funktioniert bis ich von der Anzeige was an den sensor schicke )
So sieht es aus, nachdem ich was gesendet habe.
811 cm ( also die Zahlen verschoben )
hier ist der Code von der Anzeigeeinheit:
und hier der Code vom Sensor :Code:'----------------- CPU Config --------------------------- $regfile = "m16def.dat" $crystal = 1000000 $baud = 1200 '--------------- Portdefinition ------------------------ Config Porta = Output Config Portb = Output Config Portd.7 = Input Config Portd.6 = Input Config Portc = Output Config Portd.2 = Output Config Debounce = 100 '---------------------------------------- LCD ---------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5 '----------------------------------- Timer -------------------- Enable Interrupts '----------------- Sub ------------------------------ Declare Sub Balken Declare Sub Anzeige '-------------- Alias ----------------------------------- Led1 Alias Porta.7 Led2 Alias Porta.6 Led3 Alias Porta.5 Led4 Alias Porta.4 Backlight Alias Portb.4 Rs485 Alias Portd.2 Taster2 Alias Pind.6 Taster1 Alias Pind.7 '--------------------------------- Timer ------------------ Config Timer0 = Timer , Prescale = 8 Enable Timer0 On Timer0 Hintergrundzeit '-------------------------- RS485 ----------------------- Rs485 = 0 On Urxc Onrxd '-------------------- Dims --------------------------- Dim Ubertrag As String * 3 Dim Wert As Integer Dim Xtast As Bit Dim X1 As Byte Dim Backtime As Integer Deflcdchar 1 , 17 , 14 , 17 , 17 , 17 , 17 , 14 , 32 '----------------------------- Variable ------------- X1 = 1 '------------------- Main ------------------------------- Xtast = 0 Cls Cursor Off Noblink Backlight = 1 Wait 1 Locate 1 , 1 Lcd " " ; Chr(1) ; "ltank Sensor " Locate 2 , 1 Lcd " by Kay Pohl " Wait 2 Cls Locate 1 , 1 Lcd "-- Tankinhalt --" Wait 1 Enable Urxc Led2 = 1 Led3 = 1 Led4 = 1 '-------------------- Hauptprogramm --------------- _start: Debounce Taster2 , 0 , Sprungmain Debounce Taster1 , 0 , Licht Goto _start '---------- Einlesen ---------- Onrxd: Inputbin Ubertrag Toggle Led4 Call Anzeige Return '---------------------------------------- Zeichenanzeige -------------------------------------- Sub Anzeige Locate 2 , 1 Lcd Ubertrag ; " cm" ; " " End Sub '------------------------------------------- Hintergrundzeit -------------------------------- Hintergrundzeit: Incr Backtime If Backtime = 30000 Then Backlight = 0 End If Return '------------------------------------------------ Licht ------------------------------------------- Licht: Backlight = 1 Backtime = 0 Goto _start '-------------------------------------- Sprungmain ------------------ Sprungmain: Disable Urxc Rs485 = 1 Print "1" Do Loop Until Ucsra.txc = 1 Set Ucsra.txc Rs485 = 0 Led2 = 0 Waitms 200 Led2 = 1 Waitms 10 Enable Urxc Goto _start
ich sitze jetzt schon seit 2 Tagen an dem Problem und befürchte, das ich irgendeinen Denkfehler mache. Könnt Ihr mir helfen ?Code:'------------------------ CPU Config ------------------------- $regfile = "m8def.dat" $crystal = 1000000 $baud = 1200 $framesize = 42 $swstack = 42 $hwstack = 42 '------------------------ Port Config -------------------------- Config Portb = Output Config Portd.2 = Output Config Scl = Portc.5 Config Sda = Portc.4 Const Srf02_slaveid = &HE0 '------------------------ Alias ---------------------------------- Led1 Alias Portb.0 Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Rs485 Alias Portd.2 '-------------------------- Subs ------------------------------- Led1 = 1 Led2 = 1 Led3 = 1 Led4 = 1 '--------------------------- RS485 ------------------------------- Rs485 = 0 Enable Interrupts On Urxc Onrxd Enable Urxc '----------------------------- Dims ------------------------------ Dim Entfernung As Integer Dim V As Byte Dim Wert As String * 3 Dim Ubertrag As String * 3 Dim Sendung As String * 1 Dim Zeit As Byte Dim Temp1 As String * 3 Zeit = 1 '----------------------- Funcitons ------------------------- Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer Declare Sub Senden() '------------------------- Boot --------------------------------- Wait 1 I2cinit V = 1 Waitms 100 '---------------------------------- Mainprogramm ------------------ Main: Entfernung = Srf02_entfernung(srf02_slaveid) Waitms 100 Wert = Str(entfernung) Ubertrag = Format(wert , "000") Waitms 100 Rs485 = 1 Print Ubertrag ; Do Loop Until Ucsra.txc = 1 Set Ucsra.txc Rs485 = 0 Waitms 500 Goto Main '------------- Hilfsfunktionen für SRF02 ---------- Function Srf02_firmware(byval Slaveid As Byte) As Byte Local Firmware As Byte Local Slaveid_read As Byte Slaveid_read = Slaveid + 1 I2cstart I2cwbyte Slaveid I2cwbyte 0 'Leseregister festlegen I2cstop I2cstart I2cwbyte Slaveid_read I2crbyte Firmware , Nack I2cstop Srf02_firmware = Firmware End Function Function Srf02_entfernung(byval Slaveid As Byte) As Integer Local Lob As Byte Local Hib As Byte Local Firmware As Byte Local Temp As Byte Local Slaveid_read As Byte Slaveid_read = Slaveid + 1 'Messvorgang in starten I2cstart I2cwbyte Slaveid I2cwbyte 0 I2cwbyte 81 'in Zentimetern messen I2cstop Warteaufmessung: Waitms 1 Firmware = Srf02_firmware(slaveid) If Firmware = 255 Then Goto Warteaufmessung I2cstart I2cwbyte Slaveid I2cwbyte 2 'Leseregister festlegen I2cstop I2cstart I2cwbyte Slaveid_read I2crbyte Hib , Ack I2crbyte Lob , Nack I2cstop Srf02_entfernung = Makeint(lob , Hib) End Function '-------------------------------------------- Empfang ------------------------- Onrxd: Inputbin Sendung If Sendung = "1" Then Toggle Led1 End If Return '------------------------ Senden --------------------------------------- Sub Senden() End Sub
mfg Kay







Zitieren

Lesezeichen