Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   919 / 1319
(#) vicsys válasza watt hozzászólására (») Feb 19, 2011 /
 

icd.GIF
    
(#) watt válasza vicsys hozzászólására (») Feb 19, 2011 /
 
Köszi!
Ha jól látom ez az ICD2 lenne?
(#) vicsys válasza watt hozzászólására (») Feb 19, 2011 /
 
Rá van írva a panelra és fájl neve is az. Gondolom, jól gondolod, hogy az.
(#) watt válasza vicsys hozzászólására (») Feb 19, 2011 /
 
Idézet:
„és fájl neve is az”

(#) mammut hozzászólása Feb 19, 2011 /
 
Üdv!
Problémám akadt a PIC16F59 ram kezelésésvel.
A bank0-ban beteltek a szabad memóriacímek(0xA-0x1F), viszont sem az FSR regiszter módosításával, sem pedig a pl.: BANKSEL 0x30 utasításra nem történik semmi.
Hogyan tudnám kihasználni cblock-ból a felsőbb memóriacímeket?
A segítségeket előre is köszönöm.
(#) Hp41C válasza mammut hozzászólására (») Feb 19, 2011 / 1
 
Szia!

Hasonlóan kell kezelni, mint más 16F kontroller esetén:
Direkten és indirekten elérhető bankok:
Bank0: 0x00 .. 0x1F
Bank1: 0x20 .. 0x3F
Bank2: 0x40 .. 0x5F
Bank3: 0x60 .. 0x7F
Csak indirekten elérhető bankok:
Bank4: 0x80 .. 0x9F
Bank5: 0xA0 .. 0xBF
Bank6: 0xC0 .. 0xDF
Bank7: 0xE0 .. 0xFF

A bankok alsó 16 regisztere minden Bank beállítás mellett ugyan azokat a regisztereket éri el:
0x00 .. 0x09 a speciális célú regiszterek, a 0x0A..0x0F - közös ram: Ide kell elhelyezni azokat az adatokat, amiket minden Bank kiválasztás mellett el szeretnénk érni...

Készíts egy projectet a mellékletben levő programhoz, fordítsd le abszolut módon, állítsd be az MPLAB SIM -et debuggernek, kövesd végig a programot: előbb minden Tempx változót töröl, majd mindbe más adatot ír, pedig a címük alsó 5 bitje megegyezik..

16F59.asm
    
(#) mammut válasza Hp41C hozzászólására (») Feb 20, 2011 /
 
Köszönöm, ezek jó infók voltak.
Bár még úgy nézem a problémám nem oldódott meg.
Kicsit bővítettem és ez jön vissza:
  1. 00B     5A4     BSF 0x4, 0x5                   59:              banksel Temp2
  2.    00C     4C4     BCF 0x4, 0x6
  3.    00D     C00     MOVLW 0                        60:                   movlw   0x0
  4.    00E     030     MOVWF 0x10                     61:                   movwf   Temp2
  5.    00F     C01     MOVLW 0x1                      62:                   movlw   0x1
  6.    010     031     MOVWF 0x11                     63:                   movwf   Temp22
  7.    011     C02     MOVLW 0x2                      64:                   movlw   0x2
  8.    012     032     MOVWF 0x12                     65:                   movwf   Temp222
  9.    013     210     MOVF 0x10, W                   66:                   movfw   Temp2
  10.    014     040     CLRW                           67:                   clrw
  11.    015     211     MOVF 0x11, W                   68:                   movfw   Temp22
  12.    016     040     CLRW                           69:                   clrw
  13.    017     212     MOVF 0x12, W                   70:                   movfw   Temp222
  14.    018     040     CLRW                           71:                   clrw

Igazából azt nem értem, hogy pl. 0x30-as címen levő változót miért nem tudom a W-be mozgatni mikor abban a bankban vagyok, vagyis miért a 0x10-es címről akarja a változókat beolvasni?
(#) Hp41C válasza mammut hozzászólására (») Feb 20, 2011 /
 
Szia!
Azért veszi elő a 0x30 memóriacím helyett a 0x10 címen levő adatot, mert a 0x30 már a Bank1 -ben van. Ld. mellékelt ábra.
(#) mammut válasza Hp41C hozzászólására (») Feb 20, 2011 /
 
Akkor ezek szerint elég az eltérő bankban tárolt kezelni kívánt változó bankjába ugrani pl. BANKSEL PORTB_4 utasítással, a PORTB_0 és PORTB_4 címét csak a disassembler nem tudja követni.
  1. CBLOCK 0x10
  2.                 PORTB_0                                 ;MŰVELETI POZÍCIÓBIT
  3.                 PORTC_0                                 ;MŰVELETI POZÍCIÓBIT
  4.                 PORTD_0                                 ;MŰVELETI POZÍCIÓBIT
  5.                 PORTB_1                                 ;MŰVELETI POZÍCIÓBIT
  6.                 PORTC_1                                 ;MŰVELETI POZÍCIÓBIT
  7.                 PORTD_1                         ;MŰVELETI POZÍCIÓBIT
  8.                 PORTB_2                                 ;MŰVELETI POZÍCIÓBIT
  9.                 PORTC_2                                 ;MŰVELETI POZÍCIÓBIT
  10.                 PORTD_2                         ;MŰVELETI POZÍCIÓBIT
  11.                 PORTB_3                                 ;MŰVELETI POZÍCIÓBIT
  12.                 PORTC_3                                 ;MŰVELETI POZÍCIÓBIT
  13.                 PORTD_3                                 ;MŰVELETI POZÍCIÓBIT
  14.                 CounterA                                ;KÉSLELTETŐ RUTINOKHOZ
  15.                 CounterB                                ;KÉSLELTETŐ RUTINOKHOZ
  16.                 CounterC                                ;KÉSLELTETŐ RUTINOKHOZ
  17.         ENDC
  18.  
  19.         CBLOCK 0x30
  20.                 PORTB_4                                 ;MŰVELETI POZÍCIÓBIT
  21.                 PORTC_4                                 ;MŰVELETI POZÍCIÓBIT
  22.                 PORTD_4                                 ;MŰVELETI POZÍCIÓBIT
  23.                 PORTB_5                                 ;MŰVELETI POZÍCIÓBIT
  24.                 PORTC_5                                 ;MŰVELETI POZÍCIÓBIT
  25.                 PORTD_5                                 ;MŰVELETI POZÍCIÓBIT
  26.                 PORTB_6                                 ;MŰVELETI POZÍCIÓBIT
  27.                 PORTC_6                                 ;MŰVELETI POZÍCIÓBIT
  28.                 PORTD_6                                 ;MŰVELETI POZÍCIÓBIT
  29.                 PORTB_7                                 ;MŰVELETI POZÍCIÓBIT
  30.                 PORTC_7                                 ;MŰVELETI POZÍCIÓBIT
  31.                 PORTD_7                                 ;MŰVELETI POZÍCIÓBIT
  32.         ENDC
  33.  
  34. ...
  35.  
  36. 139     CFE     MOVLW 0xfe                     434:     MOVLW B'11111110'                       ;W=254
  37.    13A     030     MOVWF 0x10                     435:          MOVWF PORTB_0                           ;PORTB_0=254
  38.    13B     031     MOVWF 0x11                     436:          MOVWF PORTC_0                           ;PORTC_0=254
  39.    13C     032     MOVWF 0x12                     437:          MOVWF PORTD_0                           ;PORTD_0=254
  40.    13D     CFD     MOVLW 0xfd                     438:          MOVLW B'11111101'                       ;W=253
  41.    13E     033     MOVWF 0x13                     439:          MOVWF PORTB_1                           ;PORTB_1=253
  42.    13F     034     MOVWF 0x14                     440:          MOVWF PORTC_1                           ;PORTC_1=253
  43.    140     035     MOVWF 0x15                     441:          MOVWF PORTD_1                           ;PORTD_1=253
  44.    141     CFB     MOVLW 0xfb                     442:          MOVLW B'11111011'                       ;W=251
  45.    142     036     MOVWF 0x16                     443:          MOVWF PORTB_2                           ;PORTB_2=251
  46.    143     037     MOVWF 0x17                     444:          MOVWF PORTC_2                           ;PORTC_2=251
  47.    144     037     MOVWF 0x17                     445:          MOVWF PORTC_2                           ;PORTD_2=251
  48.    145     CF7     MOVLW 0xf7                     446:          MOVLW B'11110111'                       ;W=247
  49.    146     039     MOVWF 0x19                     447:          MOVWF PORTB_3                           ;PORTB_3=247
  50.    147     03A     MOVWF 0x1a                     448:          MOVWF PORTC_3                           ;PORTC_3=247
  51.    148     03B     MOVWF 0x1b                     449:          MOVWF PORTD_3                           ;PORTD_3=247
  52.    149     5A4     BSF 0x4, 0x5                   450:          BANKSEL PORTB_4
  53.    14A     4C4     BCF 0x4, 0x6
  54.    14B     CEF     MOVLW 0xef                     451:          MOVLW B'11101111'                       ;W=239
  55.    14C     030     MOVWF 0x10                     452:          MOVWF PORTB_4                           ;PORTB_4=239
  56.    14D     031     MOVWF 0x11                     453:          MOVWF PORTC_4                           ;PORTC_4=239
  57.    14E     032     MOVWF 0x12                     454:          MOVWF PORTD_4                           ;PORTD_4=239
  58.    14F     CDF     MOVLW 0xdf                     455:          MOVLW B'11011111'                       ;W=223
  59.    150     033     MOVWF 0x13                     456:          MOVWF PORTB_5                           ;PORTB_5=223
  60.    151     034     MOVWF 0x14                     457:          MOVWF PORTC_5                           ;PORTC_5=223
  61.    152     035     MOVWF 0x15                     458:          MOVWF PORTD_5                           ;PORTD_5=223
  62.    153     CBF     MOVLW 0xbf                     459:          MOVLW B'10111111'                       ;W=191
  63.    154     036     MOVWF 0x16                     460:          MOVWF PORTB_6                           ;PORTB_6=191
  64.    155     037     MOVWF 0x17                     461:          MOVWF PORTC_6                           ;PORTC_6=191
  65.    156     038     MOVWF 0x18                     462:          MOVWF PORTD_6                           ;PORTD_6=191
  66.    157     C7F     MOVLW 0x7f                     463:          MOVLW B'01111111'                       ;W=127
  67.    158     039     MOVWF 0x19                     464:          MOVWF PORTB_7                           ;PORTB_7=127
  68.    159     03A     MOVWF 0x1a                     465:          MOVWF PORTC_7                           ;PORTC_7=127
  69.    15A     03B     MOVWF 0x1b                     466:          MOVWF PORTD_7                           ;PORTD_7=127
(#) mammut válasza Hp41C hozzászólására (») Feb 20, 2011 /
 
Ok már sikerült, a szimulációnál minden jó, így már menni fog.
Köszönöm szépen a hasznos információkat és a segítséget!
(#) Hp41C válasza mammut hozzászólására (») Feb 20, 2011 /
 
Szia!

A beépített banksel makro csak 2 bitet kezel a bankváltásra, a 16F59 -ben pedig 3 van (FSR:7..5). Egy kis segítség...

Egy kis pontosítás az adatlaphoz: Direkt címzésnél is az FSR 7..5 bitjei választják ki a bank-ot.

16F59.asm
    
(#) LGS94 válasza watt hozzászólására (») Feb 20, 2011 /
 
És arról van nyákterved beültetéssel amit mondtad, hogy COM portos és te is azt használod?
(#) Gery hozzászólása Feb 20, 2011 /
 
Sziasztok!

Most kezdtem el pic-el foglalkozni, és lenne pár kérdésem. Sikerült szereznem egy Kónya féle fejlesztő környezetet, és azon programozgatok. Vannak minta programjaim is, meg már írtam 1-2 nagyon egyszerűt. Van egy ledvillogtató mintaprogram is amin pár dolgot nem értem. Mégpedig az időzítés. Azzal hogy EQU 20H, és a párja, hogyan határozom meg az időzítés sebességét, mert ha jól sejtem ez azt csinálja.
Ha jól értelmezem a programot, akkor a villogásnál behívom a WAIT szubrutint. Ott a CLRF törli az időzítő értékét nem? Aaztán meg átmegy a DELAY-ra, ott meg a DECFSZ csökkenti az értékét, vagy hogy van ez? Nos, lényegében nem értem. Valaki el tudná magyarázni, lenne olyan szíves?

Köszönettel: Gergő

villogó.jpg
    
(#) icserny válasza Gery hozzászólására (») Feb 20, 2011 /
 
Csak futólag néztem bele a programba, de úgy látom, hogy az EQU direktívákkal azt mondja meg, hogy mely memóriarekeszeket használja változóként (számlálóként).

Ha az időzítés idejét szeretnéd befolyásolni, a Microchip PIC delay Code Generator weblapján nézz körül!

Mellesleg az EQU helyett a CBLOCK direktívával valamivel tisztességesebb volna helyet foglalni a változóknak.

További hasznos linkek:
link1
link2
link3
(#) misi93 válasza watt hozzászólására (») Feb 20, 2011 /
 
Hát a pichez programot hogy működik-e a pic az égetőmmel semmi gond.A tiédet építettem meg soros portra még szenvedtünk is egy sort mert rosszak voltak a bc182-ők. talán a v4-es nem tudom pontosan.
(#) watt válasza LGS94 hozzászólására (») Feb 20, 2011 /
 
Amit én használok, arról is van. Bővebben: Link
(#) watt válasza misi93 hozzászólására (») Feb 20, 2011 /
 
Ne haragudj, összekevertelek az előtted szólóval a számok miatt(93, 94)

Arra gondoltam, hogy írni kéne egy egyszerűt. Pl. egy olyat, ami egy LED- et villogtat, vagy egy bemenet változására egy másik kimenetet átvált, amin szintén egy LED az indikátor.
(#) janikukac hozzászólása Feb 20, 2011 /
 
Sziasztok Melyik a legegyszerűbb és legolcsóbb PIC égető? Akarok már valami egyszerű PIC-es cuccot majd csinálni. Nagyon fontos az ára !!!
(#) Balli hozzászólása Feb 20, 2011 /
 
Sziasztok!
A hozzáértők segítségét szeretném kérni.

A feladat az lenne hogy le kellene mérni egy Pic lábán megjelenő feszültség idejét ezredmásodperc vagy legalábbis század pontossággal.

Szóval pic lábára feszültség rákapcsol--->Pic elkezd számolni--->feszültség megszűnik--->számláló leáll.
Napost ezt az értéket kellene összehasonlítani a Picben eltárolt értékekekkel.
Pl 3.245 másodperc--->3 as lábra egy kb 3 másodpercig tartó jel
2.876 másodperc 1 es lábra 3 másodperces jel.
Összesen 3 láb lenne.

Halmazok lennének azaz hogyha
pl 3.123 vagy 2.654 vagy 9.234...stb hosszú a jel akkor a 3 as láb

ha pl 8.422 vagy 2.653 vagy 5.987...stb akkor a 2 es láb.
stb


Nekem konkrétan az időméréssel van bajom és azzal hogy pl ha csak század másodperc pontosságú a mérés akkor kerekítsen.

Másrészt olyan bajom is van hogy ha pl 1 másodperc alatti hosszú a jel akkor újraindul a figyelés mert az értelmetlen jel.

Lenne valakinek ötlete? Tudna nekem valaki segíteni?

A válaszhoz vezető bárminemű segítséget szívesen fogadok.
(#) mammut válasza janikukac hozzászólására (») Feb 20, 2011 /
 
Üdv!
Ami ér is valamit és ha van LPT portod:Oshon féle égető(Evvel kezdtem és evvel égettem be a PicKit2-höz szükséges PIC-et is.)
vagy
WLPT, WATT féle égető.
(#) watt válasza Balli hozzászólására (») Feb 20, 2011 / 1
 
A CCP modul capture módjával lehet két impulzus közötti időt megmérni könnyen. Nézd meg az adatlapban a működését, és ha van kérdésed tedd fel!
(#) Balli válasza watt hozzászólására (») Feb 20, 2011 /
 
Köszi a gyors választ
Beleásom magam
(#) gmarko válasza janikukac hozzászólására (») Feb 20, 2011 /
 
Szia!

Szerintem, ha egyszerűt szeretnél, vegyél Microsticket! Nem a legolcsóbb, de kezdésnek nagyon jó. Kapsz hozzá két 16 bites PIC-et is. Minimál kialakítás, de könnyen bővíthető. Ne vacakolj párhuzamos porttal, ha van USB.

Btw. a Microstickes sorozatom második része elkészült, íme: http://markogergely.hu/hobbi/pickelunk-01/
(#) icserny válasza Balli hozzászólására (») Feb 20, 2011 / 2
 
A PIC CCP (vagy ECCP) perifériájának Input Capture üzemmódja használható erre. Pl. Timer1 elindul, CCP felfutó élre élesítve. Amikor a bejövő jel felfutó éle megjön, a Timer1 értéke eltárolódik és megszakítás keletkezik. Ekkor az eltárolt timer értéket változóba rakod, s a CCP egységet lefutó él detektálására élesíted. Ha az is megérkezett, akkor az ahhoz tartozó timer érték is kiolvasható. A két timer érték különbsége meg az esetleges Timer1 túlcsordulások száma megadja az időintervallum szélességét. Utána azt csinálsz vele, amit akarsz.

PIC18-hoz Robert B. Reese: "Microprocessors From Assembly Language to C Using the PIC18Fxx2" c. könyve Chap13/swdetov.c mintapéldáját tudom ajánlani. Az előadásvázlatok és a mintaprogramok forráskódja a szerző honlapján elérhető. A könyv pedig sok helyen beszerezhető...
(#) bankimajki hozzászólása Feb 20, 2011 /
 
Sziasztok, volna pár alap kérdésem (8 bites mikrovezérlőknél (16F877)):
1. Ha a deklarálok egy regisztert, akkor az mekkora méretű lesz? (8 vagy 16bit.)
2. Az AD konvertere ugyebár 10bites a 16F877-nek. Ha a konverzió után kapott értéket beleteszem egy regiszterbe, akkor mind a 10 bitet beleteszi, vagy csak az alsó 8-at? És ez utóbbi esetben a felső 2 bitet egy másik regiszterbe kell tenni?
(#) El_Pinyo válasza gmarko hozzászólására (») Feb 20, 2011 /
 
Azért egy kezdőnek nem feltétlenül a 16 bites kontrollereket ajánlanám.
(#) icserny válasza gmarko hozzászólására (») Feb 20, 2011 /
 
Gratulálok, szép munka! A www.reesemicro.com honlapot neked is ajánlom (a PIC24-es tananyag, támogatói programkönyvtár és példaprogramok kapcsán). Sőt, ha nem veszed szerénytelenségnek, magamat is ajánlom (a PIC-kwik projektben PIC24HJ128GP502 mikrovezérlővel foglalkozom).
(#) El_Pinyo válasza bankimajki hozzászólására (») Feb 20, 2011 /
 
Ez attól függ miben programozol (Asm, C, etc.). Az Asm- ben az alapegység a 8 bit, de lefoglalhatod ennek a többszörösét is. Magasabb szintű nyelveknél meg a dokumentáció megmondja, hogy az egyes fordítók esetén mennyi az annyi. Az ADC- vel kapcsolatban csak annyit, hogy két regiszterben képződik az eredmény, az hogy milyen formában (jobbra vagy balra shiftelt) az tőlünk függ, hogy a felkonfigurálás során mit állítottunk be. Egyébként az adatlap gyönyörűen leírja ezeket a dolgokat, érdemes lenne kicsit tanulmányozni. Az ADC eredményének feldolgozása is tőlünk függ. Lehet a felső 8 bitet vagy az alsó 8 bitet (itt jön be, hogy balra vagy jobbra zárt eredményt konfigurálunk be), de a teljes 10 bitet is kezelni, természetesen megfelelő méretű változókat kell létrehozni.
(#) misi93 válasza watt hozzászólására (») Feb 20, 2011 /
 
Semmi baj. Majd keresek egy villogót mert még csak után építgetek.
(#) icserny válasza bankimajki hozzászólására (») Feb 20, 2011 /
 
Idézet:
„1. Ha a deklarálok egy regisztert”
Ezt hagyjuk meg a gyártónak! Mi csak változókat deklarálunk (pl. C nyelven), vagy memória rekeszeket (Microchip nyelven ez file registers) foglalunk le. Deklarálhatsz akár 64 bites változókat is, gépi szinten akkor is csak bájtonként történik az adatmozgatás. A 8-nál több bites változó csak több bájtban (több memória rekeszben) fér el.
Idézet:
„2. Az AD konvertere ugyebár 10bites a 16F877-nek.”
Az eredmény az ADDRESH és ADDRESL regiszterpárba kerül (a beállítástól függően jobbra vagy balra igazítva). Onnan bájtonként pakolja át a programod a változóba.
Idézet:
„És ez utóbbi esetben a felső 2 bitet egy másik regiszterbe kell tenni?”
Igen.
Következő: »»   919 / 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