MPLAB 8.80 Watch - blikání LED nefunguje na PORTC,0 (16F690)

Prosim o radu ohladne nasledovneho problemu.S PIC zacinam tak ma prosim nekamenujte.Snazil som sa pouzit funkciu hladat no riesenie mojho problemu som tu na fore nenasiel.Mam napisany jednoduchy program blikania jednej led na porteC.

start movlw b’00001000
movwf PORTC
; call delay
movlw b’00000000
movwf PORTC
; call delay
goto start

vo watch vidim ako sa mi meni bit3 portuC ,no ale ak zmenim program na

start movlw b’00000001
movwf PORTC
; call delay
movlw b’00000000
movwf PORTC
; call delay
goto start

tak vo watch sa mi nemeni bit0 stale je 0,jednoducho vo watch sa mi meni stav iba od 3-tieho bitu.Program mam pisany pre PIC16F690.Call-y mam stopnute pre animaciu.Dakujem za radu.

:arrow_right: administrator: přejmenováno z "MPLAB 8.80 Watch PORTC"

Máš asi zapnutý A/D převodník, vypneš ho vynulováním registru ANSEL a ANSELH.
Příště sem dej i nastavení registrů.

Dakujem za odpoved ,ktora bola samozrejme spravna.Uz to bezi podla mojich predstav.Zaroven prepac za zdrzovanie urcite pre teba banalitou,no ako som pisal na zaciatku s PIC zacinam.Este raz srdecna vdaka.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Není třeba se omlouvat za zdržování, kdybych nechtěl, anebo nemohl, tak sem nenapíšu. Toto je běžná začátečnická chyba na kterou narazí snad každý začínající s PIC, alespoň já na ní narazil. :smiley:

No ale na druhou stranu tu máme toto skvělé fórum kde nám vždy někdo ochotně a bez posměchu poradí, ne se tak děje na jiných fórech.

Tak opat sa trapim s problemom.Mcu som zamenil za PIC16F688 nakolko 16F690 mam jedinu ,ako sucast Pickit2 a nerad by som ju pri studiu poskodil.PIC16F688 mam viac tak sa nic nedeje a naviac bezproblemov pasuje do demo dosky ktora je sucastou Pickitu.
Problem mam totozny,ako ten s ktorym mi poradil Peter.Opat vo WATCH simulatora sa mi meni hodnota na porteC iba od 2 -ho bitu.V reale pokial nenulujem register ANSEL mi ledky postupne rozsvecuju 0az
3 a zhasinaju.No v simulatore sa meni iba bit 2 a 3 portuC.Ak vynulujem reg.ANSEL v simulatore sa mi opat nemeni bit 0a1 no v reale sa mi zmeni blikanie na porteC 2 a 3.Neviem ci mam dobre navolene Banky preto prikladam cast kodu.Delaye opat stopnute pre animaciu.Dakujem za pomoc.

main BSF STATUS,RP0 ;RP0=1,RP1=0 Bank1
BCF STATUS,RP1
CLRF TRISC ;cely PortC vystup
CLRF ANSEL ;Ansel = 0
BCF STATUS,RP0 ;RP0=0,RP1=0 naspat Bank0
BCF STATUS,RP1

start BSF PORTC,0
;CALL delay
BSF PORTC,1
;CALL delay
BSF PORTC,2
;CALL delay
BSF PORTC,3
;CALL delay
BCF PORTC,0
;CALL delay
BCF PORTC,1
;CALL delay
BCF PORTC,2
;CALL delay
BCF PORTC,3
;CALL delay
goto start

Zkus zapisovat na celý port jako v tvém prvním případě a ne jen měnit jednotlivé bity portu.
Něco podobného se řešilo zde.

Dakujem za reakciu.No zrejme myslis na problem RMW,no ,ale aj ked cvicne napisem toto
movlw b’00000001
movwf PORTC
call delay
movlw b’00000000
movwf PORTC
call delay

aj tak sa mi vo WATCH nemeni hodnota bitu0 portuC.Prosim Ta mam dobre zapis v Bankach,najme ANSEL???

Ještě zkus vypnout comparátory v bance 0.

movlw b'00000111 movwf CMCON0

…nepomohlo stale sa vo WATCH nemeni bit0.Je toto prosim Ta v poriadku??

 BSF STATUS,RP0  ;RP0=1,RP1=0 Bank1
 BCF STATUS,RP1
 CLRF TRISC      ;cely PortC vystup
 CLRF ANSEL      ;Ansel = 0
 BCF STATUS,RP0  ;RP0=0,RP1=0 naspat Bank0
 BCF STATUS,RP1
 MOVLW b'00000111
 MOVWF CMCON0

Vypadá to že ano, ale na 100% to napsat nemohu, už delší dobu se o přepínání bank nestarám.

Nerozumiem ze nestaras???V com pises???Vies ja s tym iba zacinam.Rad by som pochopil kazdu malickost a zistil kde vlastne robim chybu.Literaturu mam na staru 16f84Hrabacek ,aj ked pravdupovediac nieje pisana na moj vkus.Ten Watch ma zaujima pre sledovanie stavov.Mam sice demo board a Proteus ISIS,ale ked to ma zvladnut MPLAB tak preco to nevyuzit.Prvy krat co si mi poradil pre 16F690 ANSEL a ANSELH tak pekne vsetko islo.Ked som zamenil mcu na 16F688 prepisani ini + hlavicky a po porovnani v datasheet som sa zase zasekol,mozno prave na Bank select.

Píšu v Céčku a o přepínání bank a stránkování paměti se stará překladač.

Podle DS by to mělo vypadat takto:

BANKSEL PORTC ; CLRF PORTC ;Init PORTC MOVLW 07h ; MOVWF CMCON0 ;digital I/O BANKSEL ANSEL ; CLRF ANSEL ;digital I/O MOVLW 00h ; MOVWF TRISC ;

RP1 RP0
0 0 → Bank 0 is selected
0 1 → Bank 1 is selected
1 0 → Bank 2 is selected
1 1 → Bank 3 is selected

Ja si myslim ze to v mojom pripade je OK

Tak kde je chyba? :slight_smile:

To teda netusim. :frowning:

Budeš muset počkat na někoho, kdo používá MPLAB aby to vyzkoušel, já už fakt nevím…

Jasne pockam,nejde o zivot.Aj tak Ti dakujem za cas a trpezlivost.

DS - > 4.3 PORTC → Note + EXAMPLE 4.3 :exclamation:

¨

Chyba je opravdu v tomhle. Musíš vypnout ten komparátor a pak to funguje jak má.

Dakujem za snahu pomoct MiloPS.Sice isiel si na mna dost zlozito datasheet a tak a napisal si mi priamo kod ktory by mal fungovat.Utvoril som si teda novy projekt a nakopiroval kod od teba a samozrejme fungoval WATCH tak ako ma.Zacal som teda patrat po probleme v mojom projekte.V mojom kode som postopoval moje veci a nakopiroval tie z tvojho.Aj v mojom projekte tvoj kod fungoval.Tak som teda zacal stopovat tvoj a odstopovavat z mojho v snahe zistit kde mam chybu.No a nakoniec ked bol tvoj cely stopnuty a moj povoleny nic sa nezmenilo WATCH mi pekne zobrazoval vsetky pouzite bity portuC.Nechapem???
To Jankop tiez dakujem no komparator som uz skusal vyssie a nepomohlo.Kod teraz je nasledovny

BSF STATUS,RP0 ;RP0=1,RP1=0 Bank1
BCF STATUS,RP1
CLRF TRISC ;cely PortC vystup
CLRF ANSEL ;Ansel = 0
BCF STATUS,RP0 ;RP0=0,RP1=0 naspat Bank0
BCF STATUS,RP1
MOVLW b’00000111
MOVWF CMCON0
CLRF PORTC

CLRF PORTC som pridal nakolko po resete ostavala nahodne H uroven na porteC zrejme od MOVWF CMCON0

Ak su k horeuvedenemu nejake ked aj male vycitky rad sa necham poucit.