Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   448 / 1319
(#) sefi hozzászólása Ápr 2, 2009 /
 
Szervusztok ! Látván a sok tapasztalt emberkét, szeretnék én is kérdezni egyet. Épp egy PIC-en alapuló kütyüt tervezek aminek van két PORTB-n lógó bemenete, amelyeket a végfelhasználó szabadon használhat. (a bemenetek 10K-val VDD-re vannak húzva és normál üzemben valamilyen kapcsolón, vagy kontaktuson keresztül a nullára kapcsolódnak.) Na már most ezeket a bemeneteket kellene megvédeni (értelmes határokon belül) az emberi hülyeségtől és a statikus kisülésektől... A PIC 3.3-voltról jár, azaz ehhez a feszültséghez kell igazodni. Ti milyen védelmeket tartanátok ésszerűnek ilyen esetben ?
Kell-e ESD supressor, vagy elég az a dióda ami a PIC-ben van és csak egy soros ellenállás elég áramkorlátnak ?
(#) potyo válasza sefi hozzászólására (») Ápr 2, 2009 /
 
Szerintem elég egy soros ellenállás, mondjuk 10k.
(#) trudnai válasza szigetivan hozzászólására (») Ápr 2, 2009 /
 
Nem egeszen ertem mire jo az, hogy van egy C kornyezeted ahol ezek a dolgok mar reg le vannak implementalva csak hasznalni kellene, ennek ellenere irsz ASM-ben sajatot....

Na mindegy, ket gondolat:

1. A fuggvenyed egy masik asm blokkal kezdoik, ami RETURN-el vissza ter, azaz a 'kesleltet' fuggvenybol vissza tersz meg mielott elerned kerdeses kodot... Namost egy jo C compiler ami a RETURN mogott van ki is vagja a kukaba (dead code elimination).

2. Nem akarjak, hogy ASM betetbol CALL-ozgass, mert az nem arra valo. Akkor szepen ASM-en kivul kellene megoldanod a kerdest vagy kulso ASM modult csinalnod ha ennyire ragaszkodsz a kevert nyelvu fejleszteshez.

Tehat pl:
  1. void DELAY_1MS()
  2. {
  3.         #asm
  4.                 MOVWF DELAY_STACK1
  5.                 MOVLW .198
  6.                 MOVWF DELAY_CNT1
  7.         D_1MS_1
  8.                 DECFSZ DELAY_CNT1
  9.                 GOTO D_1MS_1
  10.                 MOVF DELAY_STACK1,W
  11.         #endasm
  12. }
  13.  
  14. void DELAY_5MS()
  15.         DELAY_1MS();
  16.         DELAY_1MS();
  17.         DELAY_1MS();
  18.         DELAY_1MS();
  19.         DELAY_1MS();
  20. }


De inkabb javasolnam keresd meg a dokumentacioban a megfelelo konyvtari fuggvenyt. Sok C forditonak pl van valami ilyesmije:

  1. delay_ms(5);

(#) icserny válasza szigetivan hozzászólására (») Ápr 2, 2009 /
 
Egyszer már belinkeltem neked a CC5X fordító User's Manual-ját. Nem kellene fellapozni végre? Különös tekintettel a 9. fejezet elejére: (9.1 Delays)

  1. void delay(char millisec)
  2. /* delays a multiple of 1 millisecond at 4 MHz */
  3. {
  4.   OPTION = 2; /* prescaler divide by 8 */
  5.   do {
  6.     TMR0 = 0;
  7.     clrwdt(); /* only if necessary */
  8.     while (TMR0 < 125);  /* 125 * 8 = 1000 */
  9.   } while (-- millisec > 0);
  10. }
(#) whisky hozzászólása Ápr 2, 2009 /
 
Sziasztok!

Kezdő PIC-es vagyok (16F628+spéci saját JDM+MPLAB), és felmerült néhány kérdés a projektemmel kapcsolatban. Leírom amit eddig kigondoltam:
A kész áramkört nyomtatóporton keresztül szeretném összekötni a számítógéppel, a kommunikációhoz 5 lábra lesz szükségem. Nem szeretnék külső tápellátást használni, a kész eszköz egyetlen LED-et fog villogtatni, a nyomtatóport 5 voltja remélem elég erre. Eléggé pontosnak kell lennie az időzítésnek, ezért külső 4MHz-es kristály oscillátort használnék a beépített helyett.

Megszakításokat kellene használnom, de az nem világos, hogy ha a nyomtató porton adok egy kb 0.01 másodperces impulzust (ami megszakítást fog eredményezni), akkor lehetséges, hogy többször is lefut a megszakítási rutin? vagy elég ha a rutin végén visszaállítom a megszakítási bitet? (bcf 0x0b,0)

Ha kristály oscillátort akarok használni, akkor azok a lábak (RA6 és RA7) automatikusan kapcsolhatatlanná válnak a programból, vagy külön figyelnem kell, nehogy valami véletlen kapcsolja őket?

Hogyan tudok 255-nél nagyobb számokkal dolgozni? van erre valami okos és egyszerű megoldás?

Előre is köszi a segítségeteket!
(#) potyo válasza whisky hozzászólására (») Ápr 2, 2009 /
 
Idézet:
„Nem szeretnék külső tápellátást használni, a kész eszköz egyetlen LED-et fog villogtatni, a nyomtatóport 5 voltja remélem elég erre.”


A nyomtatóporton nincs 5V. Ha arra készülsz, hogy az adatvezetékekről akarsz áramot szerezni, akkor az nagyon portfüggő, esetleg extrakisáramú leddel menni fog.


Idézet:
„Eléggé pontosnak kell lennie az időzítésnek, ezért külső 4MHz-es kristály oscillátort használnék a beépített helyett.”


Mihez képest kell pontosnak lennie? A nyomtatóporthoz képest a belső oszcillátor is pontos.


Idézet:
„Megszakításokat kellene használnom, de az nem világos, hogy ha a nyomtató porton adok egy kb 0.01 másodperces impulzust (ami megszakítást fog eredményezni), akkor lehetséges, hogy többször is lefut a megszakítási rutin?”


Ha a felfutó él okozza megszakítást, akkor csak a következő felfutó él okozhat ismét megszakítást, amennyiben a megszakítási rutinban törlöd a megszakítást jelző bitet.


Idézet:
„vagy elég ha a rutin végén visszaállítom a megszakítási bitet? (bcf 0x0b,0)”


Hol láttál úgy programot írni, hogy a regiszter és a bitnevek helyett a regiszterek címét és a bitek sorszámát használják a programban? Most lusta vagyok megnézni, hogy a 0x0b regiszter nulladik bitje micsoda. De ha le lenne írva a regiszterneve, bitneve formában, akkor rögtön tudnám, hogy mit akar ez a sor jelenteni.


Idézet:
„Hogyan tudok 255-nél nagyobb számokkal dolgozni?”


Hasonló módon felbontod a számokat, mint amikor papíron végzel összeadást, kivonást és szorzást (az osztás már kicsit bonyolultabb). Tehát művelettől függően vagy a legmagasabb vagy a legalacsonyabb helyiértékű bájttal kezded és mész sorba.


Idézet:
„van erre valami okos és egyszerű megoldás?”


Vannak a neten leírások, mintaprogramok, algoritmusok, stb., csak keresni kell. Pl. "pic 16bit addition" kulcsszavakra google első találata: Link
(#) potyo válasza potyo hozzászólására (») Ápr 2, 2009 /
 
Idézet:
„Ha a felfutó él okozza megszakítást, akkor csak a következő felfutó él okozhat ismét megszakítást, amennyiben a megszakítási rutinban törlöd a megszakítást jelző bitet.”


Kicsit pontosítanék. A megszakításjelző bit ismételt bebillenését csak a következő felfutó él okozhatja. Viszont ha ez a bit bebilletve marad a megszakítási rutin lefutása után, akkor ismét lefut a rutin, majd ismét, és így tovább.
(#) trudnai válasza whisky hozzászólására (») Ápr 2, 2009 /
 
En meg annyit fuznek ahhoz amit Potyo mondott, hogy megszakitasbol NEM RETURN-nel terunk vissza, hanem RETFIE-vel!

Amugy mikor a megszakitas meghivodik a GIE automatikusan torlodik es RETFIE automatikusan vissza allitja azt. viszont az IF bitet manualisan kell torolni. Nezd meg pl a
PICmicro Mid-Range MCU Family Reference Manual-t
(#) whisky hozzászólása Ápr 3, 2009 /
 
Köszönöm a segítségeteket, nagyon sokat okultam belőle!
(#) szilva válasza whisky hozzászólására (») Ápr 3, 2009 /
 
A megszakítási rutinban történő regisztermentéseket és -visszaállításokat sem jól csinálod, azt is nézd meg adatlapban!
(#) Sir-Nyeteg hozzászólása Ápr 5, 2009 /
 
Üdv mindenki!
Lenne egy nagyon nagyon nagyon nagy kérésem valakihez!
Suliban adtak házifeladatot:
18f452-es PIC-re kellene két programot írni ASM kóddal, szerdára.
Volt egy jelentkező, aki elvállalta, de csak húzta-húzta, végül nem lett belőle semmi, a határidő meg a nyakamon van.
Nem igazán értek a PIC-hez, sem az assemblyhez. Én C-ben tanultam programozni, de azt sem próbáltam még PIC-re.

Kérek valakit, hogy segítsen, mert most nagyon el vagyok keseredve, hogy átvertek ebben az ügyben.
Kérem aki vállalja, az jelentkezzen privátban, vagy mailben.

Tervezzen és írjon programot PIC18F452-re, amely két regiszter (A_1 és A_2) 8 bites, előjel nélküli tartalmának relációját megállapítja: ha egyenlők, B-be 0-t tölt, ha A_1 nagyobb, akkor 1-et, ha A_2, akkor pedig 2-t!

Tervezzen és írjon programot, amely RB0 0→1 átmenetére inkrementálja a SZAMOL regiszter értékét!
(#) trudnai válasza Sir-Nyeteg hozzászólására (») Ápr 5, 2009 /
 
Mar meg ne haragudj, de ezzel csak sajat magad verted at! Ha a suliban azt kerik csinaldd meg, akkor csinaldd meg! Ha nem tetszik a suli, akkor valassz masikat vagy menj el valami ertelmeset csinalni! Atbukdacsolod a sulidat, utana lesz egy diplomad a kezedben es kitorolheted vele a seggedet, de ami meg rosszabb, hogy a HR-es nem nezi hogy Te csinaltad-e meg a diplomad, sot mikor majd dolgozni fogsz akkor is majd mindig massal csinaltatod meg a munkad? Ahelyett irogatnal a forumra vedd mar elo a konyvet es nezd meg mennyire egyszeru feladat ez! Vannak nagyon szajbaragos konyvek is, csak fel kellene lapozni. A keres, hogy mas irja meg helyetted a hazi feladatod annyira felhaboritott, hogy meg azt sem irom ide le mi a cime az ingyenesen olvashato konyvnek - keresd meg!

Ui: Remelem senki sem lesz annyira buta, hogy megirja helyetted es utana Te arasd le a baberokat...
(#) Sir-Nyeteg válasza trudnai hozzászólására (») Ápr 5, 2009 /
 
Köszönöm szépen a szépen leírt és megfogalmazott segítséget!
(#) Hp41C válasza Sir-Nyeteg hozzászólására (») Ápr 5, 2009 /
 
Szia!

Ne légy elkeseredve, tedd fel az MPlab-ot, olvasd el ez 18F452 adatlapját.
Az első feladat egy subwf utasítással megoldható...
(A poén az, hogy a B szimbólum létrehozásával probléma van - Más név kell)

A második feladat sem sokkal bonyolultabb. Meg kell várni míg felfut, növelni a számlálót, meg kell várni míg lefut..
  1. movf            A_1,w
  2.                 subwf   A_2,w
  3.                 btfsc           STATUS,Z
  4.                 goto            Egyenlo
  5.                 btfsc           STATUS,C
  6.                 goto            Nagyobb
  7. Kisebb:                                 ; A_2 < A_1
  8.                 movlw   1
  9.                 goto            Egyenlo
  10. Nagyobb:
  11.                 movlw   2               ; A_2 > A_1
  12. Egyenlo                                 ; A_2 = A_1
  13.                 movwf   B0
  14. ki              goto            ki
  15.  
  16.  
  17. B0SZ:
  18. FELMEGY:
  19.                 btfss           PORTB,0
  20.                 goto            FELMEGY
  21.                 incf            SZAMOL,f
  22. LEMEGY:
  23.                 btfsc           PORTB,0
  24.                 goto            LEMEGY
  25.                 goto            FELMEGY
(#) Sir-Nyeteg válasza Hp41C hozzászólására (») Ápr 5, 2009 /
 
Köszönöm szépen!
Lógok neked eggyel!
Több mint fél éve kezdtem el AVR-t programozni C-ben, és ez az assembly nagyon durva C-hez képest
Köszönöm!
(#) Blint válasza Hp41C hozzászólására (») Ápr 5, 2009 /
 
A második nem jó, mert ha az rb0 logikai 1ről indul, akkor egyből incrementál egyet, közben nem volt felfutóél.

Olvassunk a sorok között: A PIC- RB0- INT hármas csoport eléggé összefonódik.
És mint tudjuk az INT megszakítástípusnál ki lehet választani a fel vagy lefutó élre állítson flaget. Nem okvetlen szükséges megszakításban lekezelni, pont ezügyben segített Watt kolléga egy pár oldallal ezelött nekem...

Ne legyünk lusták visszaolvasni (Sir-Nyetegnek üzenem, Hp41C-nek meg respect, h utat mutat, úgy, hogy a kedves kérdező minimális erőfeszítést se mutat a probléma megoldására! )

Blint
(#) watt válasza Hp41C hozzászólására (») Ápr 5, 2009 /
 
Gratulálok, hogy gyártod a hülyéket az iparnak! Van nálunk is néhány olyan ember, aki csak arra vár, hogy mások csinálják meg helyette a munkát! Nos az is az lesz, aki helyett mások oldják meg a házifeladatot!
(#) mammut hozzászólása Ápr 5, 2009 /
 
Üdv!
Nagyon nem megy nekem ez az A/D konverzió, viszont most találtam egy mintát 16F877-re és ezzel kapcsolatban az volna a kérdésem, hogy a Watch ablakban hogyan kell megadni egy értéket az ADRESL regiszternek, hogy szimuláció alatt ne törlődjön ki. Úgy olvastam a fórumon, hogy erre a hibaüzenetre: ADC-W0008: No stimulus file attached to ADRESL for A/D - ez a megoldás.

A programot mellékeltem.

877 ad.asm
    
(#) watt válasza mammut hozzászólására (») Ápr 5, 2009 /
 
Kérlek használd a keresőt a következő beírásával:
"topic:530" stimulus
A hozzászólások között keress(ki kell választani a lenyíló menüből!)

Nézd meg a találatokhoz tartozó válaszokat is! Sokat írtunk erről, megvannak a válaszok.
(#) mammut válasza watt hozzászólására (») Ápr 5, 2009 /
 
Köszi! Megtaláltam Mpi-c stimulus leírását! Hát őszintén megvallom több idő megy el a környezet beálligatásával, mint a program írásával, meg beállításával, úgyhogy szerintem kihagyom a szoftveres szimulációt!
Nem gondoltam volna, hogy ilyen nehéz lesz 3 poti + 3 motor levezérlő progiját összekaparni...
(#) lidi hozzászólása Ápr 5, 2009 /
 
Egy pár lappal ezelőtt beszéltünk a soros illesztésről 1 master, és több slave esetén. Végülis megfogadom a tanácsaitokat, és RS485 lesz belőle. Annyit bonyolítanék még, hogy PC-t is be kéne kötni a rendszerbe. A mellékelt rajzra gondoltam. Így amit küld a PIC, azt veszi az összes slave és a PC is. Amit pedig a PC ről küldök, azt is megkapja a PIC, ponnt úgy mintha egy slave küldte volna. Így egy terminál emulátorral könnyű lesz fejleszteni, tesztelni a PIC programját. Szerintetek jó lesz így ?

rs485.pdf
    
(#) watt válasza mammut hozzászólására (») Ápr 5, 2009 /
 
Nézegesd még, nem olyan bonyolult ez, csak kicsit kényelmetlenül oldották meg!
(#) watt válasza lidi hozzászólására (») Ápr 5, 2009 /
 
Ha a PC-is slave lesz, akkor nem kezdeményezhet kommunikációt. Ha ez nem gond, akkor működhet az elképzelés.
(#) tallerbator hozzászólása Ápr 5, 2009 /
 
Sziasztok!

Építettem egy PicKit2 klónt és kiszeretném próbálni, hogy működik-e, de nem tudom, hogy az ICSP melyik lábát a pic melyik lábára kössem rá. A pic adatlapját is néztem, de ott nem találtam semmit.
Valaki tudna segíteni a pic neve 16f716

Előre is köszönöm!
(#) watt válasza tallerbator hozzászólására (») Ápr 5, 2009 /
 
Az adatlap valóban nem jelöli az ICSP lábakat. De a gyártó oldalán megtalálható a PIC programozásáról szóló dokumentum. - Íme - (Az első oldalon van az infó ami kell...)

Olvasd el az oldalamon az ICSP-ről írt dolgokat is(ha még nem olvastad)! - ICSP röviden -
(#) MPi-c válasza tallerbator hozzászólására (») Ápr 5, 2009 /
 
Nem tudom elképzelni, hogy az adatlapban nincs benne... (megnéztem, benne van!) Inkább az a baj, hogy nem tudod mit keress, ezért többet kell olvasni: Bővebben: Link

Ui: Ott van az adatlapban is: 2 oldal, TABLA 1
(#) watt válasza MPi-c hozzászólására (») Ápr 5, 2009 /
 
Idézet:
„(megnéztem, benne van!)”

Igazad van, csak nem a lábkiosztásos rajznál van!
(#) mammut hozzászólása Ápr 5, 2009 /
 
Valami nagyon érdekes fényjáték lett ebből az A/D konverter alkalmazásból!
Amikor tekerem a potit a 16f877 portc-jére kötött 8 led hullámzó fényeket bocsát ki.
5V-ról járatva a 220ohm-os ellennállásal sorba kötött ledek meglepően hálványak. Lehet, hogy a kimeneti jelből már nem is kell PWM jelet előállítanom, mert ez is megteszi..
(#) tallerbator válasza watt hozzászólására (») Ápr 5, 2009 /
 
Köszi a választ. A PicKit2 programjának az egyik adatlapjában írja, hogy a hatodik lábat az AUX-ra kell kötni. Ezt bekell kötni valahova vagy hagyjam szabadon?
(#) watt válasza tallerbator hozzászólására (») Ápr 5, 2009 /
 
Nem kell bekötni.
Szívesen!
Következő: »»   448 / 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