Sida 1 av 7
Enklare kodexempel på pic basic??
Postat: 15 december 2004, 21:03:10
av NSR_Martin
Tjena
Har precis fått igång allt och lyckats programera en PIC16F84A, har fått en hel del hjälp, lyckats programera en blinkande lysdiod som först blinkar sakta, sen går snabbare o snabbare, för att sedan vända o gå saktare och saktare, osv.... Lyckan är total
Känner ingen lust att lägga näsan i en tjock manual just nu, då jag känner mig ganska hemma iom att jag kodade ASP mycket för några år sedan...
Så jag tänkte höra om någon har nån länk till en hemsida, eller har gjort några koder själva som ni kan tänka er att dela med er av...? Gärna med lysdioder och göra... Typ knightrider osv...?
//Martin
Postat: 15 december 2004, 21:47:23
av $tiff
Gratulerar! Jag minns hur det känns, när den första lysdioden blinkar som man sagt till den att göra!
Om du själv skrivit koden för att blinka, så är det väl bara att börja bygga ut den koden? Koppla till några fler lysdioder och se om du kan få dem att blinka i takt eller otakt med varandra!
Det är bra att börja med '84an... där finns inga register som spökar och gör det surt för nybörjare. När du snart hoppar över till '628 så kan du ju ha detta i bakhuvudet

Postat: 15 december 2004, 21:54:10
av NSR_Martin
Tackar tackar, känns som mitt liv tagit en vändning
Har lekt lite, ska fortsätta tänkte jag, men hade ändå varit kul att se lite andra koder för att få lite insperation till att göra nått annat, så att säga...
Postat: 15 december 2004, 22:20:57
av NSR_Martin
Nu har jag lyckats med en liten knightrider på 4 st lysdioder
Först försökte jag med denna kod
Kod: Markera allt
DEFINE OSC 4
tmpa VAR BYTE
tmpb VAR BYTE
loop:
For tmpa = 0 TO 3
High PORTB.tmpa
Pause 100
Low PORTB.tmpa
Next tmpa
For tmpb = 0 TO 3 STEP -1
High PORTB.tmpb
Pause 100
Low PORTB.tmpb
Next tmpb
GoTo loop
Men den fungerade inte alls, gick inte att kompilera den (stavning?)
Så då fick det bli den IQ-befriade varianten:
Kod: Markera allt
DEFINE OSC 4
loop:
High PORTB.0
Pause 100
Low PORTB.0
High PORTB.1
Pause 100
Low PORTB.1
High PORTB.2
Pause 100
Low PORTB.2
High PORTB.3
Pause 100
Low PORTB.3
High PORTB.2
Pause 100
Low PORTB.2
High PORTB.1
Pause 100
Low PORTB.1
GoTo loop
Måste väll gå att göra på nått enklare sätt, mer likt den första jag försökte med...?
EDIT: Är det svårt att göra med eftersläpning så det blir som en liten svans...? Man måste pulsa lysdioderna då va?
Postat: 15 december 2004, 22:41:44
av evert2
Jo, du måste pulsa...typ över 100Hz för att ögat inte skall uppfatt blinkningarna....har funderat själv att göra en knightrider-scanner...helst med 16 leds eller så.....går väl att åstadkomma fadningen med kondingar men det känns lite "B".
Postat: 15 december 2004, 22:43:48
av $tiff
Kod: Markera allt
DEFINE OSC 4
tmp VAR BYTE
TRISA = 0 'Alla portar utgångar
loop:
For tmp = 0 TO 3
PORTA = DCD tmp 'Sätter aktuell LED
Pause 100
PORTA = 0 'Återställer hela portA
Next tmp
For tmp = 3 TO 0 STEP -1
PORTA = DCD tmp 'Sätter aktuell LED
Pause 100
PORTA = 0 'Återställer hela portA
Next tmp
GoTo loop
End
Detdär borde funka. Du var på rätt spår!
Att få eftesläpning är väldigt invecklat som nybörjare. Precis som du sa, man måste pulsa lysdioderna snabbare än ögat. bokstavligen
Men det dröjer nog inte många veckor innan du löser det med!

Postat: 15 december 2004, 22:50:09
av NSR_Martin
Tack så mkt för hjälpen, ska genast bränner ner o se om den funkar.
Den stora skillnaden va alltså att jag skulle skivit DCD... Vad betyder det...?
Postat: 15 december 2004, 23:02:35
av Malm
DCD sätter den biten hög och resten låga (0-15)
Leta reda på en funktionsreferens för PicBasic i PDF-format, det besparar dig mycket Googlande och frågande
Edit: Här
http://www.melabs.net/downloads/pbpm304.pdf
Postat: 16 december 2004, 00:10:56
av NSR_Martin
Lekte vidare lite
Nu va försöket att styra 8 lysdioder, som va i två grupper med fyra lysdioder i varje, jag har kopplat ihop alla katoder på lysdioderna o sedan med motstånd vidare till a0 o a1...
Men det gick inte o kompilera... Hur ska jag lösa detta? Har jag tänkt helt åt skogen?
Kod: Markera allt
DEFINE OSC 4
tmp VAR BYTE
TRISB = 0 'Alla portar utgångar
PORTA.1 = 1
loop:
For tmp = 0 TO 3
PORTB = DCD tmp 'Sätter aktuell LED
Pause 100
PORTB = 0 'Återställer hela portA
Next tmp
IF PORTA.0 = 0 Then
PORTA.0 = 1
PORTA.1 = 0
GoTo loop
End IF
loop2:
For tmp = 3 TO 0 STEP -1
PORTB = DCD tmp 'Sätter aktuell LED
Pause 100
PORTB = 0 'Återställer hela portA
Next tmp
IF PORTA.1 = 0 Then
PORTA.0 = 0
PORTA.1 = 1
GoTo loop2
End IF
GoTo loop
End
EDIT
I Felmeddelandet står det att det är IF utan korrekt END IF.... GoTo komandot som ställer till det...?
Postat: 16 december 2004, 06:29:49
av jack
Har aldrig rört PicBasic men kan tänka mig att felet beror på att du skrivit "End IF" istället för "ENDIF". Kan vara värt att testa allafall.
Postat: 16 december 2004, 11:20:46
av mullemeck
Sen så får du skriva Trisa = 0 också för att göra alla pinnar på porta till utgångar, trisb = 0 gör bara pinnarna på portb till utgångar
Postat: 16 december 2004, 16:35:33
av NSR_Martin
Coolt, nu funkar det, tack för hjälpen allihop
På så vis skulle man ju kunna köra med 30 lysdioder...
Men... Då måste ju lysdioderna va kopplade till både A och B utgångar, hur löser man det...? PORT DCD = tmp eller? Så kör den från a0 till b7...? Finns det inget bättre sätt så man har mer koll på grejerna? mer likt porta.tmp = 1 tex....
Ingen som har gjort nått i picbasic o kan dela med sig av sin kod? Kul o se lite andra saker...
Postat: 16 december 2004, 16:41:24
av mullemeck
en bit ner på denna sidan finns koden till min ledmatris som du kan titta på om du vill, dock ganska dåligt kommenterad men alltid nått
http://www.geekjoan.com/forum/viewtopic ... sc&start=0
Postat: 16 december 2004, 16:47:35
av $tiff
Uhm, sånt är väl inget man spar på...
Hittade ett faktist, som jag skrev för att leka med lysdioder, precis som du. Kanske lite i överkant för dig just nu, men det ser coolt ut iaf (vill jag minnas).
Hårdvara: Två knappar, sju lysisar till portB och en '84A som hjärna. -
click me -
Postat: 16 december 2004, 18:20:29
av NSR_Martin
Lyckades skapa en ingång som det sitter en knapp på med
Normalt sett åker ljuset fram o tillbaka på 8 st lysdioder, om man trycker in knappen så åker den bara på 4 lysdioder och hälften så fort
Två frågor.
1. Nån som har nått tipps på nått mer kul men skapligt enkelt man kan göra med lysdioder (ev med en knapp...)
2. Går det att pulsa en lysdiod så den lyser hälften så starkt med F84an? väldigt krångligt? om inte, exempel...?