5us PIN Change

OP #7292000
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
#7292003
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.
#7292009
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.
OP #7292031
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
#7292037
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.
Gast #7292065
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren