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

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Pet Apr 06, 2007 4:38 pm Naslov sporočila: RB6 na 16F628 |
|
|
Pozdravljeni.
Poizkušam spraviti v pogon projekt od Aly-ja "One-Wire--PIC--RS232" v malce spremenjeni sestavi (6 x DS18S20 + 5 x dig.izhod) in mi je skoraj uspelo! Izjema je omenjeni RB6 pin, ki je "neposlušen". Torej, RB0=OneWire, RB1 in RB2=USART, RB3 do RB7 so pa digitalni izhodi in vsi razen RB6 tudi delujejo. Vprašanje: kaj sem naredil narobe oziroma kaj moram narediti, da napako odpravim?
Lp
Vlado
Opis: |
|
 Download |
Ime datoteke: |
2.rar |
Velikost datoteke: |
8.7 KB |
Downloadano: |
27 krat |
_________________ California |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Pet Apr 06, 2007 5:07 pm Naslov sporočila: |
|
|
Ne poznam sicer arhitekture PICev, a na AVRjih je par takih pinov, ki so brez notranjega pull-upa, zato ne delujejo kot klasični digitalni vhod ali izhod. Mogoče je tudi pri PICih podobna zadeva. Poizksi dati mer 5V ter pinom en 10k upor, pa boš videl, če dela.
LP Gorazd
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Pet Apr 06, 2007 8:27 pm Naslov sporočila: |
|
|
Pull-upi so v programu izklopljeni, vendar tudi z zunanjim uporom ne deluje.
Lp
Vlado
_________________ California |
|
Nazaj na vrh |
|
 |
s56al Član

Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 788 Aktiv.: 3.33 Kraj: JN66SI & JN76TM
|
Objavljeno: Pet Apr 06, 2007 9:43 pm Naslov sporočila: |
|
|
Pozdrav Vlado,
Kaj točno si priključil na RB6? Tvoje priponke žal ne morem sneti, ker nisem "aktiven član", zato zgolj ugibam... Torej, če je morda kaj takega, da "drži" napetost pina RB6, ko je ta skonfiguriran kot izhod in postavljen na "visoki nivo", pod ca. 2,5V, potem bo ob vsaki spremembi kateregakoli drugega RB.x (setb ali clrb....) ali izvedbi operacij na celem PORTB registru, ki spreminjajo stanje samo kakega drugega RB.x pina, tudi RB6 vedno šel v nizko stanje (0V). Razlog je v t.i. "read / modify / write" tipu operacij.
Primer:
1. clrf status
2. bsf status, rp0 ;preklop na RAM/reg. stran 1
3. clrf TRISB ;Vsi pini PORTB so izhodi
4. clrf status
5. bsf portb,6 ;RB6 postavi na "high"
6. movlw b'00000001'
7. iorwf portb,f ; ukaz bi moral le postaviti RB0 na "high" ostale pine pa pustiti nespremenjene, vendar!...
... če je npr. na RB6 direktno priklopljena LED (brez predupora), drž le-ta RB6 na ca. 2V, zato bo po izvedbi ukaza pod 7. šel hkrati na "low" tudi RB6!
4. bsf portb,6 ; RB6 postavi na "high"
5. bsf portb,4 ; ukaz bi moral le postaviti na "high" RB4, toda....
... če je na RB6 napetost zaradi zunanjih priključenih elementov napetost manjša od 2,5V, bo zopet šel v nizko stanje tudi RB6
Podobno navidez "neubogljivo" se pri PIC z integriranim A/D konverterjem radi obnašajo tudi pini PORTA, če niso pravilno skonfigurirani kot "analogni" / "digitalni" ter pini, ki služijo kot komparatorski vhodi. Pri novejšem PIC18F458 recimo so komparatorski vhodi pod privzeto (reset) skonfigurirani kot komparatorski, tako da jih je za splošnonamensko I/O uporabo potrebno najprej prekonfigurirati na dig. I/O, sicer se prav tako obnašajo "čudno". Apak to je že druga zgodba za druge pice...
LP, Sandi
_________________ 73 de s56al |
|
Nazaj na vrh |
|
 |
snow Član


Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.44 Kraj: Ljubljana || Velenje
|
Objavljeno: Pet Apr 06, 2007 9:56 pm Naslov sporočila: |
|
|
Sem malo pogledal datasheet od 16f628 pa je na rb6 poleg klasičnega I/O le še vhod za oscilator/clock za T1 timer, ki pa je privzeto izključen.
Kot je Sandi omenil, bi lahko šlo za read-write-modify situacijo.
Si mogoče poizkusil še kakšen drugi 16f628? Lahko bi se zgodilo, da si kdaj skuril pin.
|
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Pet Apr 06, 2007 11:46 pm Naslov sporočila: |
|
|
Varianta s skurjenim pinom ni izključena. Jutri poizkusim drug čip in poročam.
Lp.
Vlado
_________________ California |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Sob Apr 07, 2007 9:46 am Naslov sporočila: |
|
|
Danes sem zamenjal tri nove čipe (en kos 16F628 in dva kosa 16F628A) in rezultat je isti, vse "sveti" razen RB6. Na izhode RB3 do RB7 so priklopljene LED diode preko upora.
Lp.
Vlado
_________________ California |
|
Nazaj na vrh |
|
 |
s56al Član

Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 788 Aktiv.: 3.33 Kraj: JN66SI & JN76TM
|
Objavljeno: Sob Apr 07, 2007 1:55 pm Naslov sporočila: |
|
|
A lahko tukaj izpišeš del programske kode, ki prižiga in ugaša port B, pa še par ukazov prej in potem ali pa če mi pošlješ asm izvorno kodo na ZS? Na PC nimam nobenega programa za odpakirat *.rar.
Kako veliki so upori, ki omejujejo tok skozi LED? A je kje na RB6 priključena kaka večja kapacitivnost (npr. dolga žica)?
_________________ 73 de s56al |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Sob Apr 07, 2007 5:12 pm Naslov sporočila: |
|
|
Datasheet:
Citiram: |
PORTB is multiplexed with the external interrupt,
USART, CCP module and the TMR1 clock input/output.
The standard port functions and the alternate port
functions are shown in Table 5-3. Alternate port
functions may override the TRIS setting when enabled. |
Preveri, da nimaš vključenega timer izhoda ali vhoda, ker lahko "povozijo" nastavitve porta.
|
|
Nazaj na vrh |
|
 |
s56al Član

Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 788 Aktiv.: 3.33 Kraj: JN66SI & JN76TM
|
Objavljeno: Sob Apr 07, 2007 6:00 pm Naslov sporočila: |
|
|
Pozdrav ponovno,
Izpis assemblerske kode sem si pogledal, vendar takole na prvi pogled žal nisem opazil nič kaj izrazito posebnega, kar bi lahko delalo težave.
Ali si že probal kaj debugirati? Če še nisi, predlagam, da za začetek med sabo zamenjaš v ukazih, kjer dekodiraš po UART sprejeti znak, 'c' z 'd' in 'C' z 'D', tako da bo 'd'/'D' prižigal / ugašal port RB5 ter 'c'/'C' port RB6. Da se prepričamo, da je res težava v ugašanju / prižiganju porta RB6 in ne morda v sprejemu znakov po UART. Če iz kakšnega razloga preveč odstopa frekvenca oscilatorja, se lahko zgodi, da se nekateri znaki po UART sprejemejo pravilno, drugi ne.
Kako se vezje pravzaprav odziva? LED na RB6 ni možno niti prižgati, niti ugasniti, ali samo eno od tega? Ali lahko prižgeš / ugasneš LED na RB6 s preprostim ukazom kje na začetku izvajanja glavnega programa (po inicializacijah) in takoj zatem izvajanje programa zazankaš v neskončno zanko (+ proženje WDT), da se programski tek "ustavi":
.....bsf portb,6
zanka
......clrf WDT
......goto zanka
_________________ 73 de s56al |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Sob Apr 07, 2007 9:43 pm Naslov sporočila: |
|
|
Poizkus 1:
V LabView sem zamenjal ukaze C/c z D/d in obratno. D/d je prižgal RB5, medtem ko RB6 ni reagiral na C/c.
Nato sem zamenjal med sabo še ukaze D/d in E/e. D/d je prižgal RB7, RB6 pa je zopet ostal v temi.
Poizkus 2:
Da stestiram RB6, sem naložil preprost programček, kateri premika logično 1 po portu B od RB0 proti RB7 in zopet od začetka. In ne boste verjeli, RB6 tudi sodeluje.
mucek4 je napisal:
Preveri, da nimaš vključenega timer izhoda ali vhoda, ker lahko "povozijo" nastavitve porta.
Pomoč bi bila dobrodošla, ker sem kratek v asemblerju.
Lp.
Vlado
_________________ California |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Ned Apr 08, 2007 9:41 am Naslov sporočila: |
|
|
Po pregledu kode nisem našel kaj očitnega. Testiraj. V tvoj program vrivaj kodo:
Koda: |
bsf PORTB,6
loopy goto loopy |
Najprej na začetku, nato čez nekaj vrstic, nato še čez nekaj vrstic in boš videl kje ne dela več. Nato imaš samo nekaj vrstic za temeljit pregled.
|
|
Nazaj na vrh |
|
 |
s56al Član

Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 788 Aktiv.: 3.33 Kraj: JN66SI & JN76TM
|
Objavljeno: Ned Apr 08, 2007 10:07 am Naslov sporočila: |
|
|
California je napisal/a: |
Poizkus 1:
V LabView sem zamenjal ukaze C/c z D/d in obratno. D/d je prižgal RB5, medtem ko RB6 ni reagiral na C/c.
|
Ali je možno, da je zazipani program, ki si mi ga poslal na ZS, drugačen od tistega, ki ga vpisuješ v svoj kontroler? Namreč, program sem uvozil v MPLAB in probal s simulacijo, ter ugotovil, da če po UART simuliram "sprejem" znaka "D", ki naj bi glede na tvoj program prižigal LED na RB6, programski tek sploh ne pride do kode, ki naj bi izhod RB6 dejansko "prižgala". Zakaj? Ker je v delu programa, ki dekodira po UART sprejeti znak, "D" že porabljen v drug namen in sicer se izvede naslednja koda:
movF RXchar, W
subLW 'D'
btFss STATUS, Z
goto S_dd_ascii
CALL OW_RESET ; Send Reset Pulse and read for Presence Detect Pulse
BTFSS OW_PDBYTE,0 ; 1 = Presence Detect Detected
GOTO OW_NOPDPULSE
MOVLW cmdReadROM
CALL OW_TXbyte ; Send Skip ROM Command (0xCC)
movLW .8 ; 8 bytov (1b family, 6b serial#, 1b CRC)
movWF LoopCounter
RR_loop call OW_RXbyte
movF OW_data, W
call U_TXch
decFsz LoopCounter, F
goto RR_loop
goto Zacetek
... ter potem program zopet gre v zanko čakanja na ukaze po UART.
Če simuliram "sprejem" znaka "C", pa programski tek lepo gre na del programa, ki "prižge" RB5...
Simulacija tudi ne zazna, da bi se kje v programu RB6 skonfiguriral kot Timer 1 vhod, kar bi ga potencialno lahko onemogočilo kot splošnonamenski dig. izhod in posledično povzročalo čudno vedenje.
Ker PIC programatorja v tem trenutku nimam pri sebi, več žal ne morem pomagati. Če problema ne boste rešili do naslednjega tedna, bom probal sestaviti vezje na protoboardu, ker sedaj me pa že resno zanima, kaj je na stvari. 16F628 tudi sam uporabljam, tako da bi bilo dobro vedeti, v katerem grmu tiči (velikonočni) zajec .
_________________ 73 de s56al |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Ned Apr 08, 2007 1:04 pm Naslov sporočila: |
|
|
Eureka!
Namesto D/d sem postavil v kodo ukaz G/g in zadeva je stekla.
Vsem sodelujočim se zahvaljujem za izdatno pomoč pri reševanju problema.
Če se bo aly strinjal, bom vse skupaj tudi pripel za širšo uporabo.
Lp.
Vlado
_________________ California |
|
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
|