Отговори на тема  [ 75 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5  Следваща
мултифункционален бутон + PWM 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юни 21, 2011 9:51 pm
Мнения: 46
Местоположение: Bulgaria
Мнение 
e май ще се предавам или някой да хване да отдели малко повече време :oops:

та вкарах кода на valioman в моя мисля че е съшия не съм пропуснал нищо само къде ползвам таимер0 който от 256го намалих на 8 имайхки предвид че кода на valioman беше със 16 но на8Мхз процесор.
увеличих си броячите за бутона с 32 за да запазя действието му ама се развали и сега не бачка :( и не знам защо разликата в двата таймера е 32 с колко увеличавам и броя с който сравнявам но ..........

та ето кво стакмих. като се включи започва да трептия бялата светлина няма нищо общо с преливане нито да се сменя все е бяло ама с малки нюансчета
като направя дубал клик спира да трепти, и тва след това ми бачка само холд функцията. та май бачка бутона ама нещо забива. след единия дубал клик не бачака единичния и двойния. Та незнам да ли има нещо общо но това е . Ето и кода.


Код:
#include <htc.h>
#include <pic16f627a.h>

/***** CONFIGURATION *****/
// ext reset, no code or data protect, no brownout detect,
// no watchdog, power-up timer enabled, 4MHz int clock

#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif

// Pin assignments
#define rele 7 // releto na  RA7

#define pinR RB2
#define pinR2 RA3
#define pinB RB1
#define pinB2 RA2
#define pinG RB3
#define pinG2 RB0

/***** GLOBAL VARIABLES *****/
unsigned char sGPB; // shadow copy of GPIO
volatile unsigned char flag=0;
volatile unsigned char but=0;
volatile unsigned char mode=0;

volatile unsigned char R=0;
volatile unsigned char B=0;
volatile unsigned char G=0;
volatile unsigned char Rmax=0;
volatile unsigned char Bmax=0;
volatile unsigned char Gmax=0;
volatile unsigned char end=0;

//*** MAIN PROGRAM *****/

void setcolor(int rR,int gG,int bB)
{
GIE=0;
  pinR=pinG=pinB=pinR2=pinG2=pinB2=0;
  R=Rmax=rR;
  G=Gmax=gG;
  B=Bmax=bB;
  end=0;
   pinR=pinG=pinB=pinR2=pinG2=pinB2=1;
GIE=1;
 
}

void efekt()
{
int _r,_g,_b;
_r=_g=_b=255;
for(_r=255;_r>=1;_r--)
{
setcolor(_r,_g,_b);
__delay_ms(1);
}
for(_b=255;_b>=1;_b--)
{
setcolor(_r,_g,_b);
__delay_ms(1);
}
for(_r=1;_r>=255;_r++)
{
setcolor(_r,_g,_b);
__delay_ms(1);
}
for(_g=255;_g>=1;_g--)
{
setcolor(_r,_g,_b);
__delay_ms(1);
}
for(_b=1;_b>=255;_b++)
{
setcolor(_r,_g,_b);
__delay_ms(1);
}
for(_g=1;_g>=255;_g++)
{
setcolor(_r,_g,_b);
__delay_ms(1);
}
}

void main()
{
// Initialisation
// setup ports
PORTA = 0;
PORTB = 0; // start with LED off
sGPB = 1; // update shadow
TRISB = 0b11110000; // configure LED pin (only) as an output
TRISA = 0b00000000;
CMCON =7;
mode=3;
but=1;


OPTION_REG = 0b11010010;
//T1CON=0b00110000;
// configure Timer0:
//--0----- timer mode (T0CS = 0)
//----0--- prescaler assigned to Timer0 (PSA = 0)
//-----111 prescale = 256 (PS = 111)
// -> increment every 256 us
// configure interrupts
T0IE = 1; // enable Timer0 interrupt
ei(); // enable global interrupts
// Main loop
for (;;) {
// continually copy shadow GPB to port
RA7 = sGPB;
if (mode==1){                   
  switch(but)
  {

    case 1:// бяло
   RB1=1;
   RB2=1;
   RB3=1;
   break;

   case 2:// лилаво
   RB1=0;
   RB2=1;
    RB3=1;
   break;

   case 3:// циян
   RB1=1;
   RB2=0;
    RB3=1;
   break;
   case 4:// жълто
   RB1=1;
   RB2=1;
    RB3=0;
   break;
   case 5:// синьо
   RB1=1;
   RB2=0;
    RB3=0;
   break;
   case 6:// червено
   RB1=0;
   RB2=1;
    RB3=0;
   break;
   case 7:// зелено
   RB1=0;
   RB2=0;
    RB3=1;
   break;
    case 8:// ресет
   but=1;
   break;

  }
   }
  if (mode==2){                   
  switch(but)
  {

   case 1:// бяло
   RA2=1;
   RA3=1;
   RB0=1;
   break;

   case 2:// лилаво
   RA2=0;
   RA3=1;
    RB0=1;
   break;

   case 3:// циян
   RA2=1;
   RA3=0;
    RB0=1;
   break;
   case 4:// жълто
   RA2=1;
   RA3=1;
    RB0=0;
   break;
   case 5:// синьо
   RA2=1;
   RA3=0;
    RB0=0;
   break;
   case 6:// червено
   RA2=0;
   RA3=1;
    RB0=0;
   break;
   case 7:// зелено
   RA2=0;
   RA3=0;
    RB0=1;
   break;
    case 8:// ресет
   but=1;
   break;

  }
   }
efekt();    

} // repeat forever
}


/***** INTERRUPT SERVICE ROUTINE *****/
void interrupt isr(void)
{
static unsigned int t0_cnt=0;
static unsigned int db_cnt=0;
static unsigned int dc_cnt=0;

// handle Timer0 interrupt

T0IF = 0;
dc_cnt++;
if(dc_cnt==32*32){dc_cnt=31*32;}
if (RB5==0)
   {
   t0_cnt++;

   }
else if (RB5==1)
   {
    if(t0_cnt>=20*32)
      {
      flag=0;
      sGPB ^= 1;
      t0_cnt=dc_cnt=0;
      }   

   else if(t0_cnt>=2*32 && flag==1 && dc_cnt<10*32)
      {
      flag=0;
      t0_cnt=dc_cnt=0;
      if(mode==1){mode=2;}
      else {mode=1;}
      }
   else if(t0_cnt>=2*32&&dc_cnt>10*32)
      {
      flag=1;
      t0_cnt=dc_cnt=0;
      }
   else if (flag==1&&dc_cnt>10*32)
      {
      flag=0;
      but++;
      t0_cnt=dc_cnt=0;
      }
   else
      {

      t0_cnt=0;
      }
   }


if (mode==3)
{

if(R>0)R--;
   if(G>0) G--;
   if(B>0) B--;
    end++;
if(end==255)
{
   pinR=pinG=pinB=0;
     R=Rmax;
     G=Gmax;
     B=Bmax;
     pinR=pinG=pinB=1;
}else
{
   if(R==0){pinR=0; pinR2=0; }
   if(G==0){pinG=0; pinG2=0; }
   if(B==0){pinB=0;  pinB2=0;}
}

}
}


Чет Юни 30, 2011 11:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Абе .. много код пишеш за нищо да ти кажа

#include "D:\MyDocuments\Isdelia\LED Test\main.h"
#bit red=0x05.0
#bit green=0x05.1
#bit blue=0x05.2
#bit tmr2if=0x0c.1
#bit ccp1if=0x0c.5

char color;
int8 duty;
int8 state;

#int_TIMER2
void TIMER2_isr(void)
{
switch(color){
case 'r': red=true;
break;
case 'g': green=true;
break;
case 'b': blue=true;
break;
}
}

#int_TIMER1
void TIMER1_isr(void)
{

set_timer1(32500);
if(duty>254)
{
duty=10;
if (state<8)
{
state++;
}
else
{
state=0;
}
}
else
{
duty++;
}
}

void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_4,255,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
set_tris_a (0);
color='r';
//TODO: User Code

while(1)
{
if(get_timer2()>duty)
{
switch(color){
case 'r': red=false;
break;
case 'g': green=false;
break;
case 'b': blue=false;
break;
}
}
}
}

Това до тук ти прави PWM и ти клати 3 различни пина GP.0;1;2

Не знам дали state са ти толкова не ми се търси сега картинката ти и да броя по нея колко стейта имаш. Там в while на основния код трябва да прибавиш един switch по state и в него да решаваш кой цвят регулираш в момента, и състоянието на другите два цвята. Има още едно нещо, тъй като май алгоритъма ти трябва първо плавно да увеличава ШИМ а после да го намалява, а това само увеличава, може д анаправиш нещо съвсем просто, в зависимост от стейта ще си сложиш една битова променлива, ще я слагаш 1 като искаш да броиш нагоре и 0 като искаш надолу, т.е. увеличаваш иил намаляваш мощността. След това на двете места където се управлиява изхода, т.е. на двата switch на color ще направиш ето това :
switch(color){
case 'r': red=direction;
break;
case 'g': green=direction;
break;
case 'b': blue=direction;
break;}

switch(color){
case 'r': red=!direction;
break;
case 'g': green=!direction;
break;
case 'b': blue=!direction;
break;}

съответно за предния фронт който е в таймер 2 прекъсването и задния който е в полирането, това direction ти определя дали да намалява или да се увеличава мощността. Идеята е проста, нужно е просто да инвертираш сигнала, и точно това правиш с една променлива.


Пет Юли 01, 2011 12:27 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
#include "D:\MyDocuments\Isdelia\LED Test\main.h"
#bit red=0x05.0
#bit green=0x05.1
#bit blue=0x05.2
#bit tmr2if=0x0c.1
#bit ccp1if=0x0c.5

char color;
int8 duty;
int8 state;
int1 direction;
struct state_type {
char color;
int1 red;
int1 green;
int1 blue;
int1 direction;}states[9];



#int_TIMER2
void TIMER2_isr(void)
{
switch(color){
case 'r': red=direction;
break;
case 'g': green=direction;
break;
case 'b': blue=direction;
break;
}
}

#int_TIMER1
void TIMER1_isr(void)
{

set_timer1(32500);
if(duty>254)
{
duty=10;
if (state<8)
{
state++;
}
else
{
state=0;
}
color=states[state].color;
red=states[state].red;
green=states[state].green;
blue=states[state].blue;
direction=states[state].direction;
}
else
{
duty++;
}
}

void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_4,255,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
set_tris_a (0);
color='r';

states[0].red=1, states[0].blue=0 , states[0].blue=0 , states[0].direction=1, states[0].color='r';
states[1].red=1, states[1].blue=0 , states[1].blue=0 , states[1].direction=1, states[1].color='r';
states[2].red=1, states[2].blue=0 , states[2].blue=0 , states[2].direction=1, states[2].color='r';
states[3].red=1, states[3].blue=0 , states[3].blue=0 , states[3].direction=1, states[3].color='r';
states[4].red=1, states[4].blue=0 , states[4].blue=0 , states[4].direction=1, states[4].color='r';
states[5].red=1, states[5].blue=0 , states[5].blue=0 , states[5].direction=1, states[5].color='r';
states[6].red=1, states[6].blue=0 , states[6].blue=0 , states[6].direction=1, states[6].color='r';
states[7].red=1, states[7].blue=0 , states[7].blue=0 , states[7].direction=1, states[7].color='r';
states[8].red=1, states[8].blue=0 , states[8].blue=0 , states[8].direction=1, states[8].color='r';


//TODO: User Code

while(1)
{
if(get_timer2()>duty)
{
switch(color){
case 'r': red=!direction;
break;
case 'g': green=!direction;
break;
case 'b': blue=!direction;
break;
}
}
}
}

EDIT

това е един попрепрваен .. бях имаше една грешка и съм махнал един досаден switch мисля че е това ... сега, ако искаш да се изпълнява малко по бързо има еидн вариант за онази структура,може да я разкараш и просто да сложиш две променливи, в първата побитово ще запазваш сътстоянието на всеки светодиод и посоката, а втората ще ти е цвета, въпреки че и с една може да стане, примерно младшите 4 са ти за светодиоди и посока, а следващите два определят цвета.


Последна промяна ToHu на Пет Юли 01, 2011 12:55 am, променена общо 1 път



Пет Юли 01, 2011 12:34 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юни 21, 2011 9:51 pm
Мнения: 46
Местоположение: Bulgaria
Мнение 
мерси много сега не съм на машината де е програматора и немога да тествам направо ще направя схемка да протеус и ще почна да пробвам да пренапиша целия код наново имайки предвид това което си дал.

лошото е че много неща не са ми ясни примерно тези
#bit tmr2if=0x0c.1
#bit ccp1if=0x0c.5
но ще пробвам с таквиа сотйности да ги оставя пък дано MPLABa ми го разбере като хората. иначе да много код но за сменянето на 7 те основни цвята които се образуват си ставаше екстра искаше ми се Pwm зада е пълно като ефект ...

абе сега седам и ги почвам явно днес нема да се спи :D :D


Пет Юли 01, 2011 12:52 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
ами това е писано за CCS, в мплаба не знам дали ще стане.
Тия декларации там определят битове, примерно име на битова променлива, и адреса и. Тия двете са прекъсване от таймер2 и от CCP модула, те бяха с друга идея ама аз забравих че тия глупави процове спират прексъването от компаратора в PWM режим, искаш да не се полира, ама няма чист софтуерен вариант. Варианта е да пуснеш PWM да работи като такъв, в момента е спрян, изхода му да го свържеш физически с друг вход и от там да вземаш състоянието, ама е тъпо, губиш 2 пина, силабса в това отношение е песен.

погледни пак кода, малко го бутнах че имаше една грешка, и така мисля е малко попрегледен без досадни switch .. е време з аизпълнение може би е малко по голямо.


Пет Юли 01, 2011 12:59 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юни 21, 2011 9:51 pm
Мнения: 46
Местоположение: Bulgaria
Мнение 
мерси сега почвам и ще видя дали ще го натъкмя :) но благодаря предварително за помоща. Иначе колкото по бавно става преливането от един цвят до друг толкова по добре за мен даже аз искам да е много ама много бавно :) което незнам дали е възможно но това ще го мисля след като успея да го направя :D ако успея :D


Пет Юли 01, 2011 1:09 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Така и така до ртук го наописах, ето ти го финално би трябвало да е работещо, поне според протеус.
#include "D:\MyDocuments\Isdelia\LED Test\main.h"
#bit red=0x05.0
#bit green=0x05.1
#bit blue=0x05.2
#bit tmr2if=0x0c.1
#bit ccp1if=0x0c.5

char color;
int8 duty;
int8 state;
int1 direction;
struct state_type {
char color;
int1 red;
int1 green;
int1 blue;
int1 direction;}states[9];



#int_TIMER2
void TIMER2_isr(void)
{
switch(color){
case 'r': red=direction;
break;
case 'g': green=direction;
break;
case 'b': blue=direction;
break;
}
}

#int_TIMER1
void TIMER1_isr(void)
{

set_timer1(32500);
if(duty>254)
{
duty=10;
if (state<8)
{
state++;
}
else
{
state=0;
}
color=states[state].color;
red=states[state].red;
green=states[state].green;
blue=states[state].blue;
direction=states[state].direction;
}
else
{
duty++;
}
}

void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_4,255,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
set_tris_a (0);
state=0;
duty=10;

states[0].red=0, states[0].green=0 , states[0].blue=0 , states[0].direction=1, states[0].color='r';
states[1].red=1, states[1].green=0 , states[1].blue=0 , states[1].direction=1, states[1].color='g';
states[2].red=1, states[2].green=1 , states[2].blue=0 , states[2].direction=1, states[2].color='b';
states[3].red=1, states[3].green=1 , states[3].blue=1 , states[3].direction=0, states[3].color='r';
states[4].red=0, states[4].green=1 , states[4].blue=1 , states[4].direction=0, states[4].color='g';
states[5].red=0, states[5].green=0 , states[5].blue=0 , states[5].direction=0, states[5].color='b';
states[6].red=1, states[6].green=0 , states[6].blue=0 , states[6].direction=1, states[6].color='r';
states[7].red=1, states[7].green=0 , states[7].blue=0 , states[7].direction=1, states[7].color='r';
states[8].red=1, states[8].green=0 , states[8].blue=0 , states[8].direction=1, states[8].color='r';


//TODO: User Code

while(1)
{
if(get_timer2()>duty)
{
switch(color){
case 'r': red=!direction;
break;
case 'g': green=!direction;
break;
case 'b': blue=!direction;
break;
}
}
}
}


Прикачени файлове:
led.jpg
led.jpg [ 57.35 KiB | Прегледано 1604 пъти ]
Пет Юли 01, 2011 1:15 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
Тони знам че кода е много но нарочно го написах така за да е по лесно разбираемо за него ... както и да е важното е да се помогне на човека :)


Пет Юли 01, 2011 9:15 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юни 21, 2011 9:51 pm
Мнения: 46
Местоположение: Bulgaria
Мнение 
но човека явно е тотално безнадежден :D

та резултата е нулев. през ноща свалях CCS сенах мойте пинове на кода на ТоНи и генерирах един хех. реших че за една нощ немога да разуча CCS та се върнах на МПЛАБа да се поробвам да пооправя моя , та за сутринта бях приготвил 3-4 хехчета които да тествам но уви нищо не тръгна само премигват. На ТоНи кода диода първо мига за кратко после по за дълго и т.н. както трябва да е само че всичко това става видими светка си изгасваси и т.н. Почнах да си играя с честотата на прекъсване но ефекта никъв. дори и само пейстнато във самия код където тррябва да се чете със 4Мхз това нещо
if(mode==3)
{if(R<Rmax)RB2=1;
else{RB2=0;}
R++;
if(R==150)
{
R=0;
pwm++;
if(pwm==100)
{Rmax++;
pwm=0;}
if(Rmax==151)Rmax=1;
} }

трепти докато се изпълнява

схемата ми е същата като тази
http://picprojects.org.uk/projects/rgb/ ... GB101D.jpg
та мисля че не е хардуерен проблема.

та засега остава така само да се сменят 7те цвята :?
та ще ги поставям така , като ще гледам да ми е удобно да махам чипа , зада мога на по късен етап като разбера къде ми е шибания проблем да го ъпдейтна :)


Пет Юли 01, 2011 1:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Ами то за CCS към тов акоето съм ти дал има и .h файл но в него няма кой знае какво. Сега виждам го че работи наживо, но има нещо друго, в моя код PWM се променя от 10-255, твурде възмозно е обаче това да е твърде голям диапазон, много вероятно е при запълване под 20 диода изобщо да не ти светва. Тази схема е със пик 629, това което съм ти дал е със 615, определено м-у двата има разлика, 629 няма таймер 2 който изпозлвам и ако искаш да го правиш със него ще трябва малко да се бутне кода.


Пет Юли 01, 2011 5:13 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юни 21, 2011 9:51 pm
Мнения: 46
Местоположение: Bulgaria
Мнение 
аз го ползвам със 16f627а диодите са доста две по 50см ленти като мисля да сложа и на двете + още 7диода. но мисля че нее от голямо значение все пак контролираме само нулата.

иначе защо се получва трептене дори и при 4Мхз ?!?!

като съм почнал с въпросите имам идея за едно бъдещо проектче но за него трябва да свет не диод който е включен към пин 1 с единия край а с другия към пин 2 демек единия пин да ми играе чиста 0 трябва да са аналогови ли зада стане ?


Съб Юли 02, 2011 2:37 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Яну 30, 2006 2:48 am
Мнения: 1248
Местоположение: София
Мнение 
pachuka написа:
като съм почнал с въпросите имам идея за едно бъдещо проектче но за него трябва да свет не диод който е включен към пин 1 с единия край а с другия към пин 2 демек единия пин да ми играе чиста 0 трябва да са аналогови ли зада стане ?

Не, но трябва да си осигуриш, че няма дя надвишиш максимално допустимия ток.


Съб Юли 02, 2011 2:41 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Ами кода който съм ти дал е за F615, освен това ако не го компилираш в CCS определено нищо няма да се получи. Другото което е това което съм ти дал е само С файла, нямаш h файла, по долу ще ти го пейстна. И последно няма логика да не работи, въпреки че PWM ти е на доста висока честота, ако се не лъжа 2 или 4 khz. Вече се прибвах в БГ и доста рбаот аимам да свърша, няма време да го прегледам и да видя има ли ралзики с твоя.
Друго което е, ако са ти много светодиодите транзисторите трябва да могат да ги захранят. Тия 50 см ленти не знам как са свързани диодите, в серия и после серии в паралел и то за колко волта, виждал съм изпълнения с много светодиоди за 24 и 48 В, не знам при теб как е, и това трябва да се види.


Нед Юли 03, 2011 6:48 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юни 21, 2011 9:51 pm
Мнения: 46
Местоположение: Bulgaria
Мнение 
значи сега се прибрах и аз лошото време ми провали плановете да прекарвам кабели по градината та лампите останаха да ги мъча още една седмица . Лентите са на 12волта вързани са на 3 диода като преди всеки си има резисторче , оставял съм ги влючени да светят бяло и не са почвали да греят транзисторите незнам дали е показателно ама си ги ссветват де :).

на 4 херца е поселдния код който съм дал трябва да работи и аз така мисля но трепти, което е дразнещо. Твоя код кара лампите да мигат и то почти на херц честота демек доста бавно. предните кодовое се които се мъчих и те ми даваха или трептене или мигане и си нямам идея къде ще да е проблема единственото което ми дава такъв ефект е
while( 1 ) // Loop forever...
{
RB2 = 1; // Start pulse
for(pulse = 0; pulse < duty; pulse++); // Lengthen pulse if < duty
RB2 = 0; // End pulse
for(pulse = 0; pulse < (freq - duty); pulse++); // Continue until frequency
duty++; // Increment Duty cycle
}

Но става твърде бързо и само бавно светва казенето си е рязко

едит: и да както казах свалих CCS зада се компилира правилно кода на ТОНИ та ггрешката е някъде по чипа и кода никъде другаде :)


Нед Юли 03, 2011 10:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
pachuka написа:
значи сега се прибрах и аз лошото време ми провали плановете да прекарвам кабели по градината та лампите останаха да ги мъча още една седмица . Лентите са на 12волта вързани са на 3 диода като преди всеки си има резисторче , оставял съм ги влючени да светят бяло и не са почвали да греят транзисторите незнам дали е показателно ама си ги ссветват де :).

на 4 херца е поселдния код който съм дал трябва да работи и аз така мисля но трепти, което е дразнещо. Твоя код кара лампите да мигат и то почти на херц честота демек доста бавно. предните кодовое се които се мъчих и те ми даваха или трептене или мигане и си нямам идея къде ще да е проблема единственото което ми дава такъв ефект е
while( 1 ) // Loop forever...
{
RB2 = 1; // Start pulse
for(pulse = 0; pulse < duty; pulse++); // Lengthen pulse if < duty
RB2 = 0; // End pulse
for(pulse = 0; pulse < (freq - duty); pulse++); // Continue until frequency
duty++; // Increment Duty cycle
}

Но става твърде бързо и само бавно светва казенето си е рязко

едит: и да както казах свалих CCS зада се компилира правилно кода на ТОНИ та ггрешката е някъде по чипа и кода никъде другаде :)


#include <12F615.h>
#device adc=8

#FUSES WDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT //Code not protected from reading
#FUSES IOSC4 //INTOSC speed 4 MHz
#FUSES MCLR //Master Clear pin enabled
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOPUT //No Power Up Timer

#use delay(clock=4000000,RESTART_WDT)
#use FAST_IO(A)


това е в .h файла. относно мигането .. не е много ясно, в това което съм ти дал има периоди от около 4-5 секунди в които цветовете светят с максимална интензисвност. То да ти кажа де, не знам кали си го видял от кода, но 0,1,2 като портове са ти RGB като цветове. Тъй като използвам FASTIO трябва да се задеде и съответното състояние на TRIS регистъра.


Нед Юли 03, 2011 11:03 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 75 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни