SSI Master Simulieren

kann ich mit einem Arduino Uno einen SSI( Synchron Serial Interface) - Master Simulieren
also das der Arduino mir clock daten und data daten (24msb + 1lsb) vorgibt.
Hat da wer erfahrung damit ?

MB5U - iC-Haus GmbH (ichaus.de) ----> Das ist ein SSI-Master zum Beispiel

Was ist ein

???
Das hier wahrscheinlich nicht.

Du bist doch schon ein Weilchen beim Arduino-Forum
Hast du das mal gelesen?

ansonsten

vgs

Hallo alx144

Ja, das ist möglich, da die synchrone serielle Schnittstelle über zwei Portpins simuliert werden kann. Dazu ist ein Timer erforderlich, der die Datenrate erzeugt.

Wie gehts deinem Encoder mit A/B Takt?

Was versuchst du jetzt? Einen Sensor mit SSI Protokoll über den Arduino auszulesen?

SPI mit RS422 Adapter?
Grüße Uwe

Etwas mehr:

Edit: Da gibt es auch die AN zu den Implementationen in C fürs Protokol
https://biss-interface.com/c/downloads/


void setup()  //generation of 80 kHz PWM signal using TCNT1
{
  Serial.begin(9600);
  pinMode(9, OUTPUT);   //DPin-9 will deliver PWM signal for Ch-A
  TCCR1A = 0b11100010;  //COM1A1 COM1A0 COM1B1 COM1B0 b4 b3 b2 WGM11 WGM10; Mode-10 PWM; inverting
  TCCR1B = 0b00010001; //b7 b6 b5 WGM13 WGM12 CS12 CS11 CS10; Mode-10 PWM; division factor = 1; clkTC1 = clkSYS/1
  ICR1 = 100;           //foc1A = 80 kHz; 
  //fDSPWM = (clkSYS/N)/(2*ICR1) = clkSYS/(2*N*ICR1) = clkSYS/(2*N*TOP)
  // 80*1000 = 16000000/(2*1*ICR1); ICR1 = 1600/16 = 100
  TCNT1 = 0x0000;       //initial count
}

void loop() //changing the duty cycle (ON-period) manually
{
  if (bitRead(TIFR1, OCF1A) == HIGH)//if TCNT1 matches with OCR1A;change duty cycle
  {
    bitSet(TIFR1, OCF1A);  //clear flag
    OCR1A = map(analogRead(A0), 0, 1023, 0, 95);//95 < ICR1 = 100 new value for new duty cycle
    Serial.println(OCR1A, DEC);  //shows the value written into OCR1 register
    delay(1000);  //test interval
  }
}

Mit dem code bekomme ich eine Taktfrequenz von 80khz hin (clock)
Sovbald ich aber mit einer schleife 24 msb takte + 1lsb (data) simulieren möchte funktioniert es nicht

Kannst du mal schauen, was der Code ausgibt, wenn du den Sensor an MISO und SCK anschließt?

#include <SPI.h>


SPISettings settings(100000, LSBFIRST, SPI_MODE2);

void setup() {
  Serial.begin(9600);
  SPI.begin();
}


void loop() {
  SPI.beginTransaction(settings);
  delay(1);
  uint8_t data[4];
  for(unsigned int x = 0; x<sizeof(data);x++){
    data[x] = SPI.transfer(0);
  }
  SPI.endTransaction();

  for(int x = 0; x<30; x++){
    bool b = bitRead(data[x/8], x%8);
    Serial.print(b, BIN);
  }
  Serial.println();
  delay(1000);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.