PWM - in Asm und C

Gast #78074
Hallo,

ich beschäftige mich zur Zeit mit PWM, nur leider musste ich
feststellen,
dass die Beispiele aus dem Tutorial "AVR130: Setup and Use the AVR®
Timers"
bei mir nicht funktionieren. Dabei ergeben sich für mich zwei
Probleme.

1. Problem (Problem in Assembler):

Zwar funktioniert das untenstehende assembler Beispiel
im Debugger (PB3 geht zyklisch an und aus) nicht jedoch, wenn ichs
geflasht
habe. Ich bin mir sicher, dass ich richtig flasche, da andere Programme
auch
funktionieren. Kann mir jemand vielleicht helfen und sagen wo mein
Fehler
(vielleicht auch Denkfehler) liegt.

2. Problem (Problem in C):

Mein Compiler (AVRGCC) kann die konstante PWM2 nicht finden. Kann mir
jemand
sagen, welche include datei ich noch brauche ?

Vielen Dank schon mal im Vorraus.
christian sch.



=====Code Anfang C Problem=========

#include <avr/io.h>
#include <avr/iom8.h>

void init_Ex4(void){
  TCCR2 = (1<<COM21)+ (1<<PWM2)+(1<<CS20);

  DDRD = (1 << PD7 ) | 0x0F;
  OCR2 = 0xE0;
}

int main(void) {
   init_Ex4();
   sbi(PORTB,2); // nur um nach dem flaschen zu sehen, ob wir hier
ankommen
   return 0;
}

=====Code Ende C Problem=========


;======================================================================= 
=======
;===========================Code Anfang Assembler
Problem======================
;======================================================================= 
=======
.include "m8def.inc"        ; Atmega 8
.def temp = r16        ; Register für Zwischenspeicherung ist R16 und 
R17
.def temp2 = r17


.org 0x000          ; Programm kommt ganz an den Anfang des Speichers

  rjmp Main      ; Reset Handler
  reti        ; IRQ0 Handler
  reti        ; IRQ1 Handler
  reti        ; Timer/Counter2 Compare Match
  reti        ; Timer/Counter2 Overflow
  reti        ; Timer 1 Capture Handler
  reti        ; Timer 1 Counter1 Compare Match A
  reti        ; Timer 1 Counter1 Compare Match B
  reti        ; Timer 1 Overflow Handler
  reti        ; Timer 0 Overflow Handler
  reti        ; SPI Transfer Complete Handler
  reti        ; USART-Empfang abgeschlossen
  reti        ; UDR Empty Handler - USART-Datenregister leer
  reti        ; UART TX Complete Handler
  reti        ; USART-Sendung abgeschlossen
  reti        ; EEPROM Ready Handler
  reti        ; AD-Wandlung abgeschlossen
  reti         ; EEPROM bereit
  reti         ; Analogkomperator
  reti        ; TWI Two-Wire Interface
  reti        ; Store Program Memory Ready

;*********************************************************************** 
*******
;*                          Hauptprogramm
      *
;*********************************************************************** 
*******

MAIN:

  ldi  r16,low(RAMEND)
  out  SPL,r16
  ldi  r16,high(RAMEND)
  out   SPH,r16

  sei        ; Global Interrupts enabled
  rcall  Init


; Endlessloop
loopforever:
rjmp  loopforever





;*********************************************************************** 
*******
;*                     Initialisierung des Timers
      *
;*********************************************************************** 
*******

Init:


  ; 8 bit PWM non-inverted (Fck/510)

  ldi r16,(1<<PWM2)|(1<<COM21)|(1<<CS20)
  out TCCR2,r16  ; 8 bit PWM non-inverted (Fck/510)

  ldi r16,0xE0
  out OCR2,r16  ; Set compare value/duty cycle ratio

  ldi r16,0x8F
  out DDRD,r16  ; Set PD7/OC2 and low nibble Port D as output

  ret

;======================================================================= 
=======
;===========================Code
Ende==========================================
;======================================================================= 
=======
Gast
Hallo

Der Mega 8 hat halt kein PWM2 Bit im TCCR2 Register.

 TCCR2 = (1<<COM21)+ (1<<PWM2)+(1<<CS20);
                     ---------
Schau mal ins Datenblatt, wie das entsprechende Bit heißt.

MFG
Dieter
Gast
Vielen Dank erstmal.
Mein C Compiler übersetzt jetzt ohne Problem, jedoch zeigt mein Ozi an
PB3 nichts an :( hat da vielleicht noch jemand eine Idee ?

Mfg
chris

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.