Ich verwende am ATmega48 einen PWM-Kanal (OC0A an PD6) doch sobald ich in der Software die LCD-Library von P. Fleury verwende, funktioniert dieser Pin nicht mehr richtig, d.h. das PWM-Signal ist nichtmehr vorhanden. Am Oszilloskop sieht man nur ein Rechtecksignal bei um die 0,2V, was aber von der Form her scheinbar nichts mit dem PWM-Signal zu tun hat.
Eigentlich dürfte dieser Pin PD6 nicht für das LCD verwendet werden, denn der entsprechende Abschnitt in lcd.h sieht so aus:
Ich schreib nochmal meinen Code dazu, falls der relevant ist:Code:#define LCD_PORT PORTB /**< port for the LCD lines */ #define LCD_DATA0_PORT PORTB /**< port for 4bit data bit 0 */ #define LCD_DATA1_PORT PORTB /**< port for 4bit data bit 1 */ #define LCD_DATA2_PORT PORTD /**< port for 4bit data bit 2 */ #define LCD_DATA3_PORT PORTC /**< port for 4bit data bit 3 */ #define LCD_DATA0_PIN 7 /**< pin for 4bit data bit 0 */ #define LCD_DATA1_PIN 6 /**< pin for 4bit data bit 1 */ #define LCD_DATA2_PIN 7 /**< pin for 4bit data bit 2 */ #define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */ #define LCD_RS_PORT PORTB /**< port for RS line */ #define LCD_RS_PIN 4 /**< pin for RS line */ #define LCD_RW_PORT PORTB /**< port for RW line */ #define LCD_RW_PIN 5 /**< pin for RW line */ #define LCD_E_PORT PORTB /**< port for Enable line */ #define LCD_E_PIN 0 /**< pin for Enable line */
Sobald ich aus obigem Code lcd_init(), lcd_clrscr() und lcd_puts() herausnehme, ist das PWM-Signal wieder richtig da.Code:#include <avr/io.h> #include "lcdlibrary/lcd.h" #include <util/delay.h> #define SAUGER_PORT PORTD #define SAUGER_PIN PD6 void Sauger(int Geschwindigkeit) { OCR0A = Geschwindigkeit; }; void PWM_Init (void) { DDRD |= (1<<PD6); //Fast-PWM-Mode, Clear on CompareMatch, Set on Bottom, Clk/8 TCCR0A |= (1<<COM0A1) | (1<<WGM00) | (1<<WGM01); TCCR0A &= ~(1<<COM0A0); TCCR0B |= (1<<CS01); TCCR0B &= ~((1<<WGM02) | (1<<FOC0A) | (1<<FOC0B) | (1<<CS00) | (1<<CS02)); //Compare-Wert OCR0A = 0x0; }; void Init (void) { lcd_init(LCD_DISP_ON); lcd_clrscr(); PWM_Init(); }; int main (void) { Init(); lcd_puts("Staubsaugerroboter"); Sauger(128); while (1) { } };
Kann mir da jemand auf die Sprünge helfen?







Zitieren

Lesezeichen