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========================================== ;======================================================================= =======
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.