Forum: Mikrocontroller und Digitale Elektronik ATtiny45 timer0 PWM


von Steven Z. (steven84)


Lesenswert?

Hallo MC Freunde,


ich raffs mal wieder net.

ich hab hier ein Tiny 45 und wollte timer0  als PWM ( phase correct 
mode)

initialisieren.


wenn ich das ganze dann Simuliere in Bascom wird TCNT0 nicht 
hochgezählt.
Liegt das an Bascom oder hab ich irgendwo ein Bit vergessen zu setzen???
Q-Code:


Dim Pwmvar As Byte


Config Pinb.3 = Input
Config Pinb.0 = Output




'Timer0 Initialisierung
Gtccr = &B00000000
Tccr0a = &B11000001
Tccr0b = &B00001101

Timsk = &B00000000

'======================================================================= 
===

Do

        If Pinb.3 = 1 Then          ' wenn Pinb.3 = 1 dann OCR0A mit
          Pwmvar = 254              'PWMvar laden
          Ocr0A = Pwmvar
        Else
         Pwmvar = Pwmvar - 1        ' ansonsten OCR0A -1
         Ocr0a = Pwmvar
        End If

Loop
End

Vielen Dank schon mal im vorraus

von Helfer (Gast)


Lesenswert?

Du bist zu ungeduldig.

Der große Prescaler bei Tccr0b = &Bxxxxx101 in Verbindung mit der nicht 
angegebenen Taktrate deines Attiny45 verlangt Geduld bis der erste Takt 
an TCNT ankommt :-)

von Steven Z. (steven84)


Lesenswert?

...hier mal der "Header"

$regfile = "ATtiny45.DAT"         ' specify the used micro
$crystal = 8000000                ' used crystal frequency
$hwstack = 32                     ' default use 32 for the hardware 
stack
$swstack = 10                     ' default use 10 for the SW stack
$framesize = 40




...sollte eigentlich schnell genug sein..oder...???

von Helfer (Gast)


Lesenswert?

Prescaler 1024 ist schon derb.

Die hohe Taktrate arbeitet in der Simulation sogar gegen dich.

Je Befehlszeile braucht eine gewisse Anzahl Takte. Du musst also so 
viele Befehlszeilen abarbeiten (durchklicken) bis insgesamt 8000000/1024 
Takte vergangen sind, damit TCNT0 um eins erhöht wird.

Je schneller der AVR getaktet wird, desto mehr kann er in einer 
Zeiteinheit schaffen, desto mehr Einzelschritte musst du in der 
Simulation abarbeiten.

von Helfer (Gast)


Lesenswert?

Oder auch nicht, bin schon zu müde und jetzt beim Wiederlesen kommen 
Zweifel an dem 2. Teil.

Setz einfach mal den Prescaler auf 1 (Tccr0b = &Bxxxxx001) und simuliere 
wieder. TCNT0 wird dann relativ rasch erhöht und zeigt, dass der 
Restcode funktioniert.

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.