Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
ez egy kapu vezérlő kártya, egy motort kellen vezérelnie. van 2 szenzoros érzékelője, 1 csukott állapot érzékelője és még egy pár led (ami annyira nem fontos)
namost több üzemmódja van master -> ő vezérli a slave kártyát slave -> őt vezérlik mindíg nyitva üzemmód mindíg csukva üzemmód amit nem csinál: mindent csak az inicializálás végén található "bsf lalim" parancs által kivilágított led világit, semmilyen kimeneten nincs semmi, és semmilyen bemenetre nem reagál szerintem valamelyik ciklusban veszik el, de nem találtm meg, mivel az 50Hz-es jellel szinkronizált a motor vezérlés, és a kimeneten nincs semmi, szerintem nem jut el odáig, hogy az első szinkronizálást elvégezze " *** motorvezérlés ***" kommentben részletesebb leírás van
Szia!
Nem néztem át teljesen a progidat de az elején van: START .... .... RLF REG4, 1 ; BALRA SHIFT REG4-ET, EREDMÉNY REG4-BEN RLF TMR0, 0 ; BALRA SHIFT TMR0-ÁT, EREDMÉNY W-BEN BTFSC STATUS ,0 ; HA VAN CARRY (UTOLSÓ 7.BIT 1 VOLT) INCF REG4 ,1 ; REG 4-ET Ar rlf reg4,1 sort nem értem mert ilyenkor a belépő bit a carry elözö bitje nem a reg4 kilépő bitje, ez igaz a rlf tmr0- ra is vagyis a w -be belépő bit az iménti reg4 kilépő bitje. Nem tudom hogynem-e eztakartad de ha nem ezeléggé elviheti a programot
hát nem ezt akartam, hanem azt, hogy a kipottyanó bit micsoda az alapján menni tovább. akkor ezt bizony át kell írnom, (a baj az, hogy csak a carry-t mozgatja a shift
![]() köszi, hogy ilyen gyorsan válaszoltál Idézet: „BTFSS ALLAP, 1 ; HA 11 BTFSC ALLAP, 0 GOTO START” Itt nem tudom mit szeretnél: Ha csak "11"-nél akarsz a GOTO-ra jutni, akkor nem jó, mert "01"-nél is oda ugrik. Az elején ez sem teljesen jó szerintem: Idézet: „MAIN org 0X000” Na most a MAIN itt csak véletlenül kerül a 0. címre, mert az org-ot utána adod ki. Ha org 0x100-at írnál, a MAIN akkor is a 0-ra kerülne. Talán ez itt nem okoz hibát, de helytelen a megoldás. A címkék az org után vehetik fel a kívánt értéket. Az org nem programlépés, az a fordítónak szól.
Szia!
1: BTFSS ALLAP, 1 ez ha 1-es 3-asra ugrik, ha 0, 2-esre 2: BTFSC ALLAP, 0 ez ha 1 3-asra ugrik, ha 0, 4-esre 3: GOTO START 4: kombinációk b1 b0 0 x -> startra ugik 1 1 -> startra ugrik 1 0 -> 4-esre, tovább megy, ez jelent lefutó élet, b1 az előző, b0 a mostani, ha nincs lefutó él, ne csináljon semmit (menjen az elejére) nekem ez volt a szándékom, a kommentet félreírtam, bocsi a main 0x000-t meg nem én írtam bele, hanem az mplab-ban lévő programcsonk (asszem f57.lst), amit a tutorial szerint be kell tölteni, tartalmazta. kicsit más: itt ugyan számlálóval van megoldva az inttrigg időzítése, de ezt állítólag egy astabil kimenettel is meg lehet oldani. 1 láb 1 kondi 2 ellenállás rajta... a a port kimenet, tölti a kondit a kis ellenálláson keresztül, ha bemenet a sokkal nagyobbon keresztül kisül és egyszer 0 lesz a bemenet. Van valakinek tapasztalata ilyen időzítéssel?
Ha nem veszed rossz néven, néhány javaslatot fogadj el még! :
1. Idézet: „BCF ALLAP,0” Ez így olvashatatlanná teszi a programot, érdemesebb ezt így megoldani: #DEFINE LEJÁRT_IDŐ_FLAG ALLAP,0 ;ezt a programlista előtt kell kiadni... Használata: BCF LEJÁRT_IDŐ_FLAG 2. Idézet: „INCF REG8, 1” Ez így szoktuk: INCF REG8,F ; F = Regiszterbe vissza azaz F = 1 vagy INCF REG8,W ; Ez gondolom egyértelmű 3. Éredemes a regisztereknek beszédes nevet adni, mert így elég nehéz követni, melyik mire való. 4. A STATUS regiszter bitjeinek van nevük, érdemes azokat használni pl. : BTFSS STATUS,Z
Köszi miklajos, mind2 észrevétel jogos, de a külső órajelehez azért állítottam, mert ott is van egy kisebb kvarcz, ami csak 32,.. kHz frekijű. Ami a biteket illeti, jól látod, jelenleg a megértésen fáradozom. Szóval amit írtam, abban hiba elvileg nincs? Mondom külcső lábról jön a jel. Ez egy 16877-es próbapanel, biztosan ismered. RC0-RC1 között is van egy kis kvarcz. Azért gondoltam onnan venni a jelet, mert nem kell annyit számolni, mivel lassabb mint a 20MHz,ami a belső jelet adja. Akkor elvi hiba ez alapján van-e avagy sem?
Köszi mégegyszer Idézet: „0 x -> startra ugik” 00-nál nem ugrik a startra! ...? Idézet: „1 0 -> 4-esre, tovább megy,” Ezt modt látom, hogy ez meg nem ugrik a 4.esre, hanem a startra! ...? Idézet: „main 0x000-t meg nem én írtam bele, hanem az mplab-ban lévő programcsonk” Ezt nem értem teljesen, de lényeg, hogy nem helyes. ![]() Idézet: „1: BTFSS ALLAP, 1 2: BTFSC ALLAP, 0 3: GOTO START 4:” Segítek, ez az igazság táblája: b1, b0 1 x -> 3: (start) 0 1 -> 3: (start) 0 0 -> 4: Tehát csak 00 esetén lép a 4: sorra! Megjegyzem, hogy a program tele van ilyen megoldásokkal, amik szerintem nem azt csinálják amit szeretnél. Ha még is így akartad, akkor természetesen nincs gond! ![]()
Sziasztok!
Kérdésem a megszakításokhoz fűződne. RB5 jelváltozást figyel. Amikor a megszakítás létrejön, akkor GIE 0-ra vált, és nem tudom visszaállítani 1 be.RETFIE sem állítja vissza, és ha BSF-el csinálom,(vagy 0XC8-at akarok belerakni) akkor visszaugrik a megszakításvektorhoz. Miért nem tudom visszaállítani, vagy RBIF-et nullázni? Ja és a PEIE az mire is jó? Kell itt az nekem?
Elég furcsa dolgokat írsz, nem is értem igazán a történteket. Kezdjük azzal, hogy a megszakításkor és alatta a GIE 0-ra vált, tiltva ezzel a megszkítás alatti újbóli megszakítást. Eddig oké, viszont a retfie ezta bitet újból engedélyezi, nem kell ez ügyben tenni semmit.
Az a gyanúm, hogy nem törölsz egy jelző bitet(megszakítás Flag-et), ami miatt beleragadsz a megszakításba(Retfie után azonnal feldolgozza a megszakítás alatt beérkező jelet, ezt egyébként jól is teszi). A megszakítás Flageket legtöbb esetben nekünk kell törölni, csak kevés a kivétel. Ez irányba keresgélj!
Az a helyzet, hogy nem engedi törölni a RBIF (flaget sem). És emiatt, jól látod, beragadok. Vajon miért nem engedi törölni? Csak simulátorban próbálom, nem élesben debuggolni
Sziasztok!
Keresek valakit aki jól tud pic-eket programozni, és hozzá áramkört tervezni. Egy számlálóról lenne szó, néhány extra funkcióval. Természetesen pénzért. Válaszokat emailbe várok: vzoole@freemail.hu Zoli ui: Néhány szűrőfeltételt beteszek: -gyors munka -legyen referencia
Szia!
Hajaj a portb megszakítást csak úgy lehet törölni ha elötte a portb regisztert kiolvastad: movfw portb .. .. bcf pie, rbif !!
no akkor:
ORG 0 NOP TEMP EQU 0x23 BCF STATUS,RP1 BSF STATUS,RP0 ez a bank1-et jelöli ki CLRF TMR0 ;TMR0 ---> bank0 -ban van CLRF INTCON BSF STATUS,RP0 ;bank1 CLRF TRISD BSF OPTION_REG,T0CS ;KULSO ORA BCF OPTION_REG,PSA ;ELŐOSZTÓ TMR0-HOZ BSF OPTION_REG,PS2 ;ELŐOSZTÓ BITEK 1-128 BSF OPTION_REG,PS1 ; BCF OPTION_REG,PS0 ; BCF STATUS,RP0 ;bank0 CLRF PORTD CLRF TEMP START COMF PORTD,1 ;világít CALL VAR_TULCS ;vár COMF PORTD,1 ;nemvilágít CALL VAR_TULCS ;vár GOTO START a start részt én maszkolással csinálnám pl.: led portd 2-n van akkor movlw b'00000100' iorwf portd,f ;be kapcs call var_tulcs movlw b'11111011' andwf portd,f ;kikapcs többet nem látok.
k, megnézem, ha az asm közelében leszek (szinte biztos, hogy csak ilyen kis hibák vannak benne..)
ha az mplab 7x tudoriálját végigolvasod, leírja, hogyan kell új projectet csinálni. Ott a pic-ednek megfelelő 2 filét ki kell választani, majd mellékelni (pipa, de mind1 most). Amikorelindul a project a wizzard után egyből egy asm file lezs megnyitva, ami tartalmazza a main, a start, a reset vector és a config soroat, azzal a kikommentezett fejléccel együtt, amit ott talátsz a progi elején. a main 0x000 -nak az mplab szerint benne kell lennie, mivel ő rakta bele. (azért 0x000, mert nincs megszakítása ennek a pic családnak nem 0x00c vagy 0x0c-n kezd)
Vagyis vanmég valami:
VAR_TULCS BCF INTCON,T0IF ;tulcsordulást jelző bit nullázása MOVLW .125 ; TMR0 feltöltése 125el SUBWF TEMP,0 ; itt a W éréke már nem 125 lesz, nem tudom ezvolt-e a szándékod mert nem látom használva a temp-et máshol. MOVWF TMR0 ; VAR BTFSS INTCON,T0IF ;tulcsordulás figyelése GOTO VAR ;még nem elég BCF INTCON,T0IF ;most jó, tulcsordulást jelző bit nullázása RETURN
Uhh, köszi!
Az RB megszakítás így már megy.(Ez minden más megszakítás esetén így van? vagy csak az RB4-7 lábakon lévő jelváltozásra?) Ami a másik progit illeti, a azért raktam a 125-öt a temp-be hogy egy 0 tartalmú reg-ből kivonval, ezt növelem, akkor túlcsordulásig pont 125-öt kell számolni. Nem? Ami a bank0-1et illeti. Jogos, benéztem. De ezt leghamarabb kedden tudom kipróbálni, mert ezt a problémát a másik gépemen felejtettem. Ezért szórakozok most az RB megszakításokkal. És köszi megint, látszikhogy kened vágod kisujból GRAT
Ezt elhiszem, bár én így még soha nem kezdtem projectet.
Viszont próbáld ki ezt: MAIN ; A látszat szerint a MAIN-nak a következő org állítaná be a címet, de NEM! org 0x00 START ; Az org ennek állítja be a címét 0-ra! org 0x20 ; A Te programod szerint ez lenne START címe. CIMKE org 0x30 ; Ez meg a CIMKE címe VEGE ; holott ennek a címét állítja be Ha ezt a program elejére írod, akkor: MAIN = 0x00 START = 0x00 CIMKE = 0x20 VEGE = 0x30 Én csak arra próbálom felhaívni a figyelmedet, hogy az MPLAB os ajánlás félrerthető, később be fog csapni, ha nem érted amiről beszélek. Valamint fenntartom, hogy hibás a felhozatal, még ha nem is okoz hibát!!!
Annyit még, hogy ne csodálkozz, ha netán beírod a példát, hogy hibát fog jelezni a fordító. Én még nem próbáltam ki, de elvileg két címkéhez nem rendelheti egy ugyanazon címet...
Ez a b port megszakításra jellemző, a pic adatlapját kell bujni mivel néha a chip hibás (pl16f876a uart megszakítás)
Ami a másik progit illeti, a azért raktam a 125-öt a temp-be hogy egy 0 tartalmú reg-ből kivonval, ezt növelem, akkor túlcsordulásig pont 125-öt kell számolni. Nem? igen ezt én inkább úgy csinálnám meg: movlw .130 ;255-125 movwf tmr0,f stb. egy utasítás kimarad (ne felejtsük el a PIC mem elég kicsi) plussz egy esetleges módósítás nem okoz gondot.
akkor most az org 0x000 (3 bites a cím!!) hova is írjam?
a main = 0x00 vagy 0x000 -> proc exceed memory... ERROR mint a reset: MAIN CODE 0x000 is kiakad írjam a main elé a dolgot? az org 0x000 MAIN [program és a többi] nem jelzett hibát az inttrigg-ben meg átírtam az btfss, btfsc-ket jóra, de még nem müxik
Hali!
Találtam egy segédletet, ami sztem a korábbi MPLAB-okban volt megtalálható... http://cc.ctu.edu.tw/~shiue/TUT877.ASM Itt megvan, hogy egy "üres" alap-program eleje/fő szerkezete hogyan is kell kinézzen...
Persze, hogy elé kell írni, ennyi az össz lényege a dolognak!
Valamint az, hogy a microchip is csinál hibákat, nem véletlenül van annyi errata... Nagyon bután hangzik, de hidd el, hogy még mindig a programodban van a hiba, ha nem azt csinálja amit akarsz. Belinkelhetnéd a módosított forrást, hátha ráakadunk újabb hibákra, amiből mindannyian tanulhatunk! Jó lenne, ha a forrást kiegészítenéd a javasolt megoldásokkal, hogy jobban lehessen olvasni, valamint a kritikus helyeknél megjegyzéseket tennél, hogy milyen logikai állapotoknál hova kéne elágazni.
Üdvözlöm a PIC mágus Urakat (hölgyeket..?) Egy komplett PIC es project kivitelezésére keresek vállalkozó szellemű hozzáértőket, lehetőleg olyanokat akik rf témában járatosak. A PIC programozás (és általában a programozás...) kimaradt az eddigi életemből, ezért némi segítség kellene. Ki tudna segíteni? Természetesen nem ingyen.
Szerintem ahhoz kéne fordulnod segítségért, aki ilyen áramköröket terjeszt, ajánl! Részemről ha meglátok egy JDM-et, menekülök!
Nem igaz az az állítás, hogy minden PC-n megy, mert nem a 13V-al van egyedül probléma, hanem az RS232 szabványban, amit nem ártana ismernie annak aki ilyet tervez. Erről egyébként rengeteg vélemény van pro és kontra. Az is lehet természetesen, hogy valamit eltoltál az égető megépítésekor és ezért nem megy, mert azt sem lehet állítani, hogy egyik PC-n se megy. Naszóval most találd ki, hogy neked milyen van, azaz hibás az áramköröd, vagy pont egy olyan PC-d van, ami nem veszi 0-nak a 0,7V-ot!!!!
Bocsánat, eltévesztettem, mert a -3V az-az 1 az RS232 vonalon, de ez a lényegen nem változtat...
Sziasztok! napokban építek egy égetőt(propic2) és azt szeretném megkérdeni hogy hogy tudom kipróbálni legegyszerűbben hogy működik-e?! nincs erre vkinek vmi jó ötlete ? vagy egy egyszerű kapcsolása!
még pic et is kell vennem mindenképpen többször írhatót szeretnék és nem tudom hogy milyen fajta kellene ebből is?! ha hülyeséget kérdek vagy nem olvastam utánna rendesen akkor szúrjatok le! ![]() ![]() |
Bejelentkezés
Hirdetés |