Wie kann ich Binärcode eingeben?

Ich weis, diese Frage ist sehr unqualifiziert, aber ich arbeite noch nicht sehr lange damit, ich muss mich erst ein wenig einfinden.

ICh muss an einen IC ein Binärzeile mit 12 Bits übergeben. Also Beispielsweise 101111101111

Diesen String möchte ich auch nachdem das Programm auf den Arduino geladen wurde noch ändern können. Wie kann ich diesen eingeben.
Serial.read() ist schlecht, oder?

Gibt es soetwas wie scanf()?

Ich könnte doch einen Array anlegen, Beispielsweise int Zahlenkette[12];
und dann jedes einzelne Bit einschreiben.
z.B: Zahlenkette[0]=scanf() (oder eben hier ein anderer Befehl mit dem ich das was ich in das Fenster vom Arduinoprogramm eingebe auslesen kann)
Die Frage ist nur wie ich das mache, hat da jemand eine Idee für mich?

Eine Binärzahl von 12 Bit entspricht einer Deimalzahl von 0 bis 4095.
Du kannst auch eine Dezimalzahl im Terminal eingeben.
Um das serielle an ein IC auzugeben brauchst Du die INT Zahl in 2 8Bit Zahlen zu zerlegen ( lowByte() bzw highByte() ) und mit shiftout() rauszugeben.
Grüße Uwe

Ich gehe mal davon aus das du die Bits serieall ausgeben musst. Wenn es "schnell" muss kannst du auch mit der SPI-Schnittstelle schnell die Daten rausgeben. Du musst dann an die MOSI (master out slave in).

Das habe ich auch schon mal gehört, ich hab nur keine Ahnung wie das mit der SPI Schnittstelle funktioniert. Kannst du mir eine Seite empfehlen wo ich das am besten nachlesen kann?
Ich benutze ja schon Timer 2, spielt das dabei eine Rolle?

Gruß

Markus

So fischen wir nur im Nebel.

Bitte gib uns mehr Info. Welches IC mußt Du ansteuern?

Grüße Uwe

Im Prinzip ist doch egal was er mit der Zahl anfangen will, oder? Wenn er sie binär eingeben sei es drum!

serial.read() passt schon. Fehlt halt etwas Logik zum umwandeln! Etwa so (ungetestet!)...

        int c,i=0;
        while(serial.available()){
                c=(serial.read()-48);
                switch(c){
                        case 0: i=i<<1;
                                break;
                        case 1: i=i<<1|1;
                                break;
                        case -38:
                                printf("%d\n",i);   // mach_was_mit_i(i);
                                i=0;
                                break;
                }
        }

Gruß,
Lupus

Lupus:
Im Prinzip ist doch egal was er mit der Zahl anfangen will, oder? Wenn er sie binär eingeben sei es drum!

Das sehe ich nicht so. Ich sehe das Ziel des Helfers eine moeglichst gute Loesung zu finden. Das kann auch bedeuten zu sagen dass der eingeschlagene Loesungsweg falsch ist und eine andere Schaltung bessere geeignet ist.

Was ist wenn ref110 als Anfaenger einen Gedankenfehler macht weil er etwas falsch verstanden hat?

Viele Gruesse Uwe

Hallo Uwe,

uwefed:
Das sehe ich nicht so. Ich sehe das Ziel des Helfers eine moeglichst gute Loesung zu finden. Das kann auch bedeuten zu sagen dass der eingeschlagene Loesungsweg falsch ist und eine andere Schaltung bessere geeignet ist.

da bin ich (grundsätzlich) deiner Meinung! ABER: Ich tendiere dazu eine Problemlösung zur Fragestellung zu geben und DANN auf evtl. vorhandene Missverständnisse hinzuweisen. Wenn jemand tatsächlich so etwas machen möchte, gibt ja evtl. auch gute Gründe, dann wird er ggf. nach einer Problemlösung suchen/googlen und sie dann auch finden und nicht in einem Thread landen in dem die eigentliche Aufgabenstellung wegdiskutiert wurde. Aber man kann da durchaus unterschiedlicher Meinung sein.

Gruß,
Lupus

Ich würde das erst in Hex codieren, und danach wieder decodieren.

Ich finde ref110 denkt etwas zu kompliziert.

Amüsiere mich: Wie PC-Laien Probleme lösen: Warum einfach, wenn ... - DER SPIEGEL ( das klingt so ähnlich )

MfG

Aus meiner Erfahrung machen sich wenige die Arbeit einer Websuche um eine moeglichst gute Problemloesung zu finden.
Ich sehe das nicht negativ wenn eine bessere Idee geliefert wird die meinen Loesungsversuch annulliert.
Wie bereits gesagt, ref110 muss uns antworten.
Gruesse Uwe

http://www.gidf.de/

]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley: ]:smiley:

Hi,

ich konnte dieses Projekt leider nicht weiter verfolgen da ich wichtige Prüfungen habe. Nachdem diese nun geschafft sind kann ich hier wieder weitermachen.

Also das Problem besteht immernoch.

Im Anhang habe ich euch einmal das Bauteil geschickt und wie es angesteuert werden muss.

Der DDC101 sieht wie folgt aus: http://focus.ti.com/lit/ds/symlink/ddc101.pdf

Ich muss mit dem Arduino eine 2MHz Frequenz erzeugen, was ich mit folgendem Code mache:

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()
{
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()
{

}

Jetzt muss ich aber ein 12 Bit Wort zum DDC101 übertragen und ich bekomme ein 20 Bit Wort als Antwort zurück.

Je Takt muss genau ein Bit übertragen werden. Darum muss ich die Master and Slave Methode verwenden. Hier ist aber die Frage wie und ob es überhaupt geht.

Hier wird das ganze auch einigermaßen beschrieben. Aber ich komme damit einfach nicht zurecht. Bitte helft mir

Eine weitere Frage ist ob ich den Timer 2 benutzen kann wenn ich Master and Slave verwende denn der Ausgangspin für die Frequenz ist ja bei mir Pin11 und der wird ja hier auch gebraucht.

Gruß Markus

Ansteuerung DDC.bmp (465 KB)