Sida 2 av 2

Re: PWM IC?

Postat: 26 juni 2010, 22:54:43
av SnickaarN
@sodjan Mjo jag kan hålla med om att jag vart lite ospecifik innan... Jo det går men känns lite waste att kasta bort en cog per pwm kanal

Re: PWM IC?

Postat: 26 juni 2010, 23:30:03
av victor_passe
Du kan ju ta en cog till flera kanaler eller?
Nu kan jag inte SPIN men typ såhär:

Kod: Markera allt

unsigned int PWM[4],cntr=0;
while(1)
{
 if(cntr==PWM[0]) LED_0=0;
 if(cntr==PWM[1]) LED_1=0;
 if(cntr==PWM[2]) LED_2=0;
 if(cntr==PWM[3]) LED_3=0;
 cntr++;
 if(cntr==256)
 {
  cntr=0;
  led_0=1;
  led_1=1;
  led_2=1;
  led_3=1;
 }
}
Sedan är det bara att lägga in fler kanaler efter tycke.

Re: PWM IC?

Postat: 26 juni 2010, 23:43:51
av sodjan
> Jo det går men känns lite waste att kasta bort en cog per pwm kanal

Måste du/man det ?
Jag höll på med lite PIC kod för något år sedan där jag hade ca 30 PWM
kanaler på en standard PIC18. Det vore lite konstigt om en av processorerna
(COG'arna ?) i en propeller inte skulle fixa att hantara mer än *1* PWM kanal.

Re: PWM IC?

Postat: 27 juni 2010, 00:25:10
av Tripp
Provides up to 8 channels of fast PWM output per cog, generated by the Propeller's video circuitry.
http://obex.parallax.com/objects/359/

Re: PWM IC?

Postat: 27 juni 2010, 00:38:40
av bearing
En fråga utanför ämnet till er som har erfarenhet av "the Propeller's video circuitry" - kan man få de åtta PWM-kanalerna att ha olika faslägen? alltså att varje kanals första flank är förskjuten 45° (=360/8) grader i förhållande till tidigare flank?

Eller kommer alla kanalers första flank samtidigt?

Re: PWM IC?

Postat: 28 juni 2010, 16:10:53
av BEEP
victor_passe skrev:Nu kan jag inte SPIN men typ såhär:
Skulle väl se ut så här någonting i SPIN.

DimLeds.spin

Kod: Markera allt

CON
  PINMASK_LEDS = %1111                  ' Pin 3..0
  
VAR
  long stack[32]                        ' Ändras till lämplig storlek.
  byte channel[4]
     
PUB Start           
  cognew(DimLeds,@stack)

PUB SetDim(x,value)
  channel[x] := value

PRI DimLeds | cntr
  dira |= PINMASK_LEDS  
  cntr:=0   
  repeat                                ' repeat forever and ever ...
    if(cntr=>channel[0])
      outa[0]:=0
    if(cntr=>channel[1])
      outa[1]:=0
    if(cntr=>channel[2])
      outa[2]:=0
    if(cntr=>channel[3])
      outa[3]:=0
    cntr++         
    if(cntr==256)
      cntr:=0
      outa[0]:=1
      outa[1]:=1
      outa[2]:=1
      outa[3]:=1                     



Provkörning.

DimLeds_Demo.spin

Kod: Markera allt

CON
  _clkmode = xtal1 + pll16x
  _xinfreq = 5_000_000

OBJ
  dl : "DimLeds"
  rr : "RealRandom"
  
PUB Main | ran_led,ran_1,ran_2,i
  dl.Start
  rr.Start
  repeat
    ran_led := rr.Random // 4   
    ran_1   := rr.Random // 256
    ran_2   := rr.Random // 256     
    repeat i from ran_1 to ran_2         
      dl.SetDim(ran_led,i)
      waitcnt(160_000+cnt)