INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
10er zahlen in binärzahlen - noobfrage
08.01.2014, 00:31
Beitrag #1
10er zahlen in binärzahlen - noobfrage
hey,
ich habe zu weihnachten ein arduino bekommen und bin gearde dabei mich langsam mit ihm vertraut zu machen. ein erstes projekt sollte sein, dass der arduino mir mit hilfe von 8 leuchtdioden zahlen mit der basis 10 binär in zweierkomplement-form darstellt. mit ein wenig hin und her basteln klappt das auch ganz gut. er stellt alle zahlen im bereich von -128 bis 127 korrekt dar... mit außnahme von -1. die stellt er als 127 dar. woran nur kann es liegen?

hier der kurze programm code:

***********************

int zehnerzahl=127; //nur zahlen zwischen -128 und 127
int zehnerzahlspeicher=zehnerzahl;

void setup(){
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
void loop(){
zehnerzahl=zehnerzahlspeicher;
if(zehnerzahl>=0){ //falls positive zahl
digitalWrite(9,0); //vorzeichenbit positiv setzen
}
else{ //bei negativen zahlen
digitalWrite(9,1); //vorzeichen negativ setzen
zehnerzahl=128+zehnerzahl; //gegenzahl bilden
}
for(int i=8; i>=2; i--){ //runterzählen von pin 8 bis 2
if(zehnerzahl>=pow(2,i-2)){
digitalWrite(i,1);
zehnerzahl=zehnerzahl-pow(2,i-2);
}
else{
digitalWrite(i,0);
}
}
}

***********************************
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2014, 10:41
Beitrag #2
RE: 10er zahlen in binärzahlen - noobfrage
(08.01.2014 00:31)schatten14 schrieb:  hey,
ich habe zu weihnachten ein arduino bekommen und bin gearde dabei mich langsam mit ihm vertraut zu machen. ein erstes projekt sollte sein, dass der arduino mir mit hilfe von 8 leuchtdioden zahlen mit der basis 10 binär in zweierkomplement-form darstellt. mit ein wenig hin und her basteln klappt das auch ganz gut. er stellt alle zahlen im bereich von -128 bis 127 korrekt dar... mit außnahme von -1. die stellt er als 127 dar. woran nur kann es liegen?

hier der kurze programm code:

***********************

int zehnerzahl=127; //nur zahlen zwischen -128 und 127
int zehnerzahlspeicher=zehnerzahl;

void setup(){
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
void loop(){
zehnerzahl=zehnerzahlspeicher;
if(zehnerzahl>=0){ //falls positive zahl
digitalWrite(9,0); //vorzeichenbit positiv setzen
}
else{ //bei negativen zahlen
digitalWrite(9,1); //vorzeichen negativ setzen
zehnerzahl=128+zehnerzahl; //gegenzahl bilden
}
for(int i=8; i>=2; i--){ //runterzählen von pin 8 bis 2
if(zehnerzahl>=pow(2,i-2)){
digitalWrite(i,1);
zehnerzahl=zehnerzahl-pow(2,i-2);
}
else{
digitalWrite(i,0);
}
}
}

***********************************
-1 ist 1111 1111 = Vorzeichen + 127.
Bei -1 + 1 = 0 -> 0000 0000

Gruß
Hans-Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2014, 01:12
Beitrag #3
RE: 10er zahlen in binärzahlen - noobfrage
(08.01.2014 10:41)investmentclub schrieb:  -1 ist 1111 1111 = Vorzeichen + 127.
Bei -1 + 1 = 0 -> 0000 0000

aber genau das tue ich doch hier, dachte ich zumindest:
(08.01.2014 00:31)schatten14 schrieb:  else{ //bei negativen zahlen
digitalWrite(9,1); //vorzeichen negativ setzen
zehnerzahl=128+zehnerzahl; //gegenzahl bilden
}
ich setze das MSB auf 1 für das negative vorzeichen und setze dann den wert, der bei den verbeleibenden 7 bits abgebildet werden soll auf 127.
auf dem breadboard erscheint das MSB aber mit 0 und der rest als 1, also so als wäre es 127 und nicht -1
...ich verstehe nicht, wie es zu diesem fehler kommt...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2014, 11:44
Beitrag #4
RE: 10er zahlen in binärzahlen - noobfrage
Hallo,

wenn es ansonsten klappt, dann kann es nur an deiner Auswahl liegen. Versuche es mal mit dem Ausdruck: if(zehnerzahl>-1){ //falls positive zahl.



wozu soll diese Definition (Zeile 2) gut sein: int zehnerzahlspeicher=zehnerzahl; ?

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2014, 14:03 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2014 14:04 von schatten14.)
Beitrag #5
RE: 10er zahlen in binärzahlen - noobfrage
(09.01.2014 11:44)Stefan schrieb:  Hallo,
wenn es ansonsten klappt, dann kann es nur an deiner Auswahl liegen. Versuche es mal mit dem Ausdruck: if(zehnerzahl>-1){ //falls positive zahl.

nope, ändert nichts, hätte mich auch gewundert, wenn es daran liegen würde, da es ja im prinzip das selbe ausdrückt und der programmarm für negative zahlen davon nicht betroffen ist.

(09.01.2014 11:44)Stefan schrieb:  wozu soll diese Definition (Zeile 2) gut sein: int zehnerzahlspeicher=zehnerzahl; ?

da sich "zehnerzahl" während des durchlaufs stückweise verändert, und es sich bei "void loop" um ein kontinuierlich sich wiederholendes programm handelt muß "zehnerzahl" vor jedem durchlauf erneut auf den startwert gesetzt werden.




...bezüglich der frage nach -1, gibt es noch andere ideen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2014, 18:02
Beitrag #6
RE: 10er zahlen in binärzahlen - noobfrage
(11.01.2014 14:03)schatten14 schrieb:  nope, ändert nichts, hätte mich auch gewundert, wenn es daran liegen würde, da es ja im prinzip das selbe ausdrückt und der programmarm für negative zahlen davon nicht betroffen ist.

ok, aber wieso hat es keine Auswirkung auf den negativen Zweig? Mit 'else' selektiert hat es das sehr wohl. Es kann nur an dieser Konstruktion der Selektion liegen, wenn es sonst funktioniert.

(11.01.2014 14:03)schatten14 schrieb:  da sich "zehnerzahl" während des durchlaufs stückweise verändert, und es sich bei "void loop" um ein kontinuierlich sich wiederholendes programm handelt muß "zehnerzahl" vor jedem durchlauf erneut auf den startwert gesetzt werden.

klar, aber wozu die einmalige Vorbelegung der beiden Variablen mit 127? Liegt vielleicht da der Fehler?

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2014, 22:12
Beitrag #7
RE: 10er zahlen in binärzahlen - noobfrage
(13.01.2014 18:02)Stefan schrieb:  
(11.01.2014 14:03)schatten14 schrieb:  nope, ändert nichts, hätte mich auch gewundert, wenn es daran liegen würde, da es ja im prinzip das selbe ausdrückt und der programmarm für negative zahlen davon nicht betroffen ist.

ok, aber wieso hat es keine Auswirkung auf den negativen Zweig? Mit 'else' selektiert hat es das sehr wohl. Es kann nur an dieser Konstruktion der Selektion liegen, wenn es sonst funktioniert.

nun, ob ich x>=0 oder x>-1 sage ist egal es ist die selbe trennung der positiven zahlen (inkl. 0) von den negativen zahlen.
ich habe es ausprobiert und es ändert das problem leider nicht. Sad

(13.01.2014 18:02)Stefan schrieb:  
(11.01.2014 14:03)schatten14 schrieb:  da sich "zehnerzahl" während des durchlaufs stückweise verändert, und es sich bei "void loop" um ein kontinuierlich sich wiederholendes programm handelt muß "zehnerzahl" vor jedem durchlauf erneut auf den startwert gesetzt werden.

klar, aber wozu die einmalige Vorbelegung der beiden Variablen mit 127? Liegt vielleicht da der Fehler?

anstelle der 127 kannst du jede beliebige zahl im bereich 127>=x>=-128 einsetzen. und die darstellung (im zweierkomplement) funktioniert ja auch mit jeder dieser zahlen. mit ausnahme eben der -1 ... was mir absolut seltsam erschient, warum sie alleine da so heraus ragt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2014, 23:01
Beitrag #8
RE: 10er zahlen in binärzahlen - noobfrage
ja, die beiden Ausdrücke sollten das gleiche Ergebnis liefern. Das -1-Problem kann doch aber nur mit der Trennung bei der Null zusammenhängen, oder? Ansonsten fällt mir auch nichts ein, bzw. auf. Dodgy

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  4 Anzeigen mit unterschiedlichen zufälligen Zahlen Gravia 4 431 10.02.2016 06:05
Letzter Beitrag: Gravia
  Problem mit Division zweier Zahlen torsten_156 3 455 18.12.2015 22:09
Letzter Beitrag: Bitklopfer
  analogRead: Pin-Nummern zählen? HaWe 4 823 14.06.2015 12:01
Letzter Beitrag: HaWe
  Serial Monitor Zahlen Senden über 9 paq 7 2.014 18.05.2015 08:48
Letzter Beitrag: Scherheinz
  LCD Zahlen Formatierung Kaito164 24 5.200 21.02.2015 13:23
Letzter Beitrag: Kaito164
  .read() liest nur zahlen anstatt character kraweuschuasta 1 1.247 27.02.2014 21:10
Letzter Beitrag: kraweuschuasta
  Zahlen vom Serieller Monitor verarbeiten Sascha87 1 1.273 16.01.2014 10:47
Letzter Beitrag: Stefan
  Pulse zählen Coleby 8 8.261 05.01.2014 10:10
Letzter Beitrag: Coleby
  Große Zahlen und kein Punkt Xwill 2 1.703 27.10.2013 21:10
Letzter Beitrag: Xwill

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste