Lysdioder - RLF

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Tomtenirc
Inlägg: 11
Blev medlem: 6 juli 2007, 11:46:42
Ort: Stockholm

Lysdioder - RLF

Inlägg av Tomtenirc »

Hej

Jag har ett problem att få ett "rinnande ljus" på 7st lysdioder med hjälp av rlf kommandot, jag får det helt enkelt inte att fungera då jag är rätt ny på detta med att programmera :oops:

Är det någon som har tips hur jag ska skriva koden?
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Tja du.... vilken uC, hur kopplat, vad har du testat...
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jorå..... om du kan upplysa oss om vilken mikroprocessor du använder, det brukar att göra ganska mycket skillnad.

Vad man gör är att ta och ladda in värdet som ska shiftas, med left shift bör det vara en 0x01 till detta projekt.

Till detta behöver du då att vänta PAUSTID, sedan köra en left shift, paustid igen osv:
1: Ladda in 0x01
2: PAUSTID
3: Shift left
4: Om värdet är över 0x7F gå till punkt 1
5: Gå till punkt 2
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> jag får det helt enkelt inte att fungera...

Och vad händer då ???

Du skulle även behöva läsa :
http://www.elektronikforumet.com/forum/ ... php?t=6057
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »


1: Ladda in 0x01
2: PAUSTID
3: Shift left
4: Om värdet är över 0x7F gå till punkt 1
5: Gå till punkt 2


Bättre att som punkt 4 kontrollera ifall resultatet är noll, då kan den inte låsa sig av en tillfällig störning. Dessutom är det lättare att kolla Z-flaggan som redan finns där än att behöva göra en compare som inte är helt lätt för en nybörjare om det är ASM och PIC .

Hur är dioderna anslutna? Du måste ha begränsingsmotstånd både för att det alls skall funger och att komponenterna skall arbeta inom sina tillåtna specifikationer. Är det en PIC16 (eller 18 och man läser PORT?) och utgångarna lastas ned så läser den nolla på pinnen även om den har skrivits etta. Då blir det tvärnit direkt.

Edit: Såg inte att det var 7 dioder, trodde det var 8, då har Icecap rätt med programkoden.

Edit2: En AND med 7F och reload vid noll är både enklare att förstå och "stoppsäker" jämfört med compare för >7F.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Om vi bortser från att det bara är 7st LED's så borde det väll gå att bara ladda in b'00000001' och sen shifta åt vänster, jag hade för mig att när 1'an kommer utanför vänsterkanten kommer den in på högerkanten igen?? :S Är det helt fel??

Förövrigt tror jag det är en 16F877A han anänder och han skriver i ASM (rätta mig om jag har fel)

Mvh..
Tomtenirc
Inlägg: 11
Blev medlem: 6 juli 2007, 11:46:42
Ort: Stockholm

Inlägg av Tomtenirc »

Ursäkta för sent svar...

Hade lite väl bråttom när jag skrev min tråd, ska skriva dom bättre i fortsättningen
:)
Squiz3r, det stämmer, en 16F877X som pic.
Sen så var det 8st lysdioder, ej 7st som jag skrev först :oops:

Jag labbade lite och lyckades till slut. Det kanske finns ett bättre sätt att skriva koden så den blir mindre än just det jag skrev om någon har tips?
main
movlw b'01111111' ; 1=Släckt / 0=Tänd
movwf portc ; PortC
call wait ;Väntar ett tag

rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
call wait
call wait
rlf portc,1
goto main
end
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En *liten* förbättring skulle vara :

Kod: Markera allt

main
   movlw    b'01111111' ; 1=Släckt / 0=Tänd
   movwf    portc         ; PortC
   call wait                ;Väntar ett tag

   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   call wait2
   rlf portc,1
   goto main

wait2
   call wait
   call wait
   return

   end
eller

Kod: Markera allt

shift_led    macro
   rlf portc,1
   call wait2
   endm

main
   movlw    b'01111111' ; 1=Släckt / 0=Tänd
   movwf    portc         ; PortC
   call wait                ;Väntar ett tag

   shift_led
   shift_led
   shift_led
   shift_led
   shift_led
   shift_led
   shift_led
   shift_led
   shift_led

   goto main

wait2
   call wait
   call wait
   return

  end
eller

Kod: Markera allt

main
   movlw    b'01111111' ; 1=Släckt / 0=Tänd
   movwf    portc         ; PortC
   call wait

loop
   rlf portc,1
   btfss   status, c
   goto main
   call wait2
   goto loop

wait2
   call wait
   call wait
   return

   end
Otestat självklart, men i princip...
Tomtenirc
Inlägg: 11
Blev medlem: 6 juli 2007, 11:46:42
Ort: Stockholm

Inlägg av Tomtenirc »

Tack, jag ska prova senare idag :)
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Sodjan: Det där med macro har jag alldrig sett tidigare :) Funkar det till alla processor modeller?? (Självklart innom PIC)

Mvh..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Japp.
Både online help och MPASM manualen har bra kapitel om macro.
I just detta fall var det ju ett väldigt enkelt macro utan t.ex några parametrar...

Macros kan både göra koden väldigt lättlast och underlätta underhållet.
Man kan se det som en form av "inline subrutin", men man slipper overhead
från CALL och RETURN och att få en extra stack-nivå (om man har problem med det).

Dessutom kan man skicka parametrar vid "anropet" och med #IF... i MPASM
styra vad som läggs in från macrot från fall till fall...

EDIT:
En nackdel (om man ersätter "riktiga" subrutiner med macros) är att koden
växer eftersom hela macrot läggs in överallt. Å andra sidan får man tillgång
till "assemble-time calculations" så som jag beskrev ovan, vilket är en
fördel framför vanliga subrutiner...
Senast redigerad av sodjan 24 september 2007, 16:18:47, redigerad totalt 1 gång.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Detta måste testas när det blir lite tid över :D'

Tack!
Skriv svar