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
> 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.
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.
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.
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.
Also erstmal wichtig, dass es grundsätzlich geht. Danke
Die kleinst mögliche Zeitspanne beträgt beim ATtiny25 1/64MHz = 16ns.
@ Ronny Zeig mal die Schaltung, würde mich interessieren. 73 Wilhelm
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?"
c-hater schrieb: > Wie gelangt man zu solchen Auffassungen? Ist doch ganz klar: Da gibt es den Befehl delay_ms(1).
Wolfgang schrieb: > Wie kommst du in diesem Zusammenhang auf 1 ms. Vielleicht von einer SPS? Die haben doch Zykluszeiten im Millisekundenbereich.
Armin K. schrieb: > Ist doch ganz klar: Da gibt es den Befehl delay_ms(1). Aber direkt daneben steht der "Befehl" delay_us().
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.
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
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...
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.
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...
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?
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...
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.