Forum: Compiler & IDEs Bitfolge ausgeben ?


von Thomas (Gast)


Lesenswert?

Hallo,
ich bräuchte ein bischen Hilfe zum Programmieransatz.
Und zwar möchte ich je nach Eingangssignal ( Analoge Spannung ), eine 
Bitfolge ausgeben.
Also z.b.: Eingangssignal 2,5 V : Ausgang ( 3x15 bit ) / oder 
Eingangssignal 2,0 V : Ausgang ( 6x15 bit ) ....
WIe muss ich da vorgehen ? Die Analoge Spannung sollte ich mit dem AD 
Wandler auswerten. Aber wie gehts weiter ? Muss ich mit Interrupts 
arbeiten ? Ich denke nicht, da ich ja immer ein Eingangssignal 
überwache, und je nach Zustand die eine oder andere Bitfolge ausgebe. ( 
Wenn eine Bitfolge am Ausgang ausgegeben wird, ist es egal wenn in 
dieser Zeit das Eingangssignal nicht ausgewertet wird. Das macht nichts. 
)
Wie sollte ich das programmieren ? Habt ihr nen Vorschlag für mich?
(Also kein Code, sondern ich frag nur nach dem prinzipiellen Ablauf)

Danke schonmal !
Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas wrote:
> Hallo,
> ich bräuchte ein bischen Hilfe zum Programmieransatz.
> Und zwar möchte ich je nach Eingangssignal ( Analoge Spannung ), eine
> Bitfolge ausgeben.

Was heist 'Bitfolge ausgeben'.
Wo wird die ausgegeben? Wie soll das konkret aussehen?

> Also z.b.: Eingangssignal 2,5 V : Ausgang ( 3x15 bit ) / oder
> Eingangssignal 2,0 V : Ausgang ( 6x15 bit ) ....
> WIe muss ich da vorgehen ? Die Analoge Spannung sollte ich mit dem AD
> Wandler auswerten.

Ist mal naheliegend. Kriegst du das hin?

> Aber wie gehts weiter ?

Du rechnest dir aus der Spannung aus, wie lang deine Bitfolge
sein muss und gibst sie aus.

> Muss ich mit Interrupts
> arbeiten ?

Wieso Interrupts? Wann soll ein Interrupt ausgelöst werden?

> Ich denke nicht, da ich ja immer ein Eingangssignal
> überwache, und je nach Zustand die eine oder andere Bitfolge ausgebe. (
> Wenn eine Bitfolge am Ausgang ausgegeben wird, ist es egal wenn in
> dieser Zeit das Eingangssignal nicht ausgewertet wird. Das macht nichts.
> )

Na also. Wozu soll dann der Interrupt gut sein

> Wie sollte ich das programmieren ?

Mit einer Schleife. Nein. Mit 2 Schleifen, eine davon eine
Endlosschleife

  mache_für_immer

    ADC auslesen
    Aus dem ADC Wert ausrechnen, wie lange die Bitfolge sein muss

    für alle i in der berechneten Länge
      gib Bit aus
    ende für
  ende mache_für_immer

von Thomas (Gast)


Lesenswert?

Hmm okay. Mit dem AD Wandler hab ich schon was gemacht, das bekomme ich 
hin. Die von mir genannten Bitfolgen sehen folgendermaßen aus (zum 
Verständnis) :
Ein ("0.6 ms High + 0.6 ms Low = Logisch "0" /// 1.2 ms High + 0.6 ms 
Low = Logisch "1".) Und dann eben bestimmte Bitfolgen : 110110001000001 
(Und das 3 mal hintereinander bzw. 6 solcher 15 bitfolgen hinereinander.

Das ist das was ich in Abhängigkeit des Eingangssignals am Ausgang 
geliefert bekommen möchte :)

von Karl H. (kbuchegg)


Lesenswert?

Dann würde ich vorschlagen, du vergisst erst mal den ADC und
alles was damit zusammenhängt und beschäftigst dich erst mal
damit eine derartige Bitfolge zu generieren.

Dazu ist es hilfreich sich zuerst mal zu überlegen, wie man
ein einzelnes Bit, sprich das Timing dieses Bits erzeugen
kann. Das mal Programmieren und mit einem Oszi kontrollieren,
ob das Timing stimmt.

Danach geht es dann weiter um mit der Funktionalität der 0 / 1
Bit Ausgabe eine komplette Bitfolge auszugeben (wo die Bitfolge
herkommt ist mir zwar immer noch nicht klar, muss aber auch nicht
mein Problem sein). Da deine Bitfolgen 15 Bit lang sind, bietet
sich ein uint16_t als Speichermedium für so eine Bitfolge an.
Die Ausgabe einer Bitfolge ist dann das durchgehen der 15
niederwertigsten Bits in diesem uint16_t und je nach Zustand des
Bits wird eine 0 oder eine 1 dafür ausgegeben. Voraussetzung
dafür ist natürlich, dass die Ausgabe einer 0 bzw. einer 1
vom Timing her korrekt läuft. Daher fängt man auch damit an.

von Matthias L. (Gast)


Lesenswert?

>>0.6 ms High + 0.6 ms Low = Logisch 0
>>1.2 ms High + 0.6 ms Low = Logisch 1


Das klingt nach nem Fernbedieungscode....

von Thomas (Gast)


Lesenswert?

Hmm der Kandidat erhält 100 Punkte g ....
Ach ja .... werde man die Tips von  Karl heinz Buchegger beherzigen und 
erstmal mit dem Timing anfangen und dann mal weitersehen ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.