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
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...
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...
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 )
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