- Labornetzteil AliExpress         
Seite 8 von 9 ErsteErste ... 6789 LetzteLetzte
Ergebnis 71 bis 80 von 89

Thema: 3-Achs Beschleunigungssensor - sensationell günstig !

  1. #71

    BMA020

    Anzeige

    E-Bike
    Sry, habe ich übersehen... Jetzt passt es!
    Danke!

  2. #72

    BMA020

    Hallo an alle,

    ich habe noch mal mein Programm umgeschrieben bzgl. des g-Wertes.
    Aber irgendwie ändert er sich nie bei mir was mache ich falsch?

    Über eine kleine Hilfe von Euch wäre ich sehr dankbar.

    Gruß
    TJ
    Code:
    void g_Werte(void)
    {
    
        word adresse_g;
        byte data;
        adresse_g=0x14;
    
        I2C_Start();
        I2C_Write(0x70);
        I2C_Write(adresse_g);
        I2C_Stop();
    
        I2C_Start();
        I2C_Write(0x71);
    
        data=I2C_Read_NACK();
        I2C_Write(data & 00000000 ); //hier werden jetzt 2g eingestellt
    
        I2C_Stop();
    
    }

  3. #73
    Hallo!

    Ich kann bei meinem Beschleunigungssensor die Daten mit Bascom und einem atmega88 auslesen. Jedoch bin ich noch Anfänger bei uc und Bascom und habe folgendes Problem/Frage:

    Ist es irgendwie möglich die Daten tabellarisch im Editor oder Excel abzuspeichern? Würde mit den Daten später gerne eine FFT machen?

    Gruß

    Kati

  4. #74
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Hi Kati,
    willkommen im Forum und viel Erfolg bei Deinen Projekten.
    Zitat Zitat von kaddi1989
    ... Ist es irgendwie möglich die Daten tabellarisch im Editor oder Excel abzuspeichern ...i
    Umfangreichere Messdaten hatte ich (z.B. bei meinem MiniD0) im Controller in Feldern wie mess03[100] notiert und am Ende der Messsequenz über die UART/RS232 ausgegeben. Die Messsequenz ist durch die Größe des SRAM begrenzt, daher hatte ich für umfangreichere Messungen statt eines sonst ausreichenden mega168 einen m328 genommen. Natürlich könnte man die Daten auch ins EEPROM schreiben. Diese Variante hatte ich nicht genutzt, weil Schreiben ins EEPROM deutlich langsamer geht als Daten im SRAM zu halten. Das ebenfalls langsame Lesen aus dem EEPROM würde bei der Datenausgabe über die serielle Schnittstelle kein Nachteil sein. Ich hatte deswegen Platzprobleme, da meine Daten größer als 1 Byte waren und bei 2-Byte-Feldern ist eben der Platz schneller alle. Wie Du mit Deinem m88 auskommst, siehst Du ja (ähhh - nun weiß ich nicht wie Du programmierst - bei mir, in C, im AVRStudio) im Build-Protokoll nach dem Kompilieren. Da steht dann so etwas wie "Data: 712 bytes (69.5% Full)". Um den nachlässigen Programmierer zu verwirren, gibts auch einen Data-Verbrauchs-Anzeige über 100 % - dann läuft manches nicht mehr (und ich hatte mal ewig lange gesucht, bis ich meine Dämlichkeit merkte).

    So eine Ausgabe sieht am Terminal etwa so aus (klick hier). Mit paste&copy habe ich die Daten entweder direkt ins Excel kopiert oder in eine ASCII-Datei abgespeichert. Danach eine Excelorgie je nach Bedarf und Geschmack. So ist dieses Diagramm entstanden (klick) und ähnliche, mit mehreren Messwerten zu je hundert Messpunkten. Direkt ins Excel gehts wohl auch, wenn Du einen "Terminal"-Ersatz hast, der das kann. Meine Lösung reichte mir und benötigte keine Sonderheiten. Ein Trick beim Einfügen von ASCII-Daten ist Excel-usern bekannt: Daten, die mit TAB getrennt sind, werden in benachbarte Zellen geschrieben, Daten die mit CR/LF getrennt sind, in darunter liegende Zellen usf.

    Klingt hausbacken, ich weiß (ich bin eben einfach gestrickt). Viel Erfolg
    Ciao sagt der JoeamBerg

  5. #75

    Interrupt Betrieb

    Hallo, ich benutze auch den BMA020 mit dem Modul von ELV. Bin ziemlich begeistert von dem Gerät. Auslesen funktioniert soweit auch ganz gut (mit Hilfe einiger Code-Schnipsel aus diesem Forum).

    Jetzt möchte ich den Sensor aber im Interrupt-Betrieb betreiben. Habe mir das Datenblatt dazu mehrmals durchgelesen (ist ja im Grunde recht gut beschrieben). Leider funktioniert das ganze nicht wie es soll.
    Der Sensor soll einen Interrupt schicken sobal er bewegt wird. Dazu dachte ich, dass ich eigentlich nur das any_motion Bit setzen muss.

    Wäre euch dankbar wenn ihr mir sagen könntet welche Bits ich dazu alle setzen muss (und welche nicht).

    Gruß
    Jens

  6. #76
    Ok, ich hab das Problem selber gefunden. Hatte das enable_adv_INT Bit falsch gesetzt. Jetzt klappts.

    Edit
    -----------------------
    Ich habe da noch ein paar Fragen.

    @mausi_mick:
    Wie bist du vorgegangen um den Vektor zu normalisieren und um den Nullpunkt zu verschieben? Wie bist du auf die Werte gekommen??
    Mit der Formel sqrt(x² + y² + z²) sollte ja das Ergebnis bei Ruhelage immer gleich bleiben. Egal auf welcher Seite der Sensor steht, solange er in Ruhelage ist. Aber ich erhalte unterschiedliche Werte je nach Lage und Ausrichtung.

    Warum sprecht ihr eigentlich immer von einem Wertebereich zwischen +-256?? Bei 10 Bit habe ich doch eher einen Wertebereich zwischen +-512??

    Gruß Jens

  7. #77
    Guten Tag die Herren,

    freut mich das ich nicht der einzige bin der hier Probleme hat oder hatte

    ALSO

    Zunächst ich programmiere mit C und steuere den Sensor über einen LPC 900 an, bzw LPC 935. . . . .....

    Das macht es für mich nicht so einfach die Codes hier zu lesen und zu verstehen, aber denoch vill kann mir hier einen weiterhelfen.

    Probiere seit längerem diesen Sensor auszulesen, wenn ich ihn über das ELV USB-I2C Interface Gerät auslese und einen Makro anwerfe dann passen die Werte 1a.

    So bald ich mein selbst geschriebenes Programm komplett durch fahren lasse, dann kommen Werte die nicht stimmen bzw auch sehr stark schwanken!

    ABER wenn ich dann im Singel Step mein Programm durch fahre, dann passen die Werte auch... denke es liegt dann an einer Delay Zeit die ich nicht einhalte!?!?!??

    Weiß langsam nicht mehr so richtig weiter, vielleicht hat ja einer noch einer eine sinnvolle Idee hier scheinen mir genug kompetene Menschen zu sein.

    Hat einer schon Erfahrung gemacht mit Interrupt??

    Gruß

    Code:
    	#include <REG935.H>
    //--------------- Konstante für BMA020(werden aber nicht benutzt...)
    const bma20_W 	= 0x70;
    const bma20_R	= 0x71;
    
    //----------Programm....
    void main ()
    {
    
    
    char xLSB02,xMSB03,xLSB04,xMSB05,xLSB06,xMSB07; 
    
    long int x,i;
    char u = '-' ;
    
    
    
    P1M1=0xFF; // Port Konfiguration
    P1M2= 0x00;
    
    
    P1M1 |= 0x0C; // SDA und SCL als Open-Drain
    P1M2 |= 0x0C;
    
    //EI2C = 1; // I2C Interrupt freigeben
    //EA = 1; // allgemeine Interruptsperre aufheben
    
    I2SCLH 	= 19;		 // 100khz
    I2SCLL 	= 19;
    
    
    // Auslesen des Beschleunigungssensors 
    
     do{
    //
    
    I2CON = 0x64;          // Start, I²C Hardware wird aktiviert und als Master gesetzt
    while (I2STAT != 0x08); // Warten auf Startbedingung
    I2DAT = 0x70;           // Schreibadresse wird dem Register I2Dat zugewiesen
    I2CON = 0x44;		//I2C Hardware aktiviert, ACK 
    while (I2STAT != 0x18); // SLA+ Wwurde gesendet, ACK wurde empfangen
    I2DAT = 0x02;           // Adresse von Register 02 wird I2Dat zugewiesen
    I2CON = 0x44;		//I2C Hardware aktiviert, ACK 
    while (I2STAT != 0x28);	//Datenbyte wurde gesendet, ACK wurde empfangen
    I2CON = 0x54; 		  // Beenden
    
    //--------------------Auslesen der Register 02-07
    
    
    for (i=0; i<= 100 ; i++); // Delay Zeit wurde generiert...
    
    I2CON = 0x64;             //Start
    while (!(I2STAT == 0x08 || I2STAT == 0x10));
    
    
    I2DAT = 0x71;        		// Read Adresse...
    I2CON = 0x44;			//I2C Hardware aktiviert, ACK 
    while (I2STAT != 0x40);		// SLA+R wurde gesendet, ACK wurde empfangen 
    
    
    I2CON = 0x44;    		//I2C Hardware aktiviert, ACK       	
    while (I2STAT != 0x50);		//Datenbyte wurde empfangen, mit ACk wurde geantwortet	
    xLSB02 = I2DAT;
    
    I2CON = 0x44;          
    while (I2STAT != 0x50);
    xMSB03 = I2DAT;
    
    I2CON = 0x44;          
    while (I2STAT != 0x50);
    xLSB04 = I2DAT;
    
    I2CON = 0x44;          
    while (I2STAT != 0x50);
    xMSB05= I2DAT;
    
    I2CON = 0x44;         
    while (I2STAT != 0x50);
    xLSB06 = I2DAT;
    
    
    I2CON = 0x44;          
    while (I2STAT != 0x50);
    xMSB07 = I2DAT;
    
    
    I2CON = 0x54;		  // Beenden
    
    for (i=0; i<= 100 ; i++); 	// Delay Zeit
    
    
    
    //-----------------Algo für Umrechnen der Werte
    
    x &= xLSB06;
    
    
    x =x+ (xMSB07 << 2);
    
    x = x& 0x03FF;
    
    
    if ( x > 0x01FF)
    {
    x= x^= 0x03FF;
    
    x= x*4;
    }
    
    
    
    }while(1);
    
    }
    EDIT:

    Möchte hinzufügen. Das wenn ich das Programm komplett durch fahren lassen das dann Register06 und 07 gleich sind .... obwohl ich eine Schleife drin habe die als delay dienen soll...

  8. #78
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    521
    Hi,
    ich versuch schon seit Stunden den Sensor auszulesen, aber bekomme einfach keine Antwort.

    Vielleicht übersehe ich die ganze Zeit den Fehler, vielleicht ist der Sensor aber einfach defekt.

    Hier der Code:

    Code:
    void Sensortest() 
    {
    unsigned char xl,xm,yl,ym,zl,zm;
    
    xl=0;xm=0;yl=0;ym=0;zl=0;zm=0;x=0;
    
    
    while(1)
    {
    		if(!(i2c_start(0x70)))   	// start I2C bus   
    	   		{
    			i2c_write(2);		 	// register  
    		
    		  	i2c_rep_start(0x70+I2C_READ);      	// restart         
    		   	xl = i2c_readAck();   
    		   	xm = i2c_readAck();
    			   yl = i2c_readAck();   
    		   	ym = i2c_readAck();
    			   zl = i2c_readAck();   
    		   	zm = i2c_readNak();
    
    			i2c_stop(); 
    			}
    
    Kompass();// TEST
    	_delay_ms(1);	
    			
    			// Ausgabe am LCD
    			while (TWI_bereit()!=0)	
    			_delay_ms(1);	
    	
    			i2c_start(0xb0);
    			i2c_write(1);      // (ab) register 1 
    			     	     	                             
    			i2c_write(8); // Modus Sensortest
    			i2c_write(xl); 
    			i2c_write(xm); 
    			i2c_write(yl); 
    			i2c_write(ym); 
    			i2c_write(zl); 
    			i2c_write(zm); 
    			i2c_write(kompass_akt); // TEST			
    	
    			i2c_stop();
    
    	
    			i2c_start(0xb0);     // Register 200 auf 1 setzen = neue Werte
    	     	i2c_write(200);                        
    	     	i2c_write(1);                        
    	     	i2c_stop();     
    LED_rot_aus;
    _delay_ms(300);
    LED_rot_ein;
    
    }
    }
    Die Ausgabe erfolgt über I2C an den Slave der das LCD ansteuert. Um sicher zu sein dass es hier keinen Fehler gibt, lese ich zusätzlich den Kompass aus (auch über I2C) und zeige auch dessen Wert am LCD an.
    Die Kompasswerte sehe ich auch, aber vom Sensor nichts. Bzw wenn ich die Abfrage von if(!(i2c_start(0x70))) auf i2c_start_wait(0x70); abändere habe ich 6x den Wert 113, dh h70+1.

    LG!
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

  9. #79
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Hi damfino,

    schau Dir mal Sternthalers Code an (dieser Thread, 21 Jun 2010, 0:56). Der Codezauberer Sternthaler hat dort für die x, y und z-Werte int16_t genommen. Das lässt doch nachdenklich werden ! ? Und genauso funktioniert das bei mir (auch - ich hab nämlich seinen Code geklaut). Ob das mit Deinen Low- und Highbytes klappt - na ich weiß (leider wirklich) nicht.
    Ciao sagt der JoeamBerg

  10. #80
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    521
    Hi,
    an den Variablen kann es kaum liegen, ich bin derzeit nur am testen der ganzen I2C Verbindungen und lese daher nur die einzelnen Bytes aus. Da hat Sternthaler mit uint8_t die gleichen wie ich mit unsigned char. Der Zusammanbau von 2x8Bit auf 10Bit kommt erst wenn das mal funktioniert.

    Ach ja, ich verwende die Fleury lib für den Master.

    LG!
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

Seite 8 von 9 ErsteErste ... 6789 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress