MLX90316 probleme beim auswerten

Gast #1937481
Lesenswert?

Hallo Leute ,

ich versuche gerade den Drehgeber MLX90316 (SPI version) mit den µC : 
Atmega16 als auszuwerten allerdings bekomme ich unveränderlische Werte 
nicht wie es sein soll, als Transistor verwende ich BUK9535-55A, und die 
Auswertungsergebnisse sehen so aus :

1.Byte : 01111111
2.Byte : 11111111
3.Byte : 11111111
4.Byte : 11111111
5.Byte : 11111111
6.Byte : 11111111
7.Byte : 11111111
8.Byte : 11111111
9.Byte : 11111111
10.Byte : 11111111

ich habe das Code vereinfacht um die ersten daten zubekommen, es sieht 
so aus :

//====================================================

PORTB &=~(1<<CS);
_delay_us(13);

  SPDR = 0xaa;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[0] = SPDR;
        x0 = r_daten[0];
  _delay_us(13);


  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[1] = SPDR;
  x1 = r_daten[1];
  _delay_us(13);

  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[2] = SPDR;
  x2 = r_daten[2];
  _delay_us(13);

  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[3] = SPDR;
  x3 = r_daten[3];
  _delay_us(13);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[4] = SPDR;
  x4 = r_daten[4];
  _delay_us(13);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[5] = SPDR;
  x5 = r_daten[5];
  _delay_us(13);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[6] = SPDR;
  x6 = r_daten[6];
  _delay_us(13);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[7] = SPDR;
  x7 = r_daten[7];
  _delay_us(13);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[8] = SPDR;
  x8 = r_daten[8];
  _delay_us(13);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  r_daten[9] = SPDR;
  x9 = r_daten[9];
  _delay_us(13);

PORTB|=(1<<CS);
_delay_ms(1);

//====================================================

Das müsste doch eigentlich funktionieren, oder?

Allerdings bin ich auch kein so erfahrener programmierer und wäre froh 
wenn
mir da jemand tips geben kann!

Vielen Dank
Gast #1937523
Lesenswert?

ich habe hier einen kleines Fehler beim tippen gemacht, die Werte die 
ich von MOSI sende sehen soaus:
SPDR = 0xaa;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;
SPDR = 0xff;

an Kritik bin ich auch interessiert.

danke im vorraus
#2036630
Lesenswert?

Ich bin gerade beim Suchen nach Ideen wie man einen Schrittmotor 
mithilfe eines AVR Prozessors auf einen vorgegebenen Winkel stellen kann 
auf den MLX90136 gestossen, und dann beim Googeln auf Deinen Beitrag.

Bist Du weiter gekommen? Vielleicht hilft ein anderer Beitrag, den ich 
beim Googeln fand: 
http://www.anyma.ch/blogs/research/2010/04/07/very-nice-sensor-mlx90316-rotary-position-sensor/

Bei dem scheint es geklappt zu haben, und er gibt an, was der Drehgeber 
über SPI bekommen muss, damit er dann den Winkel ausspuckt - vielleicht 
hilft Dir das. Was für einen Magneten verwendest Du (und von wo 
bezogen)? und was für einen FET?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren