Das hier:
Martin Fischer schrieb:> if(pin == (PIN0 | PIN1 | PIN2 | PIN3))
PIN0 | PIN1 | PIN2 | PIN3 ist eine bitweise Verknüpfung von den vier
Konstanten. Das ist ziemlich sicher nicht das, was du willst. Aber da
ich nicht genau weiß, was du mit dieser Zeile erreichen willst, bin ich
da auch nicht 100% sicher...
Das hier:
Martin Fischer schrieb:> data = reg & (1 << pin);Martin Fischer schrieb:> if(data == 1)
...passt auch nicht zusammen. reg & (1 << pin) kann nur 0 oder (1 <<
pin) sein. Das ist nur genau dann 1, wenn pin = 1 ist.
Ich glaube, du solltest dir den Unterschied zwischen logischen
Operatoren und bitweisen Operatoren noch einmal genau anschauen. Und in
dem Zusammenhang einmal nachlesen, wie logische Datentypen in C
verwendet werden.
MfG, Arno
> was ist da falsch?
Kommt drauf an. Welches Verhalten erwartest Du? Welches Verhalten
beobachtest Du stattdessen? Wie kann mans reproduzieren?
Dasda..
> lcd_string(digitalRead(PIN2));
^^^^
[..]
> char digitalRead(uint8_t pin) {
[..]
> if(pin == (PIN0 | PIN1 | PIN2 | PIN3)){
^^ ^ ^ ^^^^ ^
..ist jedenfalls schon mal höchstwahrschinlich nicht das was Du
eigentlich haben wolltest.
HTH
Lieber Martin Fischer,
so langsam wirst Du aber penetrant.
Wir haben Dir doch gestern schon empfohlen
Beitrag "uC C-Programmierung Port setzen", das Tutorial und
ein C-Buch zu lesen.
Streng Dich gefälligst selbst mal an.
Martin Fischer schrieb:> was ist da falsch?
Verrate wenigstens, welche LCD Bibliothek du benutzt und mach dir
Gedanken über den Typ des Arguments für lcd_string().
Martin Fischer schrieb:> lcd_string(digitalRead(PIN2));
lcd_string erwartet als Argument einen String. Das sind ein oder mehr
druckbare Zeichen, die mit einer 0x00 beendet werden.
digitalRead liefert einen char. Das ist etwas anderes. Und nur der Name
"char" bedeutet nicht, dass es auch druckbar ist.
Ich werde nicht penetrant!
Das steht so nicht in dem Tutorial!
Meine lcd-lib funktioniert...
PIN0 ist PB0 zugewiesen und so weiter...
Ich möchte dass bei PB2 gelesen wird ob ein Taster gedrückt wird und der
Status (gedrückt/nicht gedrückt) soll im LCD angezeigt werden...
Das LCD bleibt leer..nur am Anfang erscheint "Loading..." wie es auch
programmiert ist...
>Ich werde nicht penetrant!
Das ist das Gegenteil von dem was ich behaupte.
Meinst Du ich lüge, in dem ich etwas behaupte was ich nicht so empfinde?
Also. DU WIRST PENETRANT!
>Das steht so nicht in dem Tutorial!
Jedenfalls steht alles im C-Buch. Lies das endlich.
Das ist Urschleim.
Martin Fischer schrieb:> Ich werde nicht penetrant!> Das steht so nicht in dem Tutorial!
Du merkst es nicht einmal...
Nocheinmal du sollst dir endlich ein verdammtes C-Buch besorgen und
durcharbeiten. Warum schreibst du nicht eine Liste, was du für Wünsche
hast und ersparst uns Zeit und Erklärungsversuche? Ganz ehrlich du
willst doch gar nicht lernen, du willst einfach NUR dieses Projekt
durchkriegen ohne den kleinen Finger zu rühren.
Das hat nichts mit dem JuFo Projekt zutun, das ist nur Nebensache!
Ich möchte einfach nur lernen, und mein Buch ist noch nicht da!
Also wer nicht Helfen mag kann seine Fre*se halten und muss hier auch
nicht so einen Müll schreiben!
Ein Forum ist dafür da um Hilfe von anderen zu bekommen!
Ich habe schon selbst etwas erarbeitet, es funktioniert blos teilweise
nicht richtig!
Martin Fischer schrieb:> Also wer nicht Helfen mag kann seine Fre*se halten und muss hier auch> nicht so einen Müll schreiben!> Ein Forum ist dafür da um Hilfe von anderen zu bekommen!
Der Einzige der hier Müll schreibt bist du. Das mit dem Forum und Hilfe
mag ja zwar stimmen, allerdings wird dann vom Hilfesuchenden auch
verlangt seine Hausaufgaben zu machen und etwas Selbstständigkeit zu
zeigen. Du kriegst es ja oft nicht mal hin zu googeln oder einen
verlinkten Artikel zu lesen.
Aber hier noch ein konstruktiver Rat: wenn du dir bei C nicht sicher
bist, teste es einfach auf dem PC.
Martin Fischer schrieb:> Jetzt mal Schritt für Schritt...:> if(pin == (PIN0 || PIN1 || PIN2 || PIN3)){
Hallo Martin,
das steht in jedem Buch über C und C++:
"if" fragt ab ob der darauf in Klammern folgende Ausdruck ungleich 0
ist.
"x == y" liefert 1 wenn x gleich y, und 0 wenn x nicht gleich y ist.
"a || b" liefert 1 wenn a ungleich 0 ist oder wenn b ungleich 0 ist, und
0 wenn a und b gleich 0 sind.
Die Reihenfolge der Auswertung folgt der Grammatik (siehe
http://en.cppreference.com/w/cpp/language/operator_precedence).
Daraus solltest du die Antwort auf deine Frage leicht herleiten können.
LG, Sebastian
Martin Fischer schrieb:> if(pin == (PIN0 || PIN1 || PIN2 || PIN3)){
Bitte informiere dich über den Unterschied zwischen | und ||
Die Verdopplung bedeutet nicht "ich will es aber!"
Ich wieder hole meine Aussage von gestern, dir fehlen Grundlagen.
Ist dir der Unterschied zwischen char und string mittlerweile klar
geworden?
Martin Fischer schrieb:> Geht es nun so: (PIN || PIN || PIN) oder so: pin == PIN || pin == PIN
Hallo Martin,
die Frage ist doch eher: Was passiert genau wenn du pin == (PIN || PIN
|| PIN) schreibst?
Also: Du vergleichst pin mit dem Ausdruck (PIN || PIN || PIN) auf
Gleichheit.
Also: Was ist denn der Wert von PIN || PIN || PIN? Und: Möchtest du pin
gegen diesen Wert auf Gleichheit testen?
LG, Sebastian
Martin Fischer schrieb:> Ich benutze übrigens diese LCD Bibliothek:
da steht drin:
// Ausgabe eines Strings an der aktuellen Cursorposition
void lcd_string( const char *data );
Und was übergibst du als Parameter im zweiten Aufruf?
zum Lernen hilft auch das mikrocontroller.net Tutorial.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Und dann einfach auf einem Steckbrett mit LED, Taster testen und
Erfahrungen sammeln. Hilft mehr als Querbeet fragen zu stellen. Ich
Wette du hast das morgen alles wieder vergessen was du hier fragst.
@ Martin Fischer
Digitalzwerg hat aber Recht. Fang bei den Grundkenntnissen an. lesen,
lesen, lesen, lesen. Und wie geschrieben, einfach anfangen, mit
Steckbrett und einfachen Ein- und Ausgaben.
Genau so wie es auf der Seite beschrieben ist. C und H Datei in deinem
Projekt einbinden, die Ports richtig beschalten und vorallem die Ports
in der H Datei anpassen. Dann vielleicht erstmal mit dem Beispiel üben.
>Meine Fragen haben schon ihr Ziel! Und wenn man mir nicht helfen mag
dann kann man es auch lassen, sorry, aber ich finde das nur unfair!
Unfair? Es ist unfair von DIR, uns hier mit Deiner Faulheit zu
konfrontieren und von uns Antworten auf Fragen zu verlangen, die Du Dir
bei entsprechendem eigenen Bemühen schon längst hättest selbst
beantworten können.
Komme mir also nicht mit unfair. Du belästigst uns hier mit Deiner
Unfähigkeit aus eigenem Antrieb zu lernen. Das ist nicht nur unfair, das
ist Schmarotzertum!
Martin Fischer schrieb:> Klappt alles Steffen!> Ein String wird ausgegeben...wie aber der Wert des Pins?
Georg G. hat das zwar schon mal angesprochen, aber is ja klar das du
denn Unterschied zwischen einem String und einem Integer nicht kennst
bzw. das System was dahinter steckt noch nicht verstanden hast.
Klare Empfehlung:
Sich ein C Buch besorgen und die Grundlagen lernen und zwar auf einem
PC! Ein bisschen üben um die Grundlagen auch zu verinnerlichen. C ist
nun mal eine technische Programmiersprache, die einem viel Kontrolle
gibt, allerdings auch ihre Tücken hat und vom Anwender verlangt, dass er
weiß was er da tut!
Dann kannst du auf einem µC anfangen und zwar zuerst mit einer LED. Dann
mal mit einem Timer der die LED zum blinken bringt. Also (fast) die
ganze Peripheriekette abarbeiten und verstehen. Ein LCD Display ist da
eher unten auf der Liste!
Martin Fischer schrieb:> Klappt alles Steffen!> Ein String wird ausgegeben...wie aber der Wert des Pins?
Klar das es klappt. Ist ja tausendfach benutzt...
na dann geht es weiter, LESEN:
1
//Ausgabe eines einzelnen Zeichens an der aktuellen Cursorposition
2
voidlcd_data(uint8_tdata);
und BEACHTEN
Georg G. schrieb:> lcd_string erwartet als Argument einen String. Das sind ein oder mehr> druckbare Zeichen, die mit einer 0x00 beendet werden.>> digitalRead liefert einen char. Das ist etwas anderes. Und nur der Name> "char" bedeutet nicht, dass es auch druckbar ist.
und LESEN
TriHexagon schrieb:> Klare Empfehlung:> Sich ein C Buch besorgen und die Grundlagen lernen und zwar auf einem> PC! Ein bisschen üben um die Grundlagen auch zu verinnerlichen. C ist> nun mal eine technische Programmiersprache, die einem viel Kontrolle> gibt, allerdings auch ihre Tücken hat und vom Anwender verlangt, dass er> weiß was er da tut!>> Dann kannst du auf einem µC anfangen und zwar zuerst mit einer LED. Dann> mal mit einem Timer der die LED zum blinken bringt. Also (fast) die> ganze Peripheriekette abarbeiten und verstehen. Ein LCD Display ist da> eher unten auf der Liste!
Martin Fischer schrieb:> Ein String wird ausgegeben...wie aber der Wert des Pins?
Indem du, gesteuert durch den Wert des Pins, einen String erzeugst, den
du auf dem LCD ausgeben kannst. Dafür musst du erstmal wissen, was ein
String in C überhaupt ist und was ASCII-Zeichen sind. Guck dir mal den
Inhalt von deinem Character Generator des LCD Controllers an.
Ja ok!
Und ich weiß, was der unterschied zwischen einem Integer und einem Char
ist!
Ein Integer ist eine Ganzzahl von -xxxx bis xxxxx und ein Char ist ein
einzelnes Zeichen!
Aber wenn ich den int in einen char umwandle, dann kommt gar nichts mehr
auf dem Display...soweit ich weiß wandelt man mit:
(char)data den int (data) in einen char um, oder?
Martin Fischer schrieb:> Ein Integer ist eine Ganzzahl von -xxxx bis xxxxx und ein Char ist ein> einzelnes Zeichen!
Nö, ein Int und ein Char sind das gleiche.
Was? Das ist mir neu, echt...
Obwohl ich das schon in vielen Sprachen nutzte...
Aber wie kann ich den jetzt Ausgeben..ich verstehe das noch nicht ganz!
isölwa schrieb im Beitrag #3426181:
> Seid doch net so hantig zum Martin!
....
> Bemerkungen und den den ständigen Hinweisen auf die für Anfänger sehr> schwer verständlichen Datenblätter zu reagieren.
Wenn es schwere Datenblätter wären, ich sag nur RFM von HopeRF ;-) hier
geht es aber um Grundlagen die man sich sehr leicht erarbeiten kann. Von
daher sind die Kommentare verständlich.
Ja ok Steffen...das Problem ist, das Bitmanipulation sehr komplex
ist..Ich freue mich schon riesig darüber dass ich verstanden habe was
|=, &, ~ und << für Funktionen hat...
Aber ich komme jetzt nicht weiter, kann mir endlich jemand helfen???
Martin Fischer schrieb:> Aber ich komme jetzt nicht weiter, kann mir endlich jemand helfen???
jo ich würd sagen, nächsten Mittwoch? Oder was meint ihr?
@ isölwa
Tut mir leid isölwa, aber Dein Einwurf geht aus meiner Sicht am Kern
dieer Angelegenheit vorbei.
Es ehrt Dich aber, dass Du Dich für andere einsetzt. Davor habe ich
Achtung.
Meine Worte hier sind sehr hart, weil der Martin mehrfach auf den
Hinweis nicht reagiert hat, sich ersteinmal Kenntnisse anzueignen, bevor
er hier fragt.
Er hat bisher in einer ganzen Reihe von Threads immer wieder Fragen
gestellt, die klar zeigen, dass er nicht etwa, einen Mangel an Talent
hat oder das ihm die Datenblätter "nicht in die Wiege gelegt worden
sind". Es geht hier auch garnicht um Datenblätter sondern um ein Buch
über C. Die Programmiersprache in der er arbeitet.
Mit dem Programmieren ist es so, dass man sich erstmal ein gewisses
Grundverständnis der Ausdrucksmittel verschaffen muss, der Dinge die
eine Programmiersprache beschreibt und der Vorgänge. Tut man das nicht,
steht man vergleichsweise da, wie ein Deutscher in Tokio. Man kann nicht
mal "Guten Tag" sagen.
Um im Vergleich zu bleiben, so mangelt es dem Martin hier nicht an der
Aussprache oder daran, das er einige Worte nicht kennt. Sondern das er
überhaupt keine Ahnung hat, was er eigentlich tut.
Du wirst, wenn Du diesen und andere Threads von ihm liest, nie eine
Stelle finden, an der er eigenen Schlussfolgerungen zieht. Nicht mal
lediglich im Ergebnis. Er fragt immer solange, bis die Antworter auch
den letzten Syntaxfehler beseitigt haben.
Er lässt dann auch nie erkennen, dass er wenigstens aus der vorgegebenen
Lösung einen Schluss gezogen hat. Etwa, dass ein Problem dadurch
bestanden hat, das er den Unterschied zwischen einem logischen und einem
Bitweisen oder nicht gekannt hat. Oder das ihm nicht bewusst, war das es
Datentypen gibt und er diesen mit den Parameterlisten von Funktionen
vergleichen kann bzw. muss.
Nein. Er fragt immer weiter.
Das ist meiner Meinung nach, kein Fragen um Verständnis zu erwerben. Er
mag denken, dass es so ist. Das er verstanden hat, wenn da was angezeigt
wird, was er sich vorstellt. Aber das ist nicht so.
Deswegen meine, immer härter werdenden Antworten.
Martin Fischer schrieb:> Was? Das ist mir neu, echt...> Obwohl ich das schon in vielen Sprachen nutzte...> Aber wie kann ich den jetzt Ausgeben..ich verstehe das noch nicht ganz!
Ja genau da ist das Problem (allerdings nicht nur deins), manche wollen
einfach nicht verstehen das C "anders" funktioniert. Bei C gibt es
technische Details die man kennen und verstehen muss. Vorallem wenn das
Programm auf einem Low-Level µC laufen soll. Da gibts sogar viele
fortgeschrittene Programmierer die dann auf die Schauze fallen und sich
wundern warum das Programm die ganze Zeit abstürzt. Dass sind dann die,
die die Sprache als Dreck bezeichnen.
Was denkt ihr wie doof ich bin!
Das meiste was ihr sagt kenne ich schon! Ich programmiere schon seit 3
Jahren und bin kein absoluter Neuling!
Bisher hatte ich nunmal nicht so viel mit Bit-Operationen zutun...
Und daher frage ich nur, wie man auf dem LCD einen Integer ausgibt weil
ich z.B. auch den lcd_string-Command nicht 100%ig verstehe...
Ich suche mir bald ein anderes Forum, wobei dieses hier immernoch das
beste ist...es ist aber nicht für Anfänger geeignet
> Obwohl ich das schon in vielen Sprachen nutzte...
Ganz offen gesagt, halte ich das für unglaubwürdig.
Du hast "viele" Sprachen benutzt in denen es keinen Unterschied zwischen
logischem und Bitweisen Operatoren gab? Keine Datentypen? Keine
Parametertypen?
Was waren das denn für Sprachen?
Bitoperatoren habe ich zuvor NIE genutzt...
Datentypen kenne ich, hatte halt immer blos was falsches von char
gedacht...wurde mir halt auch nicht anders beigebracht, mir wurde nur
gesagt es sei ein Zeichen!
Genau zu diesem Zweck gibts doch Bücher. C wirst du dir wohl kaum anders
beibringen können. Bitte kapier das endlich.
Tut mir leid aber Bitoperationen sind ziemlich trivial, aber ohne Zeit
zu investieren und ein bisschen zu rechnen wird das natürlich auch nix.
> ... es ist aber nicht für Anfänger geeignet
Ich hasse das, dass Du immer versuchst uns resp. mich hier als die Bösen
hinzustellen die auf den Anfängern herumhacken.
Du wirst hier eine Reihe von Threads sehen, in denen Anfängern mitunter
sogar völlig abseitige Fragestellungen beantwortet werden. Wenn Du das
bestätigst, dann ist Deine Aussage schlicht falsch.
Im Unterschied aber zu jenen Anfängern, stellst Du einfach einen
Codeschnipsel in den Raum und sagst er geht nicht. Du schreibst nicht
mal den Ansatz einer Analyse. Ja nicht mal eine Vermutung und sei sie
noch so absurd begründet.
Dann, nachdem man Dir in mehreren Beiträgen erklärt hat was mit der
Bitmanipulation falsch läuft, Dir zur Lösung hinführende Fragen gestellt
hat, die Du dann nicht beantwortest, schreibst Du auf einmal das es
geht, präsentierst einen Codeschnipsel der Dir eigentlich schon 1 zu 1
vorgegeben wurde und läßt nicht erkennen, dass Du verstanden hast
wodurch das Problem überhaupt entstanden ist.
Du schreibst:
>Bisher hatte ich nunmal nicht so viel mit Bit-Operationen zutun...
Ja gut. Aber das hättest Du zumindest in den Grundzügen schon längst
erfasst haben müssen. Klar gibt es Feinheiten, aber wenn man das im
Grunde verstanden hat, dann lautet eine Frage etwa so: Ich mache dies
und jenes und dabei kommt folgendes heraus. Das aber erwarte ich nicht,
sondern das und zwar weil diese und jene Syntax, diese und jene
Verknüpfung nach meinem Verständnis von (Buchseite oder Forumsantwort)
eigentlich folgendes ergeben müsste.
Aber nein. Das kommt nicht. Deine ganzen Fragen sind immer nur: Es läuft
nicht. Was mache ich falsch.
Das ist der Punkt.
Hier ist ein Forum mit Hilfe zur Selbsthilfe. Kein Selbstbedienungsladen
für Lösungen.
...
>> Obwohl ich das schon in vielen Sprachen nutzte...>> Ganz offen gesagt, halte ich das für unglaubwürdig.
@Digitalzwerg
recht haste :-) und das wegen:
Martin Fischer schrieb:> Ne, Python, Visual Basic, PHP und C++
täusch ich mich oder ist C++ aus C hervorgegangen ;-)
>Ja, aber es geht hier ja auch nicht um irgendwelche Basics!
EBEND DOCH! Das ist es ja was wir die ganze Zeit schreiben. Das ist
alles Urschleim! Absolute Grundlage.
In meinem im 1. Post gezeigtem Code soll der Status des an PIN2 (PB2)
angeschlossenem tasters mit der bereits erwähnten LCD-lib auf dem LCD
geschrieben werden.
Bei meinem Code wird jedoch mein Ziel verfehlt...es kommen nur
Hyroglyphen oder gar nichts auf dem LCD.
Ich denke das irgendetwas mit dem schreiben auf das lcd nicht stimmt.
Könntet ihr mir mehr Infos geben..
Zufrieden?
>... mir wurde nur gesagt es sei ein Zeichen!
Ist das vielleicht symptomatisch für Deine Problematik? Das Du Dir immer
nur was sagen läßt? Aber nicht selbst nachvollziehst?
Es ist wichtig, das Du ein eigenes Verständnis der Vorgänge und
Strukturen hast. Dann und nur dann kannst Du die Dinge auch selbst
anwenden.
Ich sehe in Deinem Eröffnungsthread einen cast auf char. Das ist super.
Problem mit den Datentypen erkannt. Aber nicht zuende gedacht. Sind die
übergebenen Daten auf dem LCD überhaupt darstellbar? Wenn ja, was wird
konkret dargestellt? Wenn nicht, was möchte ich dargestellt haben und
wie kann ich das erreichen? Solche Fragen musst Du Dir selbst stellen.
Und wenn das nicht so klappt wie gewünscht, erklären was Du versucht
hast und was passiert ist.
Aber nicht uns hier einfach was hinknallen und "nun macht mal und seht
zu wie ihr mir helft". So nicht!
Wolfgang schrieb:> Indem du, gesteuert durch den Wert des Pins, einen String erzeugst, den> du auf dem LCD ausgeben kannst. Dafür musst du erstmal wissen, was ein> String in C überhaupt ist und was ASCII-Zeichen sind. Guck dir mal den> Inhalt von deinem Character Generator des LCD Controllers an.
Wert in ASCII umwandeln, dann an das LCD schicken. Welcher Buchstabe
welchen Wert hat steht in der ASCII Tabelle. Und noch mal:
LESEN
1
// Ausgabe eines einzelnen Zeichens an der aktuellen Cursorposition
>Zufrieden?
Nein. Das ist auch schon fast wieder eine Frechheit.
Ich hab's Dir geschrieben wie das geht. Darüber und über Deine Attitüde
denkst Du erstmal nach und meldest Dich so in zwei Wochen wieder; ist
zumindest meine Meinung.
Wir machen das hier freiwillig und kostenlos. Aber nicht wenn man uns
verarscht.
>Könntet ihr mir mehr Infos geben..
DU suchst Dir die Basisinfos. Wir helfen bei Problem sie zu verstehen
und sie anzuwenden. Aber dabei muss DEINE EIGENLEISTUNG erkennbar sein.
@ isölwa
>Es geht
ja z.B. darum, den Binärcode so lesen zu können wie die Uhr.
Nein. Darum geht es sicher nicht.
Bei den Bitweisen Verknüpfungen muss man nicht einmal den Code als
Ganzes lesen sondern betrachtet jedes Bit, jede 0 und 1 für sich.
>Ebenso klar sind: Logische Verknüpfungen und der BCD-Code.
Um BCD-Code ging es hier überhaupt nicht.
>Mit diesen Voraussetzungen geht aber fast niemand an die Materie ran.
Ergo hat dieser Satz keinerlei Relevanz.
>Gehässige Antworten haben noch nie etwas gebracht!
Es tut mir leid. Aber Du hast meiner Ansicht nach den Kern der Sache
noch nicht erfasst.
Wenn Du den Thread genau liest, wirst Du sehen, das die harten Anworten
("gehässig" möchte ich nicht schreiben) nicht einem Selbstzweck dienen.
Nicht der Erniedrigung weil ich Lust daran habe. Nicht meiner
Unterhaltung oder der Anderer. Sie dienen dazu die Aufmerksamkeit auf
das Problem zu lenken, weil er nämlich auf mehrfache freundliche und
höfliche Hinweise in diesem und in anderen Thread einfach nicht
reagiert hat.
In diesem Sinne ist diese Vorgehensweise auf ihn und seine technischen
Probleme bezogen in dem es seine Art damit umzugehen, zu lernen und
Fragen zu stellen thematisiert und ist damit viel mehr und viel
wertvoller als einfaches ignorieren. Es dient dazu ihn zu befähigen,
ihn weiterzubringen.
Im übrigen möchte ich dazu ein kleinen Zitat anbringen, dass meine
Gesinnung widerspiegeln soll.
"Wahre Worte sind nicht gefällig. Gefällige Worte sind nicht wahr". (Lao
Tse: Tao Te King).
Also: Guten Abend noch.
Ok. Danke erstmal Digitalzwerg für diese Zuneigung!
Du hast in vielen Punkten recht, wobei ich mich für mein VErhalten
entschuldigen mag!
Jedoch eine Bitte!
Helf mir noch kurz in diesem Fall, dann verstehe ich bisschen mehr und
werde erstmal nochmehr lesen und probieren zu verstehen, bitte!
Martin Fischer schrieb:> Und daher frage ich nur, wie man auf dem LCD einen Integer ausgibt weil> ich z.B. auch den lcd_string-Command nicht 100%ig verstehe...
Hallo Martin,
auf dem LCD kannst du in dem Sinne gar keinen Integer ausgeben. Das
LCD kann nur pro Position ein Zeichen aus seiner Zeichentabelle
anzeigen. In der Zeichentabelle hat jedes darstellbare Zeichen eine
Eintragsnummer, also einen Index. Zum Beispiel hat das Zeichen "A" den
Index 65, das Zeichen "a" hat den Index 97, und das Zeichen "3" hat den
Index 33. Die "normalen" Zeichen sind alle an standardisierten
Positionen, dem ASCII-Code.
Wenn du also den Integer 125 ausgeben willst, musst du also nacheinander
einzeln die Zeichen "1", "2" und "5" ausgeben.
LG, Sebastian
>Helf mir noch kurz in diesem Fall, dann verstehe ich bisschen mehr und>werde erstmal nochmehr lesen und probieren zu verstehen, bitte!
Ja ja. Ich höre auch immer ganz bestimmt morgen mit dem Rauchen auf.
Für diesen Fall gibt es auch einen netten Spruch:
"Morgen, morgen, nur nicht heute,
sagen alle faulen Leute".
In diesem Sinne: Heute, jetzt, hier!
Martin Fischer schrieb:> aber ich wollte dass es gleich so Ausgegeben wird...
Ok. Wenn der Wert 1 ist, dann willst du das Zeichen '1' ausgeben. Wenn
der Wert 0 ist, dann willst du das Zeichen '0' ausgeben. Wo stehen die
in der Zeichentabelle? Hintereinander! Alle Ziffern von 0 bis 9 stehen
direkt hintereinander! Das kannst du ausnutzen!
LG, Sebastian
Du musst dich unbedingt mit den Datentypen beschäftigen, insbesondere
wie ein char und ein String dargestellt wird. Kleiner Tipp: es hat etwas
mit ASCII zutun.
hier erneut ein WICHTIGER Hinweis:
TriHexagon schrieb:> Du musst dich unbedingt mit den Datentypen beschäftigen, insbesondere> wie ein char und ein String dargestellt wird. Kleiner Tipp: es hat etwas> mit ASCII zutun.
Ich hätte noch was zum LESEN:
http://www.mikrocontroller.net/articles/FAQ
Ich hoffe das bringt das gewünschten Ergebnis.
>wobei man es auch damit Vergleichen kann:>Im alten Testament steht " Sie trugen seltsame Gewänder und irrten>planlos umher "
Sorry. Aber ich kenne keine solche Stelle. Wo steht das in der Bibel?
Digitalzwerg schrieb:> Sorry. Aber ich kenne keine solche Stelle. Wo steht das in der Bibel?
ist glaub ich n Zitat aus der Liedpassage aus dem alten Testament. Wo
genau kann ich auch nicht sagen, haben wir hier bei uns im Büro hängen
;-)
hab ich, die steht dadrüber, aber ansonsten so lösbar? -> ja
Danke erstmal, darauf wäre ich zwar auch selber gekommen-> da sind wir
bei dem Punkt, dass ich nicht richtig nachgedacht habe....Eure
Beleidugungen gegenmich sind also dazu da um mir klar zu machen wie man
richtig arbeitet...
> ???
Das ist eine Möglichkeit.
Es gibt aber auch noch eine zweite.
Von der Funktion kriegst du die beideb Werte 0 und 1 zurück. Die kannst
du aber so nicht einfach ans LCD geben, denn das LCD erwartet von dir
die ASCII Codes der Zeichen die es anzeigen soll (also einfach nur eine
Zahl, wobei jede Zahl laut ASCII Tabelle ein bestimmtes Zeichen angibt).
Es gibt aber kein Standard-Zeichen welches den Code 0 oder 1 hätte.
Darum gehts aber auch gar nicht, denn du willst ja nicht irgendwelche
Zeichen anzeigen, sondern die Zeichen '0' bzw. '1'. Das ist schön, nur
sind deren ASCII Codes nicht 0 bzw. 1 sondern andere. Welche steht in
jeder ASCII-Tabelle.
Glücklicherweise braucht man in manchen Fällen die ASCII Tabelle gar
nicht, auch wenn es nicht schlecht ist, wenn man sie mal ein wenig
studiert. Dann man kann das ja auch so schreiben
1
if(digitalRead(PIN2))
2
lcd_data('1');
3
else
4
lcd_data('0');
Hier sucht jetzt der Compiler die entsprechenden ASCII Codes für '1'
bzw. '0' heraus. Man hätte das auch so schreiben können
1
if(digitalRead(PIN2))
2
lcd_data(49);
3
else
4
lcd_data(48);
und die ASCII Codes selber hinschreiben. Aber du siehst schon warum
diese Version nicht so toll ist. Warum sollst du selbst dir die ASCII
Codes raussuchen, wenn der Compiler das genausogut kann.
Aber etwas anderes ist interessant. Der ASCII Code für '0' ist 48 und
der für '1' ist 49. Die beiden Zeichen stehen direkt hintereinander in
der ASCII Tabelle, wenn du dir ebdlich mal so eine verschissene Tabelle
angesehen hättest.
D.h. man kann in deinem Fall den Code auch berechnen. Ist das Ergebnis
der Funktion die Zahl 0, dann soll ein Code von 48 raus kommen, ist es
1, dann soll ein Code von 49 rauskommen. Das ist aber nicht schwer zu
erreichen. Einfach zum Ergebnis der Funktion noch 48 addieren und es
kommt in beiden Fällen die verflucht noch mal richtige Codezahl raus.
1
lcd_data(digitalRead(PIN2)+48);
die 48 kann man wieder durch '0' ersetzen, denn dann sucht der Compiler
den richtigen Code raus. Also
> Eure Beleidugungen gegenmich sind also dazu da um mir klar zu machen wie man
richtig arbeitet...
Die 'Beleidigungen' sollen ein Tritt in den Arsch sein, damit du dich
auf deinen Hintern setzt und auch selbst mal etwas tust.
Und ja, es ist am Anfang nicht ungewöhnlich, dass man mal stunden oder
tagelang an einem einfachen Problem scheitert. Die Frage ist, was dann
passiert. Ob du in der Lage bist, durch nachdenken, nachlesen,
schlussfolgern aus vorhergehenden Übungen zu einer Lösung zu kommen oder
nicht. Im Moment lautet bei dir die Diagnose 'oder nicht'. Und das ist
schade bei jemanden, der bereits 3 (oder waren es 4) andere
Programmiersprachen spricht. Ein Tip von mir: behaupte das nie wieder,
denn das glaubt dir sowieso keiner.
naja ich hoffe der Abend hat dir was gebracht. Es geht nicht alles auf
Anhieb Gut oder Richtig. Wir haben die Links mit Hinweisen geschickt,
immer wieder gesagt LESEN und VERSTEHEN, mehr kann man nicht machen. Ich
weiß aus Erfahrung - aller Anfang ist schwer - aber da muss man sich
auch den einen oder anderen Rat annehmen. Es bringt nix mit LCD
anzufangen wenn man nicht mal weiß was macht die Hard und Software.
Nicht um sonst gibt es die "Hallo Welt" Beispiele. Erst dann mit
schwereren Dingen anfangen.
Also: LESEN, LESEN, VERSTEHEN, PROBIEREN, LESEN, LESEN
In dem Sinne, guten Abend
Danke erstmal an euch alle, und WOW
Jetzt stehe ich noch davor, dass meine Funktion garnicht 0 und 1
ausgibt, sondern 0 und 4, aber das PROBIERE ich selber zu lösen!
Martin Fischer schrieb:> Das liegt daran dass der ja 4-5V im Eingang ließt , oder?> Ich habe das jetzt bei return data; mit return data/4 gelöst :D
Schlechte Lösung.
Nimm die /4 nochmal raus und ersetze mal
1
...digitalRead(PIN2)...
durch zb
1
...digitalRead(PIN3)...
welches Ergebnis kriegst du jetzt, und was viel wichtiger ist: WARUM?
Die Sache mit dem 4-5V vergess ich mal wieder. Denn soviele Facepalms
gibt es auf der ganzen Welt nicht, wie ich jetzt brauchen würde.
Martin Fischer schrieb:> Das liegt daran dass der ja 4-5V im Eingang ließt , oder?> Ich habe das jetzt bei return data; mit return data/4 gelöst :D
Was liegt dann am Eingang an wenn du PIN7 nimmst? 128V?
Karl Heinz schrieb:> Es gibt aber kein Standard-Zeichen welches den Code 0 oder 1 hätte.
Standard möchte man vielleicht auch gar nicht. Das Display kann sogar
die Zeichen 0 bis 7 als frei definierbare Zeichen, wenn man denn die
Bitmuster z.B. bei der Initialisierung ins Ram rüberschiebt.
Was da arge Probleme hat, ist die Stringverarbeitung von C, zumindest
was das Zeichen 0 betrifft. Da läuft dann die Funktion lcd_data() zu
ihrer vollen Größe auf ;-)
Wolfgang schrieb:> Karl Heinz schrieb:>> Es gibt aber kein Standard-Zeichen welches den Code 0 oder 1 hätte.>> Standard möchte man vielleicht auch gar nicht. Das Display kann sogar> die Zeichen 0 bis 7 als frei definierbare Zeichen,
Bitte verkomplizier die Sache jetzt nicht unnötig. Er schwimmt auch so
schon genug mit den banalsten Grundlagen.
Martin Fischer schrieb:> Das liegt daran dass der ja 4-5V im Eingang ließt , oder?> Ich habe das jetzt bei return data; mit return data/4 gelöst :D
Meinst du, wenn du den Prozessor mit 2.5V betreibst, liefert der
entsprechend eine 2?
@ Karl Heinz
> Denn soviele Facepalms gibt es auf der ganzen Welt nicht, wie ich> jetzt brauchen würde.
Da könnt' ich ein 5V-Digitalbrett empfehlen. Hihi.
Danke, übrigens für's löschen.
Martin Fischer schrieb:> Sollte durch digitalRead(PIN3) denn agr nicht gehen weil dort nichts> anliegt und somit der Wert 0 ist und Division durch 0 nicht lösbar ist?
Wen interessierts? Du hast doch durch 4 dividiert und nicht durch 0. 0
durch 4 ist sauber definiert.
Aber das war auch gar nicht die Frage.
Die Frage ist warum du als Ergebnis bei PIN2 die Werte 0 oder 4 zurück
bekommst, während du bei PIN3 WELCHE Werte zurückbekommst?
Falls du es noch nicht bemerkt hast: die Frage ist 2-teilig.
Welche Werte kriegst du? Warum kriegst du sie?
Sorry wenn ich das falsch verstanden habe, aber liege ich mit meiner
Vermutung:
Sollte durch digitalRead(PIN3) denn agr nicht gehen weil dort nichts
anliegt und somit der Wert 0 ist und Division durch 0 nicht lösbar ist?
Richtig?
Digitalzwerg schrieb:> @ Karl Heinz>> Denn soviele Facepalms gibt es auf der ganzen Welt nicht, wie ich>> jetzt brauchen würde.>> Da könnt' ich ein 5V-Digitalbrett empfehlen. Hihi.>>> Danke, übrigens für's löschen.
?
Welches löschen?
Karl Heinz schrieb:> Bitte verkomplizier die Sache jetzt nicht unnötig. Er schwimmt auch so> schon genug mit den banalsten Grundlagen.
Stimmt. Du fragst nicht den Zustand (0/1) ab sondern den Wert des
Eingangs. Also:
PIN0 = 1
PIN1 = 2
PIN2 = 4
PIN3 = 8
.
.
.
PIN7 = 128
p.s. jetzt bekomm ich noch Wortfindungsstörungen
Martin Fischer schrieb:> Sorry wenn ich das falsch verstanden habe, aber liege ich mit meiner> Vermutung:> Sollte durch digitalRead(PIN3) denn agr nicht gehen weil dort nichts> anliegt und somit der Wert 0 ist und Division durch 0 nicht lösbar ist?> Richtig?
Nein, falsch.
Warum probierst du es nicht einfach aus, wenn ich dir schon die
'Bastelanleitung' dazu liefere.
Nimm die Division nochmal raus, und dann probierst du was du von der
Funktion an Werten zurück bekommst, je nachdem welchen Pin du angibst.
Weil ich das LCD jetzt schon voller wut abgebaut habe weil es mich grade
nervt dass ich keinen Plan habe wie so ein LCD funktioniert ...
ich glaube ich bau es nochmal ran!
@ Karl Heinz
>Welches löschen?
Ich dachte einer von den folgenden war von mir.
Doch ein wenig heftig, wenn ich mich recht erinnere. Jedenfalls nichts
was man der Nachwelt unbedingt überliefern möchte.
Beitrag #3426108 wurde von einem Moderator gelöscht.
Beitrag #3426114 wurde von einem Moderator gelöscht.
Beitrag #3426136 wurde von einem Moderator gelöscht.
Martin Fischer schrieb:> Weil ich das LCD jetzt schon voller wut abgebaut habe weil es mich grade> nervt dass ich keinen Plan habe wie so ein LCD funktioniert ...
Tipp: es liegt nicht am LCD.
Genau aus dem Grund lautet hier immer wieder die Empfehlung, die ersten
Schritte auf dem PC zu machen. Denn die Text-Ausgabegeräte funktionieren
in dieser Hinsicht alle gleich. Ob da jetzt ein LCD irgendwelche
Buchstaben hinmalt oder ob auf dem PC die Zeichen in einem
Konsolen-Fenster landen ist Jacke wie Hose. Vom Prinzip her besteht kein
Unterschied. Auf beiden werden 'Zeichen' ausgegeben, indem man dem
Ausgabegerät die ASCII Codes der auszugebenden Zeichen übergibt.
Und wenn ich das hinzufügen darf: das ist Grundlagenwissen aus den
ersten 40 Seiten eines 250 Seiten starken C-Buchs.
Digitalzwerg schrieb:> @ Karl Heinz>>>Welches löschen?>> Ich dachte einer von den folgenden war von mir.> Doch ein wenig heftig, wenn ich mich recht erinnere. Jedenfalls nichts> was man der Nachwelt unbedingt überliefern möchte.> Beitrag #3426108 wurde von einem Moderator gelöscht.> Beitrag #3426114 wurde von einem Moderator gelöscht.> Beitrag #3426136 wurde von einem Moderator gelöscht.
Ah, habs gesehen.
Da war wohl ein andere Mod noch im Thread.
Und ja, von der Sache her waren sie korrekt, aber die Wortwahl war
wirklich ein wenig heftig.
Martin Fischer schrieb:> Weil ich das LCD jetzt schon voller wut abgebaut habe weil es mich grade> nervt dass ich keinen Plan habe wie so ein LCD funktioniert ...> ich glaube ich bau es nochmal ran!
öhm wie jetzt...
hört sich ja an als ob der Thread auch von dir ist:
Beitrag "LCD-Display funktioniert nicht"
Hallo Martin,
nimms mit Humor. Zum Beispiel so: Kennst du schon den C/C++-Operator !!
? Nicht !, sondern !! ? Liefert für jeden Wert ungleich Null 1 zurück,
und nur bei Null 0.
LG, Sebastian
Das es nicht am LCD liegt weiß ich, ich brauche es nur um den Wert zu
lesen!
Ich habe es jetzt aber durch das Lesen eures großartigen Tutorials
geschafft!
data = *reg & (1 << pin); statt data = reg & (1 << pin);
Jetzt funktioniert es jedenfalls. Dieses Sternchen war doch das Zeichen
für einen Pointer? Dann gucke ich jetzt erstmal nochmal nach was genau
ein Pointer ist ...
Martin Fischer schrieb:> Das es nicht am LCD liegt weiß ich, ich brauche es nur um den Wert zu> lesen!> Ich habe es jetzt aber durch das Lesen eures großartigen Tutorials> geschafft!> data = *reg & (1 << pin); statt data = reg & (1 << pin);
Schmeiss das tutorial auf den Müll und fang endlich an ein ordentliches
C-Buch zu lesen.
Das hat doch keinen Sinn wenn du mit Zehntelwissen an Dinge rangehst,
die du nicht verstehst.
Und nein, die Lösung ist falsch. In ca. einem halben Jahr könntest du
sogar verstehen warum.
Man sry dass ich mich nicht wirklich Auskenne und grade auch Teilweise
keinen Schimmer habe!
Ich mag es aber wirklich verstehen und lernen, ihr helft mir super, und
sobald mein C-Buch da ist werde ich auch das durcharbeiten!
Ihr helft mir teilweise so doll, und dann beleidigt ihr mich wieder, das
macht mich echt traurig...
Martin Fischer schrieb:> Bitte bleibe freundlicher....
Was soll ich freundlicher sein.
Ich geb dir Übungen von denen ich mir erhoffe, dass sie dir vielleicht
ein wenig Einsicht geben könnten, was da eigentlich wirklich vor sich
geht. Und du ignorierst das einfach.
Du willst doch in Wirklichkeit gar nicht lernen. Du willst schnelle
Ergebnisse. Such dir ein anderes Hobby. Zum Programmieren bist du nicht
geeignet.
Digitalzwerg schrieb:> P.S. Ich muss gerade an Monty Python denken.
Die machen wieder Live Vorstellungen, also genau 4 ;-) Karten sollte es
noch geben :-D
>ICh will lernen!>Du hast mir doch jetzt nichts anderes gegeben außer dass ich die>PIN-Werte auslese und nicht die den Status!
Meine Güte. Das hat aber einen bestimmten Sinn, dass Du das machen
sollst.
Der Karl Heinz ist hier so ziemlich der Prototyp der Geduld. Ganz anders
als ich. Mach genau das was er schreibt. Nicht anderes.
Um Gottes Willen Mann, wenn Du ein Aha-Erlebnis haben willst tu das.
Scheisse. Wo hab ich den Schnaps hingestellt.
Martin Fischer schrieb:> Man sry dass ich mich nicht wirklich Auskenne und grade auch Teilweise> keinen Schimmer habe!> Ich mag es aber wirklich verstehen und lernen
....
Ich dachte wir wären schon über den Punkt hinaus. Na vielleicht noch
mal,
LESEN, LESEN, VERSTEHEN, VERSUCHEN, LESEN, LESEN und vorallem ganz am
Anfang anfangen. Wenn dein "Buch" (noch)nicht da ist, dann warte ab,
schlaf eine Nacht über das was du heute gelernt hast und mach morgen
einen Tag frei, vielleicht n schönen 1. Advent. Dann hast du bissel
Abwechslung und bekommst den Kopf frei für neues.
Digitalzwerg schrieb:> Scheisse. Wo hab ich den Schnaps hingestellt.
ich nehm auch einen, ups geht nicht bin noch im Büro und muss schuften,
da roll ich mal schnell zum Wasserspenden ;-9
Martin Fischer schrieb:> ICh will lernen!> Du hast mir doch jetzt nichts anderes gegeben außer dass ich die> PIN-Werte auslese und nicht die den Status!
Welchen Teil von ...
Ersetze in
1
lcd_data(digitalRead(PIN2)+'0');
(mit deiner digitalRead Funktion ohne die Division durch 4), mal das
PIN2 durch PIN3 (oder PIN1, oder PIN0) und sieh mal nach, welche Werte
du im Fall von einer 0 bzw. 1 am jeweiligen Pin du kriegst.
... verstehst du nicht?
Ich hab mir das nicht ohne Grund ausgedacht. Aus den Werten könnte man
mit ein wenig nachdenken und schlussfolgern drauf kommen, was da
eigentlich abgeht und warum genau die Werte aufscheinen, die
aufscheinen.
>Die machen wieder Live Vorstellungen, also genau 4 ;-) Karten sollte es>noch geben :-D
Ich find's nicht. Ich find's nicht. PANIK. Wo steht das?
So gut wie Du würde ich es auch gerne haben. Geld am Wochenende
verdienen. He he.
Karl Heinz schrieb:> Ich hab mir das nicht ohne Grund ausgedacht. Aus den Werten könnte man> mit ein wenig nachdenken und schlussfolgern drauf kommen, was da> eigentlich abgeht und warum genau die Werte aufscheinen, die> aufscheinen.
Hat man das WARUM verstanden, dann kann man sich drann machen über das
'Wie korrigier ich das' nachzudenken. Aber der erste Schritt ist immer
das Verständnis darüber WARUM die Dinge so sind wie sie sind. Aber dazu
muss man erst mal wissen, was eigentlich rauskommt. Wenn du nicht
stutzig wirst, dass dir die Funktion 0 oder 4 liefert, dann muss ich
dich eben mit der Nase drauf stossen. Und was machst du? Du schreibst
etwas aus einem Tutorial ab, das für einen ganz anderen Zweck gedacht
ist und nichts, aber auch gar nichts, mit deiner Aufgabenstellung zu tun
hat. Und noch dazu in deiner Aufgabenstellung ein schwerer Fehler wäre.
Digitalzwerg schrieb:>>Die machen wieder Live Vorstellungen, also genau 4 ;-) Karten sollte es>>noch geben :-D>> Ich find's nicht. Ich find's nicht. PANIK. Wo steht das?>http://www.viagogo.de/Kunst-und-Theater-Tickets/Comedy/Monty-Python-Karten>> So gut wie Du würde ich es auch gerne haben. Geld am Wochenende> verdienen. He he.
hihi naja CallCenter ;-) Elektronik/Programmierung hab ich nur seit paar
Jahren (30) als Hobby
Ich vergass.
Das wollte ich noch nachfragen, bzw. klar stellen
Bezog sich das
> Bitte bleibe freundlicher....
auf das hier
> In ca. einem halben Jahr könntest du sogar verstehen warum.
Dann möchte ich das klar stellen. Das war mein Ernst!
Das war weder Verarsche noch Beleidigung. Das ist mein voller Ernst.
Programmieren dauert seine Zeit. Ich würde sagen, nach ca. einem Jahr
ist ein Anfänger in den Status eines Fortgeschrittenen aufgestiegen.
Natürlich nur, wenn er fleissig übt.
Und da scheint mit auch das Problem zu liegen. Wenn du in 3 Jahren dich
mit 4 Sprachen beschäftigt hast, dann hast du von keiner Sprache auch
nur annähernd Ahnung. 3 Jahre sind schon eher knapp, wenn man EINE
Sprache gut bis exzellent beherrschen will.
Digitalzwerg schrieb:> Ts ts ts, Karl Heinz. Jetzt hast Du ihn müde gemacht.
Kann ich verstehen, das einem da schon mal der Kopf brummt.
Aber so ist das nun mal, wenn man sich in Trigonometrie versucht und
Schwierigkeiten bei den Grundrechnungsarten hat.
Die Programmiersprache "Do what I mean" ist nun mal noch nicht erfunden.
Karl Heinz schrieb:> ... und sieh mal nach, welche Werte du im Fall von einer 0 bzw. 1> am jeweiligen Pin du kriegst.
Nach Beschreibung soll digitalread() entweder LOW oder HIGH
zurückliefern, was doch wohl als boolscher Wert, also '== 0' und '!= 0'
zu lesen ist. Daran wird man sich bei der Auswertung des Rückgabewertes
halten müssen, egal ob im Fall von '!= 0' in der aktuellen Version vom
Arduino 1,2,4,... zurückgegeben wird.
Ich würde als soetwas wie
1
lcd_data((digitalRead(PIN2)==HIGH)?'H':'L');
in die morgendliche Rund werfen, wobei das '=HIGH' redundant ist.
Martin Fischer schrieb:> Wie findet ihr das Buch:> http://www.amazon.de/C-Programmieren-Anfang-Helmut...
Mhm, was soll man sagen, es hat so seine Tücken. Das Buch ist alt und
gespickt mit Fehlern, es hält nicht einmal die Standards ein und
verwirrt den Leser durch Dinge wie "printf kann rechnen".
Für mich wars nicht so schlimm, zu dem Zeitpunkt kannte ich C# schon
seit ein paar Jahren und solche Sätze wie "printf kann rechnen" konnten
mich nicht verwirren. Ging eigentlich recht gut, allerdings auch nur
weil ich beim ausprobieren mir IMMER alle Warnungen angesehen habe und
im Internet nachgelesen habe. So entlarvte ich all diese schrecklichen
Fehler im Buch und habe wirklich C gelernt.
Von daher glaube ich nicht dass das Buch etwas für dich ist. Kenne
allerdings auch keins das ich empfehlen kann.
@ Martin
Ich kenne zwei, die ich aber nicht mit dem von Dir genannten Buch
vergleichen kann, weil ich es nicht kenne.
1. Kernighan & Ritchie "Programmieren in C", 2. Auflage ANSI C
2. Jürgen Wolf "C von A bis Z" (ist Online bei
http://openbook.galileocomputing.de/c_von_a_bis_z/)
Das erste solltest Du auf jeden Fall besitzen und benutzen. Jedoch ist
es vermutlich zum Lernen nicht so gut. Es ist wohl eher geeignet, damut
Du, was Du in einem eigentlichen Lehrbuch gelernt hast zu vertiefen.
Das zweite habe ich erst kennengelernt als ich schon jahrelang C konnte.
Ich benutze es fallweise, um mal kurz was nachzuschlagen, falls das
erste nicht verfügbar ist (weil ich nicht zuhause bin). Es scheint mir
nicht schlecht zu sein, hat aber auch sein Mängel.
Die beste Empfehlung ist wahrscheinlich in der Stadtbibliothek
nachzuschauen, was es so gibt, sich die Bücher auszuleihen und mal die
ersten zwei oder drei Kapitel durchzuarbeiten. Wenn Du das mit den
verfügbaren Büchern gemacht hast, hast Du auch einen Eindruck welcher
Autor das Thema für Dich am besten verständlich geschildert hat.
Das Buch kannst Du dann auch kaufen.
Was eigentlich auch recht nützlich ist, um mal schnell was
nachzuschlagen und vor allem schnell zwischen verschiedenen Sprachen zu
vergleichen, ist:
3. Henning Vogelsang "Handbuch Programmiersprachen"
Nützlich für das "Kopfkissen" ist auch eine der zahlreichen online
"Referenzen". Meist ein bis vier Seiten mit den wesentlichsten
Konstrukten. Vor allem am Anfang gut, wenn man ein Konstrukt eigentlich
schon kennt, aber dann doch gerade nicht weiss, wo das Semikolon
hingehört :-)
Das ist z.B.
http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20(ANSI)%202.2.pdf
Mein Tipp zum Lernen: Ein uraltes Turbo-C aus dem Borland Museum
besorgen. Dann dem Compiler sagen, dass er extrem pingelig sein soll,
also wirklich alle Warnungen aktivieren. Das Programm so schreiben, dass
er zufrieden ist. Dem C-Puristen sträuben sich zwar alle Nackenhaare,
wenn er den Code sieht ("das geht doch viel einfacher ohne die ganzen
Deklarationen und Klammern"), aber man lernt enorm dabei. Ein weiterer
Pluspunkt ist der integrierte Debugger, mit dem man jedes Statement,
jede Variable beäugen kann.
Ansonsten kann ich noch den Obfuscated C Coding Contest
http://www.ioccc.org/
empfehlen. Da sieht man, was in C so alles möglich ist.
> ... Obfuscated C Coding Contest ...
Naja. Das ist für einen Anfänger ungefähr so nützlich wie ein Schlag auf
den Kopf oder für einen Fahranfänger eine Einführung in die Grenzphysik
der Formel 1.
Kann man mal angucken, wenn man den Inhalt von K&R beherrscht, aber
nicht vorher.
ok!
Mit meiner Funktion lese ich ja nur den Wert des Pins aus (4)
Wie lese ich aber jetzt wirklich nur 0 und 1 richtig aus? Das muss doch
auch gehen ohne zu rechnen, oder?
Fangen wir den ganzen Sermon von gestern nicht schon wieder von vorne
an.
Mach das was Dir Karl Heinz gestern empfohlen hat, um das Problem und
die Zusammenhänge selbst zu erforschen und zu lernen.
Tut mir leid aber wenn du keine Bitoperationen lernen willst, kannst du
es gleich vergessen. Das sind so ziemlich die Grundrechenarten im
Low-Level Sektor.
Digitalzwerg schrieb:> Fangen wir den ganzen Sermon von gestern nicht schon wieder von vorne> an.>> Mach das was Dir Karl Heinz gestern empfohlen hat, um das Problem und> die Zusammenhänge selbst zu erforschen und zu lernen.
moin moin :-D also ich hab heute wieder Spätschicht bis Mitternacht, da
könenen wir schon noch einige Dinge erörtern :-D app... hast noch
Schnaps da? :-D
> hast noch Schnaps da? :-D
Nö.Ich habe dann die Parfümvorräte geplündert.
Im Moment sind die Klebstofftuben dran. :-)
Ich habe dann noch bis so drei Uhr an 'nem Controller hier rumgespielt.
Heute morgen dann um 7 aufgestanden, sonst verschiebt sich meine
Schlafphase so blöd und ich brauche 'ne Woche ehe es wieder passt. Ich
werde also heute abend nicht besonders alt.
Martin Fischer schrieb:> Ich habe mich mit Bit-Operatoren beschäftigt, ich verstehe sie jetzt!
schön, na dann gib sie mal mit deinen Worten wieder. Bin gespannt :-)
>Also:> | -> or, ich merke mir das mit es addiert die sozusagen> ~ -> wandelt alle 1 in 0 und andersrum um...> & -> Subrahiert sozusagen alle 1 raus
OK. Ersatzweise reicht auch ein Heißwasser-Ordal. :-)
Das einzig Rechte war der Text über '~'. OK. Wie nennt man das in einem
Wort?
Für '|' und '&' stelle bitte mal eine Wertetabelle auf. Das mit dem
"Addieren" und "Subtrahieren" ist eher ... ähem ... nicht ganz richtig.
Fangen wir mal mit einzelnen Bits an; was übrigens zu der Frage führt,
ob Di klar ist was "bitweise" heisst. Ich bin zu faul das mit der Maus
mitzuzählen
a b | a und b
----+--------
0 0 |
0 1 |
1 0 |
1 1 |
a b | a oder b
----+--------
0 0 |
0 1 |
1 0 |
1 1 |
Aber wenn es denn sein muss:
So geht es übersichtlicher
|: 11010011
00111011
-------------
11111011
rrrrrrrr (r = richtig)
&: 11011101
10010001
--------------
01001100
ffrfffrf (f = falsch)
a b | a und b
----+--------
0 0 | 1
0 1 | 0
1 0 | 0
1 1 | 1
a b | a oder b
----+--------
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1
ich hoffe das ich das jetzt richtig gemacht habe...
Martin Fischer schrieb:> &: 11011101 & 10010001 = 01001100
Das ist falsch. Denk doch mal nach, warum heißt dieser Operator wohl
AND/UND.
Das ODER ist aber schon mal richtig.
>and zählt beide zusammen, oder? bei 0 & 0 dann 0 und bei dem anderen 1
Nein. Das habe ich Dir oben schon erzählt. Mit einer Addition (bzw. dem
Zusammenzählen) hat das, was Dich betrifft im Moment nur am Rande oder
noch besser Zufällig zu tun.
Ich weiss, es ist verführerisch, die 0 und 1 als Zahlen zu betrachten.
Aber das sind sie nicht. Es sind "Wahrheitswerte". Wahr oder Falsch.
Nichts anderes. Das musst Du verstehen.
> ... und bei dem anderen 1
Bei dem anderen was? Bitte drücke Dich hier sehr deutlich und detailiert
aus. Sonst kommt es immer wieder zu Mißverständnissen.
>was genau ist jetzt die Addition?
Worauf bezieht sich die Frage?
Die "Addition" ist eine Operation auf natürliche, reelle, komplexe
Zahlen sowie auf einige weitere Objekte.
Digitalzwerg schrieb:>>and zählt beide zusammen, oder? bei 0 & 0 dann 0 und bei dem anderen 1>> Nein. Das habe ich Dir oben schon erzählt. Mit einer Addition (bzw. dem> Zusammenzählen) hat das, was Dich betrifft im Moment nur am Rande oder> noch besser Zufällig zu tun.>> Ich weiss, es ist verführerisch, die 0 und 1 als Zahlen zu betrachten.> Aber das sind sie nicht. Es sind "Wahrheitswerte". Wahr oder Falsch.> Nichts anderes. Das musst Du verstehen.
Genau das ist es. Es sind Zustände. 0 ein, 1 aus. Und bei den Operatoren
& UND also das eine UND das andere. Wenn beide Eingänge den Zustand 1
haben wird der Ausgang auch 1. Anders beim | ODER der eine ODER der
andere Eingang machen den Ausgang 1.
Welche Addition denn? Das ist logische Mathematik, da gibts keine
Addition/Subtraktion...
Wenn dich die Zahlen verwirren, schreib erstmal:
True & false = ?
@ Martin
Der Schritt den Du da machen willst, hat mindestens noch drei andere
Verständnisschritte zur Voraussetzung. Also hübsch langsam.
Das hier ist ungefähr Dein Programm:
http://www.elektronik-kompendium.de/sites/dig/index.htm#1
Das liest Du erstmal in Ruhe durch und verdaust es.
Eine Frage in Bezug auf diese Themen muss wie aus der Pistole geschossen
kommen. Sagen wie von einer Zwille. Aber das wenigstens.
So. Und nun gehst Du das an. Ich habe keine Lust Dir die Grundlagen der
Digitaltechnik hier Schritt für Schritt vorzukauen.
Was anderes ist, wenn Du konkrete Fragen dazu hast. Aber dann halte Dich
an das was ich gestern schon geschrieben habe. Es muss erkennbar sein,
das Du was gearbeitet hast.
>Hm, ja, aber was ist true & false? true oder false? :D
Darüber denkst Du jetzt mal ein paar Tage nach. Du kommst schon darauf.
Und lies in dem Link, den ich Dir eben gegeben habe.
Martin Fischer schrieb:> Hm, ja, aber was ist true & false? true oder false? :D
Wenn du kein Geld hast (false) und dein Portemonnaie ist weg (false)
kannst du kein Geld ausgeben (false).
Wenn du Geld hast (true) und dein Portemonnaie ist weg (false) kannst
du kein Geld ausgeben (false).
Wenn du kein Geld hast (false) und dein Portemonnaie ist da (true)
kannst du kein Geld ausgeben (false).
Wenn du Geld hast (true) und dein Portemonnaie ist da (true) kannst du
Geld ausgeben (true).
Also: Eine UND Verknüpfung ist nur dann wahr, wenn alle Bestandteile
wahr sind.
Wenn du nicht besoffen bist (false) oder nicht gekifft hast (false)
ist die Polizeikontrolle harmlos (false).
Wenn du besoffen bist (true) oder nicht gekifft hast (false) ist die
Polizeikontrolle schlimm (true).
Wenn du nicht besoffen bist (false) oder gekifft hast (true) ist die
Polizeikontrolle schlimm (true).
Wenn du besoffen bist (true) oder gekifft hast (true) ist die
Polizeikontrolle schlimm (true).
Also: Bei einer ODER Verknüpfung ist das Ergebnis wahr, wenn
mindestens einer der Bestandteile wahr ist.