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
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
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 :)
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.
>>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....
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.