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
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.
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
Den bootloader habe ich auch gebrannt, läuft immer noch nix...
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!
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
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)
Es sind mit Sicherheit die Fuses falsch gesetzt...
Ich habe es einfach mit einem externem Quarz gelöst. Vielen Dank für alle Antworten!
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/
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.