Hallo zusammen, nach Tagen des tüftelns und probierens bin ich nun erst mal mit meinem Latein am Ende. Ich habe ein HD44780-kompatibles Display an einen ATmega8 angeschlossen, genauergesagt sind die Datenleitungen D4, D5, D6, D7 mit den Pins PB0, PB1, PB2, PB3 verbunden. PB4 und PB5 sind anderweitig belegt, und an PB6 und PB7 ist ein Quarz angeschlossen. Das Problem ist nun, wie ich jetzt zweimal vier Bit an Port B0/1/2/3 ausgebe, ohne PB4/5/6/7 zu verändern oder zu beeinflussen. Ich spiele schon tagelang mit Bitmanipulation herum, aber wie ich es auch probiere, mit veschiedenen Masken, mit &, |, &~, |~, die Daten landen nicht so auf dem Port, wie sie sollen. Mal bleiben die Pins PB4/5/6/7 so wie sie sollen, aber es kommt nur Datenmüll auf den brauchbaren Leitungen an, oder umgekehrt. Ich habe schon Papier und Bleistift bemüht, zahlreiche Seiten vollgekrizelt, habe auch schon eine Exceltabelle erstellt in der ich die verschiedenen Bitmanipulationsmöglichkeiten durchprobierte, aber es will mir einfach nicht gelingen. Ich könnte ja auch blind Code kopieren, und das würde dann schon laufen, aber ich will es ja verstehen, darum geht es. Muss man eventuell direkt auf die Portadressen des Atmega zugreifen? Ich habe im Tutorial etwas davon gelesen, dass von der Zahl 4 die Portadresse subtrahiert wird. Verstehe aber nicht, warum... Laut ATmega Datenblatt folgen ja die Portadressen direkt aufeinander ohne Zwischenraum. Christian
So als kleiner Denkanstoss: Schon mal dran gedacht die Bits in einer Variable herumzuschieben mit >> und << ?
Low Nibble
1 | PORTB=(PORTB&0xF0)|(data&0x0F) |
High Nibble
1 | PORTB=(PORTB&0xF0)|(data>>4) |
Christian W. schrieb: > genauergesagt sind die Datenleitungen D4, D5, D6, D7 mit den Pins PB0, > PB1, PB2, PB3 verbunden. PB4 und PB5 sind anderweitig belegt, und an PB6 > und PB7 ist ein Quarz angeschlossen. Christian W. schrieb: > Ich spiele schon tagelang mit Bitmanipulation herum, aber wie ich es > auch probiere, mit veschiedenen Masken, mit &, |, &~, |~, die Daten > landen nicht so auf dem Port, wie sie sollen. Mal bleiben die Pins > PB4/5/6/7 so wie sie sollen, aber es kommt nur Datenmüll auf den > brauchbaren Leitungen an, oder umgekehrt. Variable, z.B. PB_State definieren. PB_State = PortB; // Nicht PINB !! PB_State &= 0xF0; // Jetzt LowNibble einblenden PB_State |= LowNibble; // Ausgeben PortB = PB_State; // Und noch einmal dasselbe nur mit HighNibble... EDIT: Max hat es eleganter: Max H. schrieb: > PORTB=(PORTB&0xF0)|(data&0x0F)High Wahrscheinlich arbeitet er mit PINB...
Ich glaube fast, es wäre besser, wenn Du das Ganze mal ein paar Tage beiseite legst. Dann stellst Du hier konkrete Fragen bzgl. der Bitmanipulation.
Max H. schrieb: > Low Nibble >
1 | PORTB=(PORTB&0xF0)|(data&0x0F) |
> High Nibble >
1 | PORTB=(PORTB&0xF0)|(data>>4) |
Und genau DAS war jetzt der entscheidende Tipp. Ich hatte AND und OR immer nur einzeln, nie zusammen in einer Zeile verwendet. Gleich mal in Excel getestet, verstanden, und für perfekt befunden. Vielen Dank dafür!!! Christian
Christian W. schrieb: > Und genau DAS war jetzt der entscheidende Tipp. > Ich hatte AND und OR immer nur einzeln, nie zusammen in einer Zeile > verwendet. Und genau DAS glaube ich nicht, sorry...
Marc Vesely schrieb: > Und genau das glaube ich nicht, sorry... WER hier WAS glaubt, ist mir auch vollkommen egal ;-) Ich bedanke mich jedenfalls bei Max H. für die schnelle, einfache und kompetente Hilfe! Christian
Marc Vesely schrieb: > Und genau DAS glaube ich nicht, sorry... Ok, das ändert aber nichts an der Tatsache. Christian W. schrieb: > Ich bedanke mich jedenfalls bei Max H. für die schnelle, einfache und > kompetente Hilfe! Kein Problem...
Christian W. schrieb: > WER hier WAS glaubt, ist mir auch vollkommen egal ;-) WER DIR glaubt, ist mir auch vollkommen egal, ich tue es nicht.
Max H. schrieb: > Ok, das ändert aber nichts an der Tatsache. Nein, aber ich würde mal gerne wissen, was eine oder 2 Zeilen damit zu tun haben. Wenn er es tatsächlich geshafft hat, so was einfaches in 2 Zeilen zu versauen, dann sollte er lieber beim kochen bleiben. Eine Zeile PORTB=(PORTB&0xF0)|(data&0x0F) Zwei Zeilen PORTB = (PORTB&0xF0) // Daten ausgeblendet PORTB |= (data&0x0F) // Daten 2 Cycles später am Port
Christian W. schrieb: > Ich könnte ja auch blind Code kopieren, und das würde dann schon laufen, Hast du ja auch mit Max's Code gemacht, deswegen läuft es auch. Christian W. schrieb: > aber ich will es ja verstehen, darum geht es. Wirst du wahrscheinlich niemals.
Marc Vesely schrieb: > Christian W. schrieb: >> aber ich will es ja verstehen, darum geht es. > > Wirst du wahrscheinlich niemals. Danke für deine unbrauchbare und pessimistische Einschätzung. Ablage "P" :-D Christian :-)
Christian W. schrieb: > Danke für deine unbrauchbare und pessimistische Einschätzung. > > Ablage "P" :-D > > Christian :-) Hör nicht auf Leute wie Marc. ;) Blos an dich glauben und weiter lernen. Auf die Meinung solcher Leute wie von ihm kannst du ruhig verzichten, sind sowiso meist die Leute die am Abend sowenig zutun haben, dass sie alles und jeden im Internet beleidigen, blos weil man ihnen dort nicht direkt eins in die Fr**** schlagen kann. Schlussendlich besitzt er ja in keinster Weise die Kompetenz irgendwas über dich auszusagen, geschweige denn über deine Lernfähigkeit.
Christian W. schrieb: > Ich könnte ja auch blind Code kopieren, ... Könntest du. Du könntest aber auch den kopierten Code anstatt ihn einfach so zu verwenden tatsächlich studieren. Man kann viel lernen, wenn man anderer Leute Code studiert und sich ansieht, wie die gewisse Dinge machen. Fremden Code zu verwenden ist an und für sich nichts verwerfliches. Verwerflich ist maximal die Art und Weise wie man den Fremdcode verwendet.
San Lue schrieb: > Schlussendlich besitzt er ja in keinster Weise die Kompetenz irgendwas > über dich auszusagen, geschweige denn über deine Lernfähigkeit. Stimmt, ich entschuldige mich hiermit für meine Bemerkung. San Lue schrieb: > beleidigen, blos weil man ihnen dort nicht direkt eins in die Fr**** > schlagen kann. Ein tapferer Zwerg hinter seinem Riesenmonitor hat gesprochen... Karl Heinz schrieb: > Fremden Code zu verwenden ist an und für sich nichts verwerfliches. Selbstverständlich, warum das Rad immer neu erfinden ? Man kann nicht alles wissen und vor allem, man kann nicht alles am besten wissen und machen - wenn ich manchmal so genial einfache Codeschnipsel sehe, frage ich mich immer wieder wieso ich nicht darauf gekommen bin. Wenn ich aber so etwas übernehme, mache ich IMMER ein Vermerk wo ich das übernommen habe, egal ob das kommerziell genutzt wird oder nicht. Und wenn ich es übernehme, dann schreibe ich auch nicht, das es ein TIPP von xyz war.
Sehr schön, freut mich, dass das doch noch ein positives Ende findet. Nicht umsonst habe ich ja den Excel-Screenshot hochgeladen. In Excel habe ich mit diversen Formeln und Verknüpfungen gespielt (AND, OR, ~, usw...) und da kann man dann wunderbar experimentieren und zusehen, wie die Bits umkippen. Lektion verstanden und angewendet ;-) Danke Christian
Marc Vesely schrieb: > Ein tapferer Zwerg hinter seinem Riesenmonitor hat gesprochen... Ich glaube du besitzst auch nicht die Kompetenz etwas über seine Größe und der seines Bildschirms zu sagen. Korrigier mich wenn ich falsch liege...
Max H. schrieb: > Ich glaube du besitzst auch nicht die Kompetenz etwas über seine Größe > und der seines Bildschirms zu sagen. Leute die hinterm Bildschirm Sprüche wie: 'beleidigen, blos weil man ihnen dort nicht direkt eins in die Fr**** schlagen kann.' von sich geben, müssen irgendein Komplex haben. Entweder ist er zu klein geraten, oder sein Werkzeug - eins von Beiden. Und für Zwerge ist jeder Monitor riesengroß, auch wenn es ein 17'' ist. P.S. Um mir in die Fresse zu hauen, fehlt ihm 1. Die Mut 2. Stuhl oder Leiter ( bin 1.97 )
Marc Vesely schrieb: > 1. Die Mut Was soll er mit einer ägyptischen Göttin? > 2. Stuhl oder Leiter ( bin 1.97 ) Wieso? Weißt du wie groß er ist?
Max H. schrieb: >> 1. Die Mut Deutsch ist nicht meine Muttersprache, ich habe dort nur mein Magisterstudium gemacht, also kann ich mal einen Artikel falsch benutzen. "Jedes Substantiv hat sein grammatisches Geschlecht, und die Verteilung ist ohne Sinn und Methode. Man muss daher bei jedem Substantiv das Geschlecht extra mitlernen. Eine andere Methode gibt es nicht. Um das fertigzubringen, braucht man ein Gedächtnis wie ein Terminkalender." Aus: Mark Twain: Die schreckliche deutsch Sprache
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.
