Ich versuche meinen Scetch zu beschleunigen für eine schnellere Portausgabe.
Vorerst geht es um die Eingänge.
Dazu frage ich mit PORTA .. PORTF die Ports Byteweise ab, bekomme aber als Rückgabewert immer eine 0.
Die Pins 8 bis 13 sollten PORTB entsprechen.
Ich Frage die PORT A bis F Byteweise ab um die Eingänge 8 und 9 zu identifizieren.
Nachdem es Hardwareseitig passt sollte doch einer davon ein Ergebnis ungleich Null liefern.
Three I/O memory address locations are allocated for each port, one each for the Data Register – PORTx, Data
Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins I/O location is read only, while the
Data Register and the Data Direction Register are read/write. However, writing a logic one to a bit in the PINx Register, will result in a toggle in the corresponding bit in the Data Register
Sorry bin neu in dieser Welt. Im Datenblatt muss man schon einiges Vorwissen haben um da klarzukommen.
Du meinst PIN lesen, dann bin ich mit PORTA mit einem Denkfehler eingestiegen.
Kannst du mir sagen wie ich vorgehen kann um die Pins 8 und 9 zu bekommen.
Wenn du auf Hardwareebene arbeiten willst, musst du wohl das Datenblatt lesen lernen.
Die einzige Alternative wäre wohl eine Library nutzen, welche den LowLevel Kram für dich erledigt.
es kann/wird Speicher sparen (wenn man es richtig macht)
ca. Faktor 20 bis 30 kann man an Geschwindigkeit raus holen
Hier mal ein Test für meine Lib:
#include <CombiePin.h>
using Out = Combie::Pin::OutputPin<8>;
int main(void)
{
Out{}.init();
for(;;) Out{}.toggle(); // 2,66Mhz mit einem UNO
}
Der Sketch verwendet 140 Bytes (0%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers, 2048 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
Die 140 Bytes Bytes sind übrigens zu größten Teil die Interrupt Tabelle
Es geht um einen Phsenanschnittdimmer, funktioniert soweit gut.
Nur die Regelung ist mir zu sprunghaft, ich arbeite mit Micros am Ausgang sehe ich die Änderung eher in Milli schritten.