Portprogrammierung

Hallo Zusammen,
ich hoffe ihr könnt mir helfen. Wir versuchen die ganze Zeit mit dem Arduino direkte Portbelegungen zuverarbeiten.

Als Beispiel:
Wir möchten, dass Pin 13 (PB6) und Pin 12 (PB4) einen Ausgang an Pin 11 (PB3) setzen.

Gibt es eine Möglichkeit dies in folgender Art zu tun?
PB3 = PB6 && PB4

Wir reden nicht über DigitalWrite / Read und über die Portmanipulation (PortX,PinX,DDRX), denn diese können wir anwenden und führt auch zum Ziel. Wir suchen quasi nur eine Verkürzung für eine direkte Porteinlesung und Verarbeitung.

Ältere Mikrocontroller waren wohl in der Lage - unser ArduinoUno ATmega 328p mag/kann es nicht?? ...
Oder...
Gibt es eine Bibliothek in der die Register bereits gesetzt sind und mit fertigen Bit- oder Pinbelegungen hinterlegt sind?

mfg
Dalonis

Ka, verstehe dich nicht…

Mit meiner Lib könnte das so aussehen:

#include <CombiePin.h>

using namespace Combie::Pin;

InputPin<13>  pb5;
InputPin<12>  pb4;
OutputPin<11> pb3;

void setup(void) 
{
  pb5.init();
  pb4.init();
  pb3.init();
}

void loop(void) 
{
    pb3 = pb4 && pb5;
}

Du kannst fertige Makros wie bitRead() verwenden oder diese auch selbst schreiben

if (bitRead(PINB, PB4) && bitRead(PINB, PB6))
   PORTB |= BV(PB3);

Hi

dalonis:
Wir reden nicht über ... die Portmanipulation (PortX,PinX,DDRX), denn diese können wir anwenden und führt auch zum Ziel. Wir suchen quasi nur eine Verkürzung für eine direkte Porteinlesung und Verarbeitung.

Was willst Du Verkürzen?
Viel kürzer/schneller als die Ports direkt zu manipulieren, dürfte Es nicht werden.
Halt mit dem Defizit, daß Das dann nur bei diesem einen µC klappt - beim anderen Modell brauchst Du angapasste Manipulationen - so Was, wie digitalWrite - wurde genau dafür entwickelt.
Ist dafür dann aber halt schnarch lahm, da zig Gegebenheiten abgeklopft werden müssen - soll ja immer und überall funktionieren.

MfG

also entweder Du willst es schnell und direkt (dann nimm PortX, PinX und DDRX, denn direkter geht es in C nicht) oder Du willst es "komfortabel" (dann nimm digitalRead() und digitalWrite()). Wie postmaster schon geschrieben hat: den Komfort "erkauft" man sich aber durch schlechte Performance. Jetzt könnte man natürlich auf die Idee kommen, einen Mittelweg zu suchen und selbst eine prozessorspezifische Version von digitalRead() und digitalWrite() schreiben um sowas wie von Dir beschrieben zu erreichen... das wäre dann aber weder Fisch noch Fleisch. Entweder man optimiert auf Performance (dann greift man direkt auf die Portregister zu) oder halt auf Komfort ... aber beides zusammen geht nicht. Deshalb gibt es sowas wie es Dir vorschwebt auch nicht.

Danke für eure Antworten bisher

Hallo,

Gibt es eine Möglichkeit dies in folgender Art zu tun?
PB3 = PB6 && PB4

Vielleicht kennst du den Unterschied zwischen && und & noch nicht was man wo anwendet.