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   1056 / 1203
(#) szucsistvan123 hozzászólása Nov 21, 2018 /
 
Helo!

A legújabb MPLAB X IPE -ben hol lehet beállítani, hogy a Pickit 3 folyamatosan adjon ki 5V-ot? (az áramkör teszteléséhez)

Köszi!
(#) Hp41C válasza szucsistvan123 hozzászólására (») Nov 21, 2018 / 1
 
Nem tudom, hogy működik-e még (3.45):
Settings/Advanced Mode
Jelszó
Power
ICSP Options panelen a Power Target Circuit from Tool négyzetbe kell a pipa.
A hozzászólás módosítva: Nov 21, 2018
(#) szucsistvan123 válasza Hp41C hozzászólására (») Nov 21, 2018 /
 
Szia!

Köszi a választ!

Ez be van pipálva, de csak akkor megy, ha programozás után nyomok egy disconnect-et, és azután is várni kell egy kicsit,és egyszer csak elindul.

Ez mennyire tekinthető normális működésnek? :O
Egyébként 5.10-es verziót használok.
(#) eSDi válasza szucsistvan123 hozzászólására (») Nov 21, 2018 /
 
Érdekes. Pont fordítva kellene működnie. PK4 akkor adja a tápot, ha csatlakozva van a PIC-hez. De még mindig megmaradt az a jelenség, hogy nem lép ki reset-ből. Nem lehet, hogy nálad is csak ez a baj? Settings->Hold in Reset<->Release from Reset. Nálam egyszer reset-be kell rakni és vissza, ekkor indul is a program. IDE-ben nincs ilyen gondja.
(#) usane hozzászólása Nov 21, 2018 /
 
Üdv!

Hogy tudok a legegyszerűbben egy decimális számot hexadecimális értékbe "átrakni". Mielőtt félreérti valaki nem átszámolni akarom (osztogatni 16-al,maradék, stb.) hanem mondjuk egy decimális 21-ből 0x21-et akarok.
C-ben akarom megvalósítani.
A hozzászólás módosítva: Nov 21, 2018
(#) kissi válasza usane hozzászólására (») Nov 21, 2018 /
 
Szia!

Ha jól értettelek, akkor max. 99-ig ez jó lehet:
  1. szam = szam + (szam/10)*6
!
(#) szucsistvan123 válasza eSDi hozzászólására (») Nov 21, 2018 /
 
Alapértelmezetten a Release from Reset -ben volt.
Átváltottam, majd vissza, nem javult a helyzet, semmi változás.
Próbáltam az IDE-ben lévő programozó résszel, azzal még csatlakozni sem akar a PIC-hez, (Az IPE az csatlakozik, meg programozza is, csak tápfeszt nem ad.)
Kipróbáltam még a PicKIT 3 nevezetű programozó szoftvert, az sem ad ki tápfeszültséget. Csak többszöri próbálkozásra. (kihúzom majd visszadugom a programozót, vagy újraindítom a programot.)

Valami tippetek van még esetleg?
(#) matheattila válasza usane hozzászólására (») Nov 21, 2018 /
 
Szia, en valami hasonlót használtam egyszer:
  1. hex = ((szam/10)<<4) | ((szam%10) & 0x0F);
(#) majkimester válasza matheattila hozzászólására (») Nov 22, 2018 /
 
Az osztás a PIC-en drága művelet (hacsak nem dsPIC vagy PIC24), ezért azt kerülni kell. Double-Dabble algoritmus egy lehetséges megoldás, ami csak shiftelést és összeadást használ, viszont abból sokat. Összességében persze nem biztos, hogy megéri: (en AVR-en hasznaltam ezt)

  1. u08 bin_to_bcd(u08 bin)
  2. {
  3.   u08 bcd = 0;
  4.   for (u08 i=8; i; i--) {
  5.     if ((bcd&0x0F) >= 0x05) bcd += 0x03;
  6.     if ((bcd&0xF0) >= 0x50) bcd += 0x30;    
  7.     bcd <<= 1;
  8.     bcd += bin >> 7;
  9.     bin <<= 1;
  10.   }
  11.   return bcd;  
  12. }
(#) usane válasza matheattila hozzászólására (») Nov 22, 2018 /
 
Igen én is erre jutottam,köszönöm, de a maradékot miért maszkolod?
Kissi megoldása is jó. Kétjegyű számokhoz kell, de talán a másik kisebb erőforrásokat vesz igénybe.
Majkimester, PIC32-esen alkalmanként egyszer kell végrehajtani egy gombnyomásra, úgyhogy belefér egy osztás, de köszönöm, ezt is fontolóra veszem, meg kisebb PIC-ekhez még jól jöhet.

Köszönöm a válaszokat.
(#) matheattila válasza usane hozzászólására (») Nov 22, 2018 /
 
Csak a biztonság kedvéért (hogy a felső nibble biztosan 0 legyen) bár análkül is kellene működjön.
(#) majkimester válasza usane hozzászólására (») Nov 22, 2018 /
 
PIC32-nél is van hardver osztó, nem kell ilyen algoritmusokkal szórakozni, mert valószinüleg ez a lassabb. A fenti PIC12, 16, 18 esetleg AVR-hez használható.
A hozzászólás módosítva: Nov 22, 2018
(#) Tomi111 hozzászólása Nov 24, 2018 /
 
Sziasztok! PIC16F819-ben kellene egy időzítőt csinálnom. Működik is részben. Semmi bonyolult, csak egy poti értékét beolvassa, majd lépésenként összehasonlítja egy a programba beírt értekkel, majd ez alapján számol. Tudom, sokkal egyszerűbben is lehet, stb... nem is az a lényeg, hanem ilyen hibát ír az MPLAB az ASM fájl fordításakor:
Warning[219] G:\MASOLAT\IDOZITO3IN1.ASM 534 : Invalid RAM location specified.
Ez mit jelent. Így a PIC-be írva nem jól működik.
a részlet:
  1. idoz3:  NOP                                             ;időzítés 3
  2.                 BANKSEL PORTA                   ;bank 0 kiválasztása
  3.                 MOVLW   B'01000001'             ;Fosc/8, A/D enable a 17. lábon
  4.                 MOVWF   ADCON0
  5.                 BSF             ADCON0,GO               ;A/D Conversion start az analóg 4 bemeneten
  6. varas3: BTFSC   ADCON0,GO               ;vár a konverzió végére
  7.                 GOTO    varas3
  8.                 MOVF    ADRESH,W                ;eredmény olvasása(felső 8 bit - 0-7.)
  9.                 MOVWF   _MER                    ;eredmény írása _MER-be
  10.                 MOVF    _MER,W                  ;
  11.                 SUBWF   .10,0                   ;mért értékkel hasonlít
  12.                 BTFSS   STATUS,C                ;ha mért érték nagyobb/egyenlő...
  13.                 GOTO    $+4                             ;akkor tovább vizsgál
  14.                 MOVLW   .6                              ;idő beállítása
  15.                 MOVWF   _MIN                    ;6 sec
  16.                 GOTO    ido55                   ;időzítés
  17.                 MOVF    _MER,W 
  18.                 SUBWF   .19,0                   ;mért értékkel hasonlít össze
  19.                 BTFSS   STATUS,C                ;ha mért érték nagyobb/egyenlő...
  20.                 GOTO    $+4                             ;akkor tovább vizsgál .
  21.                 MOVLW   .7                              ;idő beállítása
  22.                 MOVWF   _MIN                    ;7 sec
  23.                 GOTO    ido55                   ;időzítés
  24.                 MOVF    _MER,W 
  25.                 SUBWF   .28,0                   ;mért értékkel hasonlít össze XXXXXXXXXXXX
  26.                 BTFSS   STATUS,C                ;ha mért érték nagyobb/egyenlő...
  27.                 GOTO    $+4                             ;akkor tovább vizsgál
  28.                 MOVLW   .8                              ;idő beállítása
  29.                 MOVWF   _MIN                    ;8 sec
  30.                 GOTO    ido55                   ;időzítés

Az XXXXXXX-el jelölt sorra írja a hibát, ha a .28 helyett .23-at vagy .30-at írok, akkor jó, de a kettő között hibát ír. Mitől?
A hozzászólás módosítva: Nov 24, 2018
(#) ktamas66 válasza Tomi111 hozzászólására (») Nov 24, 2018 /
 
Úgy látom ebben a PIC-ben nincs 28-as regiszter (ellenben 19, 23 és 30-as van).
(#) benjami válasza Tomi111 hozzászólására (») Nov 24, 2018 /
 
Megnézted már az adatlapban a SUBWF utasítást? Szerintem nem ezt akartad jó pár helyen használni.
(#) Tomi111 válasza ktamas66 hozzászólására (») Nov 24, 2018 /
 
De ott a SUBWF után egy értéket kér, nem? .28 az decimális érték, ha binárisan írom: B'00011100', akkor is hibát ír. Ezt hasonlítaná össze az előtte lévő sorba beírt W értékével. Vagy valamit nem jól értek?
Az ott az analóg bemeneten beolvasott poti értéke lenne, ami ugye 0-255 lehet. Ezt vizsgálná több lépcsőben.
(#) kissi válasza Tomi111 hozzászólására (») Nov 24, 2018 /
 
Szia!
A SUBWF nem egy számot von ki a regiszterből, hanem egy regiszterből a W értékét! Attól, hogy a regiszter neve helyett Te egy számot írtál, még nem változik semmi, abból a sorszámú regiszterből fogja kivonni a W-t !
(#) benjami válasza Tomi111 hozzászólására (») Nov 24, 2018 /
 
Ahol konstans számot akarsz hozzáadni vagy kivonni, ott az ADDLW vagy a SUBLW utasításokat használd. A SUBLW-t jól nézd meg, mert pont fordítva működik mint ahogy elsőre gondolnád. Használd inkább helyette az ADDLW -t negatív konstanssal.
A hozzászólás módosítva: Nov 24, 2018
(#) Tomi111 válasza benjami hozzászólására (») Nov 24, 2018 /
 
Most nézem, ott direkt értéket nem adhatok meg, igaz? Meg csak 127 lehet a max érték, nem 255.
(#) Tomi111 válasza kissi hozzászólására (») Nov 24, 2018 /
 
Ja már értem. Nagyon elnéztem. Köszi!
(#) Tomi111 válasza Tomi111 hozzászólására (») Nov 25, 2018 /
 
Na nem sokat változtattam. Létrehoztam még egy regisztert: _III. Majd beszúrtam minden szakaszba két sort:
MOVLW .28
MOVWF _III
Majd a SUBWF-be ezt írtam.
SUBWF _III,0
Így már tökéletesen müködik.
A hozzászólás módosítva: Nov 25, 2018
(#) majkimester válasza Tomi111 hozzászólására (») Nov 27, 2018 /
 
Tommi111, ami neked kell igazából az adott helyen

  1. MOVLW .28
  2. SUBWF _MER, w


Pont az ilyen esetek megkönnyítésére hoztam létre anno a macro gyüjteményem, amivel ez így néz ki:

  1. CMPC8 _MER, .28  ; a .28 konstanst hasonlítja össze a _MER file regiszterrel

Utanna az ugrás meg:

  1. JNB cimke     ; ez a nem kisebb, azaz nagyobb egyenlo (teljes lista: JE, JNE, JB, JNB, JA, JNA)


http://users.atw.hu/majki/elektro/mcu/progs/progs.htm
math_105.zip
Érdemes használni, mert sokkal olvashatóbb a kód.
És e mellett sok haszonos dolgot tartalmaz.
Például 16, 24 vagy 32 bites müveleteket, Binaris -> BCD atalakitast, stb.
(#) Tomi111 válasza majkimester hozzászólására (») Nov 29, 2018 /
 
Szia! Köszi, átnézem ezeket! ( még nem volt időm)
(#) david10 hozzászólása Dec 2, 2018 /
 
Sziasztok.
PIC18F4520-al és egy SIM300-as modullal kínlódok jó ideje, amihez CCS-ben szeretnék írni programot.

Az SMS küldés az működik (hála a fórum tagoknak, aki segítettek benne 1 hónapja).

A mostani gondom az az lenne, hogy nem tudom a SIM300-tól visszaérkező adatokat feldolgozni, egyáltalán nem sikerül a sorosporton érkező adatokat feldolgoznom/beolvasnom.

Egy olyan kód megírásában kérném a fórum tagok segítségét, ami a puts("AT",GSM); kóddal elküldi az AT parancsot, majd ha OK jön vissza, akkor csinál x dolgot, ha nem AT jön vissza vagy semmi se jön vissza, akkor csinál y dolgot.

Sajnos valamiért a kbhit(GSM) se csinál semmit, lefagy ennél az utasításnál a program.

A választ előre is köszönöm!
(#) tirisztortetróda hozzászólása Dec 3, 2018 /
 
Sziasztok!

Szeretnem a segitsegeteket kerni. Egy TCN75-ös hőmérőnek szeretném az i2c-ről beolvasott ertekeit kijelezni. 16F876A-s PIC-et használok A temp regiszter erteket at tudom venni, és a kijelzes is mukodik. A problema az ertek szamolasaval van. Kettes komplemenst kellene kepeznem, de ezt nem jottem rá hogy lehet megtenni.

Nagyjabol erre lenne szukseg:

-kiolvastam a homerseklet regiszter erteket
-elmenettem egy valtozoba (temp)
-megnezem a 7. bit-et, ha egyes akkor negativ a szám:
-itt mukodhet ez az eljaras ha a 7. bitet le akarom törölni?

btfsc temp,7
bcf temp,7


-a valtozom 6,5,4,3,2,1,0. bitjeit invertalnom kellene, (egyes komplemenst kell kepezni, ez nem megy)
-hozzaadnek 1 et (igy lenne belole 2-es komplemens; movlw .1, addwf temp,1-et hasznalnam)
-kijelzem az erteket (ez ok)

Szives segitsegeteket elore is koszonom, udv

Istvan
(#) ktamas66 válasza tirisztortetróda hozzászólására (») Dec 3, 2018 /
 
A 0,5 fokos pontossághoz 9 bitet kell beolvasni, vagyis a 16 bitből az első 9 érdekes. Nézd meg a COMF utasítást. 1-et hozzáadni az INCF is jó.
A hozzászólás módosítva: Dec 3, 2018
(#) majkimester válasza tirisztortetróda hozzászólására (») Dec 3, 2018 /
 
Szia,

Negativ szam eseten negalni szeretnéd a kijelzéshez?
Megvizsgalod, hogy negativ-e, ha igen kirakod a - jelet,
majd negalod igy, es kiirod pozitiv szamkent:

  1. comf    temp,f
  2. incf    temp,f


Udv
(#) tirisztortetróda válasza ktamas66 hozzászólására (») Dec 4, 2018 /
 
Köszönöm a válaszodat!
A kilencedik bit egy külön byte felső bitje, igy azt le tudom vizsgalni. Megnezem a comf-et, köszönöm!
(#) tirisztortetróda válasza majkimester hozzászólására (») Dec 4, 2018 /
 
Köszönöm Neked is a gyors válaszodat! Mindenképp kiprobalom.
(#) tirisztortetróda válasza ktamas66 hozzászólására (») Dec 4, 2018 /
 
Ha tudnatok mit ossze nem szenvedtem, komolyan, jo tanulopenz, hogy az utasitaslistat tanulmanyozza az ember. Sajnos a doksik ertelmezese nehezkesen megy a gyenge angol miatt, de majd kérdezek, ha ismét nagyon elakadnék. Mégegyszer köszi Nektek!
Következő: »»   1056 / 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