www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 2.PWM Problem


Autor: Sebastian F. (snake080)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten morgen,
ich versuche auf einem AtMega8 2 PWM zum laufen zu bekommen. Die erste 
funktioniert einwandfrei. Bei dem 2. Kanal klappt das irgendwie nicht. 
Alle möglichen Varianten und suchen waren bisher Erfolglos. Vielleicht 
kann mir jemand den Fehler sagen.
Es soll für den 2. Kanal einfach ein NTC ausgelesen und der Wert in das 
Register geschrieben werden. Ich lasse mir den Wert auf nem Display 
anzeigen. Das passt auch. Nur wird der Wert nicht vernünftig übergeben. 
Wenn allerdings in "luftaus" oder "luftvoll" gesprungen wird passt es... 
nur eben die Regelung nicht...

Initialisierung:
pwmset1:
ldi      temp1, 0b10000010
out      TCCR1A, temp1
ldi      temp1, 0b00011001
out      TCCR1B, temp1
;
ldi      temp1, 0x00
out      ICR1H, temp1
ldi      temp1, 0xff
out      ICR1L, temp1
;
ldi      temp1, 0x00
out      OCR1AH, temp1
ldi      temp1, 0x30
out      OCR1AL, temp1

pwmset2:
ldi      temp1, 0b01101001
out      TCCR2, temp1
;
ldi      temp1, 0xfe
out      OCR2, temp1
--------------------------------
luft:
sbi PORTC,4
ldi temp1, 0b11100101
out ADMUX, temp1
sbi ADCSRA, ADSC
  luft1:
  sbis ADCSRA, ADIF
  rjmp luft1
  in ZH, ADCH
  mov temp1, ZH
  mov temp2, temp1
  subi temp1, 0xa0
  brcc luftaus
  clz
  clc
  mov temp1, temp2
  subi temp1, 0x46
  brcs luftvoll
  mov temp2,temp1
  add temp1, temp2
  add temp1, temp2
  com temp1
  mov temp2, temp1
rcall lcd_clear
rcall lcd_number
  mov temp1, temp2
  out OCR2, temp1
  clc
  ret

    luftaus:
    ldi temp1, 0x01
    out OCR2, temp1
    clc
    ret

    luftvoll:
    cbi PORTC,4
    ldi temp1, 0xfe
    out OCR2, temp1
    clc
    ret

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was berechnest du hier?
  mov temp2,temp1   ; <=== Fischig! temp2 = adcwert - 0x46
                    ; erwarte mov temp1,temp2
  add temp1, temp2  ; temp1 += (adcwert - 0x46)
  add temp1, temp2  ; temp1 += (adcwert - 0x46)
  com temp1         ; temp1 = ~temp1 ???
  mov temp2, temp1  ; temp1 retten?
; Ausgabe temp1 (was passiert mit temp2 in den lcd_...?)
  mov temp1, temp2  ; temp1 restaurieren?
  out OCR2, temp1

Autor: Sebastian F. (snake080)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
zuerst sichere ich meinen adc wert in temp2
durch die vorherige subtraktion habe ich maximal einen Wert von 70d. Mit 
nem Faktor 3 komme ich so auf 210d. Ich habe also den 8-Bit Bereich so 
ca abgedeckt. Für nen Lüfter reicht das schon. Die letzten beiden mov 
sind nur um 100% sicherzugehen, dass nirgends irgendwas verfälscht wird 
oder anderer Fehler sind. Normalerweise bräuchten die nicht rein...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Zwischenstand zusammengefasst:

Der Wert für die 2. PWM wird nach deinen Beobachtungen bzw. Ausgabe in 
lcd_... richtig berechnet (max. 210d) und er wird in OCR2 gesetzt, aber 
es wird keine PWM erzeugt.

An welchem Portpin soll die PWM erzeugt werden und ist der Portpin 
richtig initialisiert? Wie kontrollierst du, ob eine PWM erzeugt wird?

Sind diese Bitmonster bereits kontrolliert?

0b10000010 ; TCCR1A
0b00011001 ; TCCR1B
0b01101001 ; TCCR2

Autor: Sebastian F. (snake080)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die PWM wird an PB3 ausgegeben.
Das lustige ist: Jetzt funktioniert's!? Ich habe nur den OCR2 Wert nach 
schreiben ausgelesen und aufs Display ausgegeben...

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.