Sida 2 av 2

Postat: 18 december 2005, 01:37:52
av sodjan
> Enda nackdelen är väll att det vart väldigt lång kod då jag tänder lysdioderna en för en.

Men varför gör du det då ?
Ett tidigare inlägg visade ju hur du kommer runt det "problemet"...

Postat: 18 december 2005, 22:26:20
av Cryptomaster
Jag får inte det att funka.
Skriver jag:

Kod: Markera allt

PORTB = 0b00111111  'Tänder portb 
Då får jag fel vid kompileringen.

Men skriver jag:

Kod: Markera allt

PORTB = 1  'Tänder portb 
Då funkar kompileringen men bara 1 diod tänds.

Postat: 18 december 2005, 22:36:16
av mullemeck
skumt, PORTB = 0b00111111 borde funka..
Skriv PORTB = 63 istället så ska alla tändas.

Postat: 18 december 2005, 23:04:33
av Cryptomaster
Skrev PORTB = 63
Tyvärr så tänds bara en (1) diod. :oops:

Postat: 18 december 2005, 23:13:00
av sodjan
> Skriver jag:
> code: PORTB = 0b00111111 'Tänder portb
> Då får jag fel vid kompileringen.

Vadå "fel" ???
Säger den ingenting mer ?
Ger den inget fel i klartext eller någon felkod ??

Postat: 18 december 2005, 23:21:24
av Cryptomaster
Den säger:
ERROR Line 29: Syntax error.

Postat: 18 december 2005, 23:47:43
av mullemeck
hehe nu kom jag på felet.. det ska va PORTB = %00111111 det är i c man använder 0b för decimala tal..

dock så borde det funkat att köra PORTB = 63

har du satt alla pinnar till utgångar?

Testa lägg till TRISB = 0 innan du börjar sätta PORTB..

Postat: 8 januari 2006, 00:29:56
av Cryptomaster
Ok, har inte kunnat svara på länge pga av mycket att göra under jul och nyår. Och så har jag varit bortrest ett tag också.
Först av allt så vill jag tacka er alla för hjälpen. Nu funkar det problemfritt.
Koden vart då så här:
Det är då morseloop: som är den omtalade.

Kod: Markera allt

define osc 4
CMCON = 7
input PORTA.0 
INPUT PORTA.1
INPUT PORTA.2



SW1     VAR     PORTA.0
SW2     VAR     PORTA.1
SW3     VAR     PORTA.2

main:
   IF SW1 THEN morseloop
   IF SW2 THEN blinkningar
   if sw3 then fade
   GoTo main
   
fade:
led VAR portb.0
steps VAR WORD
cycles CON 2

up:
For steps=0 TO 255
PWM led,steps,cycles
Next
High led

Pause 200
low led
pause 200
high led

down:
For steps=255 TO 1 STEP -1
PWM led,steps,cycles
Next
Low led

Pause 2500


GoTo fade

morseloop:
    TRISB = 0 
    Pause 1000
    PORTB = %00111111  'Tänder portb
   PAUSE 300
    PORTB = 0    'släcker hela portb 
   PAUSE 300
    PORTB = %00111111  'Tänder portb
   PAUSE 300
    PORTB = 0    'släcker hela portb 
   PAUSE 300
    PORTB = %00111111  'Tänder portb
   PAUSE 300
    PORTB = 0    'släcker hela portb 
   Pause 800
    PORTB = %00111111  'Tänder portb
   PAUSE 900
    PORTB = 0    'släcker hela portb 
   PAUSE 900
    PORTB = %00111111  'Tänder portb
   PAUSE 900
    PORTB = 0    'släcker hela portb 
   PAUSE 900
    PORTB = %00111111  'Tänder portb
   PAUSE 800
    PORTB = 0    'släcker hela portb 
   Pause 300
    PORTB = %00111111  'Tänder portb
   PAUSE 300
    PORTB = 0    'släcker hela portb 
   PAUSE 300
    PORTB = %00111111  'Tänder portb
   PAUSE 300
    PORTB = 0    'släcker hela portb 
   PAUSE 300
    PORTB = %00111111  'Tänder portb
   PAUSE 300
    PORTB = 0    'släcker hela portb 
   Pause 2000       'Väntar 2 s
   GoTo morseloop   'Loopar
   
blinkningar:
    High PORTB.0   'Tänder lysdiod 1  
    PAUSE 40      'Väntar 0,040 s 
    LOW PORTB.0    'Släcker lysdiod 1
    HIGH PORTB.5   'Tänder lysdiod 6
    PAUSE 40      'Väntar 0,040 s
    LOW PORTB.5    'Släcker lysdiod 6
    HIGH PORTB.3
    PAUSE 40
    LOW PORTB.3
    HIGH PORTB.1
    PAUSE 40
    LOW PORTB.1
    HIGH PORTB.4
    PAUSE 40
    LOW PORTB.4
    HIGH PORTB.2
    PAUSE 40
    LOW PORTB.2
    GOTO blinkningar 'Loopar stycket med blinkningar
Som ni kanske ser så har jag experimenterat lite med pwm och fått det att funka problemfritt på 1st lysdiod. Men jag skulle vilja få det som ett rinnande ljus effekt.
1.Fadea lysdiod 1 på portb.0
2.Fadea lysdiod 2 på portb.1
3.Fadea lysdiod 3 på portb.2....
osv ända upp till lysdiod nr 6.
Jag har funderat lite på om man kunde få en FOR-NEXT sats att ändra siffran i variabeln:
LED VAR PORTB.0

Tacksam för svar :)

Postat: 8 januari 2006, 01:12:15
av Jine
Heej Cryptomaster!

Inte visste jag att du hade hittat hit! (Eller va det jag som rekomenderade Elektronikforumet till dig? :lol: )


Nog om det..

Ang koden..

Det går med FOR NEXT osv.. Dock så vet jag inte hur.. jag kom aldrig så långt i min pickariär :P (Blinkande led, Blinkande led i olika hastigheter, Sen byggde ajg en robot :P)

Postat: 8 januari 2006, 01:45:40
av Cryptomaster
Hehe jo jag har vart och smygtittat lite då och då här i några år, men jag vart inte medlem förens, hmm det var några månader sedan tror jag.

Och jo det borde ju gå att få ihop det med FOR-NEXT.

Liksom få en for next sats att ändra siffran i PORTB.0 till PORTB.1 Och sedan nästa gång den körst till PORTB.2 osv...

Postat: 8 januari 2006, 13:18:53
av sodjan
Vad menar du med "siffran i PORTB.0" ?
PORTB.0 kan bara vara logiskt hög ("1") eller låg ("0"), är det det du menar ?

Eller är det själva pin-numret som skall ändras ? Alltså "0", "1", "2" o.s.v ?

Det kan vara lite svårt, eftersom pin-numret inte är variabelt i instruktionerna.

Postat: 8 januari 2006, 14:36:52
av Cryptomaster
Ok, jo det är pin numret som jag var ute efter att ändra.
Men ett alternativ är ju att skriva hela stycken med pwm och ändra PORTB.0 i varje, men det skulle alltså bli väldigt mycket kod.
En sån här för varje kod:

Kod: Markera allt

fade:
led VAR portb.0
steps VAR WORD
cycles CON 2

up:
For steps=0 TO 255
PWM led,steps,cycles
Next
High led

Pause 200
low led
pause 200
high led

down:
For steps=255 TO 1 STEP -1
PWM led,steps,cycles
Next
Low led

Pause 2500


GoTo fade