 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pon Dec 27, 2004 10:57 pm Naslov sporočila: PIC in kontrola 16-ih led diod |
|
|
Rad bi kontroliral 16ledic, tako da bi porabil maksimalno 3pine.
Ena izmed rešitev je SAA1064 (static mode), vendar je predrag za to aplikacijo.
Doma sem nato našel 2 kosa 74HC595, ki je serialIN in paralelOUT.
Spisal sem proceduro, ki pošlje na HC en byte >
Koda: |
HC595_SEND
MOVWF HC595_DATA
MOVLW H'08'
MOVWF HC595_BITCOUNT
HC595_SEND_LOOP
RLF HC595_DATA,F
BTFSS STATUS,C
BCF PORTA,HC595_DATA_PIN
BTFSC STATUS,C
BSF PORTA,HC595_DATA_PIN
BSF PORTA,HC595_CLOCK_PIN
BCF PORTA,HC595_CLOCK_PIN
DECFSZ HC595_BITCOUNT,F
GOTO HC595_SEND_LOOP
BSF PORTA,HC595_LATCH_PIN
BCF PORTA,HC595_LATCH_PIN
RETURN |
... in nato v glavnem programu naredil sledeče >
Koda: |
CLRF TEMP
START
MOVF TEMP,W
CALL HC595_SEND
INCF TEMP,1
CALL DELAY_1S
GOTO START |
problem je da stvar ne deluje kot bi morala ;(
kaj dobim na izhodu (levi del je LSB [0123 4567]) >
Koda: |
0000 0000
1000 0000
0100 0000
1010 0000
0101 0000
1010 1000
0101 0100
1010 1010
0101 0101
.
.
. |
in nato se zadnja dva ponavljata.
izgleda kot da je izhod samo shiftan za en premik, le da enkrat doda 0 drugič 1.
v čem je problem?
mogoče dela čip pravilno le da jaz tega nevem?
lp
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Dec 27, 2004 11:27 pm Naslov sporočila: |
|
|
Tole se v zanki vrti v nedogled ? ... sicer sama procedura izgleda logično. Nisem sicer pogledal datashet za 74HC595
Koda: |
START
MOVF TEMP,W
CALL HC595_SEND
INCF TEMP,1
CALL DELAY_1S
GOTO START
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pon Dec 27, 2004 11:30 pm Naslov sporočila: |
|
|
Da, to se vrti v nedogled zgolj za testiranje..
Citiram: |
Output shift register
Output shift registers transform serial data into parallel data. On every rising edge of the clock, the shift value from data line, stores it in temporary register, and then repeats this cycle 8 times. On a signal from copied from the shift register to input register, thus data is transformed from serial into parallel data. |
Datasheet > http://www.datasheetcatalog.com/datasheets_pdf/7/4/H/C/74HC595.shtml
Res nevem kaj bi lahko bilo narobe?
|
|
Nazaj na vrh |
|
 |
Oliver Član

Pridružen-a: Sre 27 Okt 2004 13:36 Prispevkov: 39 Aktiv.: 0.16 Kraj: Ljubljana
|
Objavljeno: Tor Dec 28, 2004 3:40 pm Naslov sporočila: |
|
|
Kar se programa tiče, bi rekel, da je v redu. Pri tem predpostavljam, da so registri, ki jih uporabljaš na isti strani in je ta stran tudi izbrana. Jaz bi na tvojem mestu preveril, če ni morda kaj narobe s povezavami na vezju. Najlažje boš vezje preveril takole: na data in clock pa morda tudi strobe linijo vzporedno poveži ledice (z ustreznimi predupori) in potem v rutini po vsaki spremembi katere od teh linij pokliči tisti delay za kakšno sekundo. Morda za debug izvajaj strobe kar po vsakem clocku, tako da lahko sproti preverjaš še izhode iz 595-ke.
LP, Oliver
|
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Tor Dec 28, 2004 4:28 pm Naslov sporočila: |
|
|
Oliver je napisal/a: |
Kar se programa tiče, bi rekel, da je v redu. Pri tem predpostavljam, da so registri, ki jih uporabljaš na isti strani in je ta stran tudi izbrana. Jaz bi na tvojem mestu preveril, če ni morda kaj narobe s povezavami na vezju. Najlažje boš vezje preveril takole: na data in clock pa morda tudi strobe linijo vzporedno poveži ledice (z ustreznimi predupori) in potem v rutini po vsaki spremembi katere od teh linij pokliči tisti delay za kakšno sekundo. Morda za debug izvajaj strobe kar po vsakem clocku, tako da lahko sproti preverjaš še izhode iz 595-ke. |
Uporabljam PIC16F628, ki ima samo eno stran.
Registri so na naslovu $0020 dalje.
Koda: |
CBLOCK H'0020'
TMP_W, TMP_STATUS
HC595_DATA, HC595_CLOCK, HC595_LATCH, HC595_BITCOUNT
COUNT1, COUNT2, COUNT3
TEMP
ENDC |
Mislim, da ima vse pravilno povezano.
Shema in 2 slikci protoboarda so pripete >>>
Opis: |
|
Velikost datoteke: |
62.38 KB |
Pogledana: |
98 krat |

|
Opis: |
|
Velikost datoteke: |
123.4 KB |
Pogledana: |
61 krat |

|
Opis: |
|
Velikost datoteke: |
114.03 KB |
Pogledana: |
59 krat |

|
|
|
Nazaj na vrh |
|
 |
Oliver Član

Pridružen-a: Sre 27 Okt 2004 13:36 Prispevkov: 39 Aktiv.: 0.16 Kraj: Ljubljana
|
Objavljeno: Tor Dec 28, 2004 11:28 pm Naslov sporočila: |
|
|
glavič je napisal/a: |
Uporabljam PIC16F628, ki ima samo eno stran.
|
Registri so razporejeni v 4 "banks", jaz sem to morda malo netočno prevedel v stran. Ne vem kaj bi bil slovenski izraz, banka se mi namreč malo čudno sliši. Kakorkoli že, pri doseganju registrov je treba biti na pravi banki (strani ). Za to je zelo primeren makro ukaz BANKSEL imeregistra, ki sam pravilno postavi RP bite, ki določajo banko (stran). V tvojem primeru si vse registre definiral v banki 0 in domnevam, da to ni problem.
Citiram: |
Mislim, da ima vse pravilno povezano.
|
Jaz pa mislim, da imaš žici za clock in strobe zamenjani . To bi tudi razložilo 1010.... V zanki se osemkrat izvede strobe in na koncu še en clock namesto obratno, tako kot je mišljeno in tudi napisano. Zato se pri vsakem številu v shift register prenese samo prvi bit , ki je pri sodiih številih pač 0, pri lihih pa 1.
LP, Oliver
|
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Sre Dec 29, 2004 12:04 am Naslov sporočila: |
|
|
Citiram: |
Jaz pa mislim, da imaš žici za clock in strobe zamenjani Wink . To bi tudi razložilo 1010.... V zanki se osemkrat izvede strobe in na koncu še en clock namesto obratno, tako kot je mišljeno in tudi napisano. Zato se pri vsakem številu v shift register prenese samo prvi bit , ki je pri sodiih številih pač 0, pri lihih pa 1. |
Sedaj se pa počutim bedasto
Stvar sedaj deluje.
Hmm, malo me je zavedla dokumentacija tega čipa >
- za pin 11 piše da je SHIFT REGISTER CLOCK INPUT
- za pin 12 piše da je STORAGE REGISTER CLOCK INPUT
Hvala Oliver in Silvo.
Sedaj sem dodal še en HC595 (16 bitni izhod) in stvar deluje kot mora.
P.S. HC595_SEND rutino sem malo spremenil, tako da pošilja 16bitno število na HC595 čipa.
Ta način je precej cenejši od SAA1064, saj je 74HC595 le 100SIT, krmili se pa le na treh pinih (n-čipov).
LP
|
|
Nazaj na vrh |
|
 |
KRAPman Član

Pridružen-a: Sre 23 Nov 2005 14:35 Prispevkov: 115 Aktiv.: 0.49 Kraj: Maribor
|
Objavljeno: Sre Dec 21, 2005 8:55 pm Naslov sporočila: |
|
|
Pozdravljeni!
Glavič poskušal sem narediti podoben projekt (v bistvu za začetek čisto enak ) kot je tale tvoj z 8LEDicami. Realizacija pravtako z 74HC595. tu pa mi nastopi problem. Povezal sem vse pravilno (sem 99%) ampak na OUT pinih 595-ke se dogajajo čuda : vsi pini so high (oziroma zgleda kot da preskakujejo 0-->5v-->0 ...itd) čeprav dam na vhod shifterja serijo B'00000001' (mogla bi goreti le ena LEDica ne? na katerem pinu pa ? Q0 al Q7? ). Nato sem poskušal še narediti TOČNO tako kot je tvoja shema in tvoja koda, situacija pa je še vedno ista. Kaj bi lahko bilo narobe?
Hvala za odgovor
Lp
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Sre Dec 21, 2005 9:15 pm Naslov sporočila: |
|
|
Ce se vrednosti premikajo gor in dol (napetostni nivoji) po vseh izhodnih pinih, potem jih ocitno sofira en taktni signal.
Kaj sploh zelis narediti ? Ce bi rad uporabil doticni shifter kot 1:8 demultiplekser, potem moras najprej vpisati v shift register vseh 8 bitov (to sofira SHcp), potem pa to vrednost prenesti v storage register (to naredi STcp). STcp "latcha" (slovensko ?) vrednost iz shift registra na izhode (ce je OE v ustreznem stanju).
Po tvojem neverjetno neuporabnem opisu tezav brez kakrsnekoli sheme sklepam, da ti poganjas STcp skupaj (oz. vsaj sinhrono) s SHcp, ceprav tega v bistvu noces poceti; sele ko je vrednost (vseh osem bitov, ce jih toliko uporabljas) v celoti vpisana v shift register das en pulz na STcp, da se premakne na izhode. Ce je ob tem OE ves cas aktiven (dol), ne bo nic utripalo, ampak bo samo nova 8-bitna vrednost zamenjala staro.
V datasheetu za doticni cip je to vse lepo razlozeno (in to kar na vrhu prve strani - za nepotrpezljive).
|
|
Nazaj na vrh |
|
 |
KRAPman Član

Pridružen-a: Sre 23 Nov 2005 14:35 Prispevkov: 115 Aktiv.: 0.49 Kraj: Maribor
|
Objavljeno: Čet Dec 22, 2005 11:28 pm Naslov sporočila: |
|
|
@Sokrat
Najprej hvala za tvoj hiter odg. Da, poskušam narediti demux 1:8. Kar se glede PICa tiče mislim da dela vse OK, vendar "za ziher" prilagam .ASM kodo :
Koda: |
....
HC595_SEND
MOVWF HC595_DATA
MOVLW H'08'
MOVWF HC595_BITCOUNT
HC595_SEND_LOOP
RLF HC595_DATA,F
BTFSS STATUS,C
BCF PORTB,0 ; PORTB, 0 = HC595_DATA_PIN
; = Ds-->PIN14
BTFSC STATUS,C
BSF PORTB,0; PORTB, 0 = HC595_DATA_PIN
; = Ds-->PIN14
BSF PORTB,1; PORTB, 1 = HC595_CLOCK_PIN
; = SHcp-->PIN11
BCF PORTB,1; PORTB, 1 = HC595_CLOCK_PIN
; = SHcp-->PIN11
DECFSZ HC595_BITCOUNT,F
GOTO HC595_SEND_LOOP
BSF PORTB,2; PORTB, 2 = HC595_LATCH_PIN
; = STcp-->PIN12
BCF PORTB,2; PORTB, 2 = HC595_LATCH_PIN
; = STcp-->PIN12
RETURN
; *****************************
; ** RESET : main boot routine **
; *****************************
RESET MOVLW B'00000111'
MOVWF CMCON
BSF STATUS,RP0
MOVLW B'11010111'
MOVWF OPTION_REG
CLRF INTCON
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'11111111'
MOVWF TRISA
BCF STATUS,RP0
CLRF PORTB
;
START
MOVLW B'00000001'
CALL HC595_SEND
CALL DELAY
GOTO START
END
|
Torej, če prav razumem bi mi moralo na izhodu Q0 goreti LED, na ostalih izhodih pa ne. Pri meni pa so high vsi izhodi. Glede utripanja pa sem ugotovil vzrok - home-made napajalnik .
Sheme ne bom pripenjal, ker sem uporabil isto kot Glavič. PIC pa je model 16F627. Kakšna ideja kaj bi še lahko šlo narobe?
Lp
Opis: |
|
Velikost datoteke: |
909.37 KB |
Pogledana: |
58 krat |

|
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Dec 22, 2005 11:46 pm Naslov sporočila: |
|
|
Tukaj pise, da ima ukaz RLF dva parametra - prvi je register, katerega vrednost rotiras, drugi pa 0 ali 1 in od tega je odvisno kam se spravi rezultat. A je to analogno tvoji kodi ?
Tako na hitro ne zgleda nic narobe - max. frekvenca takta za doticni cip je precej visja, kot je tvoj signal, ce je vse prikljuceno pravilno, bi moralo delati.
Sicer se napake najlazje odkrije s simulacijo oz. vstavljanjem breakpointov ("breakpoint" je lahko tudi neskoncna zanka) - ali obstaja kaksno orodje v katerem bi lahko program simuliral ?
|
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Pet Dec 23, 2005 9:16 am Naslov sporočila: |
|
|
Zakaj imaš pa upore vzporedno z LED-icami vezane?
|
|
Nazaj na vrh |
|
 |
KRAPman Član

Pridružen-a: Sre 23 Nov 2005 14:35 Prispevkov: 115 Aktiv.: 0.49 Kraj: Maribor
|
Objavljeno: Pet Dec 23, 2005 4:11 pm Naslov sporočila: |
|
|
@Sokrat
Citiram: |
Tukaj pise, da ima ukaz RLF dva parametra - prvi je register, katerega vrednost rotiras, drugi pa 0 ali 1 in od tega je odvisno kam se spravi rezultat. A je to analogno tvoji kodi ?
|
Da, uporabljam include datoteko za moj tip PICa (torej P16F627.INC) v kateri je definirano : F EQU H'00000001' ter
W EQU H'00000000'
za pač lažje branje assemblerske kode (F - shrani v register, ki je definiran kot prvi parameter funkcije RLF; W - shrani v temp. register W). Glede simulatorja pa je tak, da doma imam MPLAB, vendar ga ne znam preveč dobro uporabljat (nisem se niti še toliko poglabljat v to). Bom pa poskusil (takoj ko bo dovolj časa za to) usposobit simulator.
@NeoTO
Trenutno doma nisem imel primernih uporov za 5V(upornost napajalnika na testni plošči)-->LED (3v), sem pa imel še nekaj takih po 470 Ohm in sem vezal 2x470 vzporedno, kar nanese 235Ohm, kar je primerno za LEDico
Hvala obema za trud!
Lp, postam v kratkem
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Dec 23, 2005 4:29 pm Naslov sporočila: |
|
|
Aha. No, ce se ti ne ljubi ukvarjati s simulatorjem, potem lahko se vedno uporabljas neskoncne zanke kot "breakpoint" za kljucnimi deli kode (npr. za delom, ki rotira vrednost in jo posilja na izhod, itd.), ampak to je precej ucinkovit nacin za zapravljanje casa (v istem casu bi se najbrz naucil uporabljati simulator ).
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Dec 23, 2005 4:37 pm Naslov sporočila: |
|
|
Glede uporov ter diod - na fotografiji se bolj slabo vidi a izgleda kot, da so upori vzporedno k diodi?
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|