-         

Ergebnis 1 bis 7 von 7

Thema: PWM mit Codevision und AT90S8535

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.12.2004
    Beiträge
    77

    PWM mit Codevision und AT90S8535

    Anzeige

    Was mach ich falsch? Ich gebe ADC und PWM auf dem LCD aus.
    Wenn ich am Poti drehe ändert sich der ADC wert aber der PWM bleibt auf 214.
    Und die LED am Port PD5 leuchtet auch nicht auf

    Die LED ist mit 1k auf GND geschaltet.

    Code:
    /*****************************************************
    Project : 
    Version : 
    Date    : 14.10.2005
    Author  : DeltaEx                         
    Company : Privat                          
    Comments: 
    
    
    Chip type           : AT90S8535
    Clock frequency     : 8,000000 MHz
    Memory model        : Small
    External SRAM size  : 0
    Data Stack size     : 128
    *****************************************************/
    
    #include <90s8535.h>  
    #include <stdio.h>
    
    // Alphanumeric LCD Module functions
    #asm
       .equ __lcd_port=0x15 ;PORTC
    #endasm
    #include <lcd.h>    
    #include <delay.h>
    
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input;
    // Start the AD conversion
    ADCSR|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSR & 0x10)==0);
    ADCSR|=0x10;
    return ADCW;
    }
    
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
       char lcd_buffer[10]; 
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTA=0x00;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=1 State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x30;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=0x00;
    TCNT0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 125,000 kHz
    // Mode: CTC top=OCR1A
    // OC1A output: Set
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=11000011;
    TCCR1B=00000101;
    TCNT1H=0x00;
    TCNT1L=0x01;
    OCR1AH=0x01;
    OCR1AL=0x33;
    OCR1BH=0x02;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    GIMSK=0x00;
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    
    // ADC initialization
    // ADC Clock frequency: 125,000 kHz
    ADCSR=0x86;
    
    // LCD module initialization
    lcd_init(16);     
    
    lcd_putsf("Hallo Welt!");
    
    while (1)
          {
            lcd_clear();
            lcd_gotoxy(0,0);          
            sprintf(lcd_buffer,"ADC=%4u",read_adc(0));
            lcd_puts(lcd_buffer);                     
            OCR1AL = lcd_buffer;
            lcd_gotoxy(0,1);
            sprintf(lcd_buffer,"PWM=%4u",OCR1AL);                                          
            lcd_puts(lcd_buffer);   
            delay_ms(100);              
          };
    }

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Bekommst du Compilerfehler? Meiner kennt die directive #asm nicht.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.12.2004
    Beiträge
    77
    Nein ich kriege keinen Compilerfehler. Es funktioniert alles. Der ADC wird auch korrekt ausgelesen.
    Nur der PWM geht nicht.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.12.2004
    Beiträge
    77
    Programmiert hier keiner mit Codevison?

  5. #5
    Neuer Benutzer
    Registriert seit
    23.02.2004
    Ort
    Aalen
    Beiträge
    3
    in deinem OCR1AL wird immer der gleiche Wert gesetzt durch die
    sprintf Anweisung vorher.

    klack

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801

    Re: PWM mit Codevision und AT90S8535

    Zitat Zitat von DeltaEx
    Was mach ich falsch?

    void main(void)
    {
    char lcd_buffer[10];

    OCR1AL = lcd_buffer;
    }
    Also wenn dein Codevision da kein Fehler bringt oder was anwarnt, dann klopp es getrost in die Tonne!

    Oben weisst du OCR1AL die Anfangsadresse von lcd_buffer zu.
    Disclaimer: none. Sue me.

  7. #7
    Neuer Benutzer
    Registriert seit
    23.02.2004
    Ort
    Aalen
    Beiträge
    3
    woher soll codevision wissen
    was er OCR1AL zuweisen will.

    klack

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •