Einzelne Bits mit einer 2MHz Frequenz mitschicken

Hallo,

ich habe folgendes Problem: Ich habe einen Arduino Uno mit einem DDC 101 verbunden. Dies ist ein IC der eine Frequenz von 2Mhz benötigt. Diese erzeuge ich mit dem Arduino.
Es ist aber so wie man im Anhang sehen kann, dass ich ein 12 Bit Wort übertragen muss. Und zwar so, dass bei jedem Mal wenn die Clock Low ist ein Bit übertragen wird.

Wie kann ich das machen? Gibt es eine Lösung mit Interrupts oder mit einfachen if abfragen.

Ich habe auch etwas von Master und Slave gehört, würde das hier auch gehen.

Hier der Code zur Generierung der 2 MHz:

const int freqOutputPin = 11;
const int prescale = 1;
const int ocr2aval = 3;

const float period = 2.0 * prescale * (ocr2aval+1) / (F_CPU/1.0e6);

const float freq = 1.0e6 / period;

void setup()
{

// Generieren der 2MHz Frequenz:
pinMode(freqOutputPin, OUTPUT);

Serial.begin(9600);

TCCR2A = ((1 << WGM21) | (1 << COM2A0));

TCCR2B = (1 << CS20);

TIMSK2 = 0;

OCR2A = ocr2aval;

Serial.print(“Period = “);
Serial.print(period);
Serial.println(” microseconds”);
Serial.print(“Frequency = “);
Serial.print(freq);
Serial.println(” Hz”);
}

void loop() {
}

Ansteuerung DDC.bmp (465 KB)

Ich würde stark vermuten, dass die data clock unabhaengig von der system clock (2MHz) ist. Sonst braeuchte man sie nicht. Alles andere waere einfach bescheuert. Wenn der µc auch noch staendig auf die phasenlage der adc clock achten muesste...

Die 2MHz erzeugt ein PWM pin mittels hardware timer. Die kommunikation geht ueber das SPI interface mit eigener taktung, d.h. beliebig langsam oder schnell.