mikrocontroller.net

Forum: Compiler & IDEs PWM - in Asm und C


Autor: Christian Sch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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==========================================
;======================================================================= 
=======

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Sch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

MFG
Dieter

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.