Der Empfang klappt - aber nur einmal...
Ich sende 1 mal pro Sekunde 10 neue Werte. Leider zeigt der Empfänger keine Veränderung.
Die Variable "N" hat immer den Wert 14!
Tobias
Hallo,
ich möchte 10 werte = 10 Byte von einem µC zum anderen senden.
Es sind immer 10 Werte und es sendet immer der selbe µC.
Am Anfang sende ich "250" als Start, dann die 10 DatenBytes und dann Wert "251"
Code:Dim Test(10) As Byte 'als Array Dim C As Byte '--- Do For C = 1 To 10 Test(c) = C 'fill array Next Print Chr(250); 'zum starten Printbin Test(1) ; 10 'hier die Daten Print Chr(251); 'Ende Wait 2 Loop End
Das funktioniert und ich kann die Daten am PC sehr schön sehen!
Nun der Empfang:
Wert 250 wird empfangen und setzt Variable N auf "0"
Bei jedem empfangenem Byte wird N um 1 hochgezählt
und "E_byte" wird in "Test(N)" übertragen.
Wird 251 empfangen soll die Variable z.B. "Test(3)" auf dem LCD angezeigt werden.
Leider wir nur T:T:T:T:T:T:T:T:T:T:T:T: angezeigt....
Was muss ich ändern?
Tobias
Code:Dim N As Byte Dim Test(10) As Byte 'als Array 'Für RS232: On Urxc Onrxd 'Interrupt-Routine setzen Enable Urxc 'Interrupt URXC einschalten Enable Interrupts 'Interrupts global zulassen Do Loop End Onrxd: Incr N E_byte = Udr Select Case E_byte Case 250 : N = 0 'Empfang starten Cls Case 251 : Lcd "T:" ; Test(3) 'Empfang beenden Case Else : Test(n) = E_byte End Select Return
...
Der Empfang klappt - aber nur einmal...
Ich sende 1 mal pro Sekunde 10 neue Werte. Leider zeigt der Empfänger keine Veränderung.
Die Variable "N" hat immer den Wert 14!
Tobias
...
Hallo,
ein PRINT sendet immer noch ein CR LF von sich aus hintendran.
Mit Print Chr(250); geht 0xFA 0x0D 0x0A über die RS232 raus.
Der Zähler N wird mit 250 auf 0 gesetzt und mit dem CR LF geht er auf 2
Es folgen 10 Byte durch Printbin und Zähler N ist auf 12.
Mit Print Chr(251); müßte im Empfänger N auf 15 gezählt werden; vielleicht wird durch das Lcd Kommando da der Empfang eines Zeichens verhindert oder der Indexüberlauf von test(n) zerstört etwas.
Statt PRINT könntest Du PUT benutzen.
Soweit meine Theorie.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Hallo,
das ist nicht ganz richtig:
Der Printbefehl sendet grundsätzlich CR & LF mit. Durch das ";" hinter dem Printbefehl wird das verhindert.
Deshalb das ";" am Ende: Print Chr(250);
Aber davon abgesehen wartet der Empfänger bis 251 gesendet wird und zählt nicht die eingehenden Pakete ab.
Da muss noch etwas anderes sein.
Tobias
...
Hallo,
Stimmt! Hab ich bisher nicht beachtet.Der Printbefehl sendet grundsätzlich CR & LF mit. Durch das ";" hinter dem Printbefehl wird das verhindert.
Neue Theorie:
Könnte es sein, daß Du das RS232 Signal vom Sender zum Empfangs µC noch invertieren mußt?
Ein Interface zwischen µC und PC invertiert gewissermaßen - da kommen Deine Daten gut im PC an. Wenn Sender- und Emfangs-µC direkt verbunden sind, könnte durch die Nichtinvertierung was schiefgehen. Die ankommenden Daten könnten auf dem Lcd nicht darstellbar sein. Irgendwas kommt ja an, sonst wäre N nicht auf 14?
http://de.wikipedia.org/wiki/RS-232#...men_und_Timing
Entschuldige, wenn das Murks ist was ich geschrieben habe. Ich nehme SW-UART und wenn die Daten nicht richtig sind, kann man da im OPEN Kommando mit INVERTED die Polaritäten auf TX invertieren.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Denke, dein PC-TErminal ist vifer als dein Empfangs-µC
Du schickst binäre Zeichen (&H01-&H0A). Das kann dein LCD nicht herzeigen.
Mach als Test erstmal druckbare Zeichen, zB so:
Code:For C = 1 To 10 Test(c) = C + 47 'fill array &H30 - &H39 d.i. ascii "0" - "9" Next
und probier's dann
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
merkwürdiger weise steht nun 48 49 53 54 auf dem LCD - ich habe aber die ersten 4 abgefragt... (also 48,49,50,51)
so - nun mal etwas aufwändiger:
Beide µC haben ein LCD.
Der Sender hat zusätzlich ein Poti um den Wert zu erhöhen(0-1023)
Sender LCD zeigt Poti=0; Werte sind 1,2,3,4,5,6,7,8,9,10 auf dem LCD
Am Anfang wird "250" gesendet, dann die Werte udn am Ende "251"
Am PC kann ich genau diese Kette korrekt sehen(siehe Bild).
Nun zum Empfang:
Das LCD zeigt: 1,2,6,7,8,9,10,0,0,0
In der Do...Loop steht nichts.
Wenn ich das Poti verändere ändern sich auch die Werte auf beiden LCD´s. Nur das bei dem Empfänger immer dieser Sprung ist.Code:Onrxd: Incr N E_byte = Udr Select Case E_byte Case 250 : N = 0 'Empfang starten Cls Case 251 : Gosub Anzeige Case Else : Test(n) = E_byte End Select Return Anzeige: Locate 1 , 1 Lcd Test(1) Locate 1 , 5 Lcd Test(2) Locate 1 , 9 Lcd Test(3) Locate 1 , 13 Lcd Test(4) Locate 1 , 17 Lcd Test(5) Locate 2 , 1 Lcd Test(6) Locate 2 , 5 Lcd Test(7) Locate 2 , 9 Lcd Test(8) Locate 2 , 13 Lcd Test(9) Locate 2 , 17 Lcd Test(10) Return
Hardware: beide µC nutzen HW-UART 9600Baud und haben je einen MAX232 - und die Hardware läuft denke ich einwandfrei.
Der Wert "250" am Anfang wird wohl erkannt, da die Empfangsreihenfolge stimmt - die "251" wird erkannt, da sonst das empfangene nicht auf dem LCD erscheinen kann.
Tobias
...
bei meiner Testgeschichte hab ich dir was unterschlagen:
da müsstes du schreiben
Lcd "T:" ; chr(Test(3) )
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Vielleicht doch mal das CLS in die Ausgabe verschieben. Was besseres fällt mir auch grad nicht ein. Sehr sonderbarer Effekt.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen