Forum: Mikrocontroller und Digitale Elektronik Serverlüfter mit Attiny85 ansteuern geht nicht


von Patryk D. (pad_dy)


Lesenswert?

Hallo,

Ich habe mal einen Serverlüfter aus dem Schrank gezogen um sich bei den 
Temperaturen etwas zu Kühlen und den Nebeneffekt des Lüfters als 
Lötrauchabsaugung zu nutzen.

Da dieser bei einem Anschluss mit 12v volle Pulle losrast und laut ist, 
möchte ich ihn mit PWM ansteuern.

Dazu habe ich etwas gegoogelt und diesen Sketch gefunden:

http://www.circuitstoday.com/pwm-generation-and-control-using-arduino

Dann habe ich den PWM- Pin (blaues Kabel) des Lüfters an einen 
entsprechenden PWM pin des Arduinos verbunden und kann somit mittels 
eines Potis die Drehzahl des Lüfters steuern, alles kein Problem.

Da ich das ganze jedoch etwas "portabler" machen möchte, habe ich 
versucht das ganze auf einen Attiny85 zu übertragen.
Alles angeschlossen, Poti an einen Analogeingang (idf. PB4) und den 
PWM-Ausgang an PB0.
Den Sketch habe ich an die vorhandenen Anschlüssen angepasst und meinen 
Attiny mit der "Arduino as ISP"- Methode programmiert.
Wenn ich das ganze aber anschalte läuft der Lüfter nur mit einer 
konstanten Geschwindigkeit, man kann nichts dran ändern...

Habe ich irgendwas falsch angeschlossen oder eignet sich der Attiny85 
dafür nicht?

Hat jemand Ahnung was ich falsch gemacht habe?

Über eine kurze Antwort würde ich mich freuen...

VG

von kölsch (Gast)


Lesenswert?

Patryk D. schrieb:
> Habe ich irgendwas falsch angeschlossen

Natürlich.

> Hat jemand Ahnung was ich falsch gemacht habe?

und das Programm/Sketch ist auch falsch angepaßt.

von Alexander S. (alex998)


Lesenswert?

War der Tiny "nackig", sprich ohne Bootloader?

Wenn ja musste den erstmal draufbringen, gibt da auch Anleitungen für, 
zB.

https://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren
https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829

Suchbegriffe: "attiny arduino bootloader"

: Bearbeitet durch User
von Patryk D. (pad_dy)


Lesenswert?

Den bootloader habe ich auch gebrannt, läuft immer noch nix...

von DraconiX (Gast)


Lesenswert?

Patryk D. schrieb:
> meinen Attiny mit der "Arduino as ISP"- Methode programmiert.

Alexander S. schrieb:
> War der Tiny "nackig", sprich ohne Bootloader?

Da braucht es keinen Bootloader, er wird da über ISP ganz normal 
programmiert.

Hast du denn den CKDIV8 Fuse gesetzt? Von Haus aus ist die bei neuen AVR 
nicht gesetzt (programmed = 0) und sie laufen halt mit 1Mhz statt 8Mhz, 
könnte deine PWM durcheinander bringen. Der Lüfter ist aber schon ein 
PWM Lüfter mit 4Pin?! VCC, Masse, Drehzahl und PWM?!

Was sagt das Datenblatt zur Std-Pin-Function an PB4?! (Bin grad mim 
Handy unterwegs)

Und zu guter Letzt: Zeig Mal den Code!

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Wenn der Lüfter am ATtiny mit ziemlich genau 5V betrieben wird, könnte 
ich mir die geringe Drehzahl erklären.
Müsste sich aber dennoch 'runterdimmen' lassen.

MfG

von Patryk D. (pad_dy)


Lesenswert?

Also ich habe es einmal so wie in dem Link gemacht:

______________________________________________________________________

int pwm = 0; // assigns pin 0 to variable pwm
int pot = 4; // assigns analog input 4 to variable pot
int t1 = 0;   // declares variable t1
int t2 = 0;   // declares variable t2
void setup()  // setup loop
{
  pinMode(pwm, OUTPUT); // declares pin 0 as output
  pinMode(pot, INPUT);  // declares pin 4 as input
}
void loop()
{
  t2= analogRead(pot); // reads the voltage at A0 and saves in t2
  t1= 1000-t2;         // subtracts t2 from 1000 ans saves the result in 
t1
  digitalWrite(pwm, HIGH); // sets pin 12 HIGH
  delayMicroseconds(t1);   // waits for t1 uS (high time)
  digitalWrite(pwm, LOW);  // sets pin 12 LOW
  delayMicroseconds(t2);   // waits for t2 uS (low time)
}

______________________________________________________________________ 
___

Und ich habe auch selber noch einen Sketch geschrieben, mit der 
analogRead Funktion, dann diesen Wert mappen (von 0-1023 auf 0,255) und 
dann den gemappten Wert mit analogWrite ausgeben.


Und ja, ich habe den Ausgang des Attinys direkt an den PWM Pin des 
Lüfters angeschlossen.

Irgendwelche Fuses oder so habe ich nicht reingemacht, ich habe einfach 
nur meinen Sketch mit der Arduino au ISp hochgeladen (Als borad Attiny85 
mit internal 1MHz Clock)

von Patryk D. (pad_dy)


Angehängte Dateien:

Lesenswert?

Und hier noch ein Schaltplan.

von core (Gast)


Lesenswert?

Es sind mit Sicherheit die Fuses falsch gesetzt...

von Patryk D. (pad_dy)


Lesenswert?

Jagut...

Wie.....setzt man die dann richtig? :)

von Patryk D. (pad_dy)


Lesenswert?

Ich habe es einfach mit einem externem Quarz gelöst.

Vielen Dank für alle Antworten!

von Holger L. (max5v)


Lesenswert?

Eigentlich müßte man an den Fuses nichts ändern, irgendwo in den 
Untiefen der Arduino Einstellungen müßte es eine Einstellung für die 
Frequenz geben.

Um zu schauen ob die Frequnz stimmt kann man einfach mal eine Led 
blinken lassen.

Led ein
warte x Zeit
Led aus
warte x Zeit

In diesem Fall kann man einfach T1 und T2 durch feste Werte ersetzen, 
und statt dem Motor eine Led anschließen.

Der Code beschreibt eine Software PWM, der Attiny85 hat durchaus die 
Möglichkeit einer Hardware PWM, unter Suchbegriffen wie z.B. "attiny85 
pwm motor" sollte sich eine Menge finden lassen.

Wenn die Fuses doch geändert werden müssen ist diese Seite recht 
hilfreich:
http://www.engbedded.com/fusecalc/

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Patryk D. schrieb:
> dann diesen Wert mappen (von 0-1023 auf 0,255)

Nur, daß Das Mal gelesen wurde:
0...1023 -> 10bit
0...255 -> 8bit

Da muß man nix 'mappen' - da reicht ein 2-fach shift rechts (2 Befehle)
So wird aus
1
0: 0b1111111111 1023
2
1: 0b0111111111  511
3
2: 0b0011111111  255
4
5
3: 0b0001111111  127
6
4: 0b0000111111   63
7
5: 0b0000011111   31
8
6: 0b0000001111   15
9
7: 0b0000000111    7
10
8: 0b0000000011    3
11
9: 0b0000000001    1
... viel mehr muß man bei 10bit nicht 'mappen' um auf einen anderen 
vollen Bit-Bereich zu kommen.

Vll. eine Überlegung/Anpassung wert, wenn's mit der Ausführungszeit mit 
'mappen' eng wird - könnte mir vorstellen, daß dabei doch einige Takte 
sinnlos verblasen werden - zumindest, wenn volle Bit-Bereiche in andere 
volle Bit-Bereiche umgerechnet werden sollen.
(wobei man eigentlich hoffen sollte, daß der Arduino einen solchen Fall 
erkennt und das Ganze optimiert)

MfG

von Dennis K. (scarfaceno1)


Lesenswert?

Man kann auch einfach im ADC den Wert auf left Adjust im ADLAR Register 
setzen und nur das High Byte nutzen... Geht noch schneller...

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.