Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   619 / 1319
(#) Hujikolp hozzászólása Dec 13, 2009 /
 
Üdv!

Furcsa tapasztalatom van:
PIC16F887-tel dolgozok. Lap váltás beállítva, oda is tudok ugrani(GOTO). Gombokat nem kezeli és ha portot szeretnék törölni LAP1-ből, meghal az egész, rezetel. Ha beállítanék, csak 1-et tudok, ha még egyet állítanék, akkor is meghal.

Mit rontok el? Vagy valamit be kell állítani?
(#) Attila86 válasza MPi-c hozzászólására (») Dec 13, 2009 /
 
És tényleg, köszönöm!
Pedig erről olvastam is tegnap.

Van valami módszer véletlen szám generálására? Az oké hogy pörgetek egy számlálót jó gyorsan, aztán a nyomógomb felengedésekor megnézem hogy hol tart. De külső behatás nélkül lehet valahogy véletlen számot generálni?
(#) icserny válasza valaki2 hozzászólására (») Dec 13, 2009 /
 
Idézet:
„Esetleg beállitásbeli gond?”

Igen, arra gyanakszom. Az FOSC2=OFF ugyanis azt jelenti, hogy ha OSCCON alsó két bitje nulla, akkor a belső oszcillátort kell használni. Ezért úgy sejtem, hogy FOSC=ON lenne a jó választás...

Mellesleg:
- DEBUG = ON helyett OFF is bölcsebb volna, ha I/O célokra szeretnéd használni az RB6/RB7 lábakat.
- STVREN=ON reseteléssel jelezné, ha túlcsordul a veremtár.
(#) MPi-c válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Szia!
Idézet:
„Van valami módszer véletlen szám generálására?”

Bővebben: Link
(#) icserny válasza icserny hozzászólására (») Dec 13, 2009 /
 
Bocs, kimarad a kettes! Tehát FOSC2=ON a javaslat...
(#) Attila86 hozzászólása Dec 13, 2009 /
 
Létezik olyan 18f-es PIC, aminek van 2db teljesen kivezetett portja, illetve még egy aminek legalább négy bitje ki van vezetve és ebből kettő legalább 11 bites felbontású A/D?

Szerk.: A Microhip-nek is van olyasmi táblázata mint a Maximnak, úgyhogy lehet böngészgetni...


MPi-c!
Köszönöm, bár sajnos mostani ismereteim fényében még nem értem. :no:
(#) valaki2 válasza icserny hozzászólására (») Dec 13, 2009 /
 
Igen az oszcillátor nem volt rendesen beállitva. Valószinű emiatt nem volt jó, amit szimulátorba néztem. Most már jó. Köszönöm a segítséget

Üdv
(#) szilva válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Léteizik a Microchipnél egy MAPS (Microchip Advanced Parts Selector) nevű segédlet. Ez működik böngészőből is online, meg van gépre letölthető verziója is. Ennek segítségével megtudod találni az igényednek leginkább megfelelő Microchip alkatrészt, nem csak a PIC-eket.
(#) icserny válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Van 16 bites perifériabővítő IC pl. MCP23017 vagy MCP23S17. Az első I2c a másik SPI interface.

11 bites ADC nincs. 12 bites van, azt korábban már ajánlottam Neked.
(#) Attila86 válasza icserny hozzászólására (») Dec 13, 2009 /
 
Külső A/D nem kell most. De már találtam egy példányt: PIC18F2423. Az egyik port 8 bitje lesz a nyolc szegmens, a másik port 8 bitje pedig a nyolc digit. Az egyik A/D feszültséget mér, a másik áramot. A két négydigites LED kijelző pedig kiírhat feszültséget, áramot, teljesítményt stb a labortáp előlapján...

Van pár jó ötletem, csak tanulgatni kellene még sokat.
(#) watt válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Idézet:
„Van pár jó ötletem, csak tanulgatni kellene még sokat.”

Igen, egy kicsit előrerohantál szerintem!
(#) Hujikolp válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
Összeszedtem a kódot, hátha lát benne valaki valamit.
  1. LAP0    macro                   ; Select LAP0
  2.         BCF     PCLATH,3        ;az 0. lap beállítása
  3.         BCF     PCLATH,4        ;az 0. lap beállítása
  4.         endm
  5. LAP1    macro                   ; Select LAP1
  6.         BSF     PCLATH,3        ;az 1. lap beállítása
  7.         BCF     PCLATH,4        ;az 1. lap beállítása
  8.         endm
  9.  
  10. BANK0   macro                   ; Select register BANK 0
  11.         BCF     STATUS,RP0
  12.         BCF     STATUS,RP1
  13.         endm
  14.        
  15. BANK1   macro                   ; Select register BANK 1
  16.         BSF     STATUS,RP0
  17.         BCF     STATUS,RP1
  18.         endm
  19.  
  20. #DEFINE         DP1             PORTC,2 ; LED
  21. #DEFINE         DP0             PORTC,1 ; LED
  22.  
  23. ÓRA_E                  ; LAP0
  24.         LAP1
  25.         GOTO    Q0
  26.  
  27.  
  28.  
  29.  
  30.         ORG             800     ; LAP1
  31. Q0
  32.         BCF             DP0
  33.         BSF             DP1
  34. ...
  35.         LAP0
  36.         CALL    TÖRÖLD
  37.         GOTO    WW
  38.  
  39. WW      NOP
  40.         GOTO    WW

A Q0-t nem hajlandó lefuttatni. Utána vannak még címkék, de azokat nem illesztettem ide be, illetve több ilyen BCF is van benne.
(#) MPi-c válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
Az org 800 miatt kérdezem, hogy vajon radixnak mi van beállítva?
(#) Hujikolp válasza MPi-c hozzászólására (») Dec 13, 2009 /
 
A micsodának?
Az ORG 800-at azért tettem bele, mert a 0. lapot még nem írtam tele teljesen, de ott már nem férne el még egy rész, ezért kezdeném a következő lapon.
Azt tudom, hogy az ORG-gal lehet kiválasztani a memória címet, és a 1. lap a 0x0800-tól kezdődik.

Ezt a radixot nem értem.
(#) kissi válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
Azért kérdezte, mert ha pl. 10-es számrendszerre állítottad az alapértelmezett számrendszert ( radix-ot), akkor a 800 --> 0x320 -at jelent!

Steve
(#) Attila86 hozzászólása Dec 13, 2009 /
 
Nézzétek meg légyszíves, találtok-e rajta valami hibát! Ha nem, akkor holnap levasalom.
Kapcsolási rajz
Beültetési kép
Nyákterv


Szerk.: A mikrovezérlő egyébként PIC18f4520 lesz. A Chipcad-nél a PIC18F4520-E/P 880Ft, a PIC18F4520-I/P pedig 800Ft. Mi a különbség a kettő között?
(#) Attila86 válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Már nem tudom szerkeszteni az előzőt sajnos. A különbség a hőmérséklet-tartomány...
(#) MPi-c válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
A PCLATH regisztert gondolom csak azért piszkálgatod, hogy az egész memóriát átfogó goto és call hívásokat kipróbáld.
Fordítsd le a kódodat és nézd meg, hogy az általad org 800-zal kezdődő rész hova fordul (View menű -> Program Memory) rögtön látod, hogy jó helyen van-e. Ha nem a 0x800 címtől látod ezt a részt, a radix nem hexadecimálisra van állítva. Akkor javítsd ki a címet az org után "0x800"-ra!

Radix. Ahogy kissi utalt rá, alapértelmezett számrendszer. Nézd meg az MPASM Assembler helpjében! :nezze:
Függetlenül a radix beállításától helyes szokás a számokat a megfelelő számrendszerre utaló előtaggal megadni (B,O,D,H vagy 0x...), így elkerülhető a keveredés és a meglepetés.
(#) MPi-c válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Idézet:
„A Chipcad-nél a PIC18F4520-E/P 880Ft, a PIC18F4520-I/P pedig 800Ft. Mi a különbség a kettő között?”


Az ár, feltétlenül...
I: (Industrial) hőmérséklettartomány: -40°C - +85°C
E: (Extended) : -40°C - +125°C
P: dip tokos

A PIC közvetlen közelébe kell tenni a tápjára 100 n-os hidegitő kondikat...
(#) Hujikolp válasza MPi-c hozzászólására (») Dec 13, 2009 /
 
Köszönöm a radix segítségeket, most már értem mi is ez.

A fordító így is, úgy is jó helyre tette, a 0x0800 helyre, de a progi a picen még nem megy jól.

Esetleg nem lehet valami olyan, hogy mivel lapot váltottam, akkor a lapváltással együtt bankot is vált? Ugyanis a BANK1-ben nincsen PORTx csak TRISx. Ha viszont olyan művelet van a másik lapon (lap1), ami a PORT-ot állítja, akkor bankot kellene váltani?
Vagy ez hülyeség lenne?
(#) watt válasza Attila86 hozzászólására (») Dec 13, 2009 /
 
Kondikat szándékosan nem rajzolod fel az IC-k lábaihoz?
(#) Hp41C válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
Szia!

- Azt kellene tudni, hogy az ÓRA_E címke hol van a programban (org ..)

- Az egyértelműség érdekében használd a 0x800 formát, ahogy azt mások is ajánlották.

- A 37. és 38. sorokkal így is probléma van:
A 37. soban meghívod a 0. lapon levő TÖRÖLD rutint. Előtte, helyesen, beállítod a PCLATH értékét.
A 38. sorban azonban egy, az 1. lapon levő címkére szeretnél ugrani (mivel nem látjuk a TÖRÖLD rutint, azt feltételezem, hogy nem változtatja meg a PCLATH értékét), a PCLATH-ban a 0. lap használata van előkészítve, a kontroller a 0. lapon a WW & 0x7FF címére fog ugrani...

- Ha van megszakítás és nem csak a 0. lapot használod, akkor a PCLATH értékét is menteni kell a megszakítási rutinban. A mentés után a 0. lapot kell előkészíteni (clrf PCLATH). A visszatéréskor a mentett PCLATH értéket is vissza kell állítani.

- A banksel és a pagesel beépített makrók használatát ajánlom.

Szia
(#) MPi-c válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
Nem, bankot nem vált. A korábban betett kódból nem dönthető el, hogy minden jól van-e beállítva, pl.hiányzik belöle a C port beállítása kimenetnek. A végén sem jól van a lapbeállítás a goto WW előtt...
(#) Hujikolp válasza Hp41C hozzászólására (») Dec 13, 2009 /
 
Üdv!

Az ÓRA_E az még a 0. lapon található, azért kellett létrehozni, hogy az ugrás előtt betudjam állítani a lapot.
Átírom helyesre az ORG-ot.
a 38. sornál már nem ugrik vissza a 0. lapra, hanem ott, az 1. lapon egy végtelenített ciklusba ugrasztja.
Ha visszatért a 0. lapról (elvégezte a TÖRÖLD rutint) akkor vissza kell állítani az 1. lapra a PCLATH-ot?

Használok megszakítást, és eddig nem mentettem a PCLATH-ot, valószínűleg emiatt nem tetszett neki. Nekiugrok ennek. A pagesel-nek meg utánanézek.

#578231 MPi-c: A lap beállítás miért nem jó?
(#) MPi-c válasza Hujikolp hozzászólására (») Dec 13, 2009 /
 
Idézet:
„MPi-c: A lap beállítás miért nem jó?”


Mert a 0x0800 cím után befordított sorokban a CALL TÖRÖLD előtt a PCLATH bitjeit törlöd. Azt nem tudjuk, hogy a szubrutinban mi történik a PCLATH bitjeivel majd a visszatérés után ismét van egy GOTO a törölt PCLATH 3:4 bitekkel. Ez megint a 0. lapra ugrik nem a 0x0800 valahány címen lévő WW cimkére. (de ezt írta le H4p41C is...)
(#) MPi-c válasza MPi-c hozzászólására (») Dec 13, 2009 /
 
Idézet:
„(de ezt írta le H4p41C is...)”
Bocs! Hp41C
(#) Attila86 válasza watt hozzászólására (») Dec 13, 2009 /
 
A kapcsolási rajzon? Hát most így jött ki. A nyákon ott vannak a kis elkók. De teszek melléjük fóliakondit is.

Egy szubrutinban lehet több RETURN utasírás? Hogy mondjuk itt is vissza tudjon ugorni, de ha egy feltétel nem teljesült akkor fusson még egy kicsit és onnan ugorjon vissza. De ha még akkor sem teljesült egy feltétel akkor még mindig fusson stb...
Illetve; az egyszerű címke, amire GOTO utasítással tudok ugorni miben különbözik formailag a szubrutintól? Jól gondolom hogy csak annyiban, hogy RETURN vagy RETLW utasítás van a végén?
(#) Hujikolp válasza MPi-c hozzászólására (») Dec 13, 2009 /
 
No, igen, ez volt a baja, legalábbis most lefutnak azok a sorok. Ha lapot váltottam, utána vissza kell állítani a lapot. Ezt eddig nem tudtam, jó lesz megjegyezni (A tiedet valahogy előbb feltudtam fogni, mint amit Ő írt :pirul: ) A TÖRÖLD rutin egyébként nem piszkálja a PCLATH-ot.

Köszönöm mindenkinek a segítséget, még a megszakításnál elmentem az elmentendőket, akkor remélem már hibátlan lesz a dolog!

Köszönöm még egyszer mindenkinek!
(#) Hujikolp válasza Attila86 hozzászólására (») Dec 13, 2009 / 1
 
Idézet:
„Egy szubrutinban lehet több RETURN utasírás?”

Persze! Én is használok többet, ha valahol teljesül valami, akkor ugrik vissza.
A cimkére tudsz hivatkozni a GOTO-val és a CALL-al is.
Ha GOTO-val mész oda, akkor ott is marad, ha CALL-al, akkor az első talált RETURN-nál vagy RETLW-nél visszaugrik oda, ahonnan volt a CALL.
A RETURN az egy sima visszatérítő utasítás, a RETLW 0x00 (pl) pedig olyan, hogy amit megadtál konstansban (ami mögötte van) azt beteszi a W-be (work regiszter) és úgy tér vissza. Táblázatoknál nagyon hasznos.
Ha jól tudom, akkor ha GOTO-val megyünk el egy címkére, és RETURN-t talál, akkor NOP-pal helyettesíti, (ha nincs a veremben valami).
(#) Hp41C válasza Hujikolp hozzászólására (») Dec 13, 2009 / 1
 
Szia!

Idézet:
„Ha jól tudom, akkor ha GOTO-val megyünk el egy címkére, és RETURN-t talál, akkor NOP-pal helyettesíti, (ha nincs a veremben valami).”


Nem célszerű ilyet csinálni, a nagyobb, modernebb pic-eknél stack undeflow kivételt vagy resetet okoz.

Csak akkor használd, ha már egy szubrutin belsejében vagy, így egy másik részletre ugorhatsz, ami return/retlw utasítással tér vissza.

Szia
Következő: »»   619 / 1319
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