Forum: Mikrocontroller und Digitale Elektronik 5us PIN Change


von Elchi (elchimtr)


Lesenswert?

Hallo Freunde,

ich bin auf der suche nach einem Kontroller, der in der lage ist 2Pins 
nach einem BIT-Muster das ich vorgebe mit einemr Taktzeit von 5 us. Ich 
habe einige Arduino und einen ESP 32 getestet. Ich bekomme aber nicht 
weniger als 15 us.

Wenn ich einen Timmer interrupt nutze schaffe ich es nicht. Und wenn ich 
nur die MainLoop nutze schalten die PINS auch nicht schnell genug.

Wozu soll das ganze sein ? Ich möchte damit ein recht exotisches 
Protokoll nachbilden um eine Art Simulator für schnelle Tests zu bauen.

Gruß
Elchi

von Falk B. (falk)


Lesenswert?

Elchi schrieb:
> ich bin auf der suche nach einem Kontroller, der in der lage ist 2Pins
> nach einem BIT-Muster das ich vorgebe mit einemr Taktzeit von 5 us.

Das kein Satz.

> Ich
> habe einige Arduino und einen ESP 32 getestet. Ich bekomme aber nicht
> weniger als 15 us.

Mit digitalRead wird das schwierig.

> Wenn ich einen Timmer interrupt nutze schaffe ich es nicht. Und wenn ich
> nur die MainLoop nutze schalten die PINS auch nicht schnell genug.

Doch, das tun sie. Aber deine Programmierung ist suboptimal.

> Wozu soll das ganze sein ? Ich möchte damit ein recht exotisches
> Protokoll nachbilden um eine Art Simulator für schnelle Tests zu bauen.

Dann nimm einen Vergleicher in Hardware, der CD4585 ist dein Freund, der 
kann sogar 4 Bits vergleichen.

von Andi M. (andi6510) Benutzerseite


Lesenswert?

Raspberry Pi mit der pigpio library
siehe http://abyz.me.uk/rpi/pigpio/
Sehr maechtig aber nicht ganz straight forward zu benutzen.

von planlos (Gast)


Lesenswert?

Andi M. schrieb:
> Sehr maechtig aber nicht ganz straight forward zu benutzen.

Mit nem Linux oben drüber?
Niemals

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wenn der Ablauf blockierend sein darf, beschreibst du die Pin Register 
direkt ohne digitalWrite auf dem Arduino. Dann dauert ein Takt genau ein 
µC Takt. Üblicherweise 62,5ns bei 16MHz. Den Rest der Wartezeiten füllst 
du mit NOP mittels Schleife auf, welche blockiert. Dafür hättest du die 
genau Kontrolle über jeden Takt. Das wäre die einfachste Art und Weise 
ohne weitere Anforderungen. Ansonsten musst du mehr zum Protokoll 
schreiben usw.

von mm (Gast)


Lesenswert?

RP4020 pio...
Damit wurde schon DVI/HDMI per Bitbanging realisiert und das ist etwas 
schneller als die 5µs.

von A. B. (Gast)


Lesenswert?

Mit dem PSSI der STM32U5x5 mit DMA geht das problemlos auch ein 'wenig' 
schneller als gefordert, nämlich mit max. 64MHz und auch mit bis zu 16 
Pins synchron.

von Wolfgang (Gast)


Lesenswert?

Elchi schrieb:
> Ich bekomme aber nicht weniger als 15 us.

Mein Ardunio Pro Mini kommt mit 1/10 der Zeit aus - alles eine Frage der 
Programmierung.
Schon die Benutzung von einer der digitalWriteFast()-Funktionen hilft 
deutlich.

von Elchi (elchimtr)


Lesenswert?

Hallo,

erst mal sorry wegen des "tollen" Einleitungssatzes.

Und Danke für die Tipps:

Das mit dem direkten Register beschreiben habe ich getestet. Das 
schreiben ist schnell genug. Aber der Pegelwechsel am pin ist laudt dem 
Oszi nicht schnell genug.
Das Protokoll ist einfach es sind 32 bit Worte die für meinen Test Fix 
sind ca. 10 die sich immer wiederholen. Eine "1" ist PIN1 = High und 
PIN2 = Low und eine "0" andersrum.
Ich werde eure Vorschläge mal prüfen.

Gruß und Danke

von Peter D. (peda)


Lesenswert?

Elchi schrieb:
> ich bin auf der suche nach einem Kontroller, der in der lage ist 2Pins
> nach einem BIT-Muster das ich vorgebe mit einemr Taktzeit von 5 us.

Das sind auf dem AVR @16MHz 80 CPU-Zyklen lang. Das sollte sogar mit 
Interrupt-Overhead zu schaffen sein. Du mußt aber die Ports direkt 
setzen, also nicht mit digitalWrite.

Ich würde einen 5µs Timer aufsetzen und das Interruptbit in der Mainloop 
pollen. Damit sollte der Jitter minimal sein.

von Peter D. (peda)


Lesenswert?

Elchi schrieb:
> Aber der Pegelwechsel am pin ist laudt dem
> Oszi nicht schnell genug.

Dann steht der Pin vermutlich noch auf Input und Du schaltest nur den 
Pullup ein und aus.

von WF88 (Gast)


Lesenswert?

Zeige Code.

von Rüdiger B. (rbruns)


Lesenswert?

Das Problem hatte ich bei der Ansteuerung eines Tintendruckkopfes, 
einfach die C-Routine als Assembler ausgeben und dann optimieren.

von EAF (Gast)


Lesenswert?

Elchi schrieb:
> Aber der Pegelwechsel am pin ist laudt dem
> Oszi nicht schnell genug.

1µs für ein vollständiges Rechteck sind schon drin.
Ohne große Klimmzüge.
Verlangsamen soll dann wohl kein Problem sein....
1
// toggle nach muster UNO Pin 8 und 9
2
byte muster[] { 
3
                _BV(PB0)|_BV(PB1),
4
                         _BV(PB1),
5
                         _BV(PB1),
6
                _BV(PB0)|_BV(PB1),
7
                _BV(PB0)|_BV(PB1),
8
                         _BV(PB1),
9
                         _BV(PB1),
10
                _BV(PB0)|_BV(PB1),
11
                _BV(PB0)|_BV(PB1),
12
                         _BV(PB1),
13
                         _BV(PB1),
14
                _BV(PB0)|_BV(PB1),
15
                _BV(PB0)|_BV(PB1),
16
                         _BV(PB1),
17
                         _BV(PB1),
18
                _BV(PB0)|_BV(PB1),
19
              };
20
21
int main() 
22
{
23
  DDRB |= _BV(PB0)|_BV(PB1); // UBO Pin 8 und 9
24
  for(;;)for(byte m:muster) PINB = m;
25
}

von EAF (Gast)


Lesenswert?

EAF schrieb:
> UBO
UNO

von Michael U. (amiga)


Lesenswert?

Hallo,

Elchi schrieb:
> Ich
> habe einige Arduino und einen ESP 32 getestet. Ich bekomme aber nicht
> weniger als 15 us.

ein ESP32 schafft das mit seiner I2S-Hardware völlig problemlos.
Auch aus der ArduinoIDE, siehe ESP866Audio oder FastLED-Lib. usw.

Gruß aus Berlin
Michael

von WF88 (Gast)


Lesenswert?

EAF schrieb:
>
>                 _BV(PB0)|_BV(PB1),
>
lange nicht mehr gesehen, da musste ich erstmal ne Sekunde drüber 
nachdenken...

von Ove M. (Firma: ;-) gibt es auch) (hasenstall)


Lesenswert?


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.