- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Hilfe: NXT + CMPS03

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.02.2006
    Ort
    Hier und dort
    Beiträge
    89

    Hilfe: NXT + CMPS03

    Anzeige

    Praxistest und DIY Projekte
    Hi,
    Ich soll von meinem Lehrer aus den NXT für die Schule testen, da wir jedes Jahr am Robocupjunior teilnehmen. Nun will ich diesen auch gleich mal beim nächsten Tunier mitspielen lassen, aber habe noch kein Geld um erweiterungen zu kaufen. Hat schon jemand Erfahrungen damit? Hat jemand schon etwas gekauft? oder besser Selbst gebaut? Lichtsensoren, habe ich bereits geschafft anzuschließen und zu nutzen, allerdingz fände ich eine I²C-porterweiterung gut, und dringend wäre es, den CMPS03 anzuschließen und zu nutzen. habe ihn bereits hier liegen, aber ich bekomme ihn nicht zum laufen. Kann mir jemand helfen? am besten auch mti kleinem test-programm. bis jetzt arbeite ich mit NXC, hätte aber kein problem damit auf NBC oder RobotC umzusteigen. Hat jemand sonst noch Sensoren für den NXT selbstgebaut? oder die sharpsensoren schon eingesetzt? Ich danke euch für eure Hilfe.
    Wenn ich von jemandem ein Butterbrot haben will, und er bietet mir eine Schnitte trockenes Brot, dann nehme ich die trockene Scheibe; die Butter hole ich mir dann eben später.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    was ist das problem bei deinem cmps03 ??
    NXT konnt ich auf die schnelle nicht alle schnittstellen herausfinden, aber wenn I2C geht nimm das, sonst versuch doch über pulsweitenmodulation, so hab ichs mit meinem asuro gemacht...

    https://www.roboternetz.de/phpBB2/viewtopic.php?t=36847

    die beschaltung der kleinen platine da oben kann cih dir gern geben wenn du magst (auch wenns eigentlich total trivial ist )

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    11.02.2006
    Ort
    Hier und dort
    Beiträge
    89
    der NXT hat leider keinen PWM, nur I²C. dürfte ja aber trotzdem funktionieren. ich habe dazu auch diese Anleitung im Internet gefunden:
    http://www.stud.uni-karlsruhe.de/~uqbdx/lego/nxt.html
    leider funktioniert es nach Anleitung nicht.
    falls es jemanden hilft, hier das datenblaat des sensors:
    http://www.robot-electronics.co.uk/htm/cmps3doc.shtml
    Pinbelegung des NXT:
    1: Analog Input
    2: GND
    3: GND
    4: IPOWERA (4,3V output)
    5: DIGIAI/0 Digital input 1
    6: DIGIAII Digital Input 2
    vllt passt das auf der webseite doch, aber der sensor gibt mir nunmal keine werte aus.
    Wenn ich von jemandem ein Butterbrot haben will, und er bietet mir eine Schnitte trockenes Brot, dann nehme ich die trockene Scheibe; die Butter hole ich mir dann eben später.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    11.02.2006
    Ort
    Hier und dort
    Beiträge
    89
    spannung des ding funzt wunderbar, mit dem aufbau, wie auf der oben erwähnten seite. man darf nur die pullups nicht vergessen, da die auf dem schaltplan ned eingezeichnet sind. werde mich jetzt mal an den pcf8591p ranmachen und hoffen das es funzt. dann könnte man insgesamt schon einiges mit dem nxt anstellen, und bis jetzt war das eigtl auch alles ganz einfach. ob das ganze in iener relation zum preis steht, weiß ich nicht. aber ich finde es trotzdem intresant.
    Wenn ich von jemandem ein Butterbrot haben will, und er bietet mir eine Schnitte trockenes Brot, dann nehme ich die trockene Scheibe; die Butter hole ich mir dann eben später.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    22.09.2006
    Ort
    Nürnberg
    Alter
    34
    Beiträge
    66
    Hallo,

    ich hab mal ein Programm geschrieben, es funktioniert aber leider nicht, sondern liefert nur "190" als Wert auf das Display. Ich vermute, dass die I2C-Kommunikation nicht funktioniert. Kann sich die mal jemand anschauen, jetzt unabhängig davon, ob man einen NXT hat oder nicht. Vor allem bei dem Startbit bin ich mir nicht ganz sicher. Und ob ich nach jedem Lesen das Stoppbit setzten muss und dann wieder ganz von Anfang anfangen muss. Hier ist mal das Programm, über jeden Hinweis bin ich dankbar!

    Code:
    # define cmps03 S1
    
    int wert;
    
    task main()
    {
      SetSensorLowspeed (cmps03);          // I2C an Port 1
      ClearScreen ();
      
      I2CWrite (cmps03, 0, 1);             // Startbit setzten
      I2CWrite (cmps03, 0, 192);           // Adresse des Compass
      I2CWrite (cmps03, 0, 1);             // Registeradresse des Compass, 1 = Werte ausgeben von 0-255
      I2CWrite (cmps03, 0, 193);           // Erneutes Startbit setzen
      while(true)
      {
        I2CRead (cmps03, 1, wert)         //  Wert des Registers 2 einlesen
        
        TextOut(15,LCD_LINE1,"erd:", true); // Und auf Display ausgeben
        NumOut(60,10, wert);
        Wait(100);
      }
    }
    Wer Visionen hat, sollte zum Arzt gehen.
    Helmut Schmidt

    Unsere Webseite: GMG Robotik

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo RoboPunk,

    ganz egal ist es nicht, ob man NXTs I2C-Routinen kennt. Hier 'mal der CMPS03-Lesecode für den RP6. Es wird nur 1 Byte (Datareg) gesendet, dann werden entweder 1 oder 2 Bytes vom CMPS03 gelesen.
    Vielleicht kannst du das ja auf deine I2C-Routinen anpassen.
    Die Geschichte mit "Startbit" verstehe ich bei dir gar nicht,- evtl. ganz weglassen.

    Gruß Dirk

    Code:
    // The I2C slave address of the compass module CMPS03 is 0xC0:
    #define CMPS03_ADR		0xC0
    
    // CMPS03 Data Registers:
    #define GET_VERSION 	0				// Software version
    #define MEASURE_8_BIT	1				// 8-bit compass value
    #define MEASURE_16_BIT	2				// 16-bit compass value
    #define CALIBRATE		15				// Calibration (write only)
    
    /**
     * READ CMPS03 DATA REGISTERS
     *
     * This function reads the data registers of the CMPS03.
     *
     * datareg = 0 : Get the CMPS03 software version
     * datareg = 1 : Read 8-bit compass value  [0..254]
     * datareg = 2 : Read 16-bit compass value [0..3599]
     *
     */
    uint16_t readCMPS03(uint8_t datareg)
    {uint16_t result = 0xffff; uint8_t results[3];
    	I2CTWI_transmitByte(CMPS03_ADR, datareg);
    	if (datareg == MEASURE_16_BIT) {
    		I2CTWI_readBytes(CMPS03_ADR, results, 2);
    		result = (results[0] << 8) + results[1];
    	}
    	else {
    		result = I2CTWI_readByte(CMPS03_ADR);
    	}
    	return result;
    }

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    22.09.2006
    Ort
    Nürnberg
    Alter
    34
    Beiträge
    66

    I2C beim NXT

    Was ist bei dir genau das "Datareg"?
    Wenn ich beim NXT I2CWrite verwende, dann brauch ich noch drei Parameter:

    - Den Port an dem er benutzt wird(das ist wahrscheinlich eine Besonderheit des NXT, weil sonst gibt es ja nur SCL und SDA)
    - Die Anzahl der Bytes, die als Antwort erwartet wird
    - Einen "inbuffer", das ist glaub ich dass was man senden will.

    Was mich aber wundert, es gibt nichts wie "I2C_Start" oder "I2C-Stop" oder so. Eigentlich muss man dass doch zu Beginn einer Kommunikation schreiben, oder? Und was hat es mit dem "Repeated Startbit 0xC1" auf sich?

    Im Moment bin ich etwas verwirrt.

    Also jetzt hab ichs mal so probiert dass ich bloß die Kompassadresse sende und danach das Register 1 lese:
    I2CWrite (cmps03, 1, 192);
    I2CRead (cmps03, 1, wert);

    Aber das gibt auch wieder nur den Wert 0 auf dem Display aus.
    Wer Visionen hat, sollte zum Arzt gehen.
    Helmut Schmidt

    Unsere Webseite: GMG Robotik

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Im Moment bin ich etwas verwirrt.
    Kann ich verstehen. Leider kenne ich nicht die I2C-Funktionen, die du benutzt.
    Vielleicht hilft da jemand, der sich damit auskennt oder du kannst eine Doku darüber finden.

    Datareg ist ein Wert von 0..2.
    0 -> Lesen der CMPS03-Firmwareversion
    1 -> Lesen des 8-Bit Werts
    2 -> Lesen des 16-Bit Werts

    Gruß Dirk

Berechtigungen

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

12V Akku bauen