AVR-C Pin lesen und in LCD schreiben

OP #3425857
Lesenswert?

Hallo!
Ich wollte fragen was an meinem Code flash ist...
digitalRead soll den Pin auslesen und dann in das LCD schreiben...
1
lcd_init();
2
lcd_string("Loading...");
3
_delay_ms(1000);
4
pinMode(PIN2, 0);
5

6
while(1) {
7
  lcd_clear();
8
  lcd_setcursor(0, 1);
9
  lcd_string(digitalRead(PIN2));
10
  _delay_ms(100);
11
}
und:
1
void pinMode(uint8_t pin, uint8_t data) {
2
  if(data == 1){
3
    DDRB |= (1 << pin);    //Output
4
  }else if (data == 0){
5
    DDRB &= ~(1 << pin);  //Input
6
  }
7
}
8

9
char digitalRead(uint8_t pin) {
10
  uint8_t data;
11
  uint8_t reg;
12
  if(pin == (PIN0 | PIN1 | PIN2 | PIN3)){
13
    reg = PINB;
14
  }
15
  data = reg & (1 << pin);
16

17
  return (char)data;
18
}

was ist da falsch?
Gast #3425862
Lesenswert?

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
Gast #3425863
Lesenswert?

> 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
OP #3425906
Lesenswert?

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...
Gast #3425915
Lesenswert?

>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.
Gast #3425921
Lesenswert?

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.
OP #3425929
Lesenswert?

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!
Gast #3425942
Lesenswert?

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.
#3425950
Lesenswert?

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
#3426059
Lesenswert?

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
OP #3426130
Lesenswert?

Ok, habe ich auch:
1
uint8_t inp;
2

3
int main(void) {
4
  DDRB  = 0b00000011;
5
  PORTB = 0b00000001;
6

7
  while(1) {
8
    inp = PINB & 0b00000100;
9
    if(inp){
10
      PORTB |= 0b00000010;
11
    }else{
12
      PORTB &= ~0b00000010;
13
    }
14
  }
15
}
Klappt echt super!
Und nun zu meinem Problem...wie kann ich das jetzt mithilfe der LCD-lib 
im LCD Anzeigen?
Gast #3426139
Lesenswert?

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.
Gast #3426151
Lesenswert?

>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!
Gast #3426171
Lesenswert?

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!
Gast #3426178
Lesenswert?

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
void lcd_data( uint8_t data );

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!
Gast #3426185
Lesenswert?

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.
OP #3426186
Lesenswert?

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?
Gast #3426192
Lesenswert?

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.
Gast #3426201
Lesenswert?

@ 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.
Gast #3426204
Lesenswert?

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.
OP #3426212
Lesenswert?

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
Gast #3426214
Lesenswert?

> 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?
Gast #3426240
Lesenswert?

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.
Gast #3426241
Lesenswert?

> ... 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.
OP #3426257
Lesenswert?

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?
Gast #3426263
Lesenswert?

>... 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!
Gast #3426267
Lesenswert?

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 
2
void lcd_data( uint8_t data );
Gast #3426270
Lesenswert?

>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.
Gast #3426290
Lesenswert?

@ 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.
OP #3426295
Lesenswert?

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!
#3426297
Lesenswert?

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
Gast #3426305
Lesenswert?

>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!
Gast #3426334
Lesenswert?

>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?
OP #3426400
Lesenswert?

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...
#3426405
Lesenswert?

Martin Fischer schrieb:
> Ok, Sebastian, meintest du jetzt:
>
1
>                 if(digitalRead(PIN2)){
2
>       lcd_string("1");
3
>     }else{
4
>       lcd_string("0");
5
>     }
6
>
> ???


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
1
  lcd_data( digitalRead(PIN2) + '0' );
#3426415
Lesenswert?

> 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.
Gast #3426420
Lesenswert?

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
#3426430
Lesenswert?

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.
Gast #3426432
Lesenswert?

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 ;-)
Gast #3426443
Lesenswert?

@ 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.
#3426444
Lesenswert?

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?
Gast #3426448
Lesenswert?

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
#3426450
Lesenswert?

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.
Gast #3426453
Lesenswert?

@ 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.
#3426456
Lesenswert?

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.
#3426458
Lesenswert?

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.
OP #3426461
Lesenswert?

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 ...
#3426462
Lesenswert?

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.
OP #3426471
Lesenswert?

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...
#3426472
Lesenswert?

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.
Gast #3426477
Lesenswert?

>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.
Gast #3426482
Lesenswert?

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.
#3426490
Lesenswert?

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.
Gast #3426493
Lesenswert?

>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.
#3426498
Lesenswert?

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.
Gast #3426502
Lesenswert?

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
#3426512
Lesenswert?

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.
Gast #3426676
Lesenswert?

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.
Gast #3426801
Lesenswert?

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.
Gast #3426845
Lesenswert?

@ 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
#3426861
Lesenswert?

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.
Gast #3426869
Lesenswert?

> ... 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.
Gast #3426892
Lesenswert?

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.
Gast #3426941
Lesenswert?

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
Gast #3426949
Lesenswert?

> 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.
Gast #3427293
Lesenswert?

>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.
Gast #3427307
Lesenswert?

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 |
Gast #3427333
Lesenswert?

>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.
Gast #3427344
Lesenswert?

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.
Gast #3427358
Lesenswert?

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.
#3427374
Lesenswert?

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.
OP #3427418
Lesenswert?

Danke Danke DAnke!
Ich habe es geschafft dass er eine 1 oder 0 ausgibt, mit:
1
uint8_t digitalRead(uint8_t pin) {
2
  uint8_t data;
3
  uint8_t reg;
4
  if(pin == PIN0 || pin == PIN1 || pin == PIN2 || pin == PIN3){
5
    reg = PINB;
6
  }
7
  data = reg & (1 << pin);
8

9
  return data>>pin;
10
}
seht ihr, ich leerne dazu, ich habe bei return das >>pin nicht gehabt!
LERNE ICH DAZU?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren