Pretvorba Arduino - PBP

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Pretvorba Arduino - PBP

Post by 78L05 »

Pozdrav svima, evo ukratko mog problema.
Uz pomoc Arduina i UNO plocice uspio sam otkriti sto jedan daljinski upravljac salje i to poslati, i to funkcionira. Sada zelim napisati program u PICBasic-u za neki PIC, s tim da kod za Arduino imam i on radi.
Evo kako on izgleda:

Code: Select all

int IRledPin =  13;
int tipka = 2;

#define NumIRsignals 68
int stanje = 0;

int IRsignal[] = {
  900, 422,
  72, 40,
  68, 40,
  68, 42,
  66, 46,
  60, 50,
  60, 50,
  60, 50,
  58, 50,
  60, 50,
  58, 52,
  56, 54,
  56, 52,
  58, 164,
  54, 166,
  54, 54,
  56, 54,
  56, 54,
  54, 164,
  56, 56,
  54, 54,
  56, 54,
  56, 54,
  54, 56,
  54, 54,
  56, 166,
  54, 54,
  56, 164,
  56, 164,
  54, 166,
  54, 166,
  54, 166,
  54, 164,
  56, 0};

void setup(void) {
  pinMode(IRledPin, OUTPUT);
  pinMode(tipka, INPUT);
  digitalWrite(IRledPin, LOW);  
}

void loop() {
  stanje = digitalRead(tipka);
  delay(1000); 

  if(stanje == 1){              
    for (int i = 0; i < NumIRsignals; i+=2) {        
      pulseIR(IRsignal[i]*10);             
      delayMicroseconds(IRsignal[i+1]*10); 
    }
  }            
}


void pulseIR(long microsecs) {
  while (microsecs > 0) {
    digitalWrite(IRledPin, HIGH); 
    delayMicroseconds(10);        
    digitalWrite(IRledPin, LOW);   
    delayMicroseconds(10);        

    microsecs -= 26;
  }
}
Evo mog rjesenja u PICBASIC-u koje ne radi:

Code: Select all

define OSC 4
symbol IRLED = PORTB.3
SYMBOL TIPKA = PORTB.0
INPUT TIPKA
OUTPUT IRLED
LOW IRLED


paljenje var byte[33]
gasenje var byte[33]
i var byte 
i = 0
j var byte
j = 0

stanka var word
stanka = 0


mikrosekunde var word

PALJENJE[0] = 72 : PALJENJE[1] = 68 : PALJENJE[2] = 68 : PALJENJE[3] = 66 : PALJENJE[4] = 60 : PALJENJE[5] = 60 : PALJENJE[6] = 60 : PALJENJE[7] = 58 : PALJENJE[8] = 60 : PALJENJE[9] = 58 : PALJENJE[10] = 56 : PALJENJE[11] = 56 : PALJENJE[12] = 58 : PALJENJE[13] = 54 : PALJENJE[14] = 54 : PALJENJE[15] = 56 : PALJENJE[16] = 56 : PALJENJE[17] = 54 : PALJENJE[18] = 56 : PALJENJE[19] = 54 : PALJENJE[20] = 56 : PALJENJE[21] = 56 : PALJENJE[22] = 54 : PALJENJE[23] = 54 : PALJENJE[24] = 56 : PALJENJE[25] = 54 : PALJENJE[26] = 56 : PALJENJE[27] = 56 : PALJENJE[28] = 54 : PALJENJE[29] = 54 : PALJENJE[30] = 54 : PALJENJE[31] = 54 : PALJENJE[32] = 56
GASENJE[0] = 40 : GASENJE[1] = 40 : GASENJE[2] = 42 : GASENJE[3] = 46 : GASENJE[4] = 50 : GASENJE[5] = 50 : GASENJE[6] = 50 : GASENJE[7] = 50 : GASENJE[8] = 50 : GASENJE[9] = 52 : GASENJE[10] = 54 : GASENJE[11] = 52 : GASENJE[12] = 164 : GASENJE[13] = 166 : GASENJE[14] = 54 : GASENJE[15] = 54 : GASENJE[16] = 54 : GASENJE[17] = 164 : GASENJE[18] = 56 : GASENJE[19] = 54 : GASENJE[20] = 54 : GASENJE[21] = 54 : GASENJE[22] = 56 : GASENJE[23] = 54 : GASENJE[24] = 166 : GASENJE[25] = 54 : GASENJE[26] = 164 : GASENJE[27] = 164 : GASENJE[28] = 166 : GASENJE[29] = 166 : GASENJE[30] = 166 : GASENJE[31] = 164 : GASENJE[32] = 0

pause 1000

cekaj:
if tipka = 0 then
pause 300
goto main
endif
goto cekaj

main:
mikrosekunde = paljenje[i] * 10

while (mikrosekunde > 0 or mikrosekunde <> 0)
high IRLED
pauseus 10
low IRLED
PAUSEUS 10
mikrosekunde = mikrosekunde - 26
wend

stanka = gasenje[i]
for j = 1 to stanka
pauseus 10
next j


i = i + 1

if i = 33 then
i = 0
goto cekaj
else
goto main
endif

end
Stvar je u tome da kada pustim taster i kad od posalje svoje dioda jos ostane upaljena (napon na PORTB.3 bude oko 0.3V prema masi) i na kameri se vidi da dioda svjetli, sto mi nikako nije jasno jer je LOW IRLED stavljeno na kraj.
Ne vjeruj u čuda - računaj na njih!
Post Reply