Fórum témák
» Több friss téma |
Sziasztok.
Pic18f2550 telepítem bootloadert az alábbiak alapján: Bővebben Sikerült minden, a program felismeri a pic et, azonban ha valami .hex beírok, nem történik semmi sem. A forráskódot és a .hex mellékelve küldöm. Előre is köszönöm a segítséget.
A bootloader található a programtár elején. El kellene érned, hogy a programod a bootloader "fölé" kerüljön a memóriába.
Ha több digitális potméter kezelése a feladat, melyik fajta kommunikációt célszerű használni? SPI vagy I2C? Egyiket sem használtam még, semmiféle tapasztalatom sincs. Összesen 4 db potmétert kellene kezelni egy PIC-kel.
Ha az I2C felületű digitális potméter rendelkezik A0 és A1 lábakkal, akkor előnyösebb az I2C (2 vezeték, de lassadd, mint az SPI).
Az SPI gyorsabb kezelést tesz lehetővé, de a CS vezetékeket egyedileg kell vezérelni. (3(SDI, SDO, SCK) + 4 CS vezeték). A CS jeleleket egy külső dekóderrel is elő lehet állítani (74HC139) (3(SDI, SDO, SCK) + 2 CS kiválasztó vezeték).
Ezzel van a problémám, hogy ezt hogyan lehetne megoldani.
A kódba elvileg beraktam de nem működik.
Jól értem, hogy az A0 és A1 lábaka csak simán GND-re vagy Vdd-re kell kötni a cím beállításához?
Az volna még a kérdésem, jól értelmezem azt, hogy a többcsatornás potméterek különálló potméterekként funkcionálnak? Tehát mindegyik külön állítható a megfelelő regiszter írásával?
Amit te beraktál a kódba az csak egy definíció. Azt mondod a fordítónak, hogy xy nevű dolog értéke mi legyen. Az, hogy te mit akarsz azzal az xy-al azt a fordító nem tudja kitalálni.
Mintha azt mondanám, hogy A=3, oké, de mi az "A" és minek? Az sem mindegy milyen fordító. Itt egy minta a vektor áthelyezésre C18 alatt.
De tanulmányozhatod icserny fórumtárs oldalán a megszakításokat is, amiről már tudnál, ha beleolvastál volna a témába. Viszont ha MpLab X alatt programozol akkor ott egy menüpontban csak meg kell adni a CODE OFFSET paramétert és úgy fordítja a HEX-et. A hozzászólás módosítva: Jún 29, 2015
HID bootloader-t használva a reset és a megszakítás vektorok 0x1000, 0x1008, 0x1018 címre kell hogy kerüljenek. C18-as fordítót használva a mellékletben levő három fájlból lehet kiindulni.
Idézet: „atmega8 lesz” Ezért kérdezel PIC topicba?! Dombon ülő fűcsomó legyek ha értem.
Nem világos, mit szeretnél.
Akarsz gyártani egy léptető motor meghajtót, vagy vezérelni szeretnél egyet? Ugyanis gyártani nem érdemes. (többe kerül, mint megvenni). Vezérelni meg roppant egyszerű. A beállított lépésszög és a használt motor alapján, megkeresed azt a frekvenciát, ahol a legnagyobb nyomaték mellett a leg zajtalanabbúl fut a motor. Készítesz egy rövid felfutó, és lefutó ciklust. (Teljes freki 50%-tól indul) Majd annyi impulzust adsz ki rá az optimális frekvencián, amekkora elmozdulást szeretnél. (A fel- és lefutást is beleszámolva az impulzusokba)
Kedves Fórumtársak! Egy gyors kérdésem lenne. Van egy mikrocontroller (12f675), melynek két analóg bemenetét szeretném használni, viszont a két analóg feszültségnél az egyiket egy külső ref. feszültséghez, a másikat a Vdd-hez szeretném hasonlítani. Lehetséges-e ez úgy, hogy a programból menet közben átkapcsolom az ezt vezérlő regiszter megfelelő bitjét (ADCON0.VCFG)? Illetve, ha Ube > Uref milyen értéket ad vissza a konverzió? 1023-at? Vagy túlcsordul, és a túlcsordulás egy 1023-nal kisebb szám lesz?
Szia!
Nem csináltam még menet közbeni átkapcsolást, de szerintem lehet, hiszen ha a hardver átkapcsolódik, akkor attól kezdve annak megfelelően kell működnie ! Ha Ube > Uref, akkor a maximális kódot adja vissza ( "limitál" !) .
Köszönöm szépen! Akkor lehet, hogy a váltások közbe nem árt várakozási időt beszúrni?
A hozzászólás módosítva: Jún 30, 2015
Sziasztok!
A kérdésem a következő: PIC18F6622 SPI digitális poti vezérlés, így miért nem megy?
Így viszont működik:
A hozzászólás módosítva: Júl 1, 2015
Valoszinuleg a bankokkal kevertel el valamit.
A movff nem foglalkozik a bankokkal, a movwf igen.
Most ismerkedem a 18F-ekkel, de eddig úgy tudtam, hogy ezeknél nem nagyon kell bank váltással foglalkozni. Vagy mégis?
A regiszterek egy resze mas memoriatartomanyban van, adatlapban nezz utana.
Csak erre tudok gondolni a hiba alapjan. Esetleg a ket utasitas eltero hosszusagu, de nem hinnem. Probalj meg a movff utan egy NOP-ot tenni.
Nincs. Fordítás után ezt adja:
Hát nem tudom. Icserny oldalán érthetően le van írva, legalábbis azt hiszem értem. Azt írja, hogy a movff utasítás pont azért kétszavas, mert benne van a címzés is.
Idézet: „Message[313] D:\PIC\18F6622_ENCODER_SPI_DIGIPOT.ASM 174 : CBLOCK constants will start with a value of 0.” A CBLOCK után meg kell adni egy értéket.
Ennél a PIC-nél az összes SFR a Bank15 2. felében van, tehát bőven 1 bankban van, normálisan lehet az "Acces Bank" módszert használni.
Pali79: Idézet: „ezeknél nem nagyon kell bank váltással foglalkozni” Ez sajnos nem egészen igaz. Habár jobban el vannak helyezve a regiszterek, illetve megjelent az "acces bank" módszer, sajnos főleg az újabb PIC-eknél az egyre több periféria miatt már nem férnek el az SFR-ek abban a memóriatartományban, amit "át tud fogni" az utasítás. Ezért vagy bankot kell váltani, vagy más módszert kell használni (direkt erre a célre van kialakítva azt hiszem az úgynevezett "ablakos" módszer, amivel Te adhatod meg, mettől meddig tartson az acces bank). Az acces bank-ot pedig úgy képzeld el, mint ha 1 bank lenne, általában az első felében a GPR-ek vannak (ide deklarálod tulajdonképpen a "változókat"), a másik felében pedig a SFR-ek. Azonban az egyre több SFR miatt már nem férnek ezek bele ebbe a "virtuális bank"-ba. Azt pedig, hogy az aktuális PIC-nél akkor mi a helyzet, egyszerűen meg tudod nézni, a "DATA MEMORY MAP"-nál az adatlapban. Ha az Acces Bank-ba beleférnek az SFR-ek, akkor nem kell bankolgatni (feltéve, hogy a használt GPR-ek is beleférnek), ha pedig már nem fér el, akkor bizony jobban kell figyelni. De egyébként előttem Hp41C leírta, mi a hiba.
Értem, de mégsem egészen. Vagyis az adatlapot nem értem. Pl. a 16F628A adatlapjában világosan látszik (számomra is), hogy a CBLOCK kezdete a 0x20, tehát mindig ezt írtuk oda, utána meg ORG 0x0000 és minden ment mint a karikacsapás. De ennél nem világos. Nézegettem a PICula oldalát is, de csak összekavart. A CBLOCK-ra 0x000 van írva, a program kezdetre meg ORG 0x0200, de nem látom az adatlapból, hogy ez miért van így.
A CBLOCK definícióval az adatmemória kezdőcímét jelölöd ki, vagyis azt a helyet, ahova majd deklarálni akarod a változókat. Ezek kerülnek majd a GPR részbe. Sokszor azért kell a 0x20 helyre rakni, mert előtte SFR, illetve nem implentált regiszterek vannak.
Az ORG szóval pedig a programmemória kezdőcímét jelölöd ki, azaz azt adod meg, hova kerüljön az adott programrész a programmemóriában. |
Bejelentkezés
Hirdetés |