Forum: Mikrocontroller und Digitale Elektronik AVR-C Pin lesen und in LCD schreiben


von Martin F. (martin_f70)


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?

von Arno (Gast)


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

von g457 (Gast)


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

von Arno (Gast)


Lesenswert?

Arno schrieb:
> Das ist nur genau dann 1, wenn pin = 1 ist.

Ingrid meint: ...wenn pin = 0 ist. Eine 1 um 0 stellen verschoben bleibt 
eine 1.

MfG, Arno

von Wolfgang (Gast)


Lesenswert?

Martin Fischer schrieb:
> was ist da falsch?

Vermutlich hast du im Charaktergenerator vom LCD-Controller die Zeichen 
0 und 1 nicht definiert.

von Digitalzwerg (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

von Martin F. (martin_f70)


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

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

Ich verstehe aber alles noch nicht so genau, ich probiere ja es zu 
verstehen...
Jetzt mal Schritt für Schritt...:
1
if(pin == (PIN0 || PIN1 || PIN2 || PIN3)){
Fragt das ab ob pin gleich PIN0 ODER PIN1 ODER... ist oder muss ich 
dafür so ausführlich :
1
if(pin == PIN0 || pin == PIN1 ...
?

von TriHexagon (Gast)


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.

von Martin F. (martin_f70)


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!

von TriHexagon (Gast)


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.

von Sebastian W. (wangnick)


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

: Bearbeitet durch User
von Martin F. (martin_f70)


Lesenswert?

Ja Sebastian. Kann man aber auch so die "kurze" Variante nehmen?

von Josef M. (josef_m)


Lesenswert?


von Georg G. (df2au)


Lesenswert?

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?

von Martin F. (martin_f70)


Lesenswert?

Ja!
Geht es nun so: (PIN || PIN || PIN) oder so: pin == PIN || pin == PIN

von TriHexagon (Gast)


Lesenswert?

Teste es auf dem PC. Programmieren lernt man am besten, wenn man 
experimentiert.

von Martin F. (martin_f70)


Lesenswert?

Ja ok, aber wieso wird auf dem LCD nicht das richtige Angezeigt?

von Georg G. (df2au)


Lesenswert?

Die Antwort hast du schon zweimal in diesem Thread bekommen. Lerne 
lesen!

von Sebastian W. (wangnick)


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

von Martin F. (martin_f70)


Lesenswert?

Den Fehler habe ich schon behoben: if(pin == PIN0 || pin == PIN1 || pin 
== PIN2 || pin == PIN3)

von Martin F. (martin_f70)


Lesenswert?

Ich benutze übrigens diese LCD Bibliothek: 
http://me-and-my-mc.blogspot.de/2012/11/lcd-display-mit-atmega16.html

von Georg G. (df2au)


Lesenswert?

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?

von Steffen (Gast)


Lesenswert?

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.

von Steffen (Gast)


Lesenswert?

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

von Martin F. (martin_f70)


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?

von Steffen (Gast)


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.

von Martin F. (martin_f70)


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!

von Martin F. (martin_f70)


Lesenswert?

Klappt alles Steffen!
Ein String wird ausgegeben...wie aber der Wert des Pins?

von Digitalzwerg (Gast)


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!

von TriHexagon (Gast)


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!

von Steffen (Gast)


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!

von Wolfgang (Gast)


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.

von Martin F. (martin_f70)


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?

von Eumel (Gast)


Lesenswert?

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.

von Martin F. (martin_f70)


Lesenswert?

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!

von Steffen (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

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???

von Steffen (Gast)


Lesenswert?

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?

von Digitalzwerg (Gast)


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.

von TriHexagon (Gast)


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.

von Martin F. (martin_f70)


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

von Digitalzwerg (Gast)


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?

von Martin F. (martin_f70)


Lesenswert?

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!

von Steffen (Gast)


Lesenswert?

Digitalzwerg schrieb:
>
> Was waren das denn für Sprachen?

Backrezepte

von Martin F. (martin_f70)


Lesenswert?

Ne, Python, Visual Basic, PHP und C++

von TriHexagon (Gast)


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.

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

Würde ich genau wissen warum das nicht läuft dann könnte ich es auch 
beheben!

von Steffen (Gast)


Lesenswert?

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

von Martin F. (martin_f70)


Lesenswert?

Ja, aber es geht hier ja auch nicht um irgendwelche Basics!

von Eumel (Gast)


Lesenswert?

Martin Fischer schrieb:
> Ja, aber es geht hier ja auch nicht um irgendwelche Basics!

Doch.

von Steffen (Gast)


Lesenswert?


von Digitalzwerg (Gast)


Lesenswert?

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

von Martin F. (martin_f70)


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?

von Digitalzwerg (Gast)


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!

von Steffen (Gast)


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

von Digitalzwerg (Gast)


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.

von Digitalzwerg (Gast)


Lesenswert?

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

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


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!

von Sebastian W. (wangnick)


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

von Martin F. (martin_f70)


Lesenswert?

Ok, das verstehe ich.
Aber die Eingabe soll doch nur 1 oder 0 sein, die sind doch einzeln, 
oder?

von Digitalzwerg (Gast)


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!

von Martin F. (martin_f70)


Lesenswert?

Ich wüsste ja wie ich es machen kann: if(input){lcd_string("1");}
aber ich wollte dass es gleich so Ausgegeben wird...

von Steffen (Gast)


Lesenswert?

wobei man es auch damit Vergleichen kann:

Im alten Testament steht " Sie trugen seltsame Gewänder und irrten 
planlos umher "

von Sebastian W. (wangnick)


Lesenswert?

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

von Martin F. (martin_f70)


Lesenswert?

Ok. Ich esse kurz, danach mache ich einen Lösungsvorschlag!

von TriHexagon (Gast)


Lesenswert?

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.

von Steffen (Gast)


Lesenswert?

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.

von Digitalzwerg (Gast)


Lesenswert?

Lach. Ein Zufallstreffer bei Metager

"Wer nichts als die Chemie versteht, versteht auch die nicht recht."
Georg Christoph Lichtenberg

von Digitalzwerg (Gast)


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?

von Mike (Gast)


Lesenswert?

Digitalzwerg schrieb:
> Sondern das er überhaupt keine Ahnung hat, was er eigentlich tut.

Da ist Martin aber einer anderen Meinung, wenn ich ihn dazu mal zitieren 
darf:

Martin Fischer schrieb:
Beitrag "Re: Arduino-AVR programmieren"
> programmieren kann ich doch schon nahezu perfekt!!!

von Steffen (Gast)


Lesenswert?

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

von Martin F. (martin_f70)


Lesenswert?

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

von Steffen (Gast)


Lesenswert?

naja da schreibt er irgendwo 1 oder 0 hin. Vielleicht vorher noch die 
Position festlegen.

von Martin F. (martin_f70)


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

von Karl H. (kbuchegg)


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' );

von Karl H. (kbuchegg)


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.

von Steffen (Gast)


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

von Martin F. (martin_f70)


Lesenswert?

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!

von Martin F. (martin_f70)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Steffen (Gast)


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

Was liegt dann am Eingang an wenn du PIN7 nimmst? 128V?

von Wolfgang (Gast)


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

von Martin F. (martin_f70)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Mr. Tom (Gast)


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

Meinst du, wenn du den Prozessor mit 2.5V betreibst, liefert der 
entsprechend eine 2?

von Digitalzwerg (Gast)


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.

von Karl H. (kbuchegg)


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?

: Bearbeitet durch User
von Martin F. (martin_f70)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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?

von Steffen (Gast)


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

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Martin F. (martin_f70)


Lesenswert?

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!

von Digitalzwerg (Gast)


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.

von Karl H. (kbuchegg)


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.

von Digitalzwerg (Gast)


Lesenswert?

>ich glaube ich bau es nochmal ran!
Recht so. Immer dranbleiben.

von Karl H. (kbuchegg)


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.

von Steffen (Gast)


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

von Sebastian W. (wangnick)


Lesenswert?

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

von Martin F. (martin_f70)


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

von Karl H. (kbuchegg)


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.

von Martin F. (martin_f70)


Lesenswert?

Bitte bleibe freundlicher....
Hier aus dem Tutorial:
1
/* und den entprellten Tastendruck zurückgeben: */
2
  return *inputreg & (1<<inputbit);
Und es funktioniert auch!

von Digitalzwerg (Gast)


Lesenswert?

1
*reg

Neeeeeiiiiin!

Das hat nichts mit Pointern zu tun.


P.S. Ich muss gerade an Monty Python denken.

von Digitalzwerg (Gast)


Lesenswert?

Stöhn.

Ich guck jetzt Luther und bastle mit meinem neuen Robo TX. Mal gucken ob 
man die Firmware irgendwie neu flashen kann.

von Martin F. (martin_f70)


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

von Karl H. (kbuchegg)


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.

von Martin F. (martin_f70)


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!

von Steffen (Gast)


Lesenswert?

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

von Digitalzwerg (Gast)


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.

von Steffen (Gast)


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.

von Steffen (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Digitalzwerg (Gast)


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.

von Karl H. (kbuchegg)


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.

von Steffen (Gast)


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

von Digitalzwerg (Gast)


Lesenswert?

@ Steffen

Merci.

von Karl H. (kbuchegg)


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.

von Steffen (Gast)


Lesenswert?

Digitalzwerg schrieb:
> @ Steffen
>
> Merci.

kein Ding, is schon Lustig hier ;-)

von Martin F. (martin_f70)


Lesenswert?

Ok sry dass ich da was verwechselt habe, ich geh jetzt ins Bett, bis 
morgen, schöne Nacht noch,
danke für das heute

von Digitalzwerg (Gast)


Lesenswert?

Ts ts ts, Karl Heinz. Jetzt hast Du ihn müde gemacht.

Ich drück' Dich mal.

von Martin F. (martin_f70)


Lesenswert?

keine Sorge, ich komme morgen früh wieder, nacht

von Steffen (Gast)


Lesenswert?

oh jeh,ich denk n Tag Pause tut dir gut.

von Martin F. (martin_f70)


Lesenswert?

Mal gucken, jetzt bin ich wirklich weg, guten Nacht allerseits

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Martin F. (martin_f70)


Lesenswert?


von Wolfgang (Gast)


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.

von TriHexagon (Gast)


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.

von Digitalzwerg (Gast)


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

von Georg G. (df2au)


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.

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

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?

von Digitalzwerg (Gast)


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.

von TriHexagon (Gast)


Lesenswert?

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.

von Fabian O. (xfr)


Lesenswert?

Martin Fischer schrieb:
> Wie lese ich aber jetzt wirklich nur 0 und 1 richtig aus? Das muss doch
> auch gehen ohne zu rechnen, oder?

Eine Möglichkeit steht schon hier im Thread:
Beitrag "Re: AVR-C Pin lesen und in LCD schreiben"

von Digitalzwerg (Gast)


Lesenswert?

Ist das zu glauben? Sowas von Hartleibigkeit!

Ich möchte den Mods vorschlagen diesen Thread zu schliessen.

von Georg G. (df2au)


Lesenswert?

Digitalzwerg schrieb:
> Das ist für einen Anfänger ungefähr so nützlich wie ein Schlag auf
> den Kopf

Sorry, hatte die Ironie Tags vergessen :-(

von Steffen (Gast)


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

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

Ich habe mich mit Bit-Operatoren beschäftigt, ich verstehe sie jetzt!

von Steffen (Gast)


Lesenswert?

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

von Digitalzwerg (Gast)


Lesenswert?

>schön, na dann gib sie mal mit deinen Worten wieder. Bin gespannt :-)
Gute Idee!

von Martin F. (martin_f70)


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

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

|:  11010011 | 00111011 = 11111011
&:  11011101 & 10010001 = 01001100

oder?

von Digitalzwerg (Gast)


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 |

von Digitalzwerg (Gast)


Lesenswert?

Aber wenn es denn sein muss:
So geht es übersichtlicher


|:  11010011
    00111011
-------------
    11111011

    rrrrrrrr (r = richtig)

&:  11011101
    10010001
--------------
    01001100


    ffrfffrf   (f = falsch)

von Martin F. (martin_f70)


Lesenswert?

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

von Digitalzwerg (Gast)


Lesenswert?

Oh. Mist. Sorry. Da war einer mehr richtig.

&:  11011101
    10010001
--------------
    01001100


    frrfffrf   (f = falsch)

von Martin F. (martin_f70)


Lesenswert?

| -> habe ich verstanden..
kannst du & nochmal erklären?

von TriHexagon (Gast)


Lesenswert?

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.

von Digitalzwerg (Gast)


Lesenswert?

a b | a und b
----+--------
0 0 | 1          Falsch
0 1 | 0         Richtig
1 0 | 0         Richtig
1 1 | 1         Richtig

a b | a oder b
----+--------
0 0 | 0         Richtig
0 1 | 1         Richtig
1 0 | 1         Richtig
1 1 | 1         Richtig

von Digitalzwerg (Gast)


Lesenswert?

>Das ODER ist aber schon mal richtig.

Leider nur nicht durchgehend. Mal macht er es richtig. Mal falsch.

von Digitalzwerg (Gast)


Lesenswert?

>Leider nur nicht durchgehend. Mal macht er es richtig. Mal falsch.

Sh... Bin schon selbst ganz konfus. Nein. Das Oder war korrekt.

von Martin F. (martin_f70)


Lesenswert?

Nene, das war nur pfusch, ich habe es verstanden..and zählt beide 
zusammen, oder? bei 0 & 0 dann 0 und bei dem anderen 1

von Digitalzwerg (Gast)


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.

von Digitalzwerg (Gast)


Lesenswert?

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

von Martin F. (martin_f70)


Lesenswert?

Ok, ist klar, wahr und falsch...
und was genau ist jetzt die Addition?

von Digitalzwerg (Gast)


Lesenswert?

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

von Steffen (Gast)


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.

von TriHexagon (Gast)


Lesenswert?

Welche Addition denn? Das ist logische Mathematik, da gibts keine 
Addition/Subtraktion...

Wenn dich die Zahlen verwirren, schreib erstmal:
True & false = ?

von Digitalzwerg (Gast)


Lesenswert?

@ 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

von Martin F. (martin_f70)


Lesenswert?

Hm, ja, aber was ist true & false? true oder false? :D

von Digitalzwerg (Gast)


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.

von Martin F. (martin_f70)


Lesenswert?

Ok, danke erstmal...

von Digitalzwerg (Gast)


Lesenswert?

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

von Digitalzwerg (Gast)


Lesenswert?

Noch ein kleiner Scherz als Anregung:

"Willst Du Tee oder Kaffee?"
"Ja."

von Dietrich L. (dietrichl)


Lesenswert?


von Georg G. (df2au)


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.

von Martin F. (martin_f70)


Lesenswert?

DAnke, echt super erklärt

von Martin F. (martin_f70)


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?

von Justus S. (jussa)


Lesenswert?

Martin Fischer schrieb:
> LERNE ICH DAZU?

offensichtlich nicht

von Martin F. (martin_f70)


Lesenswert?

Was? Wieso? So ist es jetzt richtig!
Es wird erst die 1 um pin stellen verschoben, und jetzt wieder zurück 
zur 1..?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.