Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Idézet: „Igen, pont ez a kérdés, hogy van-e esetleg valakinek már hasonló témában tapasztalata.” Őszintén szólva nemhinném. A CCS-t inkább a kezdők szokták használni egyszerűbb feladatokhoz. Ki kell próbálni. Idézet: „Vagyis nekem a teszteléshez szükséges volna 4 db PC” Nem muszáj négy pc, elég egy pc négy soros porttal. Aprópénzért lehet kapni pci-os soros portot, vagy akár usb-soros átalakító is jó, mivel itt valódi rs232 kommunikáció lesz. Idézet: „CCS-t inkább a kezdők szokták használni egyszerűbb feladatokhoz.” A HitechC esetleg komolyabb, vagy megbízhatóbb? Idézet: „Nem muszáj négy pc, elég egy pc négy soros porttal.” Nem bíznék benne. Produkálnom kell eszközök meghibásodását, leszakadását is. Akkor már inkább sütök másik 4 PIC-et, akik úgy viselkednek, mintha a fent említett eszközök lennének.
Félreérted. A CCS is megbízható, ha tudod, hogy mit csinál. De amíg nem tudod, hogy mit csinál, addig orbitálisat lehet szívni vele. És ilyen esetekben, hogy több soros portot kellene kezelni, a szívás lehetősége hatványozottan emelkedik.
Amúgy ha 18F-et akarsz használni, akkor C18 fordítót használj.
Köszi a tippeket!
Jelenleg van 3 db 16F873-om, meg két 877-esem. Első körben ezekkel fogok nekiállni a kísérleteknek. Lehet, hogy rendelek egy combos 18F-et is és arra is megírom. Nem tudom, képlékeny még a helyzet. Hátha sikerül 877-tel, azt is el kéne sütni valahol... Az idő nem sürget, az idén kell elkészülni.
Az más, ha nem sürgős, akkor van idő finomhangolni az egészet. 2400bps négy porton 16F877-el is simán kell, hogy menjen, főleg ha 20MHz-es.
Sziasztok!
Egy kérdést tennék fel, lehet, hogy már valaki kérdezte, nemtom, de nem olvastam végig azt a röpke524 oldalt Az lenne a kérdésem, hogy tudna-e valaki küldeni egy aszinkron módos példaprogramot 877a-ra? Már 1 hete ezen agyalok, de nem akar működni, pedig szimulálom is, de még ott se előre is kössz.
Tudna valaki segíteni?
Nem tudom ezt az INDF be írást összehozni. Az alábbi módon próbálom. Létrehoztam két regisztert (telszam1 és telszam2) A telszam1 be beírok egy értéket, megcímzem a RAM ot az FSR el (0X20), ezek után beírom az INDF be a "telszam 1" be írt értéket. Mivel az INDF et a szimulátorban változatlanul nem látom az INDF értékét kiveszem a W be és beírom a "telszam2"be. De nem megy sehogyan sem. Mit rontok el? MOVLW B'00000000' MOVWF TELSZAM1 MOVLW B'00000011' MOVWF TELSZAM1 MOVLW 0x20 MOVLW FSR MOVLW TELSZAM1 MOVWF INDF MOVLW INDF MOVWF TELSZAM2
FSR a pointer (mutató-, címzőregiszter), INDF pedig a célregiszter tartalmát veszi fel olvasáskor, illetve rajta keresztül írod azt. Kicsit összecserélgetted
Igen, én is így gondolom, de mindenképp szerettem volna meghallgatni mások, nálam tapasztaltabbak véleményeit is.
Köszönöm mindenkinek a segítségét és ha további ötlet, tapasztalat kerül elő, ne dugjátok el előlem!
Ojjé, még nem csináltam ilyet... :no: Köszi a segítséget, megpróbálom így. Egyébként így akár egy egész bájtot be tudok írni vagy csak bitenként, mindíg odébb léptetve az FSR t?
Ja, látom mit toltam el... figyelmetlen voltam...
Ezt a kérdést most nem igazán értettem...
Az FSR egy byte-ot címez meg a RAM-ban, köze nincs a bitekhez. Ha azt írod: MOVF INDF, W, akkor az FSR-ben éppen lévő értéket címként kezelve, az akkuba tölti a címen szereplő regiszter tartalmát. Ugrótáblához szeretik használni, vagy blokk-kezeléshez. Az elsőre egy (kissé szerencsétlen) példa mondjuk a hétszegmenses kijelző szegmens-állapotainak lekérdezése: pl. a progi elején a 0x20 ... 0x29 címekre betöltöd a karakterek kódjait 0-9 között, kijelzés előtt kiszámolod, hányast kell kiírni, offszettel eltolva lekérdezed az értéket, és kiviszed a portra, valahogy így:
A második példa a blokk-törlés egy módja:
Prsze nem csak törölni, hanem beírni is lehet, mikor mit kell. Két dologra kell azért vigyázni: az egyik a megfelelő bankban való mozgás, a másik, hogy mivel a speciális regiszterek is RAM-ban vannak, azokat is lehet módosítani egy rosszul feltöltött FSR miatt. Szimulátorban mindenesetre lekövethető, mi történik.
Köszi, remélem kezdem érteni..
Még egy kérdés..Én azt szeretném hogy egy "X" regiszter értékét (esetemben ez TELSZAM1) írjam be az INDF be. Akárhyogyan is próbálkozom, nem működik a dolog. Egy tetszőleges értéket direktben beírva viszont működik. MOVLW B'00000000' MOVWF TELSZAM1 MOVLW B'00000011' MOVWF TELSZAM1 MOVLW 0x20 MOVWF FSR MOVLW TELSZAM1 MOVWF INDF MOVF INDF,W MOVWF TELSZAM2 A "TELSZAM2 regiszterbe nem a TELSZAM1 értéke kerül, hanem valami idegen érték. Miért?
Helyrehoztam... , ez nem az én napom. Szóval így működik:
MOVLW B'00000000' MOVWF TELSZAM1 MOVLW B'00000000' MOVWF TELSZAM2 MOVLW B'00000011' MOVWF TELSZAM1 MOVLW 0x20 MOVWF FSR MOVF TELSZAM1,W MOVWF INDF MOVF INDF,W MOVWF TELSZAM2
Így már igen, bár ez is csak példának jó (mert ha már egyszer a szám az akkuba kerül, mint konstans, egyből ki lehet tenni a tel. számos regiszterekbe, ehhez nem kell FSR).
De azt még mindig nem tudom, minek töltesz be TELSZAM1-be először nullát, aztán meg két sorral lejjebb egy másik értéket. Ha használat előtt felülírod, nem kell nullázni (meg amúgy is van CLRF utasítás erre, egyetlen sorral).
Ez az egész csak próbálgatás mivel az INDF virtuális regisztert még sosem használtam, és nem tudtam hogyan kell. Ezt a kis teszt "programot" pedig úgy ollóztam össze egy már meglévő ASM ből, de igazad van a CLRF valóban egyszerűbb (és szakszerűbb) lenne.
Még egyszer köszi hogy segítettél.
Szívesen, máskor is.
Viszont kijavítanám magamat egy kicsit: korábban azt írtam, ugrótáblához is használatos az indirekt címzés. A megfogalmazást tévesztettem el, ez inkább a táblázatkezeléshez hasonlít. Ugrótáblát többnyire a PCL regiszterrel való műveletvégzéssel, vagy számított ugrással csinálunk, és olyankor jellemzően a programmemória egy-egy blokkja tartalmazza a visszatérési értékeket. De ezt nem is tartozik ide, és csak azért írtam, mert kissé félreérthetően fogalmaztam.
Pedig érdemes lenne visszaolvasnod, mert mintha beszúrtam volna már egyet! Had ne én keressem meg!
Persze feltéve hogy USART-ra gondoltál amikor aszinkront emlegettél... Legyen meg, csatolom is...
Valaki tudna nekem írni egy asm-ből hex-be konvertáló program nevet? Az Mplab rosszul exportálja hex-be a programjaim!
Idézet: „Az Mplab rosszul exportálja hex-be a programjaim!” Ez lehetetlen! Mit értesz az alatt, hogy export? Idézet: „Valaki tudna nekem írni egy asm-ből hex-be konvertáló program nevet?” Mit értesz az alatt, hogy konvertáló program?
OK-ok! Már tiszta minden, csak a kijelzőm multiplexelt hajtására kell még rájönnöm...
Ettől még nem jön meg az értelme a kérdésednek...
Ha az mplab valamit rosszul csinál a programjaidból, akkor a hiba igen nagy valószínűséggel a programjaidban van...
Nem tudom mekkora feszről járatod a kék ledeket, de azoknak jóval magasabb a nyitófeszültségük mint a többinek. A pirosak 1,8 / 2 V körül már nyitnak, a kékeknek ha jól emlékszem 4 V feletti fesz kell hogy világítsanak. Tehát ha pl. 3 V ról (2X1,5V elem ) jár a PIC, akkor nem is fognak a kék ledek világítani...
Ja, most nézem a rajzot a linken " CR2032 (3V) or 2X AA (tehát 2X1,5V) Battery " Tehát amit előbb írtam az áll. 5 V ról kéne járatni az egész áramkört, vagy cseréld a LED eket pirosra. Mindkét variációnál célszerű utána számolni hogy az R1 - R8 at nem kell e átméretezni, mielőtt elpukkannak sorra a PIC kimenetei (20 mA max kimeneti áram!)
A pic égető 5v- os stabólyáról táplálom, viszont egyes kék ledek megvillannak egy pillanatra, most kipróbálom őket úgy, hogy sorba kötök a lábuk és a panel közé egy-egy 4148-ast, hátha megindulnak, egyébként 3mm-esek a ledek és 2db AA elemmel világítanak símán....
Ja és ellenállások helyett hidalóim vannak, ezek nagy fényerejű ledek.
Hűűű...áthidalások. Szerintem vagy a PIC kimenetei nem bírják a terhelést (ha még élnek) vagy az égető 5V ja. Az R1- R8 nem véletlenül van a rajzon, de ha szereted a "kamikaze megoldásokat" akkor lehet kísérletezni, csak vegyél ehhez egy marék PIC et mert nem lesznek így hosszú életűek. Az áramot a PIC esetében mindenképpen 20 mA alá kell korlátozni kimenetenként. És a kimenetek beállítását is érdemes átnézni hogy valóban kimenet e az a kimenet...(TRIS"X"...stb)
Tisztázzuk már, hogy ugye nem a PIC kimenetére vannak kötve a ledek, hanem a 74HC374-ek kimeneteire!?
- Ezt - a kapcsirajzot készítetted el pontosan? Igen? Idézet: „ Ja és ellenállások helyett hidalóim vannak, ezek nagy fényerejű ledek.” Akkor két LED nyitófeszültsége kötődik sorba? Jó hogy nem világít! Tegyél oda ellenállást, a LED amúgy sem áramkorlátózó alkatrész!
igen 2 8bites d-tároló hajtja őket multiplexben....
De az összes led világít csak a kékek nem! Betettem 220Ohm-os elennállásokat. pl. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A 0-val jelölt ledek a kékek, viszont a programban az összes led be van kapcsolva: MOVLW B'00000000' MOVWF Screen0+H'0' MOVLW B'00000000' MOVWF Screen0+H'1' MOVLW B'00000000' MOVWF Screen0+H'2' MOVLW B'00000000' MOVWF Screen0+H'3' MOVLW B'00000000' MOVWF Screen0+H'4' MOVLW B'00000000' MOVWF Screen0+H'5' MOVLW B'00000000' MOVWF Screen0+H'6' MOVLW B'00000000' MOVWF Screen0+H'7' |
Bejelentkezés
Hirdetés |