-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: rs232 und i2c gleichzeitig in einem programm???

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2011
    Beiträge
    11

    Frage rs232 und i2c gleichzeitig in einem programm???

    Anzeige

    hallo alle zusammen,

    ich heisse jörg bin 30 jahre alt und bin nicht ganz neu hier,ich lese schon eine weile mit, hab aber noch keinen lösungsansatz
    so richtig gefunden.

    ich habe einen roboter gebaut und bin dabei ihn zu programmieren.(bilder im anhang)
    ich benutze folgende hardware:
    -rn control
    -rn motorcontrol
    -2 rb 35 motoren
    -display LCDPC2004
    -srf02 Ultraschallsensor
    zum programmieren nehm ich den Bascom compiler.
    das rn control ist über I2C mit dem rn motorcontrol verbunden.
    den Ultraschallsensor hab ich an der RS232 schnittstelle.
    hab für beide die beispielprogramme erfolgreich getestet-die funktionieren.
    ich möchte ein fahrprogramm schreiben das vom grundaufbau her so ähnlich funtioniert wie die rn motorcontrol beispielprogramme,nur das eben der srf02 dabei als entfernungssensor dient und bei einem hindernis ein ausweichmanöver eingeleitet wird.

    meine fragen wären : kann ich beide schnittstellen gleichzeitig in einem programm verwenden??
    wenn ja -wie?
    ist es möglich evt eines der beispielprogramme für meine zwecke umzubauen?

    über sachdienliche hinweise wär ich sehr erfreut....

    mfg jörg
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Foto-0044.jpg   Foto-0045.jpg  

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Hallo Jörg, willkommen im Forum - und viel Erfolg.

    Zitat Zitat von highblackbon
    ... rn control ist über I2C ... Ultraschallsensor ... an der RS232 ... kann ich beide schnittstellen gleichzeitig in einem programm verwenden?? ...
    Seit zwei Jahren hatte ich immer wieder versucht, I²C ans laufen zu bekommen, war nie was geworden. Habe diese Tage das Beispiel aus dem RNWissen genommen (TWI Slave mit avr-gcc - klick hier) - und es lief. Leider nicht auf Anhieb (klick), da hat wohl das dortige Testprogramm eine Macke. Aber für Dich wichtig ist nur :

    Beide Controller, sowohl der Master als auch der Slave, haben ihre UART-Ausgabe (ich nehme wegen der höher möglichen Übertragungsrate KEIN R S 232 sondern UART über U S B) und laufen problemlos. Selbst der Sniffer, den ich dazugebaut habe, funktioniert bei mir mittlerweile passabel. Er hört die Leitung ab und gibt die Daten auf der Seriellen aus (die Serielle ist dort eine Softwarelösung).

    Fazit: die Antwort auf Deine Frage ist "Ja".
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo!

    Zitat Zitat von highblackbon Beitrag anzeigen
    kann ich beide schnittstellen gleichzeitig in einem programm verwenden??
    wenn ja -wie?
    Beide schon, aber bei "one-core" CPU von Microcontroller (µC) leider nicht echt gleichzeitig.
    Geändert von PICture (11.12.2011 um 19:51 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2011
    Beiträge
    11
    danke erstmal für eure antworten.ich hab mal versucht ein fahrprog mit ultraschall-entfernungsangabe zu schreiben.hier mal der code:

    '################################################# ##
    'I2CANSTEUERUNG.BAS
    'Beispiel: zu RN-MotorControl
    '
    ' Demonstriert einige Grundbefehle über den I2C-Bus
    ' Motorgeschwindigkeit und Motordrehrichtung
    '
    ' Achtung:
    ' Diese Demo ist mit Bascom Compiler 1.11.7.9 getestet
    ' Ältere Bascom Versionen sollten geupdatet werden
    '
    '
    ' ------------- Hier die üblichen RN-Control Anweisungen --------------


    $regfile = "m32def.dat"
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    $crystal = 16000000 'Quarzfrequenz

    '''''''''''''''''''''''''''i2c'''''''''''''''''''' ''
    $lib "i2c_twi.lbx" 'Sorgt dafür das der Hardware I2C vom Chip genutzt wird
    Config Scl = Portc.0 'Ports fuer I2C-Bus
    Config Sda = Portc.1
    Const Slaveid = &H58 'I2C SlaveAdresse von RN-MotorCOntrol
    Config Twi = 100000 'I2C Geschwindigkeit immer 100000


    '''''''''''''''''''''lcd''''''''''''''''''

    Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
    Cursor On

    ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4

    '''''''''''''''''''''usm''''''''''''''

    Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer


    Open "COMA.0:9600,8,N,2" For Output As #1 'Port PA0 wird als TX definiert
    Open "COMA.1:9600,8,N,2" For Input As #2 'Port PA1 wird als RX definiert
    Const Srf02_slaveid = 1 'Standard RS232 Slave ID von SRF02

    Dim Entfernung As Integer


    ' ------------- Ende der üblichen RN-Control Anweisungen --------------


    Cls
    Locate 1 , 1
    Lcd "RN-CONTROL V1.4 "
    Locate 2 , 1
    Lcd "Fahrprog1"
    Wait 2


    Do






    Wait 3
    'Beide Motoren mit Geschwindigkeit 75 anlaufen lassen
    I2cstart
    I2cwbyte Slaveid
    I2cwbyte 35 'Kennung
    I2cwbyte 2 'Befehl
    I2cwbyte 3 'Motorwahl
    I2cwbyte 100 'Geschwindigkeit
    I2cstop
    Wait 20





    'Motor 2 stoppen (Geschwindigkeit=0)
    I2cstart
    I2cwbyte Slaveid
    I2cwbyte 35 'Kennung
    I2cwbyte 2 'Befehl
    I2cwbyte 3 'Motorwahl
    I2cwbyte 0 'Geschwindigkeit
    I2cstop bis hierher läuft es -dann ist schluss!

    Wait 3

    Entfernung = Srf02_entfernung(srf02_slaveid)
    Cls
    Locate 1 , 1
    Lcd "Entfernung:" ; Entfernung ; "cm"



    Loop


    '------------- Hilfsfunktionen für SRF02 ----------
    Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Print #1 , Chr(slaveid) ; Chr(93);
    Srf02_firmware = Waitkey(#2)
    End Function
    Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    Local Lob As Byte
    Local Hib As Byte
    Print #1 , Chr(slaveid) ; Chr(84); 'Messvorgang in cm starten
    Inputbin #2 , Hib , Lob 'Warte auf Ergebnis
    Srf02_entfernung = Makeint(lob , Hib)
    End Function

    bis zur rot markierten stelle funktonierts es,dannach macht das prog nix mehr.
    ich hab bestimmt nen furchtbaren denkfehler darin..find ihn nur nicht.
    vielleicht hat ja von euch jemand ne idee....


    mfg jörg

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Mach mal ein I2Cinit vor dem Do.
    Damit initialisierst du das I2C Interface des Controllers. Und dahinter noch ein Waitms 100. Ich hatte letzte Woche auch das Problem das der I2C nicht richtig lief, weil er nicht initialisiert wurde.
    Was auch sein kann ist, wenn du einen abgeschalteten I2C Baustein am Bus hast dann stört er den Bus.......das ist mir auch schon bei einem SRF10 und einem SD21 passiert.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2011
    Beiträge
    11
    hallo Kampi.
    hast recht ,ich habs I2C init vergessen.hab es geändert.
    das programm startet den I2C und damit die motoren ,soweit sogut- nur den Ultraschallsensor danach und dessen ausgabe,der teil startet nicht!
    fehlt da eine anweisung??

    mfg jörg

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Bis wohin läuft das Programm den? Mach das mal mit Print-Befehlen und schau wo das Programm stehen bleibt.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2011
    Beiträge
    11
    hab es im code oben rot markiert wieweit es läuft(bis hierher läuft es -dann ist schluss!) .
    hmm....mit dem print befehl geb ichs doch aufm terminal aus-oder lieg ich da falsch? ich nutze aber das lcd-display als ausgabe!
    das zeigt mir "RN-Control V1.4 " und "fahrprog" an.das bleibt dann auch auf dem lcd display stehen und die motoren laufen an.das ist wie gesagt alles in ordnung so.nachdem dann die 20 sec oder so rum sind in denen die motoren laufen sollen,soll er über RS232 den Ultraschallsensor abfragen bzw auf dem lcd display die entfernung ausgeben- das aber macht er nicht.....

    mfg jörg

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    So ich hab nochmal in der Doku geschaut. In der Doku vom SRF02 steht folgendes Programm:

    Code:
    Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    
    $regfile = "m32def.dat"
    $framesize = 42
    $swstack = 42
    $hwstack = 42
    $crystal = 16000000 'Quarzfrequenz
    
    $baud = 9600 'Normale Hardware RS232 (hier hängt PC dran)
    Open "COMA.0:9600,8,N,2" For Output As #1 'Port PA0 wird als TX definiert
    Open "COMA.1:9600,8,N,2" For Input As #2 'Port PA1 wird als RX definiert
    Const Srf02_slaveid = 0 'Standard RS232 Slave ID von SRF02
    
    Dim Entfernung As Integer
    
    Wait 3 'Warte 3 Sekunden
    
    Print "SRF02 RS232 Testprogramm von robotikhardware.de"
    Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid)
    Print "PA0 wird TX und PA1 wird als RX genutzt"
    
    V = 1
    
    Do
    
    Entfernung = Srf02_entfernung(srf02_slaveid)
    Print "Entfernung:" ; Entfernung ; "cm"
    Wait 1
    Loop
    
    End
    
    '------------- Hilfsfunktionen für SRF02 ----------
    Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Print #1 , Chr(slaveid) ; Chr(93);
    Srf02_firmware = Waitkey(#2)
    End Function
    Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    Local Lob As Byte
    Local Hib As Byte
    Print #1 , Chr(slaveid) ; Chr(84); 'Messvorgang in cm starten
    Inputbin #2 , Hib , Lob 'Warte auf Ergebnis
    Srf02_entfernung = Makeint(lob , Hib)
    End Function
    Dort verwenden sie die Adresse 0. Ich nehme nicht an das du die Adresse geändert hast? (siehst du an dem Blinken der LED nach dem Einschalten).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2011
    Beiträge
    11
    ich hab den sensor mal im I2C mode benutzt und da seine id geändert-wollte ja eigentlich 2 davon verbauen,deswegen.
    jetzt hab ich aber am I2C den motortreiber dran und wollte deswegen den us sensor am RS232 nutzen.
    ich hab auch dieses beispielprog welches du zeigst ,am laufen,mit id=1,also daran denk ich liegts nicht.mit id=0 passiert mit diesem sensor nix mehr,da müsst ich mal den anderen probieren...die werte die der erste mit id=1 ausgibt sind auch korrekt.

    mfg jörg

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 15.02.2009, 17:46
  2. Antworten: 8
    Letzter Beitrag: 30.06.2008, 21:54
  3. Antworten: 7
    Letzter Beitrag: 10.01.2008, 01:51
  4. RS485 UND RS232 gleichzeitig an ATMega32??
    Von dl1akp im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.11.2006, 16:47
  5. Antworten: 4
    Letzter Beitrag: 28.01.2004, 13:35

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •