Forum: Compiler & IDEs PWM - in Asm und C


von Christian Sch (Gast)


Lesenswert?

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==========================================
;======================================================================= 
=======

von Dieter B (Gast)


Lesenswert?

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

von Christian Sch (Gast)


Lesenswert?

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

von Dieter B (Gast)


Lesenswert?

Hallo

Schalte doch mal PINB.3 auf Ausgang, dann solltest du auch was sehen,
auf dem Ozsi.

MFG
Dieter

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.