mikrocontroller.net

Forum: Compiler & IDEs Bitfolge ausgeben ?


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.