Enklare kodexempel på pic basic??
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
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/
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/
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:
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.
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;
}
}
Mvh
speakman
EDIT: <<-operatorn verkar finnas i Pic Basic också. Testa byt ut 2^tmp mot 1 << tmp. Precis som i C-exemplet.
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
Funkar finfint!!
Men
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...?
Men
Kod: Markera allt
For tmp = 1 to 7 step 1
portb = 1 << tmp
portb = 1 << (tmp -1)
pause 1000
next tmp
Det jag skrev borde väll funka...?
Om inte PicBasic har något "shift" kommando, så kan du ju alltid lägga in motsvarande ASM instruktion direkt i koden (helt otestat !!!) :
Eventuellt skall rrf och rlf byta plats...
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
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
Ska försöka lösa det med basic först, shift finns...
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:
funkar finfint!! Kanske kan gå o finurla ut så man kan göra två tända lysdioder som åker ihop...hmm...
Kod: Markera allt
For tmp = 1 to 7 step 1
portb = 1 << tmp
portb = 1 << (tmp -1)
pause 1000
next tmp
(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
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
Wieee!!
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
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!
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...
Kod: Markera allt
For tmp = 1 to 7 step 1
portb = (1 << tmp) + (1 << (tmp - 1))
pause 1000
next tmp
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
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
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...
Hur ser detta ut då:
Mvh
speakman
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
speakman
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
-
- Inlägg: 109
- Blev medlem: 1 november 2005, 15:31:18
- Ort: Hemma
- NSR_Martin
- Inlägg: 358
- Blev medlem: 30 november 2003, 13:37:31
- Ort: Jönköping
- Kontakt:
-
- Inlägg: 109
- Blev medlem: 1 november 2005, 15:31:18
- Ort: Hemma