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   1122 / 1203
(#) Hp41C válasza menyus hozzászólására (») Ápr 30, 2020 /
 
Egy 16F1824 csak a negyedébe keröl...
(#) kissi válasza Hp41C hozzászólására (») Ápr 30, 2020 /
 
Én arra (is) reagáltam, hogy nem akar újabb, modernebb MPLAB-ot használni, márpedig a régiekben nincsenek benne az új 16-osok, persze, mindent a helyén kell használni, a 10-esek, 12-esek is jók bizonyos feladatokra !
(#) menyus válasza kissi hozzászólására (») Máj 1, 2020 /
 
A 10F széria is benne van a 8.40 be, pl. 12F675 öt is használok általában tehát ezeket is ismeri a 8.40, valamint én az F628 at, 648 at 690 et használom általában. Ezeket is ismeri, tehát nekem elég volna a 8.40 mert az legalább stabil és bug mentes, legalábbis nem vettem észre benne semmi galádságot. De megfogadva a tanácsotokat most frissitettem le a 8.88 ra, Működik ez is rendesen és ez megnyitja gond nélkül a korábbi projectjeimet is. A 8.92 vel valami nem kerek mert az a régi projecteket nem szereti valamiért. De elég nekem a 8.88 is. Köszi.
A hozzászólás módosítva: Máj 1, 2020
(#) Szemmy hozzászólása Máj 1, 2020 /
 
Sziasztok. Szeretnék segítséget kérni.
Írtam 1 PWM rutint, ami 1 ledet pulzál. szuperül működik csak az a gond vele hogy amikor a led teljes fényerővel világit egy pillanatra elalszik átunna ismét teljesen és átunna kezd halványulni.
Természetesen úgy szeretném hogy ne legyen észrevehető.
Úgy írtam meg hogy 0x00-tol kezd és felfut 255-re. Nem találom a hibát.
Előre is köszönöm
(#) Szemmy hozzászólása Máj 1, 2020 /
 
Megvan a hiba
(#) Szemmy hozzászólása Máj 2, 2020 /
 
Sziasztok. Van 1 PWM rutinom. ami rendesen működik, de azt szeretném hogy meghatározott számig fusson végig , utána lépjen ki a ciklusból. Erre nem tudok rájönni.
Segítenétek?
(#) bbalazs_ válasza Szemmy hozzászólására (») Máj 2, 2020 /
 
A PWM a timer-hez van csatolva.
Indítasz egy timert azonos idővel és megszakítás(oka)t generálsz, ha lefutott. Az egy periódus.
De a LED pulzálásnál nem lenne elég sima idővel dolgozni? Mondjuk 2mp után kapcsoljon ki...
(#) Szemmy válasza bbalazs_ hozzászólására (») Máj 2, 2020 /
 
Én úgy gondoltam hogy van egy ciklus felfut lefut. Annak a számát szeretném változtatni ha kell 5x ha kell 2x ara nem jövök rá.
(#) foxi63 válasza Szemmy hozzászólására (») Máj 2, 2020 /
 
Szia! egy második ciklus kell, ami annyiszor futtatja le a felfut-lefut rutint, amennyi a második ciklus száma.
(#) bbalazs_ válasza Szemmy hozzászólására (») Máj 2, 2020 /
 
Akkor vagy szubrutinba teszed és ciklusban annyiszor hívod meg, ahányszor kívánod vagy a kollega megoldása, egy külső ciklus a PWM körül.
Ha nem csak egyszer kell ez az egész, az elsőt javasolnám.
(#) Szemmy válasza bbalazs_ hozzászólására (») Máj 2, 2020 /
 
Szia. Próbálom ciklusba rakni de nem akar kilépni , csak ismétli.
(#) Szemmy hozzászólása Máj 2, 2020 /
 
ezzel van a gond

pwm.jpg
    
(#) bbalazs_ válasza Szemmy hozzászólására (») Máj 2, 2020 /
 
Tedd be szimulátorba.
Nekem nagyon nem áll össze a kép, pl. közvetlenül nem dolgoznék a regiszterbe, hanem egy segédváltozón keresztül.

A fő ciklus így nézne ki:

movlw 0x05
movwf ciklusszamlalo
cimke:
call pwmrutin - ez a te rutinod, return-nal a vegen
decfsz ciklusszamlalo
goto cimke
full:
(#) Szemmy hozzászólása Máj 2, 2020 /
 
Tökéletesen működik.
A baj az volt hogy a PWM_INDITAS-t EQU-ba raktam, nem CBLOCK-ba
Csak ennyi volt a gond , a forrás maradt igy.
A hozzászólás módosítva: Máj 2, 2020
(#) bbalazs_ válasza Szemmy hozzászólására (») Máj 2, 2020 /
 
Akkor sem szép az össze-vissza ugrálás. Amíg tízsoros a program, semmi gond.
(#) Szemmy válasza bbalazs_ hozzászólására (») Máj 2, 2020 /
 
Egy nagyobb program része lesz, több ugrálás lesz benne mint valaha.
(#) spgabor válasza usane hozzászólására (») Máj 2, 2020 /
 
Néztem, amiket írtál, meg átnéztem azadatlapot is, de az picit száraz nekem, illetve az assemby kódok továbbra sem állnak hozzám túl közel.
Szóval visszanéztem a régi kódomat és az időzítését és annak a kommentjeit is. Amit írtl és azzal kibővítettem a kapcsolásom, de Proteusban modellezve továbbra sem működik sajnos megfelelően. Az a baj, hogy modellezéskor a GP2 láb logikai 1 és 0 között ugrál folyamatosan. Ez a láb lenne, ami kimenetként szolgálva kapcsolná a fogyasztót.
Illetve ez nem tudom, hogy általam elkövetett, vagy Proteus hiba-e, de mindig a felső nyomógomb, ami a GP4-re megy, alapból rövidre van zárva. Ha kitörlöm és újra berakom, akkor egy darabig jó.

Az utolsó kódom a következő:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pic12f683.h>
  4. #include <htc.h>
  5.  
  6. __CONFIG(FOSC_INTOSCIO, WDTE_OFF, PWRTE_OFF, MCLRE_ON, CP_OFF, CPD_OFF, BOREN_OFF, IESO_OFF, FCMEN_OFF);
  7.  
  8. int csengettek = 0;
  9. int csengetes_ido = 20;
  10. int szamlalo = 0;
  11.  
  12. #define GOMB_IDO_NOVEL GP4
  13. #define GOMB_IDO_CSOKKENT GP5
  14. #define CSENGETES GP1
  15. #define KIMENET GP2
  16.  
  17. static void interrupt isr(void){
  18.     szamlalo++;
  19.     csengettek = 0;
  20.     if(szamlalo == csengetes_ido){
  21.         csengettek = 0;
  22.         szamlalo = 0;
  23.         KIMENET = 0;
  24.     }
  25. }
  26.  
  27. int main() {
  28.     PR2 = 249;    // Timer2 PR2 8bites periódus regiszter
  29.     T2CON = 5;    // T2CON regiszter
  30.     TMR2IF = 1;    // TMR2IF megszakítást engedélyező bit
  31.     PEIE = 1;    // Peripheral interrupt engedélyezése
  32.     GIE = 1;    // Globális interrupt engedélyezése
  33.     ANSEL = 0; //analog bemenetek kiakpcsolat
  34.  //   INTCON = 0x00;
  35.     TMR0 = 0;
  36.     TRISIO = 0b00110010; //GP1, GP4, GP5 inputok
  37.     GPIO = 0x00; // nullazza a labakat
  38.     OSCCON = 0b01100000;  // 4MHz
  39.     CCP1CON = 0x0F;
  40.     KIMENET = 0;
  41.     while(1){
  42.         if(!GOMB_IDO_NOVEL){
  43.             while(!GOMB_IDO_NOVEL){
  44.                 csengetes_ido++;
  45.             }
  46.         }
  47.  
  48.         if(!GOMB_IDO_CSOKKENT){
  49.             while(!GOMB_IDO_CSOKKENT){
  50.                 csengetes_ido--;
  51.             }
  52.         }
  53.  
  54.         if(!CSENGETES){
  55.             while(!CSENGETES){
  56.                 if(csengettek == 0){
  57.                     //csengetes kezdete
  58.                     csengettek = 1;
  59.                     KIMENET = 1;
  60.                     TMR2IF = 1;
  61.                 }
  62.             }
  63.         }
  64.     }
  65.     return (EXIT_SUCCESS);
  66. }


Illetve mellékeltem újra a Proteus rajzot is.
Mi hiányzik még mindig, vagy mit rontok el?

Köszönöm a segítséget előre is!

Üdv:
spgabor
(#) Hp41C válasza spgabor hozzászólására (») Máj 3, 2020 / 1
 
Proteussal kapcsolatban nem tudok segíteni. A kódban van néhány gubanc.

  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <pic12f683.h>
  4.     #include <htc.h>
  5.      
  6.     __CONFIG(FOSC_INTOSCIO, WDTE_OFF, PWRTE_OFF, MCLRE_ON, CP_OFF, CPD_OFF, BOREN_OFF, IESO_OFF, FCMEN_OFF);
  7.      
  8.     int csengettek = 0;
  9.     volatile int csengetes_ido = 20;
  10.     int szamlalo = 0;
  11.      
  12.     #define GOMB_IDO_NOVEL GP4
  13.     #define GOMB_IDO_CSOKKENT GP5
  14.     #define CSENGETES GP1
  15.     #define KIMENET GP2
  16.      
  17.     static void interrupt isr(void){
  18.         szamlalo++;
  19.         if(szamlalo == csengetes_ido){
  20.             csengettek = 0;
  21.             szamlalo = 0;
  22.             KIMENET = 0;
  23.            TMR2IE = 0;    // TMR2IE megszakítást engedélyező bit
  24.         }
  25.         TMR2IF = 0;    // TMR2IF megszakítás kérést jelző bit
  26.     }
  27.      
  28.     int main() {
  29.         PR2 = 249;    // Timer2 PR2 8bites periódus regiszter
  30.         T2CON = 5;    // T2CON regiszter
  31.         ANSEL = 0; //analog bemenetek kiakpcsolat
  32.      //   INTCON = 0x00;
  33.         TRISIO = 0b00110010; //GP1, GP4, GP5 inputok
  34.         GPIO = 0x00; // nullazza a labakat
  35.         OSCCON = 0b01100000;  // 4MHz
  36.         CCP1CON = 0x0F;
  37.         KIMENET = 0;
  38.         TMR2IF = 0;    // TMR2IF megszakítás kérést jelző bit
  39.         TMR2IE = 0;    // TMR2IE megszakítást engedélyező bit
  40.         PEIE = 1;    // Peripheral interrupt engedélyezése
  41.         GIE = 1;    // Globális interrupt engedélyezése
  42.         while(1){
  43.             if(!GOMB_IDO_NOVEL){
  44.                 while(!GOMB_IDO_NOVEL){
  45.                     csengetes_ido++;
  46.                 }
  47.             }
  48.      
  49.             if(!GOMB_IDO_CSOKKENT){
  50.                 while(!GOMB_IDO_CSOKKENT){
  51.                     csengetes_ido--;
  52.                 }
  53.             }
  54.      
  55.             if(!CSENGETES){
  56.                 while(!CSENGETES){
  57.                     if(csengettek == 0){
  58.                         //csengetes kezdete
  59.                         csengettek = 1;
  60.                         KIMENET = 1;
  61.                         TMR2 = 0;
  62.                         TMR2IE = 1;
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.         return (EXIT_SUCCESS);
  68.     }
(#) spgabor válasza Hp41C hozzászólására (») Máj 4, 2020 /
 
Szia,

köszönöm a javításokat! A megszakításból a TMR2IE-t kellett volna használnom TMR2IF helyett? Akkor a TMR2IF nem is kellene esetleg? Illetve 61. sorban a
  1. TMR2=0
azért van, hogy az egész regisztert kinullázza?

Proteus-ban ezt is megpróbáltam, de továbbra is instabil. Most magas CPU használat miatt reklamál, amit nem értek, hogy miért van. Az az érzésem, hogy a Proteus-on magában vannak problémák és egy megépített panelen kellene inkább már tesztelnem.
Mellékletben becsatoltam a Proteus projektem. A fájl forrását nem a Proteusban fordítottam, hanem a hex file lett betallózva a mikrovezérlő alá. Esetleg valaki megtenné, hogy a saját programjában megpróbálja elindítani? Kicsit bosszant, hogy régen, amikor használtam ezt a programot, ilyen hibát nem tapasztaltam és nem tudom, hogy én rontottam el valamit vagy egy bug-ba nyúltam bele.

Köszönöm és üdv:
spgabor
(#) Hp41C válasza spgabor hozzászólására (») Máj 4, 2020 / 1
 
TMR2IE - Engedélyezi, hogy a timer2 átfordulásakor megszakítás keletkezzen (ha PEIE és a GIE is engedélyezi).
TMR2IF - Jelzi, hogy a timer2 átfordult. Ezt a bitet nem törli a kontroller, így a kiértékelés után programból kell törölni. ((Ha nem töröljük és a megszakítás engedélyezett, a megszakítási rutin fut le minduntalan.))
Ezer a bitek nem a TMR2 regiszterben vannak.
A TMR2 a timer számlálója (lehet előosztója és utóosztója is), ha írás történik a TMR2 regiszterbe az előosztója és az utóosztója nullázódik. Ez garantálja, hogy az első árfordulás ugyan annyi idő műlva történjen, mint a továbbiak egymás után.
(#) spgabor válasza Hp41C hozzászólására (») Máj 4, 2020 /
 
Értem, köszönöm. Ritkán foglalkozok sajnos mikrokontrollerrel. Akkor is csak hobbi szinten, ezért mindig belekeveredek a működésében. De így most világos megint.
Lehet megépítem a paneljét és próbálgatom majd élesben.
(#) usane válasza spgabor hozzászólására (») Máj 4, 2020 /
 
Látom Hp41C segített közben. Sajnos én sem tudom a proteus mennyire kezeli korrektül a PIC programokat, de az MPLAB szimulátora is segíthet tesztelni.
(#) spgabor válasza usane hozzászólására (») Máj 4, 2020 /
 
Ezt nem is tudtam, hogy MPLAB-ban is lehet szimulálást végezni. Kipróbálom este. Köszi a tippet!
(#) usane válasza spgabor hozzászólására (») Máj 4, 2020 /
 
Nem vizuális, de a regisztereket és a változókat nyomon lehet követni.
(#) Taki33 válasza spgabor hozzászólására (») Máj 4, 2020 / 1
 
Szia!

A komparátort kapcsold ki: CMCON0 = 0x07;
Ebben a kapcsolásban ha GP2 alacsony akkor fog forogni a motor!

  1. OSCCON = 0b01100000;  // 4MHz
  2.   PR2 = 249;            // Timer2 PR2 8bites periódus regiszter
  3.   T2CON = 5;            // T2CON regiszter
  4.   TRISIO = 0b00110010;  //GP1, GP4, GP5 inputok
  5.   ANSEL = 0;            //analog bemenetek kiakpcsolat
  6.   CMCON0 = 0b00000111;  // komparátor kikapcsolva
  7.   GPIO = 0x00;          // nullazza a labakat
  8.   KIMENET = 0;          // motor bekapcsolva
  9.   TMR2IF = 0;           // TMR2IF megszakítás kérést jelző bit
  10.   TMR2IE = 0;           // TMR2IE megszakítást engedélyező bit
  11.   PEIE = 1;             // Peripheral interrupt engedélyezése
  12.   GIE = 1;              // Globális interrupt engedélyezése
(#) spgabor válasza usane hozzászólására (») Máj 4, 2020 /
 
Akkor tudom, azt szoktam használni. Azt hittem tud valami vizuális funkciót, ami nem volt ismert számomra.

Taki33: Igen, akkor indulna, ha a GP2 alacsonan van. Ki fogom próbálni valós alkatrészekkel, mert az általad jvasolt módosításokkal is a modellezéssel fel/le ugrál a GP2 láb, akkor is, ha megszakítom a láb és R5 között a vezetőszálat. Ha itt nincs megszakítás, akkor a terhelése a modellezés szerint pedig felugrik 80-90% környékére.
(#) djadji hozzászólása Máj 5, 2020 /
 
Sziasztok! Szeretnék egy közelség érzékelőt építeni, de nem tudom, hogyan keressek kapcsolást, vagy egyáltalán mi alapján lehet ezt mérni.
Azt szeretném, hogy a macskámra teszek egy nyakörvet, ami elkezd sípolni, ha a nyavalyás felmegy az asztalra. Úgy gondoltam, hogy az asztalon lenne a bázis, amit ha a nyakörv megközelít 1 m-re, akkor jelez. de nem tudom hogy ezt hogyan is lehetne kivitelezni, kész kapcsolást nem találtam. Infra LED volt még az ötlet, de ehhez az kell, hogy a nyakörv "lássa" a bázis infra LED villogását, ami a macska nyakában nem biztos hogy megtörténik. Tudnátok tanácsot adni, mit keressek, lehet e ilyet csinálni?
(#) Taki33 válasza spgabor hozzászólására (») Máj 5, 2020 / 1
 
A CCP1CON = 0x0F; sort vedd ki, vagy kapcsold ki: CCP1CON = 0x00;
(#) menyus válasza djadji hozzászólására (») Máj 5, 2020 / 1
 
Aliexpressen kapsz ilyet készen. Kulcskereső, rf elven működik. A vevője érzékenysége állítható. De miért ebbe a topicba tetted fel a kérdést? Ennek köze nincs a PIC hez... pl : https://www.aliexpress.com/item/32669439038.html?spm=a2g0o.productl...01603_
A hozzászólás módosítva: Máj 5, 2020
(#) djadji válasza menyus hozzászólására (») Máj 5, 2020 /
 

Ilyenem van, ez a fordítottja, annak ami nekem kellene. Ha kimegy a hatókörből, akkor jelez (hogy ne hagyd el a kulcsot). Nekem az kellene hogy ha bemegy a hatókörbe, akkor jelezzen.
Hogy miért ide? PIC-kel gondoltam megoldani, másként nem tudom elképzelni a dolgot. Persze ez még nem PIC, mert az ötletelésnél tartok. Igazad van, bocs, nem gondoltam át.
Következő: »»   1122 / 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