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
Gast
#2357807
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 :-)
...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...???
Gast
#2357831
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.
Gast
#2357837
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.