-
 
          
	
		
		
	
	
	
	
	
		
			
- 
	
	
		
		
			
				
				
				
					Verlorene Zeichen mit INKEY()...
				
					
						
							Hallo,
 
 meine Aplikation sieht folgendermaßen aus: ich empfange mit INKEY() innerhalb einer do...loop-Schleife ein Byte aus einem Terminal über eine Funkstrecke. Jedesmal wenn ein Byte anliegt  (INKEY()>0), lasse ich es mir zum Test mit print aufs Terminal senden.
 
 Das Problem ist nur, das nur ein Zeichen ankommt, wenn ich die entsprechende Taste am Sendeterminal längere Zeit gedrückt hallte, oder mehrmals schnell hintereinander drauftippe. Ich will durch drücken einer Terminaltaste eigentlich einen Servomotor schrittweise steuern, was so allerdings keinen Sinn machen würde.
 
 Wenn ich jetzt aber mit INPUT einen gesendeten String entgegennehme und mit print zurückgebe, fehlen keine Zeichen, an der Funkstrecke oder ähnlichem kanns also nicht liegen - es muß irgendwas mit der Funktionsweise des INKEY()-Befehls zu tun haben, denke ich.
 
 Weiß einer warum ich mit INKEY() soviele Zeichen verliere?
 
 Danke schonmal!
 
 p.S.: Ich hab auch schon versucht den Seriellen Eingang mit einem Puffer zu konfiguerien, leider ohn Erfolg.
 
 
 
 
 
 
 
- 
	
	
		
		
			
				
				
						
						
				
					
						
							Jetzt hab mal probehalber ein Delay von 100ms per WAITMS in den Loop eingefügt und empfange nun per INKEY alle Zeichen problemlos. Schade nur das es ohne nicht geht. Jetzt probier ich mal schrittweise, die Verzögerung zu reduzieren...
						 
 
 
 
 
 
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter Genie
			
			
			
			 
			
				
 
					    
				 
 
			
				
				
						
						
				
					
						
							Hi 
 
 ich glaube nicht, dass du dadurch ALLE zeichen bekomst.
 
 Aber zunächst: Benutzt du ein voll-duplex oder ein half-duplex-Modul?
 ich glaube nämlich eher, dass wenn du, während du mit print die zeichen zurücksendest, die zeichen verlierst.
 
 VLG Tobi
 
 
 
 
 
 
 
- 
	
	
		
		
			
				
				
						
						
							
 
					
						
							Ich benutze transceiver in halbduplex-technik. Trotzdem kann ich mir nicht vorstellen, das es daran liegt. Die Ausgabe der eingelesenen Zeichen habe ich nähmlich erst später, nachdem ich das Problem festgestellt habe eingebunden. Erst habe ich lediglich bei jeder Eingabe von z.B. einer 1 einen Servo um einen Schritt nach links bewegt, was allerdings eben aufgrund der verlorenen Zeichen nur sehr stockend möglich war. 
 
 Da fällt mir noch ein, das ich jetzt noch die Zeile ENABLE  URXC ins Programm eingefügt hab, weils ichs woanders gesehen habe. Kanns vielleicht auch daran liegen, das es jetzt geht - ich weiß garnicht, was die Anweisung bewirkt?
 
 Na ja - kann ich ja auch gleich ausprobieren...
 
 Hier ist übrigens mein Testprogramm:
 
 
 
 $regfile = "m16def.dat"
 $crystal = 8000000
 $hwstack = 32
 $swstack = 10
 $framesize = 40
 $baud = 19200
 Dim Taste As Byte
 Dim B As Byte
 Dim E As Byte
 Dim Servo_vorgabe_h As Byte
 Dim Servo_vorgabe_v As Byte
 Dim Key_input As Byte
 
 Config Servos = 2 , Servo1 = Portb.2 , Servo2 = Portb.3 , Reload = 10
 Config Serialin = Buffered , Size = 20
 
 Config Portb.2 = Output
 Config Portb.3 = Output
 
 Enable Urxc
 
 Enable Interrupts
 
 Waitms 100
 
 Open "comb.0:9600,8,n,1" For Output As #1
 
 Servo_vorgabe_h = 85
 Servo_vorgabe_v = 96
 Sart_main_loop:
 Print " Testbeginn!"
 Print
 
 Do
 
 Waitms 50
 
 Taste = Ischarwaiting()
 
 If Taste = 1 Then
 Key_input = Inkey()
 End If
 
 If Key_input = 49 And Servo_vorgabe_h >= 1 Then
 Servo_vorgabe_h = Servo_vorgabe_h - 1
 End If
 
 If Key_input = 50 And Servo_vorgabe_h <= 250 Then
 Servo_vorgabe_h = Servo_vorgabe_h + 1
 End If
 
 If Key_input = 51 And Servo_vorgabe_v >= 1 Then
 Servo_vorgabe_v = Servo_vorgabe_v - 1
 End If
 
 If Key_input = 52 And Servo_vorgabe_v <= 250 Then
 Servo_vorgabe_v = Servo_vorgabe_v + 1
 End If
 
 If Key_input > 0 Then
 Print Servo_vorgabe_h;
 Print ", ";
 Print Servo_vorgabe_v
 Print
 End If
 
 Key_input = 0
 Servo(1) = Servo_vorgabe_h
 Servo(2) = Servo_vorgabe_v
 
 Loop Until Inkey() = 48
 
 Start_test2:
 Print "Test2!"
 Print
 Do
 Print
 Print "H = ";
 Input Servo_vorgabe_h
 If Servo_vorgabe_h > 0 Then Servo(1) = Servo_vorgabe_h
 Print "V = ";
 Input Servo_vorgabe_v
 Servo(2) = Servo_vorgabe_v
 Print
 Print "Daten gesendet!"
 
 Loop Until Servo_vorgabe_h = 0
 Goto Sart_main_loop
 
 Close #1
 
 End
 
 
 
 
 
 
 
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				 Berechtigungen
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-  
Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen