PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit Codevision und AT90S8535



DeltaEx
14.10.2005, 22:55
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.



/************************************************** ***
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);
};
}

kater
15.10.2005, 09:34
Bekommst du Compilerfehler? Meiner kennt die directive #asm nicht.

DeltaEx
15.10.2005, 11:09
Nein ich kriege keinen Compilerfehler. Es funktioniert alles. Der ADC wird auch korrekt ausgelesen.
Nur der PWM geht nicht.

DeltaEx
20.10.2005, 23:48
Programmiert hier keiner mit Codevison?

klack
13.11.2005, 09:24
in deinem OCR1AL wird immer der gleiche Wert gesetzt durch die
sprintf Anweisung vorher.

klack

SprinterSB
13.11.2005, 09:37
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.

klack
13.11.2005, 09:54
woher soll codevision wissen
was er OCR1AL zuweisen will.

klack