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...

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/