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