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
Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
20.12.2020, 18:01 (Dieser Beitrag wurde zuletzt bearbeitet: 20.12.2020 18:03 von Christian_Moba-Arduino.)
Beitrag #1
Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
Hallo Arduiono Freunde,
ich stehe wieder einmal vor einem Problem.
Ich möchte Digitalausgänge über ein Byte (aus 8Bit) einschalten (HIGH) setzten.

Code:
...
  digitalWrite(5, HIGH);  // Bit0
  digitalWrite(6, HIGH);  // Bit1
  digitalWrite(7, LOW);   // Bit2
  digitalWrite(8, HIGH);  // Bit3
  digitalWrite(9, HIGH);  // Bit4
  digitalWrite(10, LOW); // Bit5

// Bit6 und Bit7 werden nicht verwendet ( Wert 64 und Wert 128)
...

Mit der Portprogrammierung ähnlich der Register Portprogrammierung, komme ich das nicht weiter weil ich auf Zwei Register Zugreifen muss (PortB und PortD).

DDRB = DDRB | 0b00000111; // Pin8 bis PIN10 als Output
PORTB = PORTB & 0b00000011; // Pin8 bis PIN10 Schalten

Könnt Ihr mir Helfen ?

Vielen Dank
VG und einen schönen Advent
Christian


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 18:10
Beitrag #2
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
Ist die Anwendung so zeitkritisch, dass die digitalWrite zu lange brauchen?
Warum willst Du Dir diese harte Abhängigkeit von der Hardware einhandeln?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 18:15 (Dieser Beitrag wurde zuletzt bearbeitet: 20.12.2020 18:17 von Christian_Moba-Arduino.)
Beitrag #3
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
(20.12.2020 18:10)Tommy56 schrieb:  Ist die Anwendung so zeitkritisch, dass die digitalWrite zu lange brauchen?
Warum willst Du Dir diese harte Abhängigkeit von der Hardware einhandeln?

Gruß Tommy56

Hallo Thommy,
Meine Anwendung ist nicht zeitkritisch.
Wollte mit einem Byte die Ausgänge in den jeweiligen Zustand versetzten.

"Warum willst Du Dir diese harte Abhängigkeit von der Hardware einhandeln?"
Was meinst Du damit ?
Ich möchte mit dem im Foto angehängten Programm , ganz einfach den Wert ein geben und dann soll der Atmega328, die Ausgänge schalten.



VG
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 18:31
Beitrag #4
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
Die Ausgangsregister sind hardwareabhängig. Deshalb macht man solche Sachen nicht, es sei denn, die Zeitanforderungen zwingen einen dazu.
Weil dann jeder Wechsel des Prozessors eine Neuentwicklung wird.

Probiers mal so:
Code:
void schalten(byte b) {
  digitalWrite(5, b & 1);  // Bit0
  digitalWrite(6, b & 2);  // Bit1
  digitalWrite(7, b & 4);   // Bit2
  digitalWrite(8, b & 8);  // Bit3
  digitalWrite(9, b & 16);  // Bit4
  digitalWrite(10, b & 32); // Bit5
}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 18:31
Beitrag #5
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
Zitat:
Code:
...
  digitalWrite(5, HIGH);  // Bit0
  digitalWrite(6, HIGH);  // Bit1
  digitalWrite(7, LOW);   // Bit2
  digitalWrite(8, HIGH);  // Bit3
  digitalWrite(9, HIGH);  // Bit4
  digitalWrite(10, LOW); // Bit5

// Bit6 und Bit7 werden nicht verwendet ( Wert 64 und Wert 128)
...

Hallo,

wenn ich deine Frage richtig verstanden habe,
mach es doch ganz einfach wie folgt (BitX ist das Byte, das du abbilden willst):

digitalWrite(5, bitRead(BitX, 0)); // Bit0
digitalWrite(6, bitRead(BitX, 1)); // Bit1
digitalWrite(7, bitRead(BitX, 2)); // Bit2
digitalWrite(8, bitRead(BitX, 3)); // Bit3
digitalWrite(9, bitRead(BitX, 4)); // Bit4
digitalWrite(10, bitRead(BitX, 5)); // Bit5

Das habe ich zwar nicht ausprobiert, sollte aber trotzdem funktionieren...

Mit deiner ursprünglich beabsichtigten Methode ist dein sketch nur auf ganz bestimmten Controllern mehr oder weniger zufällig lauffähig. Tommy hat das ja auch schon gesagt.

Schöne Zeit noch.
Gruß
fhpa
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 18:43
Beitrag #6
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
bitRead arbeitet mit shift und ist damit langsamer, als das direkte &.

Code:
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 18:46
Beitrag #7
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
(20.12.2020 18:31)fhpa schrieb:  
Zitat:
Code:
...
  digitalWrite(5, HIGH);  // Bit0
  digitalWrite(6, HIGH);  // Bit1
  digitalWrite(7, LOW);   // Bit2
  digitalWrite(8, HIGH);  // Bit3
  digitalWrite(9, HIGH);  // Bit4
  digitalWrite(10, LOW); // Bit5

// Bit6 und Bit7 werden nicht verwendet ( Wert 64 und Wert 128)
...

Hallo,

wenn ich deine Frage richtig verstanden habe,
mach es doch ganz einfach wie folgt (BitX ist das Byte, das du abbilden willst):

digitalWrite(5, bitRead(BitX, 0)); // Bit0
digitalWrite(6, bitRead(BitX, 1)); // Bit1
digitalWrite(7, bitRead(BitX, 2)); // Bit2
digitalWrite(8, bitRead(BitX, 3)); // Bit3
digitalWrite(9, bitRead(BitX, 4)); // Bit4
digitalWrite(10, bitRead(BitX, 5)); // Bit5

Das habe ich zwar nicht ausprobiert, sollte aber trotzdem funktionieren...

Mit deiner ursprünglich beabsichtigten Methode ist dein sketch nur auf ganz bestimmten Controllern mehr oder weniger zufällig lauffähig. Tommy hat das ja auch schon gesagt.

Schöne Zeit noch.
Gruß
fhpa

Hallo fhpa, hallo Thommy56,
es funktioniert. Dank für Eure Hilfe
VG
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.12.2020, 23:45
Beitrag #8
RE: Hilfe, Bitweises Einschalten von Digitalausgängen Portregisterübergreifend
(20.12.2020 18:15)Christian_Moba-Arduino schrieb:  ...
Meine Anwendung ist nicht zeitkritisch.
Wollte mit einem Byte die Ausgänge in den jeweiligen Zustand versetzten.
...

Im Prinzip geht das schon, nur wenn du die gepflogenheiten der Arduino IDE umgehen willst dann mußt auch deine Portbelegung an die zur Verfügung stehende Hardware anpassen...das heißt das deine 8 Ports nach außen auch alle auf PortB oder PortD angeschlossen werden müßen. Ja und beim 328P gibt es keinen frei verfügbaren 8 Bit Port....nur 6 Bit breit als PB und PC . Genaueres dann bitte dem Datenblatt entnehmen. Einen 8 Bit Wert Portübergreifend ausgeben geht nicht....sowas ging mal beim Ti9900 durch seine CRU I/O Technik.
lgbk


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollt dann liest euch bitte diese Anleitung durch.

Ich spreche fließend Schwäbisch, Deutsch das Notwendigste und für die Begriffsstutzigen erprobtes Tacheles mit direkten Hinweisen ohne Schnörkel...

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Information Hilfe ich bin ein dummy! Arduino 433mhz + servo russruss87 14 777 15.04.2021 07:49
Letzter Beitrag: hotsystems
  Hilfe benötigt bei Programmierung LED Strip WS2812B 5 Volt Lockdog79 11 575 14.04.2021 15:53
Letzter Beitrag: Tommy56
  Brauche Hilfe bei Arrays mega-hz 25 4.684 02.02.2021 16:57
Letzter Beitrag: Tommy56
  Erbitte Hilfe bei Counter für Einsteiger Gravtiy 19 1.277 25.01.2021 17:30
Letzter Beitrag: hotsystems
Question Hilfe bei Programmierung (Rainbow) AlexTimo1995 5 555 06.01.2021 17:26
Letzter Beitrag: Harry
  Benötige dringende Hilfe bei CHAR DO3GE 4 737 07.10.2020 10:41
Letzter Beitrag: Tommy56
  RGB Controller Hilfe bei der Programmierung Jumbo_27 1 661 15.08.2020 17:32
Letzter Beitrag: Tommy56
  Brauch Hilfe bei Laser Nevelierung mit Traktor Schild SiR WonG 4 1.206 26.07.2020 10:00
Letzter Beitrag: SiR WonG
  Hilfe Millis treibt mich in den Wahnsinn Nefrett 17 2.798 04.05.2020 20:53
Letzter Beitrag: Tommy56
  Betätigung d. Sensors soll Steuerung abschalten und nur über Taster einschalten Floydi 12 2.117 26.04.2020 07:47
Letzter Beitrag: MicroBahner

Gehe zu:


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