Forum: Mikrocontroller und Digitale Elektronik PWM zu langsam


von bastel44 (Gast)


Lesenswert?

Hallo @ all.

Habe mir ein myavr lpt board zusammengelötet und steige gerade etwas in 
die Materie ein. Schon gibt es ein rätselhaftes Problem, bei dem ich 
etwas Hilfe brauche.

Das Programm wurde mit Bascom geschrieben/kompiliert und mit dem 
quickprog von myavr auf den atmega8 gebrannt. Es funktioniert, man kann 
die Pulsweite am Poti regeln. Nur ist es irgendwie viel zu langsam, eine 
angeschlossene LED blinkt mit ca. etwas über einem Hz. Das müsste doch 
etwa 1000mal schneller sein, oder? An den Fuses hab ich schon 
herumgespielt. Schneller ist es nicht geworden, dafür hab ich einen 
controller verfust :-(

Hier das sehr übersichtliche Programm:

-----------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 3686400

Dim Ad As Word

Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Prescale = 
1024

Start Adc

Do
    Ad = Getadc(0)
    Compare1a = Ad

Loop

End
------------------------------------------------------------------------ 
--

Weiß jemand Rat?


Grüsse,

Thomas.

von Bastler (Gast)


Lesenswert?

Nimm einen kleineren Prescale Wert...

von bastel44 (Gast)


Lesenswert?

Ja nee, is klar. Habe kein Oszi, deshalb der Wert 1024 zum mitzählen und 
hochrechnen :-)
Bei prescale = 1 sind es doch dann auch nur 1kHz. Das muss doch 
schneller gehen..

von Bastler (Gast)


Lesenswert?

Du willst eine LED sauber dimmen ?

dann stelle den Timer so ein :

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm 
= Clear Up , Prescale = 1
Enable Timer1
Start Timer1

Config Adc = Single , Prescaler = Auto , Reference = Avcc
 Start Adc

weitere Tipps findest Du bei :
halvar.at

von mein Name (Gast)


Lesenswert?

f_cpu = 3686300 Hz

f_cpu/(1024 * 2^10) = 3.516 Hz

ein Timerdurchlauf, gesetz dem Fall der Timer wird auf 10bit begrenzt 
dauert damit 0.284 s. Das sieht man blinken!

von bastel44 (Gast)


Lesenswert?

Vielen Dank.

Habe das Programm aus Beispielprogrammfetzen (tolles Wort) 
zusammengesetzt. Die enable/start timer Anweisungen kannte ich nicht. 
Jetzt tut es schneller :-)

Habe ein Multimeter mit Frequenzmessung gefunden, das zeigt jetzt 7,227 
kHz. Das deckt sich ja grob mit der Aussage von "mein Name". Wieso wird 
die Taktfrequenz jetzt extra noch durch 20 geteilt?
Insgesamt würde das ja bei einem 16 MHz Quarz eine max. PWM von 80 kHz 
bedeuten?
Ich betrachte das Ganze noch experimentell. Die LED Dimmung ist schön, 
könnte mir den avr aber auch als Steuerquelle für Schaltwandler 
vorstellen. Deshalb hier die "Jagd" nach der max. PWM Frequenz.


Grüsse,

Thomas.

------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 3686400

Dim Ad As Word

Config Portb = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
Enable Timer1
Start Timer1

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Do
    Ad = Getadc(0)
    Compare1a = Ad / 4

Loop

End
------------------------------------------------------------------------ 
--

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.