[ milan888 @ 14.01.2013. 16:26 ] @
Pozdrav svima dali mi neko moze pojasniti nemogu se snaci nigde kako se definise sift register 74hc595 ali dve ili tri jedan za trugim znaci da register bude 14 ili 21 bit povezan sa picom recimo 16f877 u micro codu.
[ Seme @ 14.01.2013. 17:50 ] @
Ja cu ti pomoci ali samo pod jednim uslovom, da potrosis vise od 20s na objasnjenje problema koji imas. Iz onoga sto si napisao stvarno ne mogu da zakljucim sta ti je problem. Aj lepo pojasni pa cemo ga resiti.
Pozz. M.
[ milan888 @ 14.01.2013. 19:11 ] @
Znaci hocu da uradim nesto sa dva sift registra pic 16f877 solidno poznajem ali on ima 8 bitova a meni trrema 16bitova od jednom znaci zamislio sam da povcezem tri sift registra 74hc595 ali ne znam kako definisati u programu da su oni vezani recimo na porta,a njih bi vezivao izlaz sa jednog na ulaz drugog ,onda bi dobio 18 bitova,e sad mene zanima kako se pusi kroz njih i kako se definise u programu.Nadam se da sam uspeo da objasnim,unapred hvala
Jos ovo da dodam kako sam zamislio primer
za porta
kad napisem porta=255
port a je ceo upaljen,a kako da upravljam shift registrom koji je vezan za port a
i sta treba definisati da je sift registar vezan za pic
u pbp-ovom micro codu kucam
[ ZAS011 @ 14.01.2013. 19:23 ] @
Sledeće što MORAŠ da uradiš je da pročitaš datasheet za HC595, imaš ga u prilogu, i da proučiš kako radi.
Inače u PBP imaš naredbu SHIFTOUT.
Kada sve ovo pročitaš, sve će ti biti mnogo jasnije.
Ako i dalje budeš imao problema, potrudićemo se da ti pomognemo, savetima, podrazumeva se.
[ milan888 @ 14.01.2013. 19:32 ] @
Zaso011 tu nastaje moj veliki problem slab sam sa engleskim,meni trebaju svi izvazi na sift registru da budu izlazni ako nije problem zamolio bi samo neko da mi objasni sta definisem.
a sto se izlaza tice jer ovako:

a var word
a=1024
shiftout a
jer mogu tako upravljati sa njim?
[ ZAS011 @ 14.01.2013. 19:42 ] @
Eeee, ondak i Engleski da naučiš. U poslednjih 10-ak godina, nema (l)elektronike bez tog jezika, a naše govorno područje nije interesantno ni jednom proizvođaču za pisanje datasheet-ova.

BTW, pigledaj u Help sintaksu SHIFTOUT naredbe.
[ milan888 @ 14.01.2013. 20:04 ] @
mogu li dobiti jedan primer?
[ milan888 @ 14.01.2013. 20:11 ] @
seme dali mi mozes dati primer i objasniti mi kako se sta definise

[Ovu poruku je menjao milan888 dana 14.01.2013. u 21:33 GMT+1]
[ ZAS011 @ 14.01.2013. 20:40 ] @
Sintaksa:
SHIFTOUT DataPin, ClockPin, Mode, [Var(\Bits)...]

Ovo je iz Help-a. Jasnije?
[ milan888 @ 14.01.2013. 20:53 ] @
nasao sam neku knigu io njemu moigu iskenirati ako treba nekom
znaci defionisem :
defain data porta.0
defain clock potra.1
defain latch porta.2
jesam u prqavu za ovo? e sad pomeni posto je a.0 data port kroz njega se pusta
port a.0=%1111111
JESAM UPRAVU?
[ milan888 @ 14.01.2013. 20:58 ] @
ovo neprolazi compailer na data stane:
Code:
DEFINE OSC 4
adcon1 = 7
trisc=%0000000
portc=%0000000
define data portc.0
define clock portc.1
define latch portc.2
[ Genie_1984 @ 14.01.2013. 21:08 ] @
Ukratko ovako nešto :
Code:


DEFINE OSC 4

Include "modedefs.bas"  ' Include shift modes

DataPin var     PORTC.0         ' Shift data pin 0
ClkPin  var     PORTC.1         ' Shift clock pin 1
Strobe  var     PORTC.2

ShiftVar    var     word

ADCON1 = 7
TRISC = %00000000
PORTC = %00000000

Strobe = 0 'nije obavezno jer si postavio 0 sa PORTC =...

ShiftVar = 3105

Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVar\16]
Pulsout Strobe,10
        
End



Kao što su ti rekli pogledaj u help-u naredbu SHIFTOUT (ovde prevedeno zahvaljujući g. Siniši.)
Mada je primer lepo objasnjava...

Pozdrav
[ milan888 @ 14.01.2013. 21:17 ] @
sve jasno sem ovog na kraju:

Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVar\16]
Pulsout Strobe,10
i Strobe to je broj koji ide kroz registar?

[Ovu poruku je menjao milan888 dana 14.01.2013. u 22:29 GMT+1]
[ milan888 @ 14.01.2013. 21:30 ] @
genije jer mi mozes iskomentarisati kod molim te?samo da budem siguran jesam dobro shvatio
[ Genie_1984 @ 14.01.2013. 21:37 ] @
Pa to je ono što tebi treba. Serijsko "slanje" promenljive ShiftVar preko Data i Clk pina...SHIFTOUT "šalje" bit po bit promenljive ShiftVar na svaku promenu clk...

Pulsout Strobe,10 - samo postavi PORTC.2 na logičku 1 , sačeka 10ms i vrati na 0 odnosto prosledi sadržaj regista 595-ce na izlaz

[ ZAS011 @ 14.01.2013. 22:17 ] @
[ milan888 @ 14.01.2013. 22:19 ] @
E hvala genije da to lepo radi sitra ci da probam da docrtam jos jedan sift registear i da ga definisem na drugom portu,pa javim sta sam uradio.Pozdrav svima
[ milan888 @ 14.01.2013. 22:26 ] @
Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVar\16]
Pulsout Strobe,10

genije dali mi mozes samo objasniti ova dva reda posto cu vezati i na port a dva sift registra a ova dva zadnja reda mi nisu jasna.Hvala puno zaso011 e ti lupas u drvenu a ja cu lupiti u betonsku banderru,a razumi me pocetnik sam.
[ milan888 @ 14.01.2013. 22:48 ] @
gde gresim dodao sam jos jedan sift registar i uvecao Broj za tolko da predje jedan pin na treci broj i on izbaci grecku
Code:
DEFINE OSC 4
adcon1 = 7 
trisc=%0000000
portc=%0000000


Include "modedefs.bas"  ' Include shift modes

DataPin var     PORTC.0         ' Shift data pin 2
ClkPin  var     PORTC.1         ' Shift clock pin 2
Strobe  var     PORTC.2

ShiftVar    var   word

ADCON1 = 7
TRISC = %00000000
PORTC = %00000000

Strobe = 0 'nije obavezno jer si postavio 0 sa PORTC =...

ShiftVar =131071        'OVDE IZBACI GRESKU
Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVar\24]
Pulsout Strobe,10
        
End
[ Genie_1984 @ 14.01.2013. 22:57 ] @
Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVar\16]

DataPin - Izlaz uC na koji povezuješ DS pin od hc595 (u primeru je to PORTC.0 )
ClkPin - Izlaz uC na koji povezuješ SH_CP pin od hc595 (u primeru je to PORTC.1 )
MSBFIRST - prvo šalje "most significant bit"
ShiftVar - Promenljiva koju želiš da postaviš na izlaz od hc595
\16 - broj bita koji želiš da pošalješ. u ovom slučaju je to 16 (tj celu promenljivu tipa word (16bita))

Pulsout Strobe,10

Strobe - pin uC na koji povezuješ ST_CP pin od hc595 (u primeru je to PORTC.2)
10 - vreme koliko će na Strobe izlazu (PORTC.2)biti logička 1. u primeru 10ms. Kada pošalješ vrednos sa shiftout , da bi se pojavila na izlazu hc595 moraš da odradiš tranziciju sa nule na jedinicu na pinu ST_CP. za to služi ova naredba. isto ifekat bi bio da si pisao sledeće

Code:

 PORTC.2 = 1
 pause 10
 PORTC.2 = 0


Nema potrebe da angažuješ nove pinove uC kada možeš da povežeš još dva hc595 na vec postojece (ili još 4,5,6...)

EDIT: Grešiš u tome što je promenljiva ShiftVar tipa word a to znači max 16 bita.
131071 je 1FFFF heksadecimalno. da bi to poslao moraš da podeliš na dve promenljive

Code:

ShiftVarLow16 = $FFFF 'naravno pre toga definišeš ShiftVarLow16 i ShiftVarHi16 kao word
ShiftVarHi16 = $0001
Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVarHi16\8]' 8 jer si dodao samo jedan hc595
Shiftout DataPin, ClkPin, MSBFIRST,[ShiftVarLow16\16] 
Pulsout Strobe,10


[Ovu poruku je menjao Genie_1984 dana 15.01.2013. u 00:07 GMT+1]
[ ZAS011 @ 14.01.2013. 22:58 ] @
Promenljiva tipa WORD je dužine 16 bit-a tako da ne može imati vrednost veću od 65535 ($FFFF ili %1111111111111111)
Odatle i greška.

A možeš da šiftuješ kol'ko 'oćeš "brojeva", npr:

Code:
Shiftout DataPin, ClkPin, MSBFIRST,[Broj1, Broj2, Broj3, Broj4]


U gofrnjem primeru podrazumevano je da su Broj1, Broj2, Broj3 i Broj4 promenljive dužine 8 bitova (Byte)
[ milan888 @ 14.01.2013. 23:40 ] @
jasno je ovo a samo zaos011 te brojheve u zagradi program sam sabere?idem leci radim ujutru pa kad dodjem sa posla cu na tenane da uizucim ovo ako zapnem pitam u svakom slucaju hvala vam,ALLL JOS JEDNOM KAD SAM PROCITAO UKAPIRAO SAM ZNACI NEMOGU VISE OD 16 BITA DA UPALIM OD JEDNOM SA JEDNIM BROJEM JESAM U PRAVU?
[ milan888 @ 14.01.2013. 23:50 ] @
Lupio sam za sabiranje brojeva shvatio sam ne moze vise od 16 bita od jednom da radi,sutra vezbanje
[ Genie_1984 @ 15.01.2013. 01:07 ] @
Pa...promenljiva u PBP ne može da "čuva" više od 16 bita,to da...ali na hc595 možeš da pošalješ više (tačnije onoliko koliko ti je potrebno u zavisnosti koliko si ih povezao). Naprimer, povezao si četiri hc595 i hoćeš da pošalješ broj $87654321 (heksidecimalno - 32 bita), to možeš odraditi na dva načina:

Code:

' Prvi korišćenjem dve promenljive 

Promenljiva1 = $8765 'gornjih 16 bita
Promenljiva2 = $4321 'donjih 16 bita

Shiftout DataPin, ClkPin, MSBFIRST,[Promenljiva1\16,Promenljiva2\16] ' pošalješ sve bite u registar hc595
Pulsout Strobe,10   ' i onda ih proslediš na izlaz




Code:

' Drugi korišćenjem jedne promenljive kojoj menjaš vrednost

Promenljiva = $8765 'gornjih 16 bita
Shiftout DataPin, ClkPin, MSBFIRST,[Promenljiva\16] ' prvo pošalješ gornjih 16 bita

Promenljiva = $4321 'donjih 16 bita
Shiftout DataPin, ClkPin, MSBFIRST,[Promenljiva\16] ' pa donjih 16 bita u registar hc595

Pulsout Strobe,10   ' i pošto si poslao sve onda ih proslediš na izlaz



Pozdrav

[ milan888 @ 15.01.2013. 07:14 ] @
Ukapirao sam te genije hvala nemam na poslu pbp da probam al veceras cu kuci.Uglavnom hvala ako zapnem etome.Samo ovo gore zaso sto je napisao kad se napise samo
broj1
onda taj broj upravlja sa 8 bita
a kad se napise broj1\16 onda broj jedan upravlja sa 16 bita jesam u pravu?
Pozdrav.
[ ZAS011 @ 15.01.2013. 09:40 ] @
@milan888:
ni jedan "broj" ne upravlja ni jednim bit-om već se sadržaj tog "broja" šalje na DataPin bit po bit, a u zavisnosti od MODE modifikatora (LSBFIRST/MSBFIRST)

SHIFTOUT naredba može i ovako da se napiše:
Code:

' (MSBFIRST)

DataPin = Promenljiva.7
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.6
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.5
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.4
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.3
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.2
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.1
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.0
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

High LatchPin
PAUSEUS 30
Low LatchPin
PAUSEUS 30


Code:

' (LSBFIRST)

DataPin = Promenljiva.0
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.1
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.2
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.3
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.4
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.5
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.6
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

DataPin = Promenljiva.7
High ClkPin
PAUSEUS 30
Low ClkPin
PAUSEUS 30

High LatchPin
PAUSEUS 30
Low LatchPin
PAUSEUS 30