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:

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     */
Ich schreib nochmal meinen Code dazu, falls der relevant ist:
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) 
      {     
      }
};
Sobald ich aus obigem Code lcd_init(), lcd_clrscr() und lcd_puts() herausnehme, ist das PWM-Signal wieder richtig da.
Kann mir da jemand auf die Sprünge helfen?