Hallo
Beim RP6 dient das Steuersignal RTS der seriellen Schnittstelle als "Resetleitung" für den Mega32. Deshalb muss an der Schnittstelle RTS gesetzt werden.
https://www.roboternetz.de/community...-PC-ansprechen
Gruß
mic
Hi,
ich hab ein kleines Problem. Ich würde gerne eine Zeichen vom PC und zwar mit Python an den RP6 schicken. Hab mir nun PySerial heruntergeladen. Dann hab ich im Gerätemanager nachgeschaut welcher Port mein RP6 ist. Das war COM8. Also hab ich einfach mal dieses kleine Script für Python geschrieben:
So nun hab ich auf dem RP6 ein Programm, welches wenn eine Nachricht ankommt, eine LED leuchten lässt. Wenn ich über dieses Terminal vom dem RP6 Loader etwas sende, dann funktioniert das auch. Aber ich möchte es ja über Python machen. Doch hier geht das nicht, sondern der RP6 restartet sich.Code:import serial # Das ist diese PySerial Library ser = serial.Serial(7) # Öffnet COM8 print ser.portstr # Das echot, dass es mit COM8 verbunden ist ser.write("G") # Sendet ein "G" ser.close() # schließt den PORT
Ich hoffe ihr könnt mir helfen.
Viele Grüße
Johannes
Hallo
Beim RP6 dient das Steuersignal RTS der seriellen Schnittstelle als "Resetleitung" für den Mega32. Deshalb muss an der Schnittstelle RTS gesetzt werden.
https://www.roboternetz.de/community...-PC-ansprechen
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke für deine Antwort. Hab jetzt ein bisschen rumprobiert und dann auch in der PySerial API nachgelesen, wie man dieses RTS aktiviert. Das funktioniert mit dem Befehl: rtscts – Enable hardware (RTS/CTS) flow control. Hab das dann mal reingeschrieben:
Leider hab ich aber immernoch das gleiche Problem, wie vorher.Code:import serial # Das ist diese PySerial Library ser = serial.Serial(7, rtscts=1) # Öffnet COM8 print ser.portstr # Das echot, dass es mit COM8 verbunden ist ser.write("G") # Sendet ein "G" ser.close() # schließt den PORT
Hallo
Es geht hier nicht um die Flusskontrolle beim Senden der Zeichen. Diese muss immer ausgeschaltet sein. Vielmehr geht es um ein andauerndes Setzen der Steuerleitung:
(Aus der oben erwähnten API)Code:setRTS(level=True)¶ Parameters: * level – Set control line to logic level. Set RTS line to specified logic level.
Ob True oder False kann ich nicht sicher sagen, ich tippe auf True. Aber ich vermute, ein kleiner Test bringt dich schnell weiter.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Funktioniert damit auch nicht
Grrr! Zeig doch mal, wie du es jetzt eingebaut hast. rtscts=1 muss natürlich wieder raus. Wo und wie werden die anderen Schnittstellenparameter eingestellt: 38400 Baud, 8 Datenbits, 1 Stopbit, keine Parityprüfung und keine Flusskontrolle
Geändert von radbruch (15.01.2012 um 22:59 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Also mit diesem ZOC Terminal funktioniert das ganze, bloß mit Python wieder nicht.
Code:import serial ser = serial.Serial('/dev/ttyUSB0', 38400, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, xonxoff = 0, rtscts = 0, dsrdtr = 0) ser.setRTS(0) ser.close()
Entschuldigung, aber ich habe das Terminal-Zeugs wieder rauseditiert, weil es mit dem Robotloader ja funktioniert, denn sonst könntest du nicht flashen. Es muss mit irgendetwas in deinem Setup für die Schnittstelle in Python zusammenhängen. Blöderweise kenne ich Pythen aber gar nicht.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
probiers mal so, bzw welches Betriebssystem benutzt du eigentlich, weil du die Portnamen je nach System anderst angeben musst...
Grüße, UliCode:import serial ser = serial.Serial(COM7, 38400) ser.setRTS(True) ser.write("G") ser.close()
Danke für die Antworten.
Ne so wie du schreibst, gehts nicht. Ich habs auf Windows und auf Linux probiert und es wird auch der richtige Port geöffnet. Das Kann man mit
print ser.portstr
überprüfen.
EDIT: Man bin ich dumm ich weiß wie es geht xD. Beim Connecten Resetet der RP6 schon. Ist ja auch im Terminal so. Also muss ich das Programm aufm RP6 erst starten, wenn es connectet ist. Werd ich gleich ausprobieren, wenn ich daheim bin. Danke für eure Hilfe
Nurnoch eine kleine Frage: Man kann den Roboter ja auch mit dem Terminal starten. Kennt ihr da den Befehl dafür, den man senden muss?
Geändert von johannes_b (16.01.2012 um 15:17 Uhr)
Lesezeichen