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   686 / 1207
(#) Pali79 válasza zenetom hozzászólására (») Jún 28, 2015 /
 
Nagy vagy!
(#) kt hozzászólása Jún 29, 2015 /
 
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.
(#) Hp41C válasza kt hozzászólására (») Jún 29, 2015 /
 
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.
(#) Pali79 hozzászólása Jún 29, 2015 /
 
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.
(#) Hp41C válasza Pali79 hozzászólására (») Jún 29, 2015 /
 
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).
(#) kt válasza Hp41C hozzászólására (») Jún 29, 2015 /
 
Ezzel van a problémám, hogy ezt hogyan lehetne megoldani.
A kódba elvileg beraktam de nem működik.
(#) Pali79 válasza Hp41C hozzászólására (») Jún 29, 2015 /
 
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?
(#) Hp41C válasza Pali79 hozzászólására (») Jún 29, 2015 /
 
Igen...
(#) Pali79 válasza Hp41C hozzászólására (») Jún 29, 2015 /
 
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?
(#) usane válasza kt hozzászólására (») Jún 29, 2015 /
 
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.
  1. #include "p18F4550.h"
  2.  
  3. void low_isr(void);
  4. void high_isr(void);
  5.  
  6. #pragma code low_vector=0x2018
  7. void interrupt_at_low_vector(void)
  8. {
  9.   _asm GOTO low_isr _endasm
  10. }
  11. #pragma code
  12.  
  13. #pragma code high_vector=0x2008
  14. void interrupt_at_high_vector(void)
  15. {
  16.   _asm GOTO high_isr _endasm
  17. }
  18. #pragma code
  19.  
  20. #pragma interruptlow low_isr
  21. void low_isr (void)
  22. {
  23.  
  24.  return;
  25. }
  26.  
  27. #pragma interrupt high_isr
  28. void high_isr (void)
  29. {
  30.  return;
  31. }
  32.  
  33. void main( void )
  34. {
  35.      ...;
  36.  }


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
(#) kt válasza usane hozzászólására (») Jún 29, 2015 /
 
Köszönöm a segítséget.
Sikerült megoldani.
(#) benjami válasza kt hozzászólására (») 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.
(#) freechat hozzászólása Jún 29, 2015 /
 
4 vezetékes bipolár léptető motorral küzdök.
L293+raspberry pi-vel, de ez csak átmeneti, utána atmega8 lesz (azért is ide tettem fel a kérdésem).

Minden szép és jó csak a sekvencia hiányzik, a netet már keresztbe kasul bejártam, de nem találtam érthető leírást.
(#) Pali79 válasza freechat hozzászólására (») Jún 29, 2015 /
 
Idézet:
atmega8 lesz”

Ezért kérdezel PIC topicba?! Dombon ülő fűcsomó legyek ha értem.
(#) sonajkniz válasza freechat hozzászólására (») Jún 30, 2015 /
 
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)
(#) Hp41C válasza sonajkniz hozzászólására (») Jún 30, 2015 /
 
A Google segít...
(#) DJozso hozzászólása Jún 30, 2015 /
 
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?
(#) kissi válasza DJozso hozzászólására (») Jún 30, 2015 / 1
 
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" !) .
(#) DJozso válasza kissi hozzászólására (») Jún 30, 2015 /
 
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
(#) Pali79 hozzászólása Júl 1, 2015 /
 
Sziasztok!
A kérdésem a következő: PIC18F6622 SPI digitális poti vezérlés, így miért nem megy?
  1. movff    spi_adat,SSP1BUF

Így viszont működik:
  1. movf    spi_adat,w
  2. movwf   SSP1BUF
A hozzászólás módosítva: Júl 1, 2015
(#) bbalazs_ válasza Pali79 hozzászólására (») Júl 1, 2015 /
 
Valoszinuleg a bankokkal kevertel el valamit.
A movff nem foglalkozik a bankokkal, a movwf igen.
(#) Pali79 válasza bbalazs_ hozzászólására (») Júl 1, 2015 /
 
Most ismerkedem a 18F-ekkel, de eddig úgy tudtam, hogy ezeknél nem nagyon kell bank váltással foglalkozni. Vagy mégis?
(#) nedudgi válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
Errorlevel 302 be van kapcsolva?
(#) bbalazs_ válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
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.
(#) Pali79 válasza nedudgi hozzászólására (») Júl 2, 2015 /
 
Nincs. Fordítás után ezt adja:
  1. Message[313] D:\PIC\18F6622_ENCODER_SPI_DIGIPOT.ASM 174 : CBLOCK constants will start with a value of 0.
  2. Warning[226] D:\PIC\18F6622_ENCODER_SPI_DIGIPOT.ASM 291 : Destination address must be word aligned
  3. Warning[226] D:\PIC\18F6622_ENCODER_SPI_DIGIPOT.ASM 295 : Destination address must be word aligned
(#) Pali79 válasza bbalazs_ hozzászólására (») Júl 2, 2015 /
 
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.
(#) Hp41C válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
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.
(#) zenetom válasza bbalazs_ hozzászólására (») Júl 2, 2015 /
 
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.
(#) Pali79 válasza zenetom hozzászólására (») Júl 2, 2015 /
 
É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.
(#) zenetom válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
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.
Következő: »»   686 / 1207
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