Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   997 / 1203
(#) Bell válasza f2f2 hozzászólására (») Nov 26, 2017 /
 
Az asm programot a c fordító generálta, csak azért fordítottam le külön, hogy lépésenként legyen nyomonkövethető.
A 900-as ROM címet az 1,2,3 RAM címekre teszi és onnan tölti fel a tábla regisztereit.
(#) Bell válasza ktamas66 hozzászólására (») Nov 26, 2017 /
 
A 0x900-as címen 5 van.
(#) Bell válasza benjami hozzászólására (») Nov 26, 2017 /
 
A TBLRD-vel olvassa ki a 0x900 tartalmát.
(#) Bell válasza sonajkniz hozzászólására (») Nov 26, 2017 /
 
Ha még nem váltottál bankot PIC18-nál, mi a célod ezzel a kérdéssel?
Idézet:
„Mik ezek a bankváltások?
(#) Pali79 válasza Bell hozzászólására (») Nov 26, 2017 /
 
Szerintem arra gondolt, hogy mi szükséged van rá, hogy bankot válts? Alapból 18F-nél majdnem minden megoldható enélkül is.
(#) Hp41C válasza Pali79 hozzászólására (») Nov 26, 2017 / 1
 
Hogy kinek és mikor van szüksége bankváltásra 18F -eken, azt a konkrét típus és a felhasznált adat memória mérete valamint a programnyelv és a fordító határozza meg. Sok típusban a 14. bankban is van FSR.
a movlb 0x5 a BANKED opcióval megadott utasításokat a 0x500 - 0x5FF címek közötti tartományokra végzi el. Lehet indirekten is elérni LFSR fsr0, 0x500 után pl. movwf POSTINC0,ACCESS utasítással. A movff utasítás mindkét operandus teljes 12 bites címét tartalmazza - nem kell hozzá bankváltás.
Hogy tovább fárasszam a tisztelt Nagyérdeműt, a 18F -ek közés tartozik pl. a 18F57K42 is, amiben már 64 RAM bank van, a 62. és 63. a SFR terület, a GPS pedig a 0..31 bankokban található. Egy új, 3 szavas utasítás is használható movffl ami a két operandus teljes 14 bites címét tartalmazza. Ezekben nehéz lesz bankváltás nélkül programozni.
(#) ktamas66 válasza Bell hozzászólására (») Nov 26, 2017 /
 
Nem, a 0x900-on 00 van, a 0x901-en van az 5. Az 1 2 3-as címen a pointer van, a táblázat értékeit a fordító közvetlenül beírja, hiszen konstans.
A hozzászólás módosítva: Nov 26, 2017
(#) Bell válasza ktamas66 hozzászólására (») Nov 26, 2017 /
 
Tényeken nem érdemes vitatkozni.
Az 1,2,3 RAM címen az a pointer van, ami a 0x900 ROM cím.

ROM0x900.gif
    
(#) Bell válasza Pali79 hozzászólására (») Nov 26, 2017 /
 
Talán olvass vissza és megérted miről van szó.
(#) ktamas66 válasza Bell hozzászólására (») Nov 26, 2017 /
 
Pontosan, ha ez még a 18F25K40, az 8 bites, az asm-ben a MOVFF TABLAT, LATA a csak a 900 címen levő bájtot mozgatja, ami 0x00.
(#) elektronika95 hozzászólása Nov 26, 2017 /
 
Sziasztok!

Valaki tudna segíteni PIC assembly programozásban? Nagyon sürgős lenne.
Előre is köszönöm!
(#) zzz válasza elektronika95 hozzászólására (») Nov 26, 2017 /
 
Mi a kérdés?
(#) f2f2 válasza ktamas66 hozzászólására (») Nov 26, 2017 /
 
Bell problémájára én a globális változókat a RAM ban képzeltem el.
Nem néztem, hogy az általa használt PIC nek a címzése, hogy van.
Ha a változónak, mikor mi lenne az értéke, minek lenne máshol a helye, mint RAM vagy esetleg EEPROM, ha tényleg ott a helye ?
Deha a RAMban, akkor jók a MOV utasítások.
A hozzászólás módosítva: Nov 26, 2017
(#) benjami válasza f2f2 hozzászólására (») Nov 26, 2017 /
 
A globális változó csak annyit takar, hogy bármelyik függvényből hozzáférhetünk a változóhoz, és a program futása alatt mindvégig létezik. A PIC-ek a const változókat a memória ROM területén helyezik el (régen a C18 fordítóban még a változó minősítése is 'rom' volt erre a célra), mert teljesen felesleges az igencsak szűkös RAM-ba másolni ezeket, hiszen úgy sem akarjuk az értéküket megváltoztatni. Az egy másik kérdés, hogy a 8bites PIC-eken teljesen más módon lehet hozzáférni az így létrehozott konstansokhoz, mint a sima RAM-ban tárolt globális változókhoz.
(#) Bell válasza ktamas66 hozzászólására (») Nov 26, 2017 /
 
A ROM 16 bites, a TABLAT csak 8.
A 0x900 címre így 2 byte-os adat is kerülhet. A ROM alsó byte kiolvasása a 0x900 értékű pointerrel, a felső byte a 0x901 értékű pointerrel lehetséges. Az alsó byte itt 5.

TBLRD.gif
    
(#) ktamas66 válasza Bell hozzászólására (») Nov 26, 2017 /
 
Igazad van, én kavarodtam bele bele az int/char letárolásba.
(#) pajti2 válasza elektronika95 hozzászólására (») Nov 26, 2017 /
 
Ha nagyon sürgős valami, azt úgy szokás megfogalmazni, hogy jutalom díjat kínálsz előre kifizetve. Akkor elhisszük, hogy nagyon sürgős. Egyébként meg nem
(#) Bell válasza ktamas66 hozzászólására (») Nov 26, 2017 /
 
Úgy igaz, ahogyan az előbb írtad.
A felső byte a páros, az alsó a páratlan pointerrel olvasható.
(Az ábrán ez van, a c fordító viszont fordítva csinálja, így nem tudom melyik a jó.)
A hozzászólás módosítva: Nov 26, 2017
(#) f2f2 válasza Bell hozzászólására (») Nov 26, 2017 /
 
Írj be 0x900 nak 0x0905 öt és értékátadva villogtasd le Leddel és szimulátorral lehet különbözik. 5öt vagy 9et ?

Amikor szimulátorban jó akkor 18F26K22 re vagy 46K22 re is le bírod fordítani ?
És az növeli a program méretét, hogy a kezdő értékeket is lefordítja vagy sem ?
(#) f2f2 válasza Bell hozzászólására (») Nov 27, 2017 /
 
Bell mester !
Namost hogy van ez a szimulátor szerint jó villogás dolog...
Ekkor a szimulátor mi szerint dolgozik ? a C ből külön fordított magának másik állományt vagy tökugyanaz a lefordított állomány, amit PIC re írva a globális változok nulla értéken vannak ?
Ha utóbbi akkor az értékadásoknak a fájlban kellene lenni mégis. Ha nem akkor a szimulátoros fordítás fájl rendelkezésre áll e ? Esetleg az felhasználható lehetne a végterméknek?
(#) Bell válasza f2f2 hozzászólására (») Nov 27, 2017 /
 
Futási időben bármilyen típusú, méretű, globálisan definiált változó mindig nulla értéket ad vissza.
Szimulátorban minden a helyén van.
Pedig a konstansok bekerülnek a kijelölt ROM területre, a változók a megfelelő RAM címre, sőt az eszközbe kerülő tárgykód is jónak tűnik.
De a valóságban nem működik. A 0x900 címre írt 0x0905-el sem.
(x[]={0x0905,...})
A globálisan definiált változók mindig 0 értékkel, a lokálisak viszont gond nélkül kerülnek a LATA-ba.
A program fut, az időzítések jól működnek, a ROM terület olvasása engedélyezve van, ezek szerint a konfigok is rendben vannak.
(#) f2f2 válasza Bell hozzászólására (») Nov 27, 2017 /
 
Akkor a különböző cégek? hogy programozzák ezt fel? A szimulátor külön project ugyanezekkel a c fájlokkal vagy ugyanebből kérhető ? XC8 nekem a végén hibával hagyja abba a telepítést.
(#) benjami válasza Bell hozzászólására (») Nov 27, 2017 /
 
Más típusú (esetleg másik példány) mikrovezérlővel is ugyanezt csinálja?
Amúgy nálam az ilyen __at(cím) típusú direk címhozzárendelést nem is hajlandó az fordító (XC8 v1.33) megenni, csak ha bekapcsolom a CCI vagy IAR szintaktika engedélyezését.
(#) Bell válasza f2f2 hozzászólására (») Nov 27, 2017 /
 
Ez a típus kb egy éves, a free verzió talán majd 4-5 év múlva fogja ezt valamennyire jól kezelni.
Azt is el tudom képzelni, hogy keringenek kéz alatt javítások, amikben pár hiba már ki van javítva, vagy akár linuxra egyszerű parancssori kompájlerek, de akár más nyelveken is kiválóan működők.
Ezt a hibát egy nagyon egyszerű, rövidke asm programmal szemléltetve pár sorral lentebb közzétettem.
Azon viszont csodálkozom, hogy egyesek, akik itt lenézik a C nyelv lehetőségeit és azt is, aki használja, de a nagy assembly tudásukkal rendszeresen kérkednek, hozzá se tudnak szagolni.
(#) Bell válasza benjami hozzászólására (») Nov 27, 2017 /
 
Nincs most kéznél más típus, ilyenből van 3, kettővel ugyanaz a helyzet.
A tok működik.
A legfrissebb fordítókat tettem fel, ami nem feltétlenül a legjobb.
Igen, azt bekapcsoltam, de ha kikapcsolom, azt is elfogadja.

Az asm-et lefordítva is ugyanaz a helyzet, így a fordító kiesik.
Vagy az asm-ben, vagy a konfigban kellene felfedezni a hibát.
(#) benjami válasza Bell hozzászólására (») Nov 27, 2017 / 1
 
Errata-t néztél már? A flash rom olvasása és az NVMREG regiszter értéke között van némi összefüggés: "TBLRD Requires NVMREG Value to Point to
Appropriate Memory", induláskor kell egy BSF NVMCON1, 7 utasítás.
Amúgy meg szerintem senkinek nincs itt rajtad kívül ilyen chipje otthon, így legfeljebb a szimulátorban tudják kipróbálni, de ugye ott meg jól működik.
A hozzászólás módosítva: Nov 27, 2017
(#) sonajkniz válasza Bell hozzászólására (») Nov 27, 2017 /
 
Idézet:
„.Azon viszont csodálkozom, hogy egyesek, akik itt lenézik a C nyelv lehetőségeit és azt is, aki használja, de a nagy assembly tudásukkal rendszeresen kérkednek, hozzá se tudnak szagolni.”

Én meg azon csodálkozom, hogy ilyeneket írkálsz, miután többen is kértük, hogy írd le, mit is kellene ennek a programnak szerinted csinálnia. Mi az elképzelésed? Mi oka van annak, hogy egy egylépcsős adatkezelést táblázatból akarsz megoldani?
Azt is kérdezték már tőled, miért 0x800-nál kezdődik a programod.
Majd ha ezekre a kérdésekre válaszolsz, valószínűleg rájövünk, hol a hiba.
(#) Bell válasza benjami hozzászólására (») Nov 27, 2017 /
 
Pillanatnyilag betettem a C fájl elejére, így rendben van.
Köszönöm a segítséget!
  1. #asm
  2. BSF NVMCON1, 7
  3. #endasm

Az errata szerint így kellene:
  1. C code:
  2. Create an assembly file named power-up.as and
  3. include  this  file  with  the  other  files  in  the  project.
  4. This  file  will  change  the  NVMREG<1:0>  bits  to
  5. point   to   program   Flash   before   any   code   is
  6. executed.
  7. Contents of the powerup.as file:
  8. #include <xc.inc>
  9. GLOBAL  powerup, start
  10. PSECT   powerup, class=CODE, delta=1,
  11. reloc=2
  12. powerup:
  13. BSF     NVMCON1, 7
  14. GOTO    start
  15. end

De ezt a power-up.as fájlt nem tudom összekötni a C fordítóval.
A hozzászólás módosítva: Nov 27, 2017
(#) Bell válasza sonajkniz hozzászólására (») Nov 27, 2017 /
 
Több alkalommal leírtam, hogy a globális változókat nem lehet definiálni, az értékük mindenütt nulla.
A programnak nincs jelentősége, mert az csak a szemléltetéshez kellett. De leírtam a programot és azt is, amit valóban végrehajt.
Legutóbb itt
(#) benjami válasza Bell hozzászólására (») Nov 27, 2017 /
 
Pedig a fordító könyvtárában létezik a sources/pic18/powerup.as a következő tartalommal:
  1. global powerup,start
  2.   psect powerup,class=CODE,delta=1,reloc=2
  3. powerup:
  4.   nop ;Suggested Microchip errata workaround
  5.   goto start
  6.   end

A goto előtti sorban még oda is van írva, hogy ha az errata javasol valami induláskori hibajavítást, akkor azt ide lehet a nop helyére beszúrni. Így már működne a globális és statikus változóid kezdőértékének megadása is, mert a startup program ezután futna le és így már képes lenne a flash programtárból bemásolni a kezdőértékeket.
Következő: »»   997 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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