Forum: Mikrocontroller und Digitale Elektronik ATtiny45 PWM mit Transistor funktioniert nicht


von Lukas D. (programmierer12)


Lesenswert?

Hallo zusammen,
ich habe ein ganz dringendes Problem. Nämlich will ich ein paar LEDs 
über einen BC547 per PWM eines ATtiny45 steuern (Basiswiderstand 1K). 
Jetzt habe ich das Problem, dass die LED nach am Transistor nur 
Flackert, am PWM-Pin direkt kommt mein gewünschtes Ergebnis an. Ich habe 
schon ein wenig gelesen, unteranderem auch, dass angeblich die 
"PWM-Frequenz" nicht passen kann.

PS. : Ich habe den ATtiny45-20PU mit dem Arduino Bootloader mit 8Mhz 
internem Quarz geflasht und dann mein Programm übertragen - Funktioniert 
ja auch so weit.

Danke schon mal im Voraus!
MFG
programmierer12

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Lukas D. schrieb:
> Jetzt habe ich das Problem, dass die LED nach am Transistor nur
> Flackert, am PWM-Pin direkt kommt mein gewünschtes Ergebnis an. Ich habe
> schon ein wenig gelesen, unteranderem auch, dass angeblich die
> "PWM-Frequenz" nicht passen kann.

Da wäre ein Schaltplan doch mal richtig hilfreich. Die meisten hier sind 
auch mit dem Programm für den Tiny nicht überfordert, so das du das uns 
ruhig zeigen kannst.

> mit dem Arduino Bootloader mit 8Mhz
> internem Quarz geflasht

Da liegt ein Irrtum vor. Der interne Oszillator hat gar keinen Quarz, 
sondern ist ein RC Oszillator.

: Bearbeitet durch User
von Lukas D. (programmierer12)


Angehängte Dateien:

Lesenswert?

Matthias S. schrieb:
> Da wäre ein Schaltplan doch mal richtig hilfreich. Die meisten hier sind
> auch mit dem Programm für den Tiny nicht überfordert, so das du das uns
> ruhig zeigen kannst.

Sorry da hab ich nicht dran gedacht. Im Anhang habe ich den Schaltplan 
nach dem ich das Ganze aufgebaut habe. Ich habe aber als Stromversorgung 
einen TS 2940 verwendet, welcher auch zwei Kondensatoren spendiert 
bekommen hat ;)

Matthias S. schrieb:
> Da liegt ein Irrtum vor. Der interne Oszillator hat gar keinen Quarz,
> sondern ist ein RC Oszillator.

Das kann schon sein, da kenn ich mich noch nicht so gut aus schäm :)

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Und du bist sicher, dass dein Tiny auf 8Mhz läuft und deine Ardunio 
Entwicklungsumgebung auch davon weiss? Nein, es reicht nicht, die Zahl 
irgendwo einzutragen. Du musst den Tiny schon mittels Fusebits auf diese 
8Mhz internen Takt umstellen. Tust du das nicht, dann läuft er wie alle 
AVR ab Werk mit ca. 1Mhz.

von Lukas D. (programmierer12)


Lesenswert?

Karl H. schrieb:
> Und du bist sicher, dass dein Tiny auf 8Mhz läuft und deine
> Ardunio
> Entwicklungsumgebung auch davon weiss? Nein, es reicht nicht, die Zahl
> irgendwo einzutragen. Du musst den Tiny schon mittels Fusebits auf diese
> 8Mhz internen Takt umstellen. Tust du das nicht, dann läuft er wie alle
> AVR ab Werk mit ca. 1Mhz.

Ja da bin ich mir sicher! Und ja ich habe den Tiny mit 8 Mhz intern mit 
dem Bootloader geflasht wodurch die Fusebits gesetzt worden sind.

von Thomas E. (thomase)


Lesenswert?

Karl H. schrieb:
> Du musst den Tiny schon mittels Fusebits auf diese
> 8Mhz internen Takt umstellen. Tust du das nicht, dann läuft er wie alle
> AVR ab Werk mit ca. 1Mhz.

Für alle, die sich an die Fuses nicht rantrauen oder in Ermangelung 
passenden Werkzeugs nicht rankommen:

1
#include <avr/power.h>
2
3
int main(void)
4
{
5
  clock_prescale_set(clock_div_1);
6
.
7
.
8
.
9
}

mfg.

von Thomas E. (thomase)


Lesenswert?

Lukas D. schrieb:
> Und ja ich habe den Tiny mit 8 Mhz intern mit
> dem Bootloader geflasht wodurch die Fusebits gesetzt worden sind.

Ein Bootloader kann keine Fuses setzen!

mfg.

von Werner (Gast)


Lesenswert?

Vielleicht hast Du den Pin als Eingang definiert
'?

Werner.

PS: Programm posten, wäre auch nicht schlecht. ODer ,wie das auch immer 
in der Arduino IDE genannt wird.. ich glaube Sketch.

von Karl H. (kbuchegg)


Lesenswert?

> Ja da bin ich mir sicher! Und ja ich habe den Tiny mit 8 Mhz intern mit
> dem Bootloader geflasht wodurch die Fusebits gesetzt worden sind.

Wie, genau, hast du das gemacht. Es ist absolut nicht üblich, dass mit 
dem Flashen eines Programmcodes (hier der Bootloader) auch die Fusebits 
neu geschrieben werden, solange der Benutzer dies nicht explizit 
anordnet.

Gut. Ein Argument für dich ist wohl, dass der Bootloader funktioniert, 
was er ganz sicher nicht tun würde, wenn der Tiny nicht mit 8Mhz laufen 
würde.

Trotzdem würde ich das kontrollieren.

Wie hast du die PWM realisiert? Mittels 'analogWrite'?

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Als erstes fehlt da aber der obligatorische Abblockkondensator zwischen 
Vcc und GND. 100nF-10µF sind prima, der muss direkt nahe am Tiny sein.
Sonst ist die Schaltung schon mal ok.

Nun ist das Programm interessant...

Lukas D. schrieb:
> Und ja ich habe den Tiny mit 8 Mhz intern mit
> dem Bootloader geflasht

Können Bootloader Fuses setzen? Da kann ich nichts zu sagen - ich setze 
die immer mit dem Programmer.
Auf Verdacht schreib mal deine Taktfrequenz auf 1 MHz um, das wäre der 
Auslieferzustand des Tiny und reicht für ein Teelicht sicher auch.

: Bearbeitet durch User
von Lukas D. (programmierer12)


Lesenswert?

Sorry, dass ich euch jetzt aufgehalten habe, aber ich hab's hinbekommen. 
Das komische ist nur, dass ich nicht weiß wie. Nachdem ich das Teil ein 
bisschen von allen Seiten angeschaut habe hat es dann endlich 
funktioniert lach

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.