Sida 7 av 7

Postat: 18 oktober 2005, 14:27:56
av NSR_Martin
Aha, du menar att man skriver ut ett värde i binär form på 8 lysdioder, typ?

C verkar riktigt vettigt... Du vet ingen sida med lite simpla exempelkoder för typ blinkande lysdioder o sånt för att få en känsla för ifall C kan passa mig?


EDIT!!
Din kod funkade lite halft delvis, typ!

Vad som händer är att den räknar binärt med lysdioderna på dom tre första lysdioderna, när alla har tänds så börjar den om...! Borde gå o lösa på nått liknande sett alltså
EDIT 2, fel o säga att den börjar om när alla är tända, den räknar väll neråt då... blinkar så fort bara ,hehe, ska koda om lite o testa vidare, om nån känner att dom har en lösning så är det mer än varmt välkommet!

edit 3, det står att ^ betyder "Bitwise Exclusive OR".... Vad heter upphöjt till på engelska?
kolla
http://microengineeringlabs.com/resources/pbpmanual/

Postat: 18 oktober 2005, 14:44:42
av speakman
Knepigt ang. ^-tecknet. Brukar ju alltid vara upphöjt i Basic... Där ser man!
Här är iaf en C-snutt som skulle göra motsvarande effekt:

Kod: Markera allt

void main(void)
{
   char n=0,d=1;

   for(;;) {
      n += d;

      if(n == 7 || n == 0)
         d = -d;

      PORTB = 1 << n;
   }
}
Men byt ut ^ mot motsvarande "upphöjt" i Pic Basic så bör det fungera.

Mvh
speakman

EDIT: <<-operatorn verkar finnas i Pic Basic också. Testa byt ut 2^tmp mot 1 << tmp. Precis som i C-exemplet.

Postat: 18 oktober 2005, 15:00:16
av NSR_Martin
Funkar finfint!!

Men

Kod: Markera allt

For tmp = 1 to 7 step 1
    portb = 1 << tmp
    portb = 1 << (tmp -1)
    pause 1000
next tmp
Funkar inte, jag vill alltså att det ska va ett rinnande ljus fast med två lysdioder som är tända och åker ihop, om du förstår vad jag menar...
Det jag skrev borde väll funka...?

Postat: 18 oktober 2005, 15:03:20
av sodjan
Om inte PicBasic har något "shift" kommando, så kan du ju alltid lägga in motsvarande ASM instruktion direkt i koden (helt otestat !!!) :

Kod: Markera allt

define osc 4

tmp var byte

trisb = 0
portb = 1

loop:
For tmp = 0 to 7 step 1
    asm
        rlf portb, f
    endasm
    pause 200
next tmp

For tmp = 7 to 0 step -1
    asm
        rrf portb, f
    endasm
    pause 200
next tmp

goto loop
end 
Eventuellt skall rrf och rlf byta plats...

Postat: 18 oktober 2005, 15:06:50
av NSR_Martin
Ska försöka lösa det med basic först, shift finns...

Kod: Markera allt

 For tmp = 1 to 7 step 1
    portb = 1 << tmp
    portb = 1 << (tmp -1)
    pause 1000
next tmp
Ser ni felet?
(tmp -1) <---fel!
(tmp - 1) <---så ska det va! hehe. äääälskar sånna fel...

Hursomhelst, nu blinkar det lite iaf... ljuset rinner, men "portb = 1 << (tmp -1)" släcker ju lysdioder som föregående rad i koden tände.... Hur kommer man runt det problemet? Kanske kräver en helt ny lösning...



EDIT
kom på att man kan få en "ökande stapel" genom att skriva såhär:

Kod: Markera allt

For tmp = 1 to 7 step 1
    portb = (1 << tmp) - 1
    pause 1000
next tmp
funkar finfint!! Kanske kan gå o finurla ut så man kan göra två tända lysdioder som åker ihop...hmm...

Postat: 18 oktober 2005, 15:19:33
av NSR_Martin
Wieee!!

Kod: Markera allt

For tmp = 1 to 7 step 1
    portb = (1 << tmp) + (1 << (tmp - 1))
    pause 1000
next tmp
Såja, nu funkar det fint, MEN... Tanken va ju att det tillslut skulle bli rinnande ljus med svans, det blir ju lite svårt nu... Kan ju inte ha två lysdioder tända för att sedan släcka den ena före den andra.... Kanske går förresten...

Om nån har nån idé om hur man löser det på ett bättre så sätt skulle jag bli glad!

Va ju inte så svårt

Kod: Markera allt

For tmp = 1 to 7 step 1
    portb = (1 << tmp) + (1 << (tmp - 1))
    pause 500
    portb = 1 << tmp
    pause 500
next tmp
Blev rätt effektfullt, ser ut som den sissta lysdioden hoppar fram o tar över ledningen, o då så hoppar den lysdioden som kom sisst fram o tog över ledningen, osv osv, hehe...

Loopar man detta fortare än ögat kan uppfatta borde man alltså få ett rinnande ljus med en svans på en lysdiod...






EDIT

Sådärja, nu har jag med svans!

Kod: Markera allt

For tmp = 3 to 7 step 1
    for tmp2 = 1 to 500
        portb = (1 << tmp) + (1 << (tmp - 1)) + (1 << (tmp - 2)) + (1 << (tmp - 3))
        pauseus 25
        portb = (1 << tmp) + (1 << (tmp - 1)) + (1 << (tmp - 2))
        pauseus 125
        portb = (1 << tmp) + (1 << (tmp - 1))
        pauseus 300
        portb = 1 << tmp
        pauseus 550
    next tmp2
next tmp
Känns dock som det blev lite onödigt krånglig kod för det...?
Sen startar den ju så att sissta svanslyset är på första dioden o slutar när första lysdioden når slutet.... Hela grejen åker liksom inte "runt hörnen"... Nån som har en idé? Ska fundera lite själv...

Postat: 18 oktober 2005, 15:57:12
av speakman
Hur ser detta ut då:

Kod: Markera allt

define osc 4

tmp var byte
n var byte[3]
d var byte[3]

trisb = 0
portb = 1

n(1) = 1 : d(1) = 1
n(2) = 2 : d(2) = 1
n(3) = 3 : d(3) = 1

while 1
    for tmp = 0 to 7 step 1
        n(tmp) = n(tmp) + d(tmp)

        if n(tmp) = 0 Or n(tmp) = 7 then
            d(tmp) = -d(tmp)
        end if
    next tmp

    portb = (1 << n(1)) Or (1 << n(2)) Or (1 << n(3))

    pause 1000

wend

end
Mvh
speakman

Postat: 18 oktober 2005, 17:13:05
av NSR_Martin
Har tyvärr kopplat upp lite andra grejjer jag testat nu, o nu tänkte jag ta en pause, har suttit hela dan typ.... Men jag lovar att jag ska testa din kod sen!

Postat: 18 oktober 2005, 17:18:14
av NSR_Martin
äh, testade o se vad som hände när man körde koden på en 7segments display, hehe... Men alla portar förblir höga från början...

Postat: 2 november 2005, 11:48:23
av ny börjare
det verkar som picbasic är lika som pbasic, fast mycket krångligare... :shock:

Postat: 2 november 2005, 11:51:17
av sodjan
Vad är pbasic ? Är det till programmering av PIC processorer ?
Vad menar du med krångligare ?

Postat: 2 november 2005, 13:11:59
av NSR_Martin
Pic Basic är ju riktigt lätt o lära sig, fast det verkar ju ha sina nackdelar o svagheter, jag har funderingar på o gå över till C...

Postat: 11 november 2005, 17:50:38
av ny börjare
pbasic är programeringsspråket för Basic Stamp
http://www.parallax.com/