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   350 / 1216
(#) pajti2 válasza mhatalyak hozzászólására (») Jan 8, 2013 /
 
Konkrétan hol akadtál el benne? Ez egy asm cucc. Új project, copy / paste, fordítás, égetés, elvileg mennie kellene. A HEX a lefordított bináris projectből lekreált szöveges script. Kvázi base16 kódolásban a bináris cucc fejlécezve. A fordítónak kell létrehoznia sikeres fordítás után.
(#) mhatalyak válasza pajti2 hozzászólására (») Jan 8, 2013 /
 
Fordításnál hibát ír ki, szerintem rosszul másolom be. Nem próbáltam még asmből égetni, csak pickit 2 programmerrel HEX-et, néztem róla videót is, hogy hogyan kell, de hiába csinálom nem jó.
(#) benjami válasza mhatalyak hozzászólására (») Jan 8, 2013 /
 
Nem tudom melyik fordítóhoz készült, de a Microchip fordítója nem szereti az ilyen számformátumot: h'FE'. ezeket írd át ilyenre: 0xFE.
Valamelyik konfigurációs paraméter sem tetszik neki, azt meg kell keresni mi jó definíció helyette, vagy kitörölni és manuálisan beállítani a égetés előtt.
Arra figyelj még ha módosítgatod, hogy az alapértelmezett számrendszer a hexa, tízes számrendszerbeli számot így írj be: .95 , vagy állítsd át a project beállításoknál az alapértelmezett számrendszert decimálisra.
(#) mhatalyak válasza benjami hozzászólására (») Jan 8, 2013 /
 
Értem, köszönöm szépen, holnap megpróbálom át irkálni, hátha sikerül. Esetleg valami másfajta progit tudsz ajánlani, amivel nem kell szenvedni? Mert nem értek én ehhez, csak beillesztem a HEX-et és kész, nem kezdtem még programozni, csak meg vettem hozzá a dolgokat.
(#) qbit válasza icserny hozzászólására (») Jan 9, 2013 /
 
Köszi a választ! Nos, a poll-int.c ugyanazt csinálja. Sőt! Kipróbáltam Ubuntu alatt is (a minicom -o -D /dev/ttyACM0 paranccsal), amivel működik, de az üdvözlet szintén nem jön...
Win7 alatt ez sem (hello-int) ír ki semmit. De mégis van megoldás! Ugyanis felfigyeltem, hogy ha a portnál a sebességet (óvatosságból) 9600-ra, a Flow control-t meg valamire (RTS... vagy XON...) beállítom, win7 alatt is azonnal működik!!! Az alábbit írja ki (Win7):

Isten hozott a PICCOLO projekthez!
hello-int.c program (USB interrupton kezelve)
Vett karakter:
= 13
Vett karakter:
= 10
a
Vett karakter: a = 97
Vett karakter:
= 13
Vett karakter:
= 10

Az =10 azért van mert CR+LF van a terminálban beállítva. Nos ennyire jutottam.
(#) icserny válasza qbit hozzászólására (») Jan 9, 2013 /
 
Érdekes és misztikus jelenségekről írsz, de nekem egyáltalán nem így viselkedik. Most próbáltam ki egy PIC18F4550-nel Win7 alatt a hello-int programot és nálam kifogástalanul működik. Egyedül a régi CDCTerminal.exe nem működik nálam (eleve fekete ablakkal jön be), de minden mással úgy viselkedik a program, ahogy kell.

Jó például a Microchip Application Libraryes USB CDC mintapélda mellett található Dynamic CDC Demo.exe is, ami automatikusan kapcsolódik a virtuális soros porthoz.

Idézet:
„ha a portnál a sebességet (óvatosságból) 9600-ra, a Flow control-t meg valamire (RTS... vagy XON...) beállítom”
Ezeknek a beállításoknak elvileg semmi köze az USB kapcsolathoz. Ezért misztikus az, amit tapasztaltál. Ha a PIC egy soros porton küldené tovább az USB-n kapott adatokat, akkor lenne csak jelentősége ezeknek a beállításoknak. Lásd például ebben a cikkemben, ahol egy PIC18F14K50 mikrovezérlőt USB-UART protokol konverterként használok, s ahol a soros port sebessége állítható a PC terminál emulációs programjában...
A hozzászólás módosítva: Jan 9, 2013

hello-int.png
    
(#) qbit válasza icserny hozzászólására (») Jan 9, 2013 /
 
Igen, én is mindent így tudtam, ahogyan Te írtad volt, nálam mégis volt hatása az állítgatásnak. Mondjuk, 64 bites Win7-en próbáltam, de szerintem ennek ebből a szempontból nem lenne szabad befolyásolni az eredményt. No mindegy. Köszönöm a segítséget.
(#) icserny válasza qbit hozzászólására (») Jan 9, 2013 /
 
Idézet:
„64 bites Win7-en próbáltam”
Én is.
(#) qbit válasza icserny hozzászólására (») Jan 9, 2013 /
 
Az újabb terminállal (Dynamic CDC Demo.exe) nekem is szuperül megy! A korábban írottak a régire vonatkoztak.

Köszi!
(#) szaffo555 hozzászólása Jan 10, 2013 /
 
ASM 30 direktíváit próbálgatom.
Szeretnék konstansokat inicializálni, de valami szintaktikai problémám van a float típusnál.
A hibaüzenet szerint:
Idézet:
„Prefix (0x) is not valid for a floating point constant.

Nem tudom miként lehetne használni a float típust, mert hiába próbálkozom pl. kivenni a 0x -et vagy más formátumot használni, egyenlőre nem tudok rájönni mi lehet a megoldás. A többi konstansot a fordító elfogadja.

  1. .include "p24Fxxxx.inc"
  2. .global __reset
  3.  
  4.  
  5. .bss                           ;inicializálatlan adatterület
  6. i:  .space 2
  7.  
  8. a:  .byte 0x55
  9. b:  .asciz "hello_"
  10. c:      .ascii  "szia_5"
  11. d:  .float 0x42C80000
  12.  
  13.  
  14. .text
  15. __reset:

A hozzászólás módosítva: Jan 10, 2013
(#) icserny válasza szaffo555 hozzászólására (») Jan 10, 2013 /
 
A Help szerint előjel, egészrész, tizedespont és törtrész (decimálisan) lehet benne. x nem
(#) szaffo555 válasza icserny hozzászólására (») Jan 10, 2013 /
 
köszi, már megy is!
Viszont a float tárolása (min) 4 byte ot igényel. Gondolom a linker alakítja át a kapott decimális értéket floattá. Hogy tudom használni a bytokat később a program során? pl. szorzáshoz.
Ez így már lefordul, viszont szimulátor szerint W5 be 0 kerül.

  1. .bss                           ;inicializálatlan adatterület
  2. i:  .space 2
  3.  
  4. a:  .byte 0x55
  5. b:  .asciz  "hello_"
  6. c:   .ascii     "szia_5"
  7. d:  .float 123664.55
  8.  
  9. .text
  10. __reset:
  11.  
  12. mov     #__SP_init,W15                  ;a lehetséges max érték linker szerinti beállítása
  13. mov #__SPLIM_init,W0        ;a lehetséges max érték linker szerinti beállítása
  14. mov     W0,SPLIM
  15.  
  16. mov      #0x1234,W0
  17. mov  #0x5678,W1
  18. mov      d,W5  
  19. push W0
  20. push W1
  21. pop  W3


A hozzászólás módosítva: Jan 10, 2013
(#) icserny válasza szaffo555 hozzászólására (») Jan 10, 2013 /
 
Idézet:
„mov d,W5”
A négybájtos adatot ne akard már két bájtba beleszuszakolni!
(#) szaffo555 válasza icserny hozzászólására (») Jan 10, 2013 /
 
Nem akartam, de örültem volna ha látok valamit belőle. Te hogyan oldanád meg? A 2 Byte os Wn be a float 4 bytejából melyik fele kerülne bele? Ha egy példát írnál egészen világos lenne.
(#) pajti2 válasza szaffo555 hozzászólására (») Jan 10, 2013 /
 
Ami azt illeti, akár három dolgot is tehetsz.

1. Lecserélheted a 16 bites pic-et egy 32 bitesre, és csúszna olajozottan.

2. Ne asm-ben, hanem C-ben akard megírni az emulált dolgokat, amúgy sincs floating unitja a 24F-eknek.

3. 24f asm-ben nem vagyok éppen profi, de lehetségesen a
  1. mov.w #d, W5

a d változó címét fogja W5-be beleküldeni, és utána már mozgathatod 2 külön részben indirekt címzéssel, pld
  1. mov.w [W5],W6
  2. add #0x02,W5
  3. mov.w [W5],W7

Az asm szintaktikai hibákért bocsi, abban majd a többiek kisegítenek. A memória mozgatása így megoldható ugyan, de floatingot kezelni ettől még nem fogsz tudni. 24F alatt arra külön libek vannak.
A hozzászólás módosítva: Jan 10, 2013
(#) zenetom válasza szaffo555 hozzászólására (») Jan 10, 2013 /
 
Szia!
Ezt milyen környezetben írtad?
(#) icserny válasza szaffo555 hozzászólására (») Jan 10, 2013 /
 
Idézet:
„A 2 Byte os Wn be a float 4 bytejából melyik fele kerülne bele?”
Ha a változó címét adtad meg, akkor nyilván az első két bájt kerül bele.
(#) szaffo555 válasza pajti2 hozzászólására (») Jan 11, 2013 /
 
Egyenlőre maradnék a PIC24 ASM 30 nál. (Ez zenetom nak is szól)
Értem mire gondolsz példaprogramodban, de sajna így nem megy.
Mivel nem láttam semmit a file regsizterekben, megváltoztattam az init adatok szekcióját .data -ra.

  1. .bss                           ;inicializálatlan adatterület
  2. i:  .space 2
  3. j:  .space 1
  4.  
  5. .data                           ;inicializált adat
  6. a:  .byte 0x55
  7. b:  .asciz "hello_1"
  8. c:      .ascii  "szia_2"
  9. d:  .float -200.15
  10.  
  11. .text
  12. __reset:
  13.  
  14. mov     #__SP_init,W15                  ;a lehetséges max érték linker szerinti beállítása
  15. mov #__SPLIM_init,W0        ;a lehetséges max érték linker szerinti beállítása
  16. mov     W0,SPLIM
  17.  
  18. mov #.sizeof.(.bss), w1
  19. mov #.sizeof.(.data), w1
  20. mov #.sizeof.(.text), w1
  21. mov #.startof.(.bss), w1
  22. mov #.startof.(.data), w1
  23. mov #.startof.(.text), w1
  24.  
  25. mov              #i,W0                                  ;i re mutat
  26. mov              #a,W0                                  ;a re mutat
  27. mov              #b,W0                                  ;b re mutat
  28. mov              #c,W0                                  ;c re mutat
  29. mov              #d,w0                                  ;d re mutat
  30. mov              [W0],W1
  31. mov      [W0++],W1
  32.        
  33. mov      #0x02,W0


.bss szekcio mérete: 4
.data szekcio mérete: 20
.text szekcio mérete: 2 (???) azért ez nem éppen reális......

.bss szekció kezdőcíme: 0x0814
.data szekció kezdőcíme: 0x0800
.text szekció kezdőcíme: 0x0200

De így sem látom sehol a letárolt konstansokat, pedig paramétereik olvasható.
Icserny:
Idézet:
„Ha a változó címét adtad meg, akkor nyilván az első két bájt kerül bele.”

A d float konstans címe 0x080F, amit W0 reg mutat szépen, de a szimulátorral a 30. sorra érve a reset címkére ugrik. Nem tudom miért...
Viszont MPLAB View/file regiszterek közt sem látom adott címen, hogy ott lenne az adat.
A hozzászólás módosítva: Jan 11, 2013
(#) icserny válasza szaffo555 hozzászólására (») Jan 11, 2013 /
 
Nézd meg a honlapomon a Globális változók inicializálása c. szakaszt!

Legjobb tudomásom szerint a RAM-ban elhelyezett változóban csak akkor lesz értelmes adat, ha a __reset: címkénél egy olyan kódsorozat kezdődik, ami a ROM-ból bemásolja a szükséges adatokat az inicializálandó változóba. A C fordító ezt megszervezi neked, az assembler viszont nem. Tehát neked kell megszervezni...
(#) szaffo555 válasza icserny hozzászólására (») Jan 11, 2013 /
 
Ismerem a javasolt oldalt, az ott elírtak érthetőek és működnek is. Én csupán továbbgondoltam más direktívákra az ASM30 fordító használhatóságát.
Azt látom sokféleképpen konfigurálható az adatstruktúra.
Elképzelhető, hogy létezik valamely általad említett másoló kódsorozat, majd utána nézek.
Még egy kérdésem lenne:
a .section önmagában mit jelölhet? A mellékelt pdf szerint létezik 3 előre definiált section:

Idézet:
„Sections are locatable blocks of code or data that will occupy contiguous locations in
the 16-bit device memory. Three sections are pre-defined: .text for executable code,
.data for initialized data and .bss for uninitialized data. Other sections may be
defined; the linker defines several that are useful for locating data in specific areas of
16-bit memory.
Section directives are:
• .bss
• .data
• .pushsection name [, attr1[,...,attrn]]
• .popsection
• .section name [, “flags”] (deprecated)
• .section name [, attr1[,...,attrn]]
• .text”


Ez esetben miért használhatjuk vegyesen. Nekem a .section direktíva önmagában nem értelmezhető.
Pl ezekben:

  1. .section  .data   ;1
  2. .section  .const   ;2




(#) icserny válasza szaffo555 hozzászólására (») Jan 11, 2013 /
 
A szekcióknak az a lényege, hogy a többféle memóriaterület (ROM, RAM, utóbbin belül: közeli RAM, vagy DMA pufferterület, DSP-knél X és X memória) közül meg lehessen mondani, hogy mi hová kerüljön, melyik kalapba. Ennél mélyebben én nem foglalkoztam a kérdéssel.
(#) nagzso hozzászólása Jan 11, 2013 /
 
Sziasztok!
Van egy LCD kijelzőm és egy gombnyomás hatására(INT0/RB0) törölni a képernyőt és új adatokat kiírni rá. Simán rakjam bele a main függvényben futó while ciklusomba, vagy pedig írjak interrupt-ot, ami a gombnyomáskor meghívódik? Olvastam, hogy interrupt-on belül nem illik függvényeket meghívni, pedig szükségem lenne a kijelzőre íráskor(nem is sikerült a függvényt meghívni).
(#) pjg válasza nagzso hozzászólására (») Jan 11, 2013 /
 
A megszakításban csak egy Flag-et állíts át.
A főprogramban pedig kezeld le a Flag-et.
A hozzászólás módosítva: Jan 11, 2013
(#) nagzso válasza pjg hozzászólására (») Jan 11, 2013 /
 
Köszi szépen, működik. Eleinte nem értettem, amit írtál, de aztán rájöttem.
(#) NyariG hozzászólása Jan 11, 2013 /
 
Sziasztok

van egy 16f877A picem ami működik 4.0V-5.0V között (villogtatja a ledet szépen )
Viszont 4 volt alatt nem villogtatja a ledet...
Mért lehet ez? az adatlapjában az van hogy 2.0-5.5V mehet neki.
(#) potyo válasza NyariG hozzászólására (») Jan 11, 2013 /
 
Az adatlapjában az van, hogy a 16LF877A mehet 2 és 5,5V között. A 16F877A-t csak 4V felett garantálja gyártó. Adatlap 174. oldal.
(#) NyariG válasza potyo hozzászólására (») Jan 11, 2013 /
 
Köszi, hát akkor hozza a papírformát...

és a 220 as oldalt néztem.

(#) pajti2 válasza szaffo555 hozzászólására (») Jan 11, 2013 /
 
Csak két rövidke megjegyzés a 30. és 31. sorhoz:
Idézet:
„mov [W0],W1
mov [W0++],W1”


Nem tudom, te hogy vagy vele, de én ha asm-ben dolgozom, akkor a mov az vagy mov.b vagy mov.w, de sohasem mov. Persze ez részint csak ízlés dolga, de részint meg kevesebbet hibázol, ha nem implicite vezérled az adat hozzáférés szélességét, hanem mindig beleírod a kódba, hogy a fordító rád ripakodhasson, ha valami lehetetlent kívánsz.

Lévén 16 bites pic-el dolgozol, az a W0++ gondolom szándékoltan 2 byte-ot növelne. Egész biztos a programod szerint is 2 byte-ot fog az növelni, és nem csak 1-et?
(#) llaczo hozzászólása Jan 12, 2013 /
 
Sziasztok.
Analóg jelet szeretnék feldolgozni 16F628 PIC el. Kemény fába vághattam a fejszét mert napok óta alig jutok előre. Úgy nézem pascal-ban egyszerűbb ez a meló mint assembly-ben. A mikro pascal súgó is részletesen elmagyarázza miként kell csinálni, csak az a gond hogy egy típusú PIC-et mutat be. Nekem meg olyan nincs, de nem is felelne meg a mérete miatt.
Ez van a súgóban:

  1. program ADC_on_LEDs;
  2. var temp_res : word;
  3.  
  4.  
  5.     ANSEL :=0x04;                       // Configure AN2 pin as analog
  6.     ANSELH := 0;                          // Configure other AN pins as digital I/O
  7.     C1ON_bit := 0;                        // Disable comparators
  8.     C2ON_bit := 0;
  9.  
  10.     TRISA := 0xFF;                       // PORTA is input
  11.     TRISB := 0;                          // PORTB is output
  12.     TRISC := 0;                          // PORTC is output
  13.   begin
  14.     while (TRUE) do
  15.       begin
  16.         temp_res := ADC_Read(2);          // Get 10-bit results of AD conversion
  17.         PORTB := temp_res;                // Send lower 8 bits to PORTB
  18.         PORTC := word(temp_res shr 8);    // Send 2 most significant bits to RC1, RC0
  19.       end;
  20.   e


Valaki meg tudja mondani hogy a TRISA, TRISB, ADC_Read, ANSEL stb, ezek miért nem működnek a 16F628 nál a 16F887 nél pedig igen? Esetleg mit kell berakni helyettük? Sokat segítene mert most már kivagyok
Előre is köszi.
(#) kaqkk válasza llaczo hozzászólására (») Jan 12, 2013 /
 
Ha megnézed az adatlapját láthatod hogy : a 628 nem tud adc-t kezelni ! Próbáld meg helyette talán a 16f690 et
Következő: »»   350 / 1216
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