Go Down

Topic: Wo kommen diese Werte her ? (Read 3260 times) previous topic - next topic

E.Happel


#define LEDS_OFF 0xFC
#define LEDS_ON 0x00
#define LEDS_INIT 0xF8
#define INTERVALL 50

byte counter;
byte direction;

void setup(){
 pinMode(13, OUTPUT);
 digitalWrite(13, LOW);

 counter = 0;
 direction = 1;

 DDRD = 0xFC;
 PORTD = LEDS_INIT;
}

byte led_table(byte led){
 switch(led){
 case 0: return LEDS_INIT;
 case 1: return 0xF4;
 case 2: return 0xEC;
 case 3: return 0xDC;
 case 4: return 0xBC;
 case 5: return 0x7C;
 }
}
.....

Wo kommen die 0x?? Werte her ? Gibt es eine Referenz was diese bedeuten ?
Waere ueber Hilfestellung sehr dankbar !!
by Ernst

traffiq

»» Das 0x hat scheinbar die gleiche Wirkung wie wenn es überhaupt nicht da stünde. Warum schreibt man es (vermutlich standardmäßig??) trotzdem dazu, obwohl es scheinbar keine Bedeutung hat?
Es kennzeichnet die Zahl als Hexadezimalzahl, also nicht zur Basis 10 sondern zur Basis 16.

Dezimal: 0 1 2 ... 8 9 10 11 .. 15 16 17
Hexadezimal: 0x0 0x1 0x2 ... 0x8 0x9 0xA 0xB .. 0xF 0x10 0x11 .. 0x1A

madworm

Ohne zu wissen welches geraet du ansteuerst, ist es unmoeglich eine antwort zu geben.

E.Happel

Dies hole ich gerne nach, durfte aufgrund meines allerersten Postings nur noch keine URL mitsenden. Es werden hier LED's als Lauflicht angesteuert.

z.B : #define LEDS_OFF 0xFC -> woher kommt der 0xFC Wert ?
Ebenso in der -switch/case Anweisung-: woher kommen die zurückzugebenen Hexawerte ?

http://www.realraum.at/wiki/doku.php?id=workshops:arduino
(unteres Drittel)

Nochmals vielen Dank im Vorraus für Eure Mühe !!

Ernst

dh1ao

#4
Aug 16, 2009, 06:59 pm Last Edit: Aug 16, 2009, 07:01 pm by dh1ao Reason: 1
Hallo Ernst

mir scheint von der Beschreibung her, dass die LEDs mit ihren Kathoden an Pin 2...7 von Port D des Atmels angeschlossen sind. Pin 0 und Pin 1 werden nicht benutzt und daher als Eingang geschaltet

Code: [Select]
DDRD = 0xFC;

0xFC als binäre Darstellung ist 11111100, die beiden unteren Bits sind 0 und daher sind Pin 0 und Pin 1 Eingänge.

Um nun eine LED einzuschalten muss der entsprechende Portpin 0 sein.
Um z.B. nur die LED an Pin 7 einzuschalten wäre der Wert

01111100 = 0x7C

und kucke da

Code: [Select]
case 5: return 0x7C; // LED 5 an Pin 7


LG
Peter

E.Happel

Vielen Dank für die sehr verständliche Erklärung. Nun schließt sich daran noch eine Hauptfrage an:" Wie verhält es sich wenn noch eine weitere LEDs bis D 12 geschaltet werden sollen ?  Es müsste sich, so habe ich es jetzt verstanden,
Code: [Select]
DDRD = 0xFC so ändern, dass LEDs bis Port D 12 eingeschaltet werden können. Dementsprechend müsste die jeweiligen Portpins gändert werden. Jedoch wie wird dies jetzt umgesetzt ?

by Ernst

dh1ao

Hallo Ernst,

leider geht es nicht so einfach :(

Die Ports sind beim 328er 8 Bit breit, also nur 0x00 bis 0xFF möglich.
Wenn Du weitere LEDs anhängen möchtest, musst Du Port B benutzen
(Pin 8 bis 13 am Arduino).

Mal nur so ne Frage... warum kannst Du nicht die Funktion digitalWrite benutzen? Wäre sicher einfacher?

LG
Peter

E.Happel

Quote
Mal nur so ne Frage... warum kannst Du nicht die Funktion digitalWrite benutzen? Wäre sicher einfacher?

stimmt total Peter !! Es hat mich nur sehr interessiert wie hier eine Aufgabe auf einer mir unbekannten Art und Weise umgesetzt wurde. Dabei hast Du mir wirklich ganz toll geholfen. Ich will mal versuchen die LEDs über den B Port anzuzapfen !! Mal sehen ob es klappt.  Hast Du eventuell noch einen Link zu einer guten Seite wo dieses "Insiderwissen" recht gut vermittelt wird ? Hast Du Erfahrung mit dem ersten deutschen Buch "Arduino- Physical Computing für Bastler, Designer und Geeks" ? Die Rezension bei Amazon ist nicht so doll. Aber die ist natürlich nicht repräsentativ !
Nochmals vielen Dank für die tolle Erklärung!! Bist wirklich 'n Guter !!  :)

dh1ao

Hallo Ernst

vielen Dank für Deine netten Worte. Zu dem Buch kann ich leider nichts sagen aber Rezensionen bei Amazon sind meistens Mumpitz. Ich geb da garnichts mehr drum, viel zu viele Pappnasen unterwegs.

Das "Insider" Wissen liegt alles im Playground und hier im Forum ;D

Einmal das Datenblatt vom Atmel
http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

und dann noch der Schaltplan
http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf

jetzt muss man es eigentlich nur noch entziffern können... und da schadet ein Buch darüber sicher nicht.

LG
Peter

bohne

Hallo Ernst,

wenn Du noch nicht zu viel Erfahrung mit Arduino oder Mikrocontrollern allgemein hast, dann ist das Buch sicherlich empfehlenswert.
Du musst halt entscheiden, was Du machen willst: hardcore AVR Programmierung mit direkten Registerzugriffen, oder einfach nur was machen mit dem Arduino. LEDs blinken lassen macht auch mit dem Arduino viel Spaß (und dafür empfehle ich das Buch). Wenn Du natürlich in Assembler die Register programmieren wolltest, dann spar Dir das Arduino Buch.

Und falls Du aus dem Raum Aachen kommst, dann besuch unser lokales dorkbot Treffen am 26.8. :) Viel Spaß.

E.Happel

Hallo bohne,
vielen Dank für das Angebot, wohne jedoch in Hamburg. Ist leider 'n büschen weit weg ....  :( ! Gehöre nicht zu den Hardcore AVRlern sondern betreibe das ganze als Hobby. Habe sonst den  ATMega8 über ein selbstgebasteltes SPI-Kabel via Bascom zur LED-Animation gebracht. Bin vor kurzem durch die c't auf den Arduino gebracht worden. Hab mir gleich den Nano gekauft und bin sehr begeistert. War gestern in der Innenstadt und habe das Arduinobuch erst einmal in der Buchhandlung gründlich unter die Lupe genommen und dann gekauft. Stimme Deiner empfehlenswerten Meinung voll und ganz zu.  

Vielen Dank nochmals für Dein informatives Posting !!

bis danni... Ernst

Go Up