- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 13

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    74
    Beiträge
    11.077
    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 18: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!

  2. #2
    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

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    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

  4. #4
    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

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    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

  6. #6
    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

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    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

Ähnliche Themen

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

Stichworte

Berechtigungen

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

12V Akku bauen