Enklare kodexempel på pic basic??

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Enklare kodexempel på pic basic??

Inlägg 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
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Gratulerar! Jag minns hur det känns, när den första lysdioden blinkar som man sagt till den att göra! :D

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 :wink:
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Inlägg av NSR_Martin »

Tackar tackar, känns som mitt liv tagit en vändning :lol:

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...
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Inlägg 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?
evert2
Inlägg: 2182
Blev medlem: 18 april 2004, 22:47:56
Ort: Jönköping

Inlägg 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".
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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 :roll:
Men det dröjer nog inte många veckor innan du löser det med! :D
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Inlägg 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...?
Malm
Inlägg: 215
Blev medlem: 22 februari 2004, 12:55:06
Ort: Borås

Inlägg 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
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Inlägg 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...?
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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.
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg 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
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Inlägg 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...
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg 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
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Uhm, sånt är väl inget man spar på... :humm:

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 -
Användarvisningsbild
NSR_Martin
Inlägg: 358
Blev medlem: 30 november 2003, 13:37:31
Ort: Jönköping
Kontakt:

Inlägg av NSR_Martin »

Lyckades skapa en ingång som det sitter en knapp på med :D
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 :shock:

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...?
Skriv svar