Hallo! Wie kann ich einen speziellen Port eines Registers auf Output setzen? mit:
1 | DDRB = 0xff; |
setzt man alle auf Output...geht um PB0 und PB2 auf Output zu setzen dieser Code:
1 | DDRB = 0b00001001; |
?
|
Forum: Mikrocontroller und Digitale Elektronik uC C-Programmierung Port setzenHallo! Wie kann ich einen speziellen Port eines Registers auf Output setzen? mit:
setzt man alle auf Output...geht um PB0 und PB2 auf Output zu setzen dieser Code:
? Martin Fischer schrieb: > geht um PB0 und PB2 auf Output zu setzen > dieser Code:DDRB = 0b00001001; Nein, der setzt PB0 und PB3. Stimmt^^ Egal, so ist aber richtig, und die anderen sind Input, oder? http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial wie wäre es einfach mal mit suchen. Das datenblatt zum entsprechenden µC ist bestimmt auch nicht verkehrt... Martin Fischer schrieb: > Egal, so ist aber richtig Beim Programmieren ist relativ wenig "egal" und dennoch richtig :-) Die Bitpositionen mit "1" werden Ausgang, die mit "0" werden Eingang. Das zumindest hast du richtig. Nochwas! Kann man da auch irgendwie mit PB1 und so Arbeiten um alle einzeln zu setzen? DDRB |= 0x02; setzt nur PB1 auf Ausgang und lässt den Rest in Ruhe. DDRB &= 0xf7; setzt PB3 auf Eingang und lässt den Rest in Ruhe. Ok. Also setzt das hier: DDRB = 0b000001; DDRB = 0b001000; PB0 und PB3 auf Output NACHEINANDER EINZELN? Hi
>PB0 und PB3 auf Output NACHEINANDER EINZELN?
Nein.
X=3
X=5
Welchen Wert hat X nach der zweiten Anweisung?
MfG Spess
X hat den Wert 5... Ich kenne mich noch nicht so gut mit Bit-Rechnung und so aus...wie geht das? Martin Fischer schrieb: > X hat den Wert 5... > Ich kenne mich noch nicht so gut mit Bit-Rechnung und so aus...wie geht > das? So wie alles andere auch. Eine Zuweisung ist eine Zuweisung. Das komplette Ziel (in diesem Fall eben ein Register) wird mit einem neuen Wert belegt. Denk nicht so kompliziert.
eben das kleine Einmaleins in der µC-Programmierung. Hi >Ich kenne mich noch nicht so gut mit Bit-Rechnung und so aus... Dann lerne es. >wie geht das? So: http://www.mikrocontroller.net/articles/Bitmanipulation Und lege dir möglichst schnell ein C-Buch zu. MfG Spess >Ich habe nur ein c++ Buch, ist das kompatibel?
Was die Grundlagen der Bitmanipulation betrifft, ist das bei C und C++
das selbe.
Allerdings stehe ich dem Argument nahe, das heisst, dass man erstmal C
lernen soll ehe man C++ lernt.
Lies erstmal das Tutorial.
"PB1" ist typ char, oder? also die Bezeichnung? und um die zu setzen dann: DDRB |= ( 1 << PB1 ) - PB1 Output DDRB |= ( 0 << PB2 ) - PB2 Input und beide werden NAcheinander gesetzt und ich kann das auch so in zwei Zeilen schreiben? Deine Aussage aus diesem unterhaltsamen Thread: Beitrag "Arduino-AVR programmieren" > programmieren kann ich doch schon nahezu perfekt!!! Schon klar... Warum liest du denn nicht einfach mal den Artikel zur Bitmanipulation? Ja, außer BitManipulation...wozu brauchte ich das schon vorher? "PB1" ist typ char, oder? also die Bezeichnung? und um die zu setzen dann: DDRB |= ( 1 << PB1 ) - PB1 Output DDRB |= ( 0 << PB2 ) - PB2 Input und beide werden NAcheinander gesetzt und ich kann das auch so in zwei Zeilen schreiben? Martin Fischer schrieb: > DDRB |= ( 0 << PB2 ) - PB2 Input liest du eigentlich, was dir hier geantwortet wurde? Eine 0 kannst du schieben, so oft du möchtest, es bleibt eine 0 DDRB &= ~(1 << PB2); und um die zu setzen dann: DDRB |= ( 1 << PB1 ) - PB1 Output DDRB &= ~( 1 << PB2 ) - PB2 Input Aber wozu ist das & und nicht der | davor bei:DDRB &= ~( 1 << PB2 ) - PB2 Input Würdest du dir die Mühe machen selbst einmal zu recherchieren, wüsstest du das schon längst. Glaub mir so wird das nix mit dem AVR und dem Projekt. Martin Fischer schrieb: > Aber wozu ist das & und nicht der | davor bei:DDRB &= ~( 1 << PB2 ) - > PB2 Input Lies gefälligst entweder Dein C++-Buch oder den schon mehrfach erwähnten Artikel zum Thema Bitmanipulation! Bei Deinem derzeitigen Wissensstand macht es überhaupt keinen Sinn, Dir noch irgendetwas über Programmieren oder Microcontroller zu erklären. :
Bearbeitet durch User
Georg G. schrieb: > Die Bitpositionen mit "1" werden Ausgang, die mit "0" werden Eingang. Falls die Registerbezeichnung DDR der Namensgebung von Atmel folgt, stimmt das (z.B. ATmega..). Bei den PICs ist es genau umgekehrt. Eine "1" im Datenrichtungsregister schaltet den Pin als Input, eine "0" als Output. Michael schrieb: > Georg G. schrieb: >> Die Bitpositionen mit "1" werden Ausgang, die mit "0" werden Eingang. > > Falls die Registerbezeichnung DDR der Namensgebung von Atmel folgt, > stimmt das (z.B. ATmega..). Bei den PICs ist es genau umgekehrt. Eine > "1" im Datenrichtungsregister schaltet den Pin als Input, eine "0" als > Output. Schön. Aber verwirr ihn nicht noch mehr. Er hat einen Atmega8. Der ist allerdings gerade im A... mfg. :
Bearbeitet durch User
Schau halt mal in den Headern nach... Kleiner Tipp PB0 ist beim ATMega8 in #include <avr/iom8.h> zu finden, wird von #include <avr/io.h> eingebunden. Es ist ein define! Und wenn du nicht langsam die Artikel liest die hier verlinkt worden sind, wird dir bald keiner mehr antworten! Martin, machst du jetzt zu jedem Einzelschritt einen Thread auf? RTFM (read the f***ing manual) Langsam nervst du wirklich. Arbeite das Tutorial durch und lies den verdammten Scheiß auch, den die Leute dir posten und verlinken! Ehrlich... was willst du bei Jugend Forscht??? DAS HAT NIX MIT JUFO zutun... und im Tutorial steht nirgendwo was das für ein Datentyp ist Weil das Tutorial auch kein C-Buch ersetzt. Lern erst mal ordentlich C auf dem PC und dann kannst du mit einem µC loslegen. Martin Fischer schrieb: > Ja, aber dort ist es als 0 #define'd, int ist es aber nicht? Ja, das ist int. Aber das interessiert genauso wenig wie wenn du beim Bäcker 5 € bezahlen sollst. Da ist es dir doch auch egal, ob das int, char, long, double oder katholisch ist. mfg. Gerd schrieb: > Martin, machst du jetzt zu jedem Einzelschritt einen Thread auf? > > Ehrlich... was willst du bei Jugend Forscht??? 'Jugend nervt' gewinnt er sofort. Martin, ich will dich mal was fragen: Du liest nicht die vorgeschlagenen Artikel, auch keine Bücher, hast sogar Angst deine Adresse per PN zu verschicken um ein oder mehrere Geschenke zu bekommen (hatte da sogar vor dir den mySmartUSB light dabei zu packen), nimmst absolut keine. Rat an, außer er liegt dir. Also, was willst du hier? Sorry dass ich nerve, ich versuche nur zu lernen, habe es jetzt aber geschafft, danke, bb Martin Fischer schrieb: > Sorry dass ich nerve, ich versuche nur zu lernen, habe es jetzt > aber > geschafft, danke, bb xD ich habe eher das Gefühl du würdest dich wehren etwas zu lernen Martin Fischer schrieb: > Von welchem Datentyp ist PB0 ? es ist kein Int, kein Char, ...? Martin Fischer schrieb: > Ja, aber dort ist es als 0 #define'd, int ist es aber nicht? #define hat nichts mit Datentypen und Programmiersprache zu tun. Damit werden nur Textstücke für Textersetzungen im Präprozessor gesteuert. Ja schon klar, ich habe meinen Fehler gefunden, war ein bisschen verwirrt gewesen... 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.
|
|