Fórum témák
» Több friss téma |
Van egy PIC 16F628A mc-m. van hozzá egy ledsorom, melynek minden ledje a PORTB egy-egy lábára csatlakozik. Mepróbáltam fel és le kapcsolni ezeket a led-eket, azonban van egy kis problémám: az RB1 és RB3 lábakon lévő LED-ek nem akarnak reagálni.
Az RB1-en lévő led folyamatosan világít, az RB3-as folyamatosan nem világít. Segítsen, akinek van valami ötlete. A kód, amely a villogtatásért lenne felelős: LIST P=PIC16F628A #INCLUDE __CONFIG _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT ORG 0X0000 GOTO START ORG 0X0004 START BSF STATUS,RP0 ;BANK1 CLRF TRISB BCF STATUS,RP0 ;BANK0 CLRF PORTB LOOP BCF STATUS,RP0 ;BANK0 CALL INVERTLED CALL DELAY1S GOTO LOOP INVERTLED COMF PORTB,F RETURN (A "CALL DELAY1S" egy rutin, ami csak a W regisztert írja, tehát azzal nem hiszem, hogy gond lehet).
régen ASM-eztem de ha így csinálod akkor is?
Nem nagyon vágom az Assembly-t, de az nem lehetséges, hogy arra a két lábra a PIC-nek valamelyik másik modulja van rákonfigurálva és nem csak sima I/O-nak vanak beállítva azok a lábak? Az is előfordulhat, hogy egy kicsit már meghalt szegény PIC.... Nálam ha túlfeszt kapott az a bizonyos láb, akkor csinált ilyeneket...
Mondjuk én alapból kiszedném az ORG 4et... Nem kell átlépni interruptba.
Elvileg egyébként nincs rákonfigolva semmi, de meg kell nézni a 16F628-nak az adatlapját és lehet hogy egy INDF regiszterrel kellene hívni egy ZERO_RAM-ot. Akkor tuti nem vész össze semmivel. De én 90%-osra mondom hogy HW hiba. Magyarul meghalt a PIC. RB3-at még meg tudnám magyarázni mivel az a LVP láb is. Low Voltage Programming. Szal ha LVP programozót használsz / próbapanelod / tesztlapod fogja az RB3-at akkor még az is lehet...
A program az jó, hacsak a delay1s nem akad ki valamiért....
Szimulátorban próbáltad a delay1s részt? Milyen progival programozod? Ha ICproggal programozol akkor ha felkínálja az LVP pipát akkor azt szedd ki, (nálam így csinált hülyeségeket a 16f871) Egyébként szerintem hardver hiba van
A megoldás szerintem végtelen egyszerű; körbe kéne nézni a COMF utasítás portáján! Ezt írja az adatlapban:
"The contents of register 'f' are complemented. If 'd' is 0 the result is stored in W. If 'd' is 1 the result is stored back in register 'f'." A szabványos utasításformátum pedig: COMF regiszter, amit komplementálni szeretnél, d >>> ahol d egy 2 bites érték. Ha 0 az értéke, akkor a komplementált tartalom a W regiszterbe íródik. Ha d értéke 1, akkor abba a regiszterbe írja vissza az eredményt, amiről adott esetben szó van. Szerintem ez lehet talán a hiba. Én azt nem tudom, hogy nálad a COMF parancsban a NAGY F betű mit jelent?
Érdekes, pedig nálam a szimulátorban úgy futott ahogy kell
Ezt a Comf utasítást nem ismertem eddig :no:
Köszönöm a sok választ, most sorbaveszem:
Topi: kipróbáltam, sajnos ez nem oldja meg a problémát.
Megnéztem a kapcsolási rajzot, amit kaptam a kütyü mellé, és úgy látom, hogy se az RB1-re, se az RB3-ra nincs ráépítve más...
Van rajta: RB3-on: van egy HD44780-as LCD modul üzemmódválasztás lába (RS), de most nincsen rádugva. Az RB1-en pedig egyáltalán nem találtam semmit... A HW hibát teszteltem: betettem egy másik IC-t, ugyanaz a helyzet.
Az org 4 azért maradt bent, mert a hibát keresve egyre rövidítettem a kódot.
Azt hiszem, hogy az INDF-es dologgal azt akartad mondtani, hogy törölni kéne a memóriát. Szerintem ez se lehet probléma, mert a fontos regisztereket úgyis beállítja induláskor.
A delay1s nem csinál mást, mint egy háromszorosan egymásba ágyazott ciklusban a w regisztert lépteti. Így érem el az 1 sec várakozást. Tudom, hogy nem elegáns, de a probléma megkereséséhez ez elegendő.
Hogy szimulátorban próbáltam-e? Nem... azt hogyan kell? A programot MPLAB-ban (ASM) írom és fordítom, aztán IC-proggal égetem. Nem LVP-vel írom (kipróbáltam, úgy aztán végképp nem is működik).
A nagy F érétke 1. Ezt a konstanst az MPLAB include-ja nyujtja. Így kicsit olvashatóbbá válik a kód:
COMF PORTB,W -> W-be teszi COMF PORTB,F -> PORTB-be teszi De ez tuti jól működik, mert a többi led villog, csak ez a kettő makacskodik.
Holnap melóhelyen bescannelem a kapcsolási rajzot, amit kaptam a kütyü mellé és feltöltöm. Talán találtok rajta olyat, amit én nem vettem észre.
Nem hiszem, mert néha egy picit felvillan az a LED, amelyik nem akar világítani. Amelyik világít pedig gondolom, hogy nem hibás, hiszen világít
Felteszem a mellékelt kapcsolási rajzot. Ez alapján van újabb ötletetek?
Próbáld meg így:
LIST p=16F628 include "P16F628.inc" __CONFIG _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT org 0x0000 movlw 0x07 movwf CMCON ;komparatorok kikapcsolasa!!! bsf STATUS, RP0 movlw b'00000000' movwf TRISB bcf STATUS, RP0 Loop movlw 0xff movwf PORTB CALL DELAY1S movlw 0x00 movwf PORTB goto Loop end tehát a komparátorok ki vannak kapcsólva. Azt még ellenőrizd le, hogy a Config-ek jól vannak-e beállítva.
ja, és még egy CALL DELAY1S a goto Loop elé, vagy komplementálsz.
Mindenképpen kipróbálom. Eddig így csináltam:
CLRF CCP1CON Ezt írja a doksi az CCP1CON alsó 4 bitjéről: 0000 = Capture/Compare/PWM off (resets CCP1 module) Tehát úgy gondoltam, hogy ez a komparátor modul kikapcsolása. Igazából nem értem, hogy miért van ez a második regiszter, hogy ugyancsak kikapcsolja a komparátort. Megnézem otthon, remélem, hogy megoldja legalább az egyik LED problémáját.
Szia mostmár kicsit más a helyzet mert, te a digitális komparátort piszkáltad nem az analóot ami a PORTA-n van. Bár igazábol ha nem használod nem csinál semmit.
Így is van. Ha a PIC lábát kimenetként konfigurálod, minden, bemenetre csatlakozó belső eszköz leválasztódik az adott lábról...így a komparátor-modul is.
Az RB1 és RB2 az USART lábat. próbáld meg ezt is kikapcsolni. (RCSTA.7 = 0)
Az RB3 pedig a CCP1 lába. (clrf CPP1CON) Ha nem megy, akkor próbáld csak ezeket a ledeket bekapcsolni. (bsf PORTB.1) Ha ez se megy, akkor van itt egy futófény teszt progi: http://www.freeweb.hu/fairco/pic/5/futofe2.zip Le kell forditani, és égetni. Ha az MPLAB nak nem tetszik, akkor keress rá az MPLAB könyvtárába (c:/program files/microchip ...) az MPASMWIN szóra. ez forditja ténylegesen. Sok sikert!
"Ha a PIC lábát kimenetként konfigurálod, minden, bemenetre csatlakozó belső eszköz leválasztódik az adott lábról...így a komparátor-modul is."
Én is kipróbáltam, nálam nem ez történt. Kell a CMCON = 7 Egyébként érdekes, nekem mikor az egész portot egyszerre (értsd: 8bit) irtam működött a progi, mikor azonban egy bitet ( BCF PORTB,x) próbáltam csak változtatni az egész port teljesen megbolondult. Ez hasonlóak tünik a felvetett problémához képest. A fent említett komparátor kikapcsolása azonban mindent megoldott. Más: A CCP modul-nak semmi köze az analóg komparátorhoz
Helló!
Bocsi! Tudom nem is ide tartozik, meg nem is 628A hanem 627-s PIC! De valaki tudna segíteni MPLAB-ba... szóval lenne 1 konkrét elképzelésem csak nem tudom megvalósítani! RA1-n kéne kiadni jelet... 3 gombnak megfelelően különböző periódusidejűt 50% kitöltési tényezőűt.... RB0 RB1 RB2 vannak agombok és alapból magasba vannak a gomb lenyomására húzzuk le 0-ba. Előre is köszi és mégegyszer bocsi! |
Bejelentkezés
Hirdetés |