Guten Abend,
ich würde gerne einen Lüfter steuern (PWM-fähig). Auf der Platine wird
das Signal einmal direkt rausgeführt und einmal GND über einen MOSFET
geschaltet.
Ich würde das Teil gern universell halten und deshalb mit den von
PC-Lüftern geforderten 25 kHz betreiben.
Der aktuell vorgesehene Delta PFR1212DHE-SP00 akzeptiert zwar angeblich
30Hz-300kHz, aber ich möchte das Modul trotzdem universell halten.
Eigentlich wollte ich ja die Hardware-PWM nutzen, aber ich habe
vergessen, dass ich mit 9,6 MHz nur auf 37,6 kHz komme. Fail.
Deshalb muss jetzt Software-PWM herhalten (Bascom).
Der Attiny13 liest ein Poti aus und rechnet den Wert in 0-100 um. Die
0-100 sollen dann als PWM-Sollwert dienen.
Meine Frage ist eigentlich ganz einfach: Kann der Code schnell genug
ausgeführt werden? Kann ich das irgendwo simulieren und mir anschauen,
wieviel "Luft" noch ist?
Danke und schönen Abend!
Code:
1
$regfile = "ATtiny13.DAT"
2
$crystal = 9600000
3
$hwstack = 10
4
$swstack = 10
5
$framesize = 10
6
7
Poti Alias PINb.4
8
Config Poti = Input
9
10
Pwm_Ext Alias PORTB.0
11
Config Portb.0 = Output
12
13
Pwm_Int Alias PORTB.1
14
Config Portb.1 = Output
15
16
dim zaehler as Byte
17
dim pwm_soll as Byte
18
dim potiwert as Word
19
20
21
Const Timer0_Preload = 218
22
23
Config Timer0 = Timer, Prescale = 1
24
Enable Timer0
25
Timer0 = Timer0_Preload
26
On Timer0 Isr_Timer0
27
Enable Interrupts
28
29
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
Mark S. schrieb:> Wenn die HW-PWM nicht schnell genug ist, wird es wohl die BASCOM SW-PWM> erst recht nicht bringen, vermute ich mal.
Hm, die Hardware-PWM ist schnell genug, aber eben zu schnell. Ich
brauche eine Frequenz von 25 kHz. Mit der Hardware-PWM (8-bit/255
Stufen) komme ich auf ungefähr 37,6 kHz (@9,6MHz) bzw. 18,8 kHz
(@4,8MHz).
Bei der Software-PWM habe ich nur 100 Stufen statt 255. Deshalb die
Hoffnung, dass das geht.
Das mit Soft PWM ist Quatsch und sowieso zu langsam.
Stell den Takt mit dem Prescaler auf 4,8MHz und OCR0A für Fast PWM mit
Top = OCR0A auf 191, dann passt das genau mit 25KHz. Du kannst auch die
9,6Mhz lassen und Phase Correct PWM verwenden. Ich glaube, dann musst du
nur 190 einstellen. Habe ich jetzt aber nicht genau im Kopf. Phase
Correct liefert die halbe Frequenz wie Fast PWM.
Wie man das in Basic einstellt? Keine Ahnung. Aber das wirst du schon
hinkriegen.
Dyson schrieb:> Aber das wirst du schon> hinkriegen.
Schaue ich mir auf alle Fälle mal an.
Klingt auf den ersten Blick logisch/einleuchtend, ob ich das umsetzen
kann muss ich ausprobieren.
Ich habe gerade gesehen, dass die Attiny25/45/85 pinkompatibel sind,
auch einen ADC haben und netterweise mit einstellbaren 6,4MHz zufällig
fast genau die passende Frequenz mitbringen würden.
fragender schrieb:> Mark S. schrieb:>> Wenn die HW-PWM nicht schnell genug ist, wird es wohl die BASCOM SW-PWM>> erst recht nicht bringen, vermute ich mal.>> Hm, die Hardware-PWM ist schnell genug, aber eben zu schnell. Ich> brauche eine Frequenz von 25 kHz. Mit der Hardware-PWM (8-bit/255> Stufen) komme ich auf ungefähr 37,6 kHz (@9,6MHz) bzw. 18,8 kHz> (@4,8MHz).
Ja und? Das liegt doch nahe genug an 25kHz. Außerdem kann man die
Hardware-PWM mit weniger als 256 Stufen betreiben. Siehe Datenblatt,
Timer mode 7. Dann kann man den Maximalwert (TOP) in OCRA festlegen.
OCRB bleibt dann als PWM Ausgang übrig.
> Bei der Software-PWM habe ich nur 100 Stufen statt 255. Deshalb die> Hoffnung, dass das geht.
Nö. Soft-PWM ist auf recht niedrige Frequenzen von vielleicht
100-300Hz beschränkt.
Wenn sich der Poster von diesen Tiny Schwarten loesen und einen kleinen
Mega8 oder so verwenden koennte, haette er einen RC Oszillator, welche
auf irgend eine Frequenz kalibriert werden kann.
fragender schrieb:> Config Timer0 = Timer, Prescale = 1> ...> aber ich habe> vergessen, dass ich mit 9,6 MHz nur auf 37,6 kHz komme. Fail.
Nun ja, es war deine Entscheidung, das so zu wollen. Der Attiny kann
Hardware PWM bei 9,6MHz bis runter auf 36,6Hz (Hz, nicht kHz).
Oliver
Purzel H. schrieb:> Wenn sich der Poster von diesen Tiny Schwarten loesen und einen kleinen> Mega8 oder so verwenden koennte, haette er einen RC Oszillator, welche> auf irgend eine Frequenz kalibriert werden kann.
Erkläre das mal näher, warum du die 'Schwarten' nennst.
Der Mega8 ist zunächst mal gar nicht klein - im Vergleich zu einem
Tiny13/x5 o.ä.
Die haben natürlich auch einen veränderbaren RC Oszillator - Register
OSCCAL. Damit können die x5 zwischen 5MHz und 15MHz rennen und der 13
sogar bis rund 17MHz.
Dass diese Frequenzen nicht besonders temperaturstabil sind und zudem
exemplarabhängig, steht auf einem anderen Blatt. Das wird sich vom Mega8
jedoch nicht unterscheiden.
Purzel H. schrieb:> Wenn sich der Poster von diesen Tiny Schwarten loesen und einen> kleinen Mega8 oder so verwenden koennte, haette er einen RC Oszillator,> welche auf irgend eine Frequenz kalibriert werden kann.
Mega8?
Purzelchen, du bist in ein Zeitloch gefallen.
Falk B. schrieb:> Nö. Soft-PWM ist auf recht niedrige Frequenzen von vielleicht> 100-300Hz beschränkt.
Ähem, nö, jedenfalls nicht so allgemein.
Hängt nämlich voll ganz voll krass vom Systemtakt, der
gewünschten/nötigen Auflösung und der Zahl der gewünschten/benötigten
Kanäle ab, was machbar ist Alder.
Wenn du nichtmal das gecheckt hast, gute Nacht!
fragender schrieb:> Ich habe gerade gesehen, dass die Attiny25/45/85 pinkompatibel sind,
dann nimm doch denn, der hat eine PLL-Schaltung die man aktivieren kann.
Dann hat man 8-fachen Takt, der auch für die Timer gilt.
fragender schrieb:> Der aktuell vorgesehene Delta PFR1212DHE-SP00 akzeptiert zwar angeblich> 30Hz-300kHz,
Ja wenn das so ist, würde ich definitiv ein Rubidium Zeitnormal
verwenden und einen 32bit Präzisionstimer mittels FPGA bauen.
Darunter geht es definitiv nicht für die fünfhunderste universelle
Lüftersteuerung.
Gugscht schrieb:> dann nimm doch denn, der hat eine PLL-Schaltung die man aktivieren kann.> Dann hat man 8-fachen Takt, der auch für die Timer gilt.
Das ist ja nun doch ein wenig stark verkürzt/verfälscht.
Tatsächlich ist es vielmehr so, dass die Dinger zwei PLLs besitzen,
die man unterschiedlich kombinieren kann.
Eine der PLLs ist ausschließlich für Timer1 zuständig und kann auch nur
diesem einen Timer Beine machen (bis 64MHz Timertakt). Der Timer1 ist
dann asynchron zum Rest des Systems.
Die andere PLL hingegen kann den Systemtakt verdoppeln und damit auch
den Takt von allem, was daran hängt. Diese PLL funktioniert allerdings
nur, wenn die Taktquelle der interne RC-Oszillator ist. Hier ist also
bei ~16Mhz Schluss (mit ein wenig OSCCAL-Tuning geht auch noch mehr,
dass ist dann aber schnell außerhalb der Specs).
c-hater schrieb:> Eine der PLLs ist ausschließlich für Timer1 zuständig und kann auch nur> diesem einen Timer Beine machen (bis 64MHz Timertakt). Der Timer1 ist> dann asynchron zum Rest des Systems.
völlig richtig, nur für die Anwendung für den TO für die Lüftersteuerung
passt das doch. Muss halt eben den Timer1 nutzen. Sind dann 250kHz bei
8bit möglich.
fragender schrieb:> Kann ich das irgendwo simulieren
Klar im Simmulator, Da fällt dann auf das in Zeile 57 pwm_soll anstelle
zaehler stehen sollte und das ganze 172Hz bringt.
Ich würede auch das HW PWM vorziehen, jedoch ist es auch in SW möglich.
Aber das wird eng da nur 384 Takte zur Verügung stehen. Die müssen
reichen den ADC ab zu fragen und den Pinwechsel vor zu nehmen. Keine
Zeit für eine Isr, da die so schon 170 Takte braucht.