Forum: Mikrocontroller und Digitale Elektronik ATTINY - - - kleinstmögliche Zeiten an I/O?


von Ronny S. (loetwolf)


Lesenswert?

Eine Anfängerfrage im Zusammenhang mit einer Thematik in der 
Analogtechnik (Entsulfatierungspulser-Schaltung mit ATTINY) ...

Kann ein µC Atmel ATTINY13V (10PU 0535) einen I/O-Port periodenmäßig 
eine definierte Zeit von 100 µs (0,1 ms) durchschalten und in dieser 
extrem kurzen Zeitspanne damit einen Transistor ansteuern?

Ich war bisher immer der Auffassung, dass 1 ms die kleinstmögliche, 
programmierbare Zeitspanne ist. Geht es auch kürzer? Wenn ja, wie?

Die Pulserschaltung soll verändert werden, um einen höheren Strom als 90 
A zu generieren ... dafür ist es aber nötig, den Zeitintervall 
anzupassen/abzusenken.

LG

von foobar (Gast)


Lesenswert?

> Kann ein µC Atmel ATTINY13V (10PU 0535) einen I/O-Port periodenmäßig
> eine definierte Zeit von 100 µs (0,1 ms) durchschalten und in dieser
> extrem kurzen Zeitspanne damit einen Transistor ansteuern?

Ja, kann er.  Und besonders kurz ist die Zeitspanne für ihn nicht (ca 
1000 Takte) - da kann er noch einiges nebenbei erledigen.

von Wolfgang (Gast)


Lesenswert?

Ronny S. schrieb:
> Kann ein µC Atmel ATTINY13V (10PU 0535) einen I/O-Port periodenmäßig
> eine definierte Zeit von 100 µs (0,1 ms) durchschalten und in dieser
> extrem kurzen Zeitspanne damit einen Transistor ansteuern?

Kein Problem, in der Zwischenzeit kann er noch  andere Dinge erledigen. 
Ob an dem I/O-Port dann ein Transistor dran hängt, ist dem µC erstmal 
egal.

> Ich war bisher immer der Auffassung, dass 1 ms die kleinstmögliche,
> programmierbare Zeitspanne ist.

Wie kommst du in diesem Zusammenhang auf 1 ms. Die kürzeste Zeitspanne 
hängt vom µC-Takt ab - PortPin setzen und wieder löschen in Assembler 
oder per Timerprogrammierung mit der HW.

von c-hater (Gast)


Lesenswert?

Ronny S. schrieb:

> Kann ein µC Atmel ATTINY13V (10PU 0535) einen I/O-Port periodenmäßig
> eine definierte Zeit von 100 µs (0,1 ms) durchschalten und in dieser
> extrem kurzen Zeitspanne damit einen Transistor ansteuern?

Natürlich. Ein ATtiny13V kann mit 10MHz laufen. Damit ist der 
kürzestmögliche erzeugbare Puls 1/10MHz = 100ns. Und man kann natürlich 
auch jedes ganzzahlige Vielfache dieser Pulslänge erzeugen.

> Ich war bisher immer der Auffassung, dass 1 ms die kleinstmögliche,
> programmierbare Zeitspanne ist.

Wie gelangt man zu solchen Auffassungen? Egal: Das ist Bullshit.

> Geht es auch kürzer? Wenn ja, wie?

z.B.:

ldi reg,1<<Portbit
out PINx,reg
out PINX,reg

Es gibt aber auch noch einige andere Möglichkeiten.

von Axel S. (a-za-z0-9)


Lesenswert?

Ronny S. schrieb:
> Kann ein µC Atmel ATTINY13V (10PU 0535) einen I/O-Port periodenmäßig
> eine definierte Zeit von 100 µs (0,1 ms) durchschalten und in dieser
> extrem kurzen Zeitspanne damit einen Transistor ansteuern?

100µs ist nicht kurz. Das ist die Periodendauer eines 10kHz Signals, das 
ist noch mitten im Hörbereich.

Der ATTiny13 läuft standardmäßig mit einer Taktfrequenz von 1.2MHz. 
Deine 100µs entsprechen dann 1200 Taktzyklen. Wie viele Takzyklen 
glaubst du denn, braucht der ATTiny, um einen IO-Pin umzuschalten? Falls 
nötig kann der ATTiny13 auch schneller. 9.6MHz wenn man die CKDIV8 Fuse 
ausschaltet.

> Ich war bisher immer der Auffassung, dass 1 ms die kleinstmögliche,
> programmierbare Zeitspanne ist.

Wie kommst du zu dieser merkwürdigen Auffassung?

> Geht es auch kürzer? Wenn ja, wie?

Die kürzesten Impuls von gerade mal einer Taktperiode erzeugt man mit 
dem Timer im PWM-Modus. Für so langsamen Kram wie 100µs würde man sich 
vom Timer einen Interrupt erzeugen lassen und den IO-Pin in der ISR 
bedienen.

von Ronny S. (loetwolf)


Lesenswert?

Also erstmal wichtig, dass es grundsätzlich geht.

Danke

von Peter D. (peda)


Lesenswert?

Die kleinst mögliche Zeitspanne beträgt beim ATtiny25 1/64MHz = 16ns.

von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

@ Ronny

Zeig mal die Schaltung, würde mich interessieren.

73
Wilhelm

von Wolfgang (Gast)


Lesenswert?

Wilhelm S. schrieb:
> Zeig mal die Schaltung, würde mich interessieren.

Das Problem sind dabei sicher nicht die 16ns oder was auch immer, 
sondern die 90A
Beitrag "Spitzenstromimpuls von 90 A für 0,1 ms --- 6 mm² notwendig?"

von Armin K. (-donald-) Benutzerseite


Lesenswert?

c-hater schrieb:
> Wie gelangt man zu solchen Auffassungen?

Ist doch ganz klar: Da gibt es den Befehl delay_ms(1).

von Dussel (Gast)


Lesenswert?

Wolfgang schrieb:
> Wie kommst du in diesem Zusammenhang auf 1 ms.
Vielleicht von einer SPS? Die haben doch Zykluszeiten im 
Millisekundenbereich.

von Stefan F. (Gast)


Lesenswert?

Armin K. schrieb:
> Ist doch ganz klar: Da gibt es den Befehl delay_ms(1).

Aber direkt daneben steht der "Befehl" delay_us().

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Aber direkt daneben steht der "Befehl" delay_us().

Fehlt dann aber immer noch: delay_ns()...

Immerhin: bei einem AVR8 liegt selbst bei delay_µs() zwischen den damit 
machbaren Zeiten und den tatsächlichen Fähigkeiten der Hardware immer 
noch fast zwei Größenordnungen (bei Verwendung von HiSpeed-Timern, wie 
von Peda vorgeschlagen), mindestens jedoch eine.

von Arno (Gast)


Lesenswert?

Nachdem geklärt ist, dass der ATTiny einen 100µs-Puls am Portpin 
erzeugen kann, kommt dann der (zumindest für Digitaltechniker und 
Programmierer) spannendere Teil der Frage:

Ronny S. schrieb:
> und in dieser
> extrem kurzen Zeitspanne damit einen Transistor ansteuern?

Da muss man sich dann nämlich ein paar Gedanken um die 
"Schaltgeschwindigkeit" (Ein und Aus) des Transistors machen, und das 
ist insbesondere bei Typen für 90A nicht mehr ganz so trivial wie bei 
einer LED.

MfG, Arno

von c-hater (Gast)


Lesenswert?

Arno schrieb:

> Da muss man sich dann nämlich ein paar Gedanken um die
> "Schaltgeschwindigkeit" (Ein und Aus) des Transistors machen, und das
> ist insbesondere bei Typen für 90A nicht mehr ganz so trivial wie bei
> einer LED.

Das ist sicher richtig, war aber nicht das vom TO gewählte Thema des 
Threads. Er ist sich wohl sicher, dass das vorhandene Gerät (um dessen 
Umbau es geht) einen Transistor (ggf. mit Treiber) enthält, der dazu 
grundsätzlich in der Lage ist...

von Rolf M. (rmagnus)


Lesenswert?

Stefan ⛄ F. schrieb:
> Armin K. schrieb:
>> Ist doch ganz klar: Da gibt es den Befehl delay_ms(1).
>
> Aber direkt daneben steht der "Befehl" delay_us().

Abgesehen davon kann man z.B. auch delay_ms(0.1) machen.

c-hater schrieb:
> Immerhin: bei einem AVR8 liegt selbst bei delay_µs() zwischen den damit
> machbaren Zeiten und den tatsächlichen Fähigkeiten der Hardware immer
> noch fast zwei Größenordnungen (bei Verwendung von HiSpeed-Timern,

Solche hat der vom TE verwendete ATtiny13v nicht.

> wie von Peda vorgeschlagen), mindestens jedoch eine.

Die minimal mögliche Wartezeit eines delay_us() ist 1 Taktzyklus. Bei 10 
Mhz Takt führt z.B. ein delay_us(0.1) zu einem einzelnen NOP.

von c-hater (Gast)


Lesenswert?

Rolf M. schrieb:

> Die minimal mögliche Wartezeit eines delay_us() ist 1 Taktzyklus. Bei 10
> Mhz Takt führt z.B. ein delay_us(0.1) zu einem einzelnen NOP.

Na dann schreib' mal ein Beispiel für die Erzeugung eines Pulses von 
100ns @10Mhz Systemtakt und poste das resultierende *.lss...

von Rolf M. (rmagnus)


Lesenswert?

Was hat das mit den Wartezeiten von delay_us zu tun? Und warum sollte 
ich überhaupt ein Delay einbauen, wenn ich einen möglichst kurzen Puls 
machen will? Wie sieht denn dein Assemblercode mit Delay aus, der den 
von dir genannten Impuls erzeugt?

von c-hater (Gast)


Lesenswert?

Rolf M. schrieb:
> Was hat das mit den Wartezeiten von delay_us zu tun? Und warum sollte
> ich überhaupt ein Delay einbauen, wenn ich einen möglichst kurzen Puls
> machen will? Wie sieht denn dein Assemblercode mit Delay aus, der den
> von dir genannten Impuls erzeugt?

Na so:

ldi reg,1<<Portbit
out PINx,reg
WAIT_US 0
out PINX,reg

Würde natürlich zu einer Warnung vom Makro WAIT_US führen, welche lauten 
würde "Waittime <= 0".

Wenn du glaubst, nur die Verwender eines aufgedonnerten Macro-Assemblers 
namens C könnten Makros verwenden, bist du dramatisch schief 
gewickelt...

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Wenn du glaubst, nur die Verwender eines aufgedonnerten Macro-Assemblers
> namens C könnten Makros verwenden, bist du dramatisch schief
> gewickelt...

Niemand hat hier so etwas behauptet!


Warum pöbelst du schon wieder? Lass das doch bitte mal sein!

von Thomas E. (thomase)


Lesenswert?

Stefan ⛄ F. schrieb:
> Warum pöbelst du schon wieder?

Ach komm, das war doch verhältnismässig nett. Wenn der pöbelt, hört sich 
das anders an.

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.