| 
	
		
			| 
					05.11.2006, 21:45  
				  Beitrag #1 |  
			| 
					
                                                 |   Mark_labview
   LVF-Grünschnabel
 
  
 
 Beiträge: 14
 Registriert seit: May 2005
 
 
 
 kA
 
 
 
 
 | Serielle Komunikation mit Mikrocontroller 
					Hallo Zusammen,
 Ich habe folgendes Problem:
 Ich möchte eine Zahl im Bereich von 0-255, also ein Byte, an meinen Mikrocontroller übertragen. Dazu müsste ich die Zahl in ein ASCII Zeichen umwandeln. Das habe ich mit viel Aufwand auch geschaft, das dumme ist das dabei offenbar die Windows ASCII-tabelle verwendet wird, mein Controller arbeitet aber mit IBM-Standart.
 
 So, giebt es eine Möglichkeit die VISA Schnittstelle Bitweise anzusprechen oder meine eigene ACII-Tabelle anzulegen? Das blöde aber wäre das ich nicht weis wie ich die ganzen Sonderzeichen da eintragen soll/muss.
 
 Vielen Dank für eure Hilfe!
 
 
				
				 |  |  
			|  |  
	
		
			| 
					06.11.2006, 09:34  
				  Beitrag #2 |  
			| 
					
                                                 |   Oliver Listing
   LVF-Freak
 
     
 
 Beiträge: 721
 Registriert seit: Sep 2004
 
 2012 und 2014 (Windows und Linux)
 1998
 EN
 
 22844
 Deutschland
 
 | Serielle Komunikation mit Mikrocontroller 
					Hi Mark, ' schrieb:Hallo Zusammen,
 Ich habe folgendes Problem:
 Ich möchte eine Zahl im Bereich von 0-255, also ein Byte, an meinen Mikrocontroller übertragen. Dazu müsste ich die Zahl in ein ASCII Zeichen umwandeln. Das habe ich mit viel Aufwand auch geschaft, das dumme ist das dabei offenbar die Windows ASCII-tabelle verwendet wird, mein Controller arbeitet aber mit IBM-Standart.
 
 So, giebt es eine Möglichkeit die VISA Schnittstelle Bitweise anzusprechen oder meine eigene ACII-Tabelle anzulegen? Das blöde aber wäre das ich nicht weis wie ich die ganzen Sonderzeichen da eintragen soll/muss.
 
 Vielen Dank für eure Hilfe!
 
da muß dir ein anderer Fehler unterlaufen sein. 
Zum Ersten eine Zahl wandelst du am schnellsten, wie schon sooft im Forum beschrieben, mit der Funktion Byte Array To String  in ein String um (FunctionsNumericConversion ). Vorher noch ein Build Array einschieben. 
Zum Anderen ist es völlig egal in welches sichtbare Zeichen dein Betriebssystem es umwandelt. Es zählt einzig und alleine die Bitreihenfolge, die über die Serielle Schnittstelle gesendet wird und die wird wieder deiner Zahl entsprechen. Du kannst dies einfach mit einem Speicherozzi oder RS232-Analyser nachprüfen. 
Mit welcher Tabelle Windows also gearbeitet hat ist egal - es steckt immernoch die gleiche Zahl dahinter.
 
Gruß 
Oliver
				
				
				 |  
    |  
			|  |  
	
		
			| 
					06.11.2006, 09:52  
				  Beitrag #3 |  
			| 
					
                                                 |   IchSelbst
   LVF-Guru
 
      
 
 Beiträge: 3.708
 Registriert seit: Feb 2005
 
 11, 14, 15, 17, 18
 -
 DE
 
 97437
 Deutschland
 
 | Serielle Komunikation mit Mikrocontroller 
					' schrieb:Ich möchte eine Zahl im Bereich von 0-255, also ein Byte, an meinen Mikrocontroller übertragen. Dazu müsste ich die Zahl in ein ASCII Zeichen umwandeln. 
Ein ASCII-Zeichen ist eine Zahl im Bereich von 0 bis 255.
 
Ein Byte ist eine Typbezeichnung mit der Breite 8 Bit.
 
ASCII, HEX, Dezimal und wie sie alle heißen ist eine Darstellungsform einer Zahl. Hex 0x41 = DEC 65 = ASCII 'A'. Darstellungsformen an sich kann man aber nicht übertragen. Übertragen kann man nur Zahlen. Willst du das Byte 65 - also z.B. ASCII 'A' - in Hexform übertragen musst du die beiden Zahlen für '4' und '1', also 0x34 und 0x31 übertragen.
 Zitat:Das habe ich mit viel Aufwand auch geschaft, 
Da für mich ASCII und Binär identisch ist, kann ich diesen Aufwand nicht nachvollziehen.
 Zitat:das dumme ist das dabei offenbar die Windows ASCII-tabelle verwendet wird, mein Controller arbeitet aber mit IBM-Standart. 
Die ASCII-Tabelle ist normiert. Oder möchtest du EBCDIC übertragen (was ich mir eigentlich nicht vorstellen kann)?
 
Zum Umwandeln Zahl in String siehe Posting von Oliver Frank.
				 
 
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller). 
				
				 |  
    |  
			|  |  
	
		
			| 
					06.11.2006, 10:24  
				  Beitrag #4 |  
			| 
					
                                                 |   Y-P
   ☻ᴥᴥᴥ☻ᴥᴥᴥ☻
 
   
 Beiträge: 12.612
 Registriert seit: Feb 2006
 
 Developer Suite Core -> LabVIEW 2015 Prof.
 2006
 EN
 
 71083
 Deutschland
 
 | Serielle Komunikation mit Mikrocontroller 
					Hallo, 
meines Erachtens muss 41 (hex) nicht mehr in Hex umgewandelt werden, bevor es übertragen wird, wenn ich ASCII 'A' rüberschicken möchte.    
Gruß Markus 
 ' schrieb:ASCII, HEX, Dezimal und wie sie alle heißen ist eine Darstellungsform einer Zahl. Hex 0x41 = DEC 65 = ASCII 'A'. Darstellungsformen an sich kann man aber nicht übertragen. Übertragen kann man nur Zahlen. Willst du das Byte 65 - also z.B. ASCII 'A' - in Hexform übertragen musst du die beiden Zahlen für '4' und '1', also 0x34 und 0x31 übertragen.
 
--------------------------------------------------------------------------Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
 --------------------------------------------------------------------------
 
				
				 |  |  
			|  |  
	
		
			| 
					06.11.2006, 10:31  
				  Beitrag #5 |  
			|  |  
			|  |  
	
		
			| 
					06.11.2006, 10:54  
				  Beitrag #6 |  
			| 
					
                                                 |   IchSelbst
   LVF-Guru
 
      
 
 Beiträge: 3.708
 Registriert seit: Feb 2005
 
 11, 14, 15, 17, 18
 -
 DE
 
 97437
 Deutschland
 
 | Serielle Komunikation mit Mikrocontroller 
					' schrieb:meines Erachtens muss 41 (hex) nicht mehr in Hex umgewandelt werden, bevor es übertragen wird, wenn ich ASCII 'A' rüberschicken möchte.  
Das ist richtig. 
 
Wenn ich ASCII übertragen will, brauche ich nicht wandeln. 
 
Muss ich aber HEX übertragen, weil die Gegenseite quasi lesbare Zeichen verlangt - nämlich HEX-Darstellung - muss ich die beiden ASCII-Zeichen der Hex-Darstellung übertragen. 
 
Im übrigen bin ich der Meinung, dass Mark_LabVIEW möglicherweise eine Hex-Übertragung meint, auch wenn er ASCII schreibt.    
 
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller). 
				
				 |  |  
			|  |  
	
		
			| 
					06.11.2006, 21:17  
				  Beitrag #7 |  
			| 
					
                                                 |   Mark_labview
   LVF-Grünschnabel
 
  
 
 Beiträge: 14
 Registriert seit: May 2005
 
 
 
 kA
 
 
 
 
 | Serielle Komunikation mit Mikrocontroller 
					<div align="left"> 
Hallo,
 
ersteinmal allen vielen Dank für eure Antworten!
 Zitat:Zum Anderen ist es völlig egal in welches sichtbare Zeichen dein Betriebssystem es umwandelt. Es zählt einzig und alleine die Bitreihenfolge, die über die Serielle Schnittstelle gesendet wird und die wird wieder deiner Zahl entsprechen. 
Das ist mir im laufe des gestrigen Abends auch bewusst geworden. Dann habe ich den ganzen Abend damit zugebracht, zu Rätzeln wo den dan mein Fehler noch liegen könnte. Da ich nicht drauf gekommen bin geb ich das Rätzel jetzt an euch weiter. Ich geb zu das das eine harte Nuss ist da der Fehler sowohl bei LabVIEW als auch in meinem Microkontroller Programm liegen kann. Und beide habt ihr nicht vorliegen. Naja villeicht hat doch jemand eine Idee mit den folgenden Hinweisen:
 
Also wie gesagt ich wandle eine Integer Zahl in ein ASCII-Zeichen und schike es dann über RS232 zu meinem Controller. Das was dort ankommt gebe ich ohne umschweife auf einem Display aus. Ein speicheroszy besitze ich leider keines, kann mir also die Daten dazwischen nicht ansehen. Das Ergebniss: Ich stelle fest das einige Zaheln korrekt ankommen, andere nicht. Ich hab mal eine kleine ( nicht vollständige liste gemacht) Villeicht erkennt ja jemand einen Algorythmus der auf das Problem schliesen lässt. Danke und viel Spass beim Rätzeln!
 
gesendet  -    empfangen 
0 	- 248 
1	- 249 
2	- 250 
3	- 251 
4	- 252 
5	- 253 
6	- 254 
7	- 255 
8	- 8 
9	- 9 
10	- 10 
11	- 11 
12	- 12 
13	- 13 
14	- 14 
15	- 15 
16	- 136 
17	- 137 
18	- 138 
19	- 139 
20	- 140 
21	- 141 
22	- 142 
23	- 143 
24	- 136 
25	- 137 
26	- 138 
27	- 139 
28	- 140 
29	- 141 
30	- 142 
31	- 143 
32	- 200 
33	- 201 
40	- 40 
41	- 41 
48	- 200 
49	- 201 
64	- 232 
72	- 72 
73	- 73 
74	- 74 
104	- 104 
105	- 105 
</div>
				
 
				
				 |  
    |  
			|  |  
	
		
			| 
					06.11.2006, 21:33  
				  Beitrag #8 |  
			| 
					
                                                 |   Mr.T
   LVF-SeniorMod
 
 
 Beiträge: 1.007
 Registriert seit: Jun 2005
 
 2009
 2005
 kA
 
 88400
 Deutschland
 
 | Serielle Komunikation mit Mikrocontroller 
					Hallo! 
Jetzt mische ich auch mal mit.
 
Da in Deiner Liste 16 UND 24 die selbe Zahl zu erzeugen scheint muß hier ein Logikfehler in der Interpretation der Bits vorliegen. Wertest Du evtl. Start und Stoppbits mit aus?
 
Einige von uns sind aber auch C-Programmiertauglich. Vielleicht postest Du einfach mal Dein VI und den Empfangssourcecode Deines Controlers - dann kann Dir sicher geholfen werden. Oder Du Postest hier Dein VI und im http://www.cplusplus-forum.de  den C-Code. Ich gehe jetuzt einfach mal davon aus, dass der Controller in C/C++/C# Programmiert wurde.
 
Gruß und programmiere in Zukunft einfach auch die Controller mit LabVIEW - dann klappts einfacher   !
  
 
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5] 
				
				 |  |  
			|  |  
	
		
			| 
					06.11.2006, 22:14  
				  Beitrag #9 |  
			|  |  
			|  |  
	
		
			| 
					06.11.2006, 22:44  
				 |  
			| 
					
                                                 |   eg
   LVF-SeniorMod
 
 
 Beiträge: 3.868
 Registriert seit: Nov 2005
 
 2016
 2003
 kA
 
 66111
 Deutschland
 
 | Serielle Komunikation mit Mikrocontroller 
					Wenn es wirklich wiederholbar ist, dann tippe ich auf die Darstellung. Im Mikrocontrollerprogramm, musst du die empfangenen Zeichen mit printf() ausgeben (wenn du in C programmierst) aber vorher auf BYTE casten. Ich will wirklich, wie Mr.T. schon gesagt hat deine Empfangs- und Sende-routinen in LV als auch in C anschauen.
 Der Denkfehler steckt wie immer in der Vorstellung (Binär <-> ASCII).
 
 Gruss, Eugen
 
 
				
				 |  |  
			|  |  |  |