Hallo zusammen, Bei mir ist das Problem dass ich übe einen Uart 8bit zugeschickt bekomme, sprich zum Beispiel: 0b01010111 Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1 auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!) SG DV
:
Bearbeitet durch User
Darth V. schrieb: > Hallo zusammen, > Bei mir ist das Problem dass ich übe einen Uart 8bit zugeschickt > bekomme, > sprich zum Beispiel: 0b01010111 > Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1 > auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!) > SG DV Hängt vom MC ab, ob auf jedes Bit einzeln zugegriffen werden kann.
Über die UART kommt typisch eine Folge von Bytes rein. Damit man weiß, welches Byte in der Folge welche Bedeutung hat, implementiert man ein Datenprotokoll. Der Empfänger muß dieses Protokoll dann wieder dekodieren. Danach kann man die Bytes oder auch Bits entsprechend auswerten. Man kann sie z.B. binär anzeigen, wenn man Lust dazu hat.
Wie wäre es mit [Rotate] (RRC.b in Assembler)? Alternativ auch mit dem Bittest befehl? (BIT.b #nn,&ADCM in Assembler) Was aber willst du den genau Einzelne Bits testen? Oder Umrechnen? Je nach dem wenn du die XV2 Cpu hast kann sogar ein Befehl grad mehrere Bit bearbeiten..... Je nach dem was du machen willst. Beispiel: (RRAM.b #4,Rn) um ein 4 Bit Nibble zu verschieben, eignet sich hervorragend zum Umwandeln vin Hex-> in Asci codes :-) Ganz ohne Loops oder IF usw. Link: https://en.m.wikipedia.org/wiki/TI_MSP430#MSP430X_20-bit_extension
:
Bearbeitet durch User
> man die Bytes oder auch Bits entsprechend auswerten. Man kann sie z.B. > binär anzeigen, wenn man Lust dazu hat. Ja genau, nur ich würde gerne die Bites wo binär angezeigt werden so auslesen dass ich die 0er und 1er einzeln auslesen kann
Patrick L. schrieb: > Wie wäre es mit [Rotate] > (RRC.b in Assembler)? > Alternativ auch mit dem Bittest befehl? > (BIT.b #nn,&ADCM in Assembler) > > Was aber willst du den genau Einzelne Bits testen? > Oder Umrechnen? > > Je nach dem wenn du die XV2 Cpu hast kann sogar ein Befehl grad alle 8 > Bit bearbeiten..... Je nach dem was du machen willst. > Beispiel: > (RRAM.b #4,Rn) um ein 4 Bit Nibble zu verschieben, eignet sich > hervorragend zum Umwandeln in Hex->Asci codes :-) > > Link: https://en.m.wikipedia.org/wiki/TI_MSP430#MSP430X_20-bit_extension Cch brauche die einzelne bits um je nach Stellung Musik abzuspielen. :) Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen und als if Abfrage abzufragen... Ich hoffe Ihr versteht etwas darunter xD
Der Uart schickt dir (also Darth Vader, nicht einem Rechner) Bits? Dann würde ich dem Uart sagen, er soll mal langsam machen. dann kannst du mit Papier und Bleistift die Nullen und Einsen aufschreiben. Du solltest vielleicht bitten, dass dich dabei keiner stört! Denn sonst verpasst du noch ein Bit.
Darth V. schrieb: > Ja genau, nur ich würde gerne die Bites wo binär angezeigt werden so > auslesen dass ich die 0er und 1er einzeln auslesen kann Bau in die Ausgabe eine Tastenabfrage ein, dann kannst Du bei jedem Tastendruck genau ein Bit anzeigen lassen. Nur mußt Du Dich bei 115200Baud aber ganz schön sputen mit dem Drücken.
1 | boolean b[8]; |
2 | unsigned char uart; |
3 | |
4 | b[0] = ((uart & 0x01)!=0); |
5 | b[1] = ((uart & 0x02)!=0); |
6 | b[2] = ((uart & 0x04)!=0); |
7 | b[3] = ((uart & 0x08)!=0); |
8 | b[4] = ((uart & 0x10)!=0); |
9 | b[5] = ((uart & 0x20)!=0); |
10 | b[6] = ((uart & 0x40)!=0); |
11 | b[7] = ((uart & 0x80)!=0); |
Keine IF Abfragen und Schleifen.
:
Bearbeitet durch User
Darth V. schrieb: > Cch brauche die einzelne bits um je nach Stellung Musik abzuspielen. :) > Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen und als > if Abfrage abzufragen... ???-{ .... Sieht scheiße aus, wa? Probiers mal mit Switch und denk dran, das jeder Zweig erst durch ein break beendet wird und nicht durch das nächste case.
Das musst du jetzt erklären? Als Beispiel:
1 | BIC.b &U0RXBUF,&R12 ;Löscht dir alle Bits die "1" waren im R12 |
2 | BIS.b &U0RXBUF,&R12 ;Setzt dir alle Bits die "1" waren im R12 |
3 | AND.b &U0RXBUF,&R12 ;Löscht dir alle Bits die "0" waren im R12 |
usw meinst du das?
Darth V. schrieb: > Ja genau, nur ich würde gerne die Bites wo binär angezeigt werden so > auslesen dass ich die 0er und 1er einzeln auslesen kann Zum Glück ist auch dir klar, dass dir da in vielfältiger Weise grundlegende Grundlagen fehlen. Aber sag doch mal, warum du das so machen willst. Was ist das eigentliche Problem? Warum willst du da einzelne Bits "auslesen"? Darth V. schrieb: > keine lange if schleife(die Werte VARIIEREN!!) Abgesehen davon, dass es keine if-schleife gibt: was ist so schlimm an sich ändernden Werten? Und warum dauert bei dir eine Schleife lange? > Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen und als > if Abfrage abzufragen... Was machst du dir da Gedanken? Die Arbeit muss doch der Controller machen... Darth V. schrieb: > Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen Das sind 1. schlimmstenfalls 256 unterschiedliche "Stellungen" und 2. musst du nach ein wenig Nachdenken keine Schleife programmieren, sondern kannst einfach mit dem empfangenen Wert über eine Tabelle irgendwas direkt auswählen.
:
Bearbeitet durch Moderator
> Aber sag doch mal, warum du das so machen willst. Was ist das > eigentliche Problem? Warum willst du da einzelne Bits "auslesen"? > Ich bekomme 128 verschiedene Zustände reingeschickt die per Expander über den I2c auf den uC(ATMega328P) geschickt werden. Dass wird per Uart auf den RPI geschickt. Jetzt will ich je nach Zustand der 128 Eingänge das einzeln auslesen( ich bekomme das in 8 bit sprich einem Byte gschickt).
OK die Handyträgheit hat die Folgeposts (noch nicht) gezeigt. Aber dan wäre die Empfehlung von Lothar M. schrieb: > sondern kannst einfach mit dem empfangenen Wert über eine Tabelle > irgendwas direkt auswählen. Die Ideale Lösung. Anhand der Tabelle kannst du dann entweder CALL's aufrufen oder Werte abhohlen usw.
Ähh, wenn du letztlich aus 128 Musiktiteln auswählen willst, so musst du auch alle 128 Möglichkeiten ins Programm reinschreiben. Ob du das jetzt als if / else Reihe, switchcase oder als Arrayzugriff machst ist völlig egal. Du brauchst ja auch die 128 "Ausgangswerte". Woher soll der Controller wissen das Nr. 9 eben gerade Beethoven ist? Ich, als ziemlicher Anfänger, würde das mit einen switch machen. Das finde ich recht übersichtlich. Und, ähh, ja, das sind dann mehr als 260 Zeilen Code.
Beitrag #7261270 wurde vom Autor gelöscht.
Darth V. schrieb: > Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1 > auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!) Verstehe ich nun als: wie kann ich verschiedene Bitzustände uder Bitkombinationen ... und nicht einzelne Bits.... auslesen und das geht definitiv über eine Tabelle am einfachsten.
oder du lagerst die zuordnungsinformation extern, ein extra header mit zuordnungsarray nummer zu dateiname, und der code hohlt sich von dort die information anhand des empfangenen index. so wird der code lesbarer und hat kein 260 zeilen switch case.
Flip B. schrieb: > oder du lagerst die zuordnungsinformation extern, ein extra header mit > zuordnungsarray nummer zu dateiname, und der code hohlt sich von dort > die information anhand des empfangenen index. so wird der code lesbarer > und hat kein 260 zeilen switch case. Wenn man es richtig gut machen will, dann packt man eine SQL-Datenbank dahinter. Dann werden die Titel und die Nummern in der Datenbank verwaltet, und man muß nicht bei jedem neuen Lied den Sourcecode ändern.
Darth V. schrieb: > Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1 > auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!) Am Besten einen 8051 verwenden. Da kann man mit dem Assemblerbefehl JNB durch das Byte hüpfen ;-)) Just my 2 cents Sorry, could not resist
Welche Programmiersprache? Wenn er 256 Musiktitel abspielen will, sind ihm die einzelnen Bit doch wurscht, der Zahlenwert reicht vollkommen. Wenn er jetzt eine Datentabelle besitzt, dann braucht er genau 1 Abfrage die dann den Wert aus dieser Tabelle holt. Anselm
Ich verstehe das so, du hast ein Soundboard mit 128 Tasten und per Tastendruck soll einer von 128 Sound abgespielt werden? Aber was bringen dir dann die einzelnen Bits?
Beitrag #7261495 wurde vom Autor gelöscht.
Beitrag #7261497 wurde vom Autor gelöscht.
Beitrag #7261504 wurde von einem Moderator gelöscht.
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.