Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   262 / 1320
(#) potyo válasza gyerek67 hozzászólására (») Aug 14, 2008 /
 
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.
(#) gyerek67 válasza potyo hozzászólására (») Aug 14, 2008 /
 
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.
(#) potyo válasza gyerek67 hozzászólására (») Aug 14, 2008 /
 
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.
(#) gyerek67 válasza potyo hozzászólására (») Aug 14, 2008 /
 
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.
(#) potyo válasza gyerek67 hozzászólására (») Aug 14, 2008 /
 
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.
(#) Bazsi hozzászólása Aug 14, 2008 /
 
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.
(#) menyus hozzászólása Aug 14, 2008 /
 
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
(#) kobold válasza menyus hozzászólására (») Aug 14, 2008 /
 
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

  1. MOVLW 0x20
  2. MOVWF FSR ; megcímezzük a 0x20-as regisztert
  3. MOVLW B'00000011'
  4. MOVWF INDF ; a címzett regiszterbe indirekten beírunk 0x03-at, vagy akármit
(#) gyerek67 válasza potyo hozzászólására (») Aug 14, 2008 /
 
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!
(#) menyus válasza kobold hozzászólására (») Aug 14, 2008 /
 
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?
(#) menyus válasza kobold hozzászólására (») Aug 14, 2008 /
 
Ja, látom mit toltam el... figyelmetlen voltam...
(#) kobold válasza menyus hozzászólására (») Aug 14, 2008 /
 
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:
  1. MOVF számérték, W ; a számérték, amit ki kell írni, legyen 4
  2. ADDLW 0x20 ; ha a 0 kódja 0x20-on volt, akkor a 4-é a 0x24-en, ez az offszet beállítása
  3. MOVWF FSR ; megcímezzük a 0x24-es RAM-cellát
  4. MOVF INDF, W ; a korábban eltárolt kód az akkuba kerül
  5. MOVWF PORTB ; szegmens-állapotok kivezérlése egy porton

A második példa a blokk-törlés egy módja:
  1. MOVLW 0x08
  2. MOVWF cntr ; számláló 8 regiszter törléséhez
  3. MOVLW 0x20
  4. MOVWF FSR ; a törlést a 0x20-as címtől kezdjük
  5. CLRF INDF ; címzett regiszter törlése
  6. INCF FSR, F ; címző érték növelése
  7. DECFSZ cntr, F ; számláló dekrementálása
  8. GOTO $-3 ; amíg cntr 0 nem lesz, ugrás vissza

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.
(#) menyus válasza kobold hozzászólására (») Aug 14, 2008 /
 
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?
(#) menyus válasza menyus hozzászólására (») Aug 14, 2008 /
 
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
(#) kobold válasza menyus hozzászólására (») Aug 14, 2008 /
 
Í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).
(#) menyus válasza kobold hozzászólására (») Aug 15, 2008 /
 
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.
(#) kobold válasza menyus hozzászólására (») Aug 15, 2008 /
 
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.
(#) watt válasza Bazsi hozzászólására (») Aug 15, 2008 /
 
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...
(#) mammut hozzászólása Aug 15, 2008 /
 
Valaki tudna nekem írni egy asm-ből hex-be konvertáló program nevet? Az Mplab rosszul exportálja hex-be a programjaim!
(#) watt válasza mammut hozzászólására (») Aug 15, 2008 /
 
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?
(#) mammut válasza watt hozzászólására (») Aug 15, 2008 /
 
OK-ok! Már tiszta minden, csak a kijelzőm multiplexelt hajtására kell még rájönnöm...
(#) watt válasza mammut hozzászólására (») Aug 15, 2008 /
 
Ettől még nem jön meg az értelme a kérdésednek...
(#) potyo válasza mammut hozzászólására (») Aug 15, 2008 /
 
Ha az mplab valamit rosszul csinál a programjaidból, akkor a hiba igen nagy valószínűséggel a programjaidban van...
(#) mammut hozzászólása Aug 15, 2008 /
 
Már megy minden, de érdekes módon a kék ledek meg se nyikkannak ...

Egyébként ezzel szórakozok.
(#) menyus válasza mammut hozzászólására (») Aug 16, 2008 /
 
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...
(#) menyus válasza mammut hozzászólására (») Aug 16, 2008 /
 
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!)
(#) mammut válasza menyus hozzászólására (») Aug 16, 2008 /
 
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.
(#) menyus válasza mammut hozzászólására (») Aug 16, 2008 /
 
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)
(#) watt válasza mammut hozzászólására (») Aug 16, 2008 /
 
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!
(#) mammut válasza watt hozzászólására (») Aug 16, 2008 /
 
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'
Következő: »»   262 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem