ATTINY - - - kleinstmögliche Zeiten an I/O?

OP #6198508
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
Gast #6198512
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.
Gast #6198513
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.
Gast #6198516
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.
#6198519
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.
Gast #6204853
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.
Gast #6205036
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
Gast #6205270
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...
#6205288
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.
Gast #6205349
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...
Gast #6205540
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...

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