Fórum témák
» Több friss téma |
Szervusztok!
Külső RC oszcillátorral bűvölgettem egy PIC16F628A-t, és véletlenül kitöröltem az MCLR_ON-t, de az LVP_OFF maradt. (Azt hiszem, más bajt nem csináltam...) Lehet ebbe még életet lehelni?
Valószínűleg ez kell neked: Bővebben: Link.
Nem tudom, de szerintem egy "erase" után mindent újra lehet, vagy csak a config is újraírható.
Vagy tévedek, de mintha így megoldható lenne.
Szerintem az alap probléma az, hogy nem tudja a kontrollert programozási módba kapcsolni.
Igen, sőt az a gyanúm, hogy a programozási próbálkozással a már portként működő láb Vpp-t kapott, ami végleg begyógyította. Még szerencse, hogy a lába is elgörbült ...
![]()
Üdv!
Nem hinném, hogy bármi baja is lenne (van rajta védelem). Használd a Vpp first programozási módot és szedd le róla az RC oszcit, hogy véletlenül se induljon el a benne lévő program.
Sziasztok!
Légyszi írjátok meg, hogy az MPLAB 8.86-ban hogy lehet a szimulátorban egy adott pillanatban beinjektálni egy byet-ot az RCREG regiszterbe? Hogy érthető legyen: egyenként lépegetek a program utasításain, majd elérek a:
részig, de innen végtelen hurok, mert a PIR1RCIF csak akkor lesz 1 ha az RCREG értéket kapott. Ennél a huroknál szeretnék egy értéket beírni RCREG-be. Segítsetek hogy kell? A hozzászólás módosítva: Feb 20, 2016
A stilulusban kell egy workbook-ot csinálni és ott be tudod állítani, hogy kattintásra állapotot váltson a bit.
A hozzászólás módosítva: Feb 20, 2016
Köszi a gyors választ! Részleteznéd? Eddig én is eljutottam, hogy ott kell valamit csinálni de tovább nem megy
![]() A PIR1 regisztert fel sem ajánlja Úgy kezdődik, hogy ott van 6 fül. Melyikkel kell csinálni és mit? Bocsi a Lámaságomért de ez a PIC kezdő talán megbocsájtható A hozzászólás módosítva: Feb 20, 2016
Készíts egy adatállományt:
Debugger / Stimulus -> New stimumus. Register Injection: RCREG, adatállományból és add meg az adatállomány nevét. Apply. fordítds újra a programot. tegyél töréspontot a RCIF kiszolgáló rutinra. Indítsd a programod...
Ok. Köszi mindkettőtöknek! Ki fogom próbálni amit írtál. Remélem sikerül. ?ajd beszámolok. Addig is köszi!
Egy hibát már megtaláltam (olyan pici volt a szimulátor ablaka, hogy az alsó sor nem látszott ahol a mentés is van) Most mentettem, de még mindig nem megy
![]()
A Debugger / Settings / "Osc / Trace" lapon be kell állítani az órajel frekvenciáját.
A "wait 2s" pontosan 2 másodperc várakozást ír elő. A stimulus maga a reset -tel egyszerre aktivizálódik. A 1. és 2. számokat a fórum motorja teszi be, nem kell az adatállományba. A hozzászólás módosítva: Feb 20, 2016
Itt egy leírás a stimulusról.
Nagyon szépen köszi mindenkinek a segítséget! Megoldódott a dolog. Szépen működik, és amikor az RCREG megkapja az értéket akkor az RCIF flag is szépen bebillen
![]() Legyen jó hétvégétek! Nekem már az lett ![]()
Köszönöm a tanácsot, de PK3-al nem tudok ilyet csinálni, és most már egyébként sem ismeri fel a kontrollert.
A JDM többször kisegített, mert a+5V-ja egy 1k, 20u párossal valamit késleltet, de most becsődölt: configra vad dolgokat mutat, a memória meg egy darabig 0x0, utána 0x3fff. Összerakok majd egy LPT kapcsolást, hátha látom majd a csodát, de ha a PIC azt csinálja, amit az adatlap ír, akkor - szerintem - itt nincs tovább programozás. Idézet: „Köszönöm a tanácsot, de PK3-al nem tudok ilyet csinálni” Hogyne tudna ![]() Használd a PK3 saját programozóját --> Tools --> Use VPP First Program Entry-t !
A RA5 fel van készítve a Vpp feszültség fogadására, így az ott megjelenő Vpp nem károsítja. Sőt, a "Vpp first programming entry" módban ez a láb kap feszültséget előbb.
Az RB4 lábat ellenállással húzd le a Vss -re, rontsd el a külső RC oszcillátort. Próbáld meg programozni.
Sziasztok!
Még egy utolsó észrevétel: Ha a txt-ben 8-nál több bytot adok meg akkor is csak az első 8-t tölti be a szimulátor az RCREG-be. Ezután megint nem lép tovább mert az RCIF soha nem billen H-ba. Ennek így kell lenni, vagy megint én rontok el valamit?
Véletlenül nem 8 Byte mélységű az RX buffer, és a 9. írás után túlcsordulás történik?
Az egy sorba írt adatokat közvetlenül egymás után "küldi" a szimulátor. Ha nem veszed ki elég gyorsan, ráfutási hiba keletkezhet. Az USART csak tiltés és újraengedélyezés után lesz képes fogadni adatokat.
Köszi a leírtakat! A programom egyesével veszi ki a bytokat. Ezután összehasonlítja egy-egy konstanssal. Ha egyezik akkor kéri a következőt, ha nem akkor elágazik a program hibára.
Először 7 bytot kérek be (eddig jó) Itt a PIC pár utasítást csinál. (portbiteket ír) ezután megint vár a soros porton 6 bytot. ebből az első bejön hiba nélkül, és a másodikra már hiába vár. Maga a program jó, mert ha nem szimulátorban futtatom hanem élesben a beégetett PIC-el (a PC USB portjáról kapja az adatokat egy CP2102-n keresztül) akkor minden működik hibátlanul. Végül is már így a 8 byte-al is használható, csak nem tudom miért nem fogad el többet
Abban az input.txt -ben, amit feltöltöttem, van 9 karakteres sor is, mégis működik. Igaz a programom egy 16 byte -os körbe forgó buffert használ az adatok vételére. Az RCIF megszakítás csak a bufferbe ír, a főprogram onnan szedi ki a karaktereket feldolgozásra. A választ is egy ilyen bufferbe írja. A TXIF kiszolgáló onnan veszi ki az elküldendő adatot, ha van benne, ha nincs letiltja a TXIF -et.
Köszönöm a segítséget! A módosítással a PK3 gond nélkül felismerte a PIC-et és az első hibás utasítás kivételével a jó programot olvasta (majd utána helyesen programozta):
000 0000 3FFF 3FFF 3FFF 2805 00A0 0E03 00A1 008 108C 03A5 1D03 280F 3004 0686 xxxx xxxx 048 xxxx xxxx 1010 1112 2848 3FFF 3FFF 3FFF Az RC oszcillátor miatt próbáltam a PWRT késleltetést. Esetleg ez tette a NOP-ot a kezdőcímre vagy a sikertelen törlési próbálkozás? A hozzászólás módosítva: Feb 21, 2016
Ha nyomkövetést szeretnél végezni, a legelső utasításnak nop -nak kell lennie. Szerintem egy nyomkövetési próba tette a nop -ot a 0 címre.
Üdv Mindenkinek!
A következő a gondom: MPLab-ban változókat kellene beállítani PIC16F819-ben. Nem akar összejönni. Ezt próbáltam: _I1 EQU 0x30 _I2 EQU 0x31 _I3 EQU 0x32 _I4 EQU 0x33 _B1 SET B'11111111' _B2 SET B'11111111' _B3 SET B'11111111' _B4 SET B'11111111' ... _B1 SET B'01001100' Így működik, a kiírja a _B1 tartalmát PORTB-re MOVLW _B1 MOVWF PORTB ... _B1 SET B'11111111' Ha így megadom egymás után a _B-t, akkor nem írja ki _B2 SET B'11111111' helyesen. _B3 SET B'11111111' _B4 SET B'01001100' CALL kiiras ... kiiras: MOVLW _B1 ;első digit MOVWF PORTB ;_B1 PORTB-re MOVLW B'11111101' MOVWF PORTA ;PORTA első CALL ido2 ;vár MOVLW B'11111111' ;PORTB töröl MOVWF PORTB MOVLW B'11111111' ;PORTA töröl MOVWF PORTA ;PORTA töröl MOVLW _B2 ;második digit MOVWF PORTB MOVLW B'11101111' MOVWF PORTA CALL ido2 MOVLW B'11111111' MOVWF PORTB MOVLW B'11111111' MOVWF PORTA Először a _B változókat is EQU 0x34, 0x35, ... módon adtam meg, így sem jó.
Abszolut vagy relokálható forrást fordítasz?
Sziasztok!
Egy 18f4431-es pickel foglalkozok, most kezdtem el a C-t és olyan kérdésem lenne, hogy ha az An0 és An1-re egy-egy poti van kötve és annak a helyzetét szeretném beolvastatni az adc-vel, akkor azt hogy tehetem meg? Nagyjából megcsináltam a beállításokat (C18 fordító van most telepítve), ha jól értelmezem akkor az ADCHS regiszterben kéne beállítani a csatornát pl. ADCHS = 0b11111100 //AN0 és ezután mehet az adcon0bits.Go = 1 ... majd ha lement az átalakítás csatornát váltok és újra elindítom az adc-t?
Üdv! Hát jó kérdés. Ez mit jelent? Én egyszerűen megírtam MPLab-ban, majd a project/quickbuild menüben lefordítom. A _B1,2,3,4 változók értéke a program során többször változna, ezt kellene kiirni a PORTB-re. Mind a 8 bitet. Eddig amit írtam, abban a #DEFINE utasítással bitenként elneveztem a kimeneteket és egyenként állítottam, az működött. Most a 8 kimenetet egyszerre szeretném(PORTB-t). Egyszerű program, konkrétan 4 db hétszegmenses kijelzőn szeretnék szöveget kiírni. Semmi megszakítás, Eprom használat, csak a programból. A PORTA 1,2,3,4 bitje a négy szegmens anódjai( közös anódos), a PORTB nyolc bitje a 7szegmens és a tizedes pont(ezt nem használnám)katódjai. Ez nem jön össze.
A hozzászólás módosítva: Feb 24, 2016
Szia!
Idézet: „A _B1,2,3,4 változók értéke a program során többször változna, ezt kellene kiirni a PORTB-re.” Változókat létre tudsz hozni a SET-el, pl.
Én a következőképpen szoktam ezt: CBLOCK 0x20 VALT_1 VALT_2 VALT_3 ENDC Így a 0x20 memóriahelytől kezdődően a cellák el lettek nevezve VALT_1, VALT_2 és VALT_3 néven ( azért 0x20, mert ott kezdődnek a szabad cellák a te PIC-edben! )! Ezután, ha értéket akarok nekik adni, akkor:
Ha az adott változók értékét ki akarom rakni a PORTB-re és a PORTA-ra, akkor pl.
Remélem érthető volt ( a szimulátor azért sokat segítene, ha használnád, mert akkor látnád, hogy mi történik !) ![]() |
Bejelentkezés
Hirdetés |