Hallo,
wie komme ich an jedes einzelne Bit eines Bytes? Ich will keine anderen
Codes lesen o.ä. sondern es selber hinbekommen.
Also, ich habe z.b. das Byte 0 das sind ja dann 8 Bits a 0 also auf Byte
0 und Bits 00000000
Ich hoffe ich habe das so richtig erklärt. Ich weiss "eigentlich" was
ich brauche jedoch habe ich kA wie das heisst bzw. wonach ich suchen
muss.
Also weiter.
Ich habe nun eine Zahl von 0 - 255. Diese Zahl muss ich nun auf den
Ausgang "tickern" also bei 0 muss ich 8 (acht) nullen auf den Pin
schreiben usw.
Eine Funktion die mir das Timing macht habe ich, diese funktioniert
auch.
1
write_one();
2
write_zero();
Wenn ich jetzt das Byte 0 habe dann entspricht das ganze folgendem
1
write_zero();//Bit 1
2
write_zero();//Bit 2
3
write_zero();//Bit 3
4
write_zero();//Bit 4
5
write_zero();//Bit 5
6
write_zero();//Bit 6
7
write_zero();//Bit 7
8
write_zero();//Bit 8
So klappt das ganze auch, jedoch muss ich das so schreiben. Das ganze
soll aber "automatisch" passieren, also ich schicke ihm per RS232 eine
Zahl zwischen 0 und 255 und den rest macht der Code. Der zerlegt das
Byte dann in einzelne Bits und macht für jedes Bit dann eine if abfrage
wenn eine 0 dann write_zero() und wenn eine 1 dann write_one().
Also,
1. Wie kriege ich aus dem Byte acht Bits?
2. Wie kriege ich zugriff auf jedes einzelne Bit?
Also man ende muss dann rauskommen:
ist das erste Bit eine 1 schreibe 1 sonst 0
ist das zweite Bit eine 1 schreibe 1 sonst 0
ist das dritte Bit eine 1 schreibe 1 sonst 0
...
...
...
Ich hoffe ihr versteht wie und was ich meine.
Antoli B. schrieb:> Ich will keine anderen> Codes lesen
Solltest Du aber.
Jeder Soft-SPI Code macht sowas.
In einer Schleife maskieren (&) und schieben (>>).
Antoli B. schrieb:> wie komme ich an jedes einzelne Bit eines Bytes? Ich will keine anderen> Codes lesen o.ä. sondern es selber hinbekommen.
Dann musst du die Programmiersprache selber erfinden oder ein Buch dazu
lesen. Oder halt ewig und drei Tage herumbasteln.
Antoli B. schrieb:> 1. Wie kriege ich aus dem Byte acht Bits?> 2. Wie kriege ich zugriff auf jedes einzelne Bit?
Mein Tipp: du brauchst logische VerUNDung und/oder VerODERung.
Siehe Bitmanipulation> 1. Wie kriege ich aus dem Byte acht Bits?
Der Trick dabei ist: ein Byte besteht aus 8 Bits, die einfach
entsprechend ihrer Wertigkeit hintereinander gereiht sind.
> Wenn ich jetzt das Byte 0 habe dann entspricht das ganze folgendem> write_zero(); //Bit 1> write_zero(); //Bit 2> write_zero(); //Bit 3> write_zero(); //Bit 4> write_zero(); //Bit 5> write_zero(); //Bit 6> write_zero(); //Bit 7> write_zero(); //Bit 8
Deine Nummerierung ist falsch. Das LSB ist das Bit 0. Denn 2^0 ist 1,
und das höchswertige Bit hat die Nummer 7, denn 2^7 ist 128. Du solltest
dir unbedingt das binäre Zahlenformat ansehen.
Moin,
Antoli B. schrieb:> Ich will keine anderen> Codes lesen o.ä. sondern es selber hinbekommen.
Gut. Dann lies das auf keinen Fall, wenn du das LSB zuerst haben willst.
(Willst du das MSB zuerst, dann darfst du das natuerlich auch nicht
lesen).
Es geht um die ws2812b.
Also da muss ich ja 24 Bits, 8pro Byte/Farbe schicken. Wenn ich das von
"hand" mache also 24 mal write_zero() oder write_one() mache dann geht
das oder 24mal durcheinander dann kommen bunte Farben raus.
Nur genau das soll eben der Code machen. Und da mir Copy & Paste nichts
bringt muss ich achon wissen wie das genau heisst etc pp um mich darüber
einzulesen.
Timing etc habe ich alles schon hinbekommen. Nur die "automatisierung"
fehlt mir eben noch.
Antoli B. schrieb:> Nur die "automatisierung" fehlt mir eben noch.
Du siehst an allen geposteten Beispielen, dass du für die
Automatisierung eine Maske (= ein Byte, in dem nur 1 Bit gesetzt ist),
einen Schiebeoperator sowie ein logisches Und brauchst.
Md M. schrieb:> Antoli B. schrieb:>> Ich will keine anderen>> Codes lesen o.ä. sondern es selber hinbekommen.>> Umgekehrte Psychologie und alle fallen drauf rein :D
Ich lese da eher raus, dass Antoli keine fertigen Codes verwenden,
sondern selber lernen will. Das ist, finde ich zumindest, sehr
lobenswert.
Antoli B. schrieb:> Timing etc habe ich alles schon hinbekommen. Nur die "automatisierung"> fehlt mir eben noch.
Dir fehlt ein bisschen mehr als nur das.
Sowohl Dergute W. als auch Lothar M. haben dir funktionierende
Beispiele geschickt.
Du musst nur die Reihenfolge umdrehen aber nicht mal das kannst du
erkennen.
Keiner von beiden meldet sich, sieht für mich so aus als hätten die
dich einfach fallen lassen, aus welchen Gründen auch immer...
P.S.
Ich kann mir einen Grund denken, will aber nicht das dieser Beitrag
gelöscht wird...
Antoli B. schrieb:> Hallo,>> wie komme ich an jedes einzelne Bit eines Bytes? Ich will keine anderen> Codes lesen o.ä. sondern es selber hinbekommen.>
Wenn Du einen ARM Cortex hast, kannst Du über Bit Banding für jedes Bit
in bestimmten Bereichen einen Byte Alias benutzen. Such mal nach ARM
Cortex "Bit Banding."
Antoli B. schrieb:> Hallo,>> wie komme ich an jedes einzelne Bit eines Bytes? Ich will keine anderen> Codes lesen o.ä. sondern es selber hinbekommen.> [...]
Was Du an Grundlagen dafür brauchst, wird in einem C-Buch unter den
Stichworten "Bitweise logische Operatoren" (das sind '&', '|', '^' und
'~') und "Schiebeoperationen" (das sind ">>" und "<<") behandelt.
In diesem Artikel wird das teilweise abgehandelt:
https://www.mikrocontroller.net/articles/Bitmanipulation#Standard_C_4
Oder auch heir:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/006_c_operatoren_005.htm#mj8665462fba73385942e5ef4e23cddef6
Die Kodierung von Vorzeichenlosen, ganzen Zahlen setze ich als bekannt
voraus.
Eventuell kannst Du mit diesen Kenntnissen allein zum Ziel kommen.
Ansonsten frage gerne nochmal nach. Nur eben lies erst mal das und
probiere es aus.
Brummbär schrieb:> Ich lese da eher raus, dass Antoli keine fertigen Codes verwenden,> sondern selber lernen will. Das ist, finde ich zumindest, sehr> lobenswert.
Problematisch dabei ist jedoch, dass er auch keine Bücher / Artikel
lesen will (Vermutung) sondern sich das lieber in einem Forum vorkauen
lässt. Auch eine Methode - besonders Freitags.
Ruediger A. schrieb:> Wenn Du einen ARM Cortex hast, kannst Du über Bit Banding für jedes Bit
Ist zwar gut gemeint, übersteigt aber bei weitem sein Wissen...
> Ich will keine anderen Codes lesen o.ä.> sondern es selber hinbekommen.
Wenn du das ernst meinst, dann hättest du hier nicht gefragt, denn du
willst es ja selber hinbekommen.
Dieter F. schrieb:> keine Bücher / Artikel
Er schreibt nur "keine anderen Codes"
Hier schreibt er zumindest, dass er nachlesen möchte:
Antoli B. schrieb:> Und da mir Copy & Paste nichts> bringt muss ich achon wissen wie das genau heisst etc pp um mich darüber> einzulesen.
Dieter F. schrieb:> Brummbär schrieb:>> Ich lese da eher raus, dass Antoli keine fertigen Codes verwenden,>> sondern selber lernen will. Das ist, finde ich zumindest, sehr>> lobenswert.>> Problematisch dabei ist jedoch, dass er auch keine Bücher / Artikel> lesen will (Vermutung) sondern sich das lieber in einem Forum vorkauen> lässt. Auch eine Methode - besonders Freitags.
Genau so ist es. Ich will lesen und es selber hinbekommen mit lesen, der
schaltung und osziloskop.
Nein ich will keine fertigen codes lesen wenn ich sie ja eh nicht
verstehe. Ich möchte wissen wie das genau heisst und WAS ich LESEN und
LERNEN muss.
Da bringt es mir nichts Code zu lesen wenn ich ihn nicht verstehe.
Brummbär schrieb:> Er schreibt nur "keine anderen Codes"> Hier schreibt er zumindest, dass er nachlesen möchte:>> Antoli B. schrieb:>> Und da mir Copy & Paste nichts>> bringt muss ich achon wissen wie das genau heisst etc pp um mich darüber>> einzulesen.
Dann muss ich ihm halt den genialen Link dazu vermitteln:
https://www.google.de/?gws_rd=ssl
Hier im Forum werden umfangreiche Grundlagen vermittelt (wenn man denn
lesen will) - es gibt x andere Quellen (Google), die man auch anzapfen
kann (lesend).
Außerdem gibt es lokale Leihbüchereien, die auch gerne weiterhelfen.
Antoli B. schrieb:> Ich möchte wissen wie das genau heisst und WAS ich LESEN und> LERNEN mussAntoli B. schrieb:> Eine Funktion die mir das Timing macht habe ich, diese funktioniert> auch.
Womit?
Antoli B. schrieb:> Es geht um die ws2812b
Fein.
Alles, was mit dem von Dir verwendeten MC und WS2812B zu tun hat.
-> Google
Ansonste tippe ich auf einen Troll (schon wieder Freitag ?)
Antoli B. schrieb:> Da bringt es mir nichts Code zu lesen wenn ich ihn nicht verstehe.
Dann versuch doch genau das. Wenn ein "Code" in 1 einzige Zeile passt,
dann kann er nicht kompliziert sein. Und deshalb solltest du in der Lage
sein, ihn zu verstehen.
Oder wie willst du selber einen Quellcode schreiben, wenn du nicht mal
einen anderen einfachen Code lesen kannst?
Oder wie willst du selber einen Brief in einer neuen Sprache schreiben,
wenn du noch nicht mal einen einfachen Text lesen kannst?
Lothar M. schrieb:> Wenn ein "Code" in 1 einzige Zeile passt, dann kann er> nicht kompliziert sein.
Nun ja, es koennte sich auch einfach um eine Programmiersprache
handeln, die fuer Sonderzeichenwuesten bekannt ist.
Moin,
Marc V. schrieb:> Keiner von beiden meldet sich, sieht für mich so aus als hätten die> dich einfach fallen lassen, aus welchen Gründen auch immer...>> P.S.> Ich kann mir einen Grund denken, will aber nicht das dieser Beitrag> gelöscht wird...
Aha. Soso. Naja. Um die Mutmassungen ueber Gruende nicht zu sehr ins
Kraut schiessen zu lassen:
* Ich bin nicht 24/7 hier dabei, manchmal muss ich auch arbeiten, pipi,
kaka oder bubu machen. Oder Super-Hi-Speed-DSP-Anwendungen auf attinys
designen. Oder. Oder.
* Ich werd' nicht fuers Posten bezahlt, also poste ich nur dann, wenn
ich Bock hab'. Da fang' ich weder jemanden auf, noch lass ich jemanden
fallen. Ich bin sogar so kackfrech, ich nehm mir einfach das Recht raus,
voellig unabhaengig von Threaderoeffner und Mitpostern selbst zu
entscheiden, ob ich einen Beitrag schreibe oder nicht.
Gruss
WK
Antoli B. schrieb:> also ich schicke ihm per RS232 eine> Zahl zwischen 0 und 255 und den rest macht der CodeAntoli B. schrieb:> Ich hoffe ihr versteht wie und was ich meine.
Nein, das was du schreibst, ist komplett UNVERSTÄNDLICH. Eben deshalb
kam auch der Sack voll dazu passender Antworten darauf.
Merke dir mal:
über RS232 wie auch über alle möglichen anderen Kanäle rein und raus aus
einer Rechenanlage kann man keine Zahlen schicken.
Basta.
So etwas geht aus Prinzip nicht.
Stattdessen..
kann man über alle derartigen Wege Zeichen schicken, insbesondere
Textzeichen (aber prinzipiell auch Zeichen, die keinem Text entsprechen
müssen).
Also wenn du ne Zahl durch die Gegend schicken willst, dann mußt du
daraus eben eine Folge von Zeichen machen, zum Beispiel Textzeichen.
Beispiel: Du willst ne Zahl von 4711 schicken, dann sende ein
Textzeichen '4', dann ein '7', dann ein '1' und dann nochmal ein '1' und
zum Schluß irgendwas, das dem Empfänger klarmacht, daß hier Schluß ist.
z.B. ein ';' oder so.
Haben wir jetzt wenigstens soviel dazugelernt, daß eine sachliche
Diskussion ermöglicht wird?
W.S.
An den TO:
es gibt prinzipiell so viele Möglichkeiten und Deine Praxiserfahrung ist
noch so gering, dass es besser ist, Du machst erstmal einfach. Und dann
hole Dir Tipps zum optimieren.
Beispiel: Die einfachste (straightforward) Lösung ist: (angenommen, die
Zahl die reinkommt ist in Variable x gespeichert)
Zudem kürze ich (per define) die Funktionsnamen ab )
Wenn Du es so programmierst, hast Du mehr gelernt, als durch
Diskussionen.
Vielleicht überlegst Du Dir, ob Du vielleicht die oberen und unteren 4
Bit (sogenannte Nibbles) einzeln auswertest, dann gibt es nur 16 Fälle,
also deutliche Optimierung.
Und dann hast Du auch einen intrinsischzen Antrieb, Dir zu überlegen,
- wie der binäre Aufbau sich im Detail hier wiederfindet,
- ob vielleicht die binären Operatoren & und | Dir weiterhelfen
- ob die reine Rechnerei mit Modulo (%) oder auch / weiterhilf
- Ob es am Ende vielleicht nur 8 Fälle gibt (Bit 0 ... Bit 7)
Wenn Du dann einen Aufbau mit 8 Fällen hast, dann kannst Du im
übernächsten Schritt fragen, wie man den in einer Schleife eleganter
umsetzt. Das braucht aber einige Tage Nachdenken, Erfahrung und
Schweiss.
Und dann kann es am Ende sehr kurz werden, wie z.B. bei Lothar.
Achim S. schrieb:> Wenn Du es so programmierst, hast Du mehr gelernt, als durch> Diskussionen.
Ja, das falsche gelernt.
Da halte ich eine vorherige Diskussion doch für erheblich sinnvoller.
Achim S. schrieb:> Wenn Du es so programmierst, hast Du mehr gelernt, als durch Diskussionen.
Vor allem statt "Nachdenken" die "Copy&Paste Programmierung"... :-/
Denn der Witz dabei ist das Motto: "Wenns läuft ist es fertig!"
Maus schrieb:> gültiger C Code:
Da bin ich mir nicht soooo ganz sicher:
http://codepad.org/jb8KQRmB> gültiger C Code:
Wenn du das meinst, dann mach doch bitte auch die [c] Tags drumrum.
Arduino F. schrieb:> Ja, das falsche gelernt.> Da halte ich eine vorherige Diskussion doch für erheblich sinnvoller.
Welche Diskussion denn: Der TO hat mit seinen Funktionen und seiner
Frage doch gezeigt, dass er ganz am Anfang steht und keine Ahnung hat,
wie die Bits in einem Byte zu einer Zahl zusammengesetzt werden.
Wenn er sich das am konkreten Beispiel der Zahlen 0 und 1 anschaut und
programmiert und auch nur zur Hälft kapiert (also nichtmal erkennt, ob
LSB oder MSB first), dann hat er schon mehr gelernt als er im Thread
hier lernen kann weil er noch nicht so weit ist die gegebenen Hilfen
zu verstehen. Er hat also 2 Möglichkeiten: Sich für zu doof halten, oder
es (auf eine für Dich falsche Art) selber tun..