www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtTiny13 PWM LED flackert


Autor: Wisler Electronics (wisler) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe das Pollin Board und darauf befindet sich ein AtTiny13 20PU. 
Ich betreibe ihn mit internem 9,6MHz Takt.
Ich bin gerade dabei mir eine Software PWM zu schreiben. Ich habe mich 
an dem Tutorial hier auf der Seite angelehnt.

Hier ist der Code in Assembler:
.include "tn13def.inc"

.def  work    = r16
.def  pwm_count  = r17
.def  pwm_sw    = r18
.def  temp    = r19

.equ  MAX_PWM    = 127

.equ  TIM0_COMPA  = 0x006
.equ  TIM0_OVF  = 0x003

.org 0x00
rjmp    INIT
.org TIM0_OVF      ;0x003
rjmp    TIME0_OVF

;---RESET--- //0x00A
INIT:
;Init Stack
ldi      work, RAMEND
out      SPL, work

;---IO Port einstellen---
ldi      work, 1<<PB0
out      DDRB, work

sbi      PORTB, PB0

;---PWM Zähler einstellen---
ldi      pwm_count, 0x00
ldi      pwm_sw, 127      ;pwm_count > pwm_sw --> LED aus

;Init Timer0

ldi      work, 1<<TOIE0
out      TIMSK0, work

;Timer0 Normaler Modus
ldi      work, 0x00
out      TCCR0A, work

;Timer0 start kein Vorteiler
ldi      work, 1<<CS00  
out      TCCR0B, work

sei      ;Alle Interrupts ein


;---Hauptprogramm---
MAIN:
rjmp    MAIN


;-------------Interrupts--------------
TIME0_OVF:
push  temp
ldi    temp, SREG

cpi    pwm_count, MAX_PWM +1    ;pwm_count = MAX_PWM +1 dann LED an
brne  go_on
sbi    PORTB, PB0
clr    pwm_count


go_on:
cp    pwm_count, pwm_sw    ;pwm_count = pwm_sw  dann LED aus
brne  tim0_ovf_end
cbi    PORTB, PB0


tim0_ovf_end:
inc    pwm_count        ;pwm_count +=1

out    SREG, temp
pop    temp
reti

Ich weiß leider nicht genau warum meine LED am ADDON Board flackert. Ist 
die Frequenz zu niedrig? Welche Frequenz nehmt ihr den für eine PWM mit 
einer LED? Normal müssten doch 150Hz ausreichen, damit das Flackern mit 
dem Auge nicht mehr zu sehen ist oder?
Meine PWM müsste dann diese Frequenz haben, wenn ich mich nicht 
verechnet habe:

Was könnte ich den noch versuche?


Vielen Dank schon mal für eure Hilfe im vorraus!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wisler Wisler schrieb:

> Meine PWM müsste dann diese Frequenz haben, wenn ich mich nicht
> verechnet habe:
>
>

Das sieht richtig aus.

> Was könnte ich den noch versuche?

Die naheliegenste Erklärung wäre es, wenn dein Tiny gar nicht mit 9.6Mhz 
getaktet wird, sondern immer noch auf seiner Werkseinstellung von 
~1.2Mhz läuft (plus minus ein paar Zerquetschte), weil CKDIV8 noch 
eingeschaltet ist

1200000 / (256 * 127) = ~30Hz

und das würde man als Flackern sehen.

Autor: Wisler Electronics (wisler) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier sind die Einstellungen vom AVR Studio
ich habe den Prozessor mit 9,6MHz laufen.
Wenn ich noch weiter nach unten gehen also 4,8MHz dann flackern die LED 
noch mehr.

Danke schon mal für den Tipp. Könnte noch einen ATMega8 mit dem gleichen 
Code bei 8MHz testen. Könnte ich so einen Fehler ausschließen? Oder habe 
ich vielleicht einen Fehler in dem Programm?

Grüße Wisler

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wisler Wisler schrieb:
> Hier sind die Einstellungen vom AVR Studio
> ich habe den Prozessor mit 9,6MHz laufen.

Aber da die CKDIV8 noch eingeschaltet ist, werden aus den 9.6 dann ganz 
schnell 1.2 Mhz

Autor: Wisler Electronics (wisler) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,

nun funktioniert alles wie es soll. Manchmal kann halt ein kleiner Haken 
bei den Einstellungen sehr viel bewirken. Ich hatte den komplett 
übersehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.