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   1140 / 1203
(#) Peet19 válasza gyoran hozzászólására (») Nov 28, 2020 /
 
Megpróbálom köszönöm. Most felraktam a 3.50 -est de sajna abban sincs. Kár hogy nincs rá lehetőség hogy valahogy beimportálni olyan PIC -eket amik nem szerepelnek alapból az IDE -be.
(#) miki79 hozzászólása Nov 29, 2020 /
 
Sziasztok!
Tudnátok nekem magyar nyelvű cikkeket vagy magyar nyelvű videókat ajánlani ami az egyszerű számítógépek működésével foglalkozik logikaikapuk,regiszterek és gépikód szintjén.
Hogyan olvassa ki a memóriából a bináris adatokat, hogyan dolgozza fel az alu az információt és hasonló...
(#) oregharcos válasza oregharcos hozzászólására (») Nov 29, 2020 / 1
 
Sziasztok! Sikerült megoldani amit akartam. Tudom, hogy egy programozónak ez semmi. Nekem nagy örömet okozott a siker, mert nekünk még a csöves technikát tanították.

  1. //PIC12675
  2.     //Nyomógombra indúl.
  3.     //A GP2-ön 10mp-ig magas szint van.
  4.     //A GP4-en is 10mp-ig magas szint van.
  5.     //A GP5-ön villog amíg feszt kap.
  6.  
  7.     #define nyg GPIO.GP3
  8.  
  9.      void main()
  10.       {
  11.         GPIO = 0;
  12.         TRISIO = 0b00001000;
  13.        
  14.         ANSEL = 0;
  15.  
  16.         while (1)
  17.           {
  18.             if(nyg != 1)
  19.              
  20.              {
  21.                
  22.                 GPIO = 0b00000100;
  23.                 Delay_ms (10000);        
  24.                 GPIO = 0b00010000;
  25.                 Delay_ms (10000);        
  26.  
  27.                 vilog:
  28.  
  29.                 GPIO = 0b00100000;
  30.                 Delay_ms (500);
  31.                 GPIO = 0b00000000;
  32.                 Delay_ms (500);
  33.                 GPIO = 0b00100000;
  34.                 Delay_ms (500);
  35.                 GPIO = 0b00000000;
  36.                 goto vilog;
  37.               }
  38.           }
  39.  
  40.  
  41. }
(#) glaci hozzászólása Dec 5, 2020 /
 
Sziasztok!
Furcsa jelenséggel szembesülök. A pic amire a programot írom 16F887. A jelenség a következő:
a főprogram 1-16 csatorna nyitva tartása előre meghatározott ideig, amit az lcd kijelzőn figyelemmel lehet kisérni. Az időket a programból változtatni lehet.
Bizonyos megfontolásból a csatornák bármelyikét figyelmen kívül lehet hagyni, szintén a programból.
És itt van a probléma. Bárhova helyezem el ezt a programrészt, a program be se lép a whie(1) ciklusba.
Ha kiveszem a programrészből az lcd kiírásra vonatkozó utasításokat akkor a program rendesen fut.


  1. while(allapot2.F2)      //belépés a locsolásból kivett csatornák
  2.                 {
  3.                    if(allapot2.F3)
  4.                    {
  5.                       Lcd_Cmd(_LCD_CLEAR);  LCD_Cmd(_LCD_UNDERLINE_ON); LCD_Cmd(_LCD_MOVE_CURSOR_LEFT);
  6.                                  //123456789012345678901234
  7.                       Lcd_Out(1,2,"Kihagyott csatornak");
  8.                       Lcd_Out(2,2,"Csatorna->      " );
  9.                       csat_ki1=csat; csat=1;
  10.                       allapot2.F3=0;allapot.F1=1;
  11.                    }
  12.                    while(allapot.F1)   //csatorna léptetés
  13.                    {
  14.                      if(csat>16) csat=1;
  15.                       txt1[0]=csat/10+48;if(txt1[0]==48) txt1[0]=' ';txt1[1]=csat%10+48;
  16.                       for (i=0; i<2; i++){ Lcd_Chr(2,13+i,txt1[i]); LCD_Cmd(_LCD_MOVE_CURSOR_LEFT);   } //
  17.                       delay_ms(500);
  18.                       if(!leptet && !a)
  19.                       {
  20.                          a=1;
  21.                          csat++;
  22.                       }
  23.                       a=0;
  24.                       if(!nysel && !a)   allapot.F2=1;  //csatorna kiválasztás
  25.                       a=0;
  26.                       if(EEPROM_Read(csat+48))allapot.F4=1; else  allapot.F4=0;
  27.  
  28.                        while(allapot.F2)    //a cstorna ki be kapcsolása
  29.                       {
  30.                          if(allapot.F4) Lcd_Out(2,26,"be");
  31.                          //else   Lcd_Out(2,26,"ki");
  32.                         if(!leptet && !a)
  33.                          {
  34.                             a=1; allapot.F4=~allapot.F4;
  35.                          }
  36.                          a=0;
  37.                          if(!nysel && !a)
  38.                          {
  39.                             a=1;
  40.                             EEPROM_Write(csat+48,allapot.F4);
  41.                             csat++; allapot.F2=0;
  42.                          }
  43.                          a=0;       /*      */
  44.                       }       //eddig tart a csatorna ki be kapcsolása
  45.                       if(allapot.F6) //start gomb megnyomva
  46.                       {
  47.                           csat_ki=0;allapot.F1=0;allapot2.F1=1;allapot.F2=0;allapot2.F2=0;allapot.F6=0;
  48.                       }
  49.                    } //eddig tart a csatorna léptetés
  50.                 }  //eddig tart a locsolásból kivett csatornák


Vagyis ha kimarad az 5. sortól a 21. sorig és az 59. sortól a 61. sorig a program rész, akkor a program fut, ha ezek bent vannak akkor a while(1) ciklusba be se lép.
A hozzászólás módosítva: Dec 5, 2020
(#) trickentrack hozzászólása Dec 7, 2020 /
 
Sziasztok!
Szeretnék kérni egy kis segítséget, ez az első PICes projektem.
Megépítettem az ebben a cikkben található áramkör. Bővebben: Link
Annyi a változtatás, hogy a nyákot újraterveztem. Szeretném felprogramozni a picet, de egyenlőre azt sem tudom hogy álljak neki. Pickitem nincs, ezért megépítettem a cikkben található programozót is. Milyen úton-módon tudom a programot beleégetni a PICbe?
Előre is köszönöm!

1.jpg

2.jpg
   
(#) Hp41C válasza trickentrack hozzászólására (») Dec 7, 2020 /
 
Szia!
Amit építettél, az egy JDM programozó?
Ha igen, keress egy jó régi számítógépet, amiben még bővítőkártyán van a soros port és ki tudja adni a 9V környéki feszültséget a modem vezérlő vonalaira. Töltsd le a PICprgm programot, telepítsd. Hasonlítsd össze a Hardware oldalon szereplő kapcsolásokat a megépítettel. Ennek megfelelően konfiguráld a programot. Töltsd be vele a .hex állományt, csatlakoztasd a PIC -et, programozd fel.
Sajnos ez a programozó már jó régi, a siker nem garantált.
A hozzászólás módosítva: Dec 7, 2020
(#) trickentrack válasza Hp41C hozzászólására (») Dec 8, 2020 /
 
Ez lett megépítve. Akkor USB-Soros konverterrel neki se álljak?
(#) Hp41C válasza trickentrack hozzászólására (») Dec 8, 2020 /
 
Ez még jó is lehet, mert külső 12V -os tápot használ.
(#) Elektro.on válasza trickentrack hozzászólására (») Dec 8, 2020 /
 
Egy próbát megér!
(#) trickentrack válasza Elektro.on hozzászólására (») Dec 8, 2020 /
 
Megpróbáltam. A programozó szerint feltötltötte a programot. A programozón a led nem csinált semmit. Nem tudom, hogy igényel-e valamilyen beállítást a programozó. Kipróbálni egyenlőre nem tudom hogy tudnám, mivel a "kijelzőjét" még nem raktam össze. Bővebben: Link
(#) pipi válasza trickentrack hozzászólására (») Dec 8, 2020 /
 
Mivel nem volt hibaüzenet, a programozás szerintem sikeres. A programozás oda-vissza kommunikációt igényel.
(#) trickentrack válasza pipi hozzászólására (») Dec 8, 2020 /
 
Köszönöm a segítségeteket! A napokban elkészítem a kijelző részét és jövök a fejleményekkel!
(#) Peet19 hozzászólása Dec 8, 2020 /
 
Sziasztok!
A 18F27K40 adatlapján nem találom sehol hogy mekkora kondikat kell rakni a kristályhoz. Lehet akkorát mint más PIC -ekhez? PL. 4MHz - 27pF vagy 8MHz 22pF?

Előre is köszi a segítéget!
(#) Bakman válasza Peet19 hozzászólására (») Dec 8, 2020 /
 
Megoszlanak a vélemények, én a melléklet táblázat szerint szoktam a kondenzátorokat pakolgatni.
(#) Peet19 válasza Bakman hozzászólására (») Dec 8, 2020 /
 
Értem, köszi, mentettem.
Még egy gyors kérdés. A MCLR felett mit jelent a vonal?
_____
MCLR
(#) benjami válasza Peet19 hozzászólására (») Dec 8, 2020 /
 
Azt, hogy negált a bemenet (azaz az alacsony logikai szint az aktív, ekkor történik a reset)
(#) Peet19 válasza benjami hozzászólására (») Dec 8, 2020 /
 
Rendben, köszönöm.
(#) Peet19 hozzászólása Dec 8, 2020 /
 
Még egy kérdés.
A nem használt lábakat kimenetként vagy bemenetként érdemes / kell beállítani, és mi legyen a jelszintjük?
Nekem logikusnak tűnne kimenetnek és alacsony szintnek, de nem biztos hogy jól gondolom.
(#) Pali79 válasza Peet19 hozzászólására (») Dec 8, 2020 /
 
Jól gondolod, kimenetként és alacsony szinten.
(#) Peet19 válasza Pali79 hozzászólására (») Dec 8, 2020 /
 
Köszi.
(#) glaci hozzászólása Dec 8, 2020 /
 
Sziasztok!
Nekem ezzel a megszakításokkal sok bajom van. Sehogy se azt csinálja amit én szeretnék. Szóval ha egy gombot megnyomok akkor egy megszakításnak kéne történnie, aminek az eredményét, majd feldolgozza a program. A regiszterek beállítása ez:


  1. allapot2=0;
  2.   allapot =0;
  3.   ANSEL  = 0;                        // Configure AN pins as digital I/O
  4.   ANSELH = 0;
  5.   C1ON_bit = 0;                      // Disable comparators
  6.   C2ON_bit = 0;
  7.    InitTimer0();
  8.    //megszakítások
  9.    szamlal=0; figyel=0;
  10.    TRISA=0b00111110;                
  11.    TRISB=1;                
  12.    TRISC=0b00001100;                    //kimenetek
  13.    TRISD=0b00000000;
  14.   // TRISE=0;
  15.    TRISE.RE2=0;
  16.    PORTE.RE2=0;
  17. //////////////////////
  18.    INTCON.GIE = 1;
  19.    INTCON.PEIE=1;
  20.    INTCON.INTE=1;
  21.    INTCON.INTF=0;
  22.    INTCON.RBIE=1;
  23.    INTCON.RBIF=0;
  24.    IOCB=0b01110011;


a megszakítások pedig ez

  1. void Interrupt()
  2. {
  3.   if (TMR0IF_bit)
  4.   {
  5.     TMR0IF_bit = 0;
  6.     TMR0 = 6;
  7.     szamlal++; figyel++;
  8.     if (szamlal==500)     //0,5 sekundum
  9.        {
  10.         szamlal=0;
  11.         PORTA.RA0=~PORTA.RA0;
  12.        
  13.        }
  14.     if(figyel==200)
  15.     {
  16.       figyel=0;
  17.        if (PORTA.RA1==1 && PORTA.RA2==1)   PORTD.RD0=0;
  18.        if (PORTA.RA1==0 && PORTA.RA2==0)   PORTD.RD0=1;
  19.     }
  20.   }
  21.   if(INTCON.RBIE)    //megszakítás a b porton
  22.   {
  23.      if(!PORTB.RB0)  allapot.F0=0;     //stop         ;  PORTE.F2=1
  24.        
  25.      if(!PORTB.RB1)  allapot.F6=1;   //start            PORTE.F2=0;
  26.        
  27.      if (!PORTB.RB4) allapot2.F0=1;   //ha 0 akkor a locsoló motor indul
  28.  
  29.      if(!PORTB.RB5)  allapot2.F0=0;   //ha 0 akkor a locsoló motor leáll
  30.  
  31.      if(!PORTB.RB6)
  32.      {
  33.         allapot2.F2=1; //locsolásból kivett csatornák
  34.         allapot2.F3=1;
  35.      }
  36.         INTCON.RBIF=0;
  37.   }        /* */
  38.  
  39. }


A while cilusban

  1. while(1)
  2.   {
  3.      Lcd_Cmd(_LCD_CLEAR);
  4.      Lcd_Out(2,1,"itt vagyok");
  5.      delay_ms(1000);
  6.      if(!allapot.F0 )
  7.      {
  8.         Lcd_Cmd(_LCD_CLEAR);
  9.         LCD_Out(1,2,"Menu  Csatornaszam");
  10.         //           12345678901234567890
  11.         LCD_Out(2,2,"Locsolasi ido:0.00 perc");
  12.         delay_ms(1000);allapot.F0=1;
  13.      }
  14.      if(allapot.F6 )
  15.      {
  16.          Lcd_Cmd(_LCD_CLEAR);
  17.                      //  123456789012345678901234
  18.          Lcd_Out(1,2,"Csatorna->       s");
  19.          Lcd_Out(2,2,"Locsolasi ido: .   perc");
  20.          delay_ms(1000);allapot.F6=0;
  21.      }
  22.      if(allapot2.F2)
  23.      {
  24.         Lcd_Cmd(_LCD_CLEAR);
  25.                       //123456789012345678901234
  26.         Lcd_Out(1,2,"Kihagyott csatornak");
  27.         Lcd_Out(2,2,"Csatorna->      " );
  28.         delay_ms(1000);allapot2.F2=0;
  29.      }
  30.   }



Az eredmény: "itt vagyok" felirat marad állandóan
a gombok megnyomása semmin nem változtat
(#) Hp41C válasza glaci hozzászólására (») Dec 9, 2020 /
 
Az GIE legyen a legutolsó lépés a megszakítás kezelés beállításakor.
Az PORTB megszakítás kezelésekor a PORTB értékét csak egyszer olvasd be, tedd segédváltozóba, annak teszteld a bitjeit.

Ha mikoC -ben programozol, a programod elindítható nyomkövetéssel is. Ekkor lehetőséged van töréspontot elhelyezni pl. a megszakítási rutin belépési pontjára. Ha a program egy törésponhoz ér, megáll, vizsgálható a regiszterek értéke, a memória tartalma. Tovább indítható akár lépésenként is. Sajnos ebben az esetben a PORTB megszakítás nem működik. Ezen úgy szoktam segíteni, hogy a PORTB regisztert nem másolom át a segédváltozójába, hanem abban kézzel állítom be az értéket. Az INTCON regiszter bitjei átírhatók a nyomkövetés során.
(#) glaci válasza Hp41C hozzászólására (») Dec 9, 2020 /
 
Szia!
Köszönöm! Így fogok tenni.
(#) glaci válasza Hp41C hozzászólására (») Dec 9, 2020 /
 
Nem tudom jól értettem e? De ezt csináltam:

  1. void main()
  2. {
  3.  
  4.   ANSEL  = 0;                        // Configure AN pins as digital I/O
  5.   ANSELH = 0;
  6.   C1ON_bit = 0;                      // Disable comparators
  7.   C2ON_bit = 0;
  8.    InitTimer0();
  9.    //megszakítások
  10.    szamlal=0; figyel=0;
  11.    TRISA=0b00111110;              
  12.    TRISB=1;                
  13.    TRISC=0b00001100;                    //kimenetek
  14.    TRISD=0b00000000;
  15.   // TRISE=0;
  16.    TRISE.RE2=0;
  17.    PORTE.RE2=0;
  18. //////////////////////
  19.  
  20.    INTCON.PEIE=1;
  21.    INTCON.INTE=1;
  22.    INTCON.INTF=0;
  23.    INTCON.RBIE=1;
  24.    INTCON.RBIF=0;
  25.  
  26.    IOCB=0b01110011;
  27.     INTCON.GIE = 1;
  28.  
  29.  //  PORTD=0;
  30.  //  PORTB=0;
  31.   Lcd_Init();                        // Initialize LCD
  32.   Lcd_Cmd(_LCD_CLEAR);               // Clear display
  33.   Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  34.  
  35.   allapot=1;
  36.  
  37.  
  38.   kimenetek=0;
  39.  
  40.   b=0;
  41.   csat  = 1;
  42.   INH1 = 1;
  43.   INH2 = 1;



  1. void Interrupt()
  2. {
  3.   if (TMR0IF_bit)
  4.   {
  5.     TMR0IF_bit = 0;
  6.     TMR0 = 6;
  7.     szamlal++; figyel++;
  8.     if (szamlal==500)     //0,5 sekundum
  9.        {
  10.         szamlal=0;
  11.         PORTA.RA0=~PORTA.RA0;
  12.        
  13.        }
  14.     if(figyel==200)
  15.     {
  16.       figyel=0;
  17.        if (PORTA.RA1==1 && PORTA.RA2==1)   PORTD.RD0=0;
  18.        if (PORTA.RA1==0 && PORTA.RA2==0)   PORTD.RD0=1;
  19.     }
  20.   }
  21.   if(INTCON.RBIE)    //megszakítás a b porton
  22.   {
  23.  
  24.      figyelb=PORTB;
  25.      allapot=figyelb;
  26.      figyelb=1;
  27.    /*  if(!PORTB.RB0)   allapot.F0=0;     //stop      PORTE.F2=1;   ;
  28.        
  29.      if(!PORTB.RB1)   allapot.F6=1; //start         PORTE.F2=0;
  30.        
  31.      if (!PORTB.RB4) allapot2.F0=1;   //ha 0 akkor a locsoló motor indul
  32.  
  33.      if(!PORTB.RB5)  allapot2.F0=0;   //ha 0 akkor a locsoló motor leáll
  34.  
  35.      if(!PORTB.RB6)
  36.      {
  37.         allapot2.F2=1; //locsolásból kivett csatornák
  38.         allapot2.F3=1;
  39.      }  */
  40.      INTCON.RBIF=0;
  41.   }


Továbbra se működik.
(#) glaci válasza glaci hozzászólására (») Dec 9, 2020 /
 
Most működik! Bár lassú!
Annyi változott, hogy az INTCON regiszter beállításánál csak az RBIE az RBIF és a GIE bitek lettek beállítva valamint az IOCB regiszter.
A lassúság azt jelenti, hogy nem elég csak megnyomni valamelyik RB gombot, hanem lenyomva kell tartani, mindaddig amíg a while ciklusban az if() szerkezet megvizsgálja az allapot bitjeit.
(#) trickentrack válasza pipi hozzászólására (») Dec 10, 2020 /
 
Elkészült a kijelző! Viszont sajnos a programozás nem sikerült. Próbáltam több szoftverrel is, de semmi... Rendeltem közben egy PICkit 3 at kínából, csak kérdés, hogy mikor ér ide.
Lehet esélyem felprogramozni ezzel az usb-soros átalakítóval?
Van valami ötletetek?
(#) Peet19 hozzászólása Dec 10, 2020 /
 
Sziasztok!

Ha van valakinek kedve átnézné a kódomat? Mert egyszerűen nem értem miért nem okoz a TMR2 megszakítást.
Már mindenfélét kipróbáltam, meg be van állítva minden ami kell és egyszerűen abszolút nem működik.
A megszakításhoz tartozó isr() függvény egyáltalán le sem fut, pedig minden engedélyezve van.

Előre is köszi a segítséget!!!

  1. #include <xc.h>
  2. #include <pic18f27k40.h>
  3. #include "config_bits.h"
  4.  
  5.  
  6. /****** Függvény deklarációk ******/
  7. void init(void);
  8. void init_tmr2(void);
  9. void init_interrupt(void);
  10.  
  11. void __interrupt(high_priority) isr(void);
  12.  
  13.  
  14. /****** Globális változók ******/
  15. unsigned char cnt_1     = 0;
  16. volatile char tmr2_flag = 0;
  17.  
  18.  
  19. void main(void) {
  20.    
  21.     init();
  22.     init_tmr2();
  23.     init_interrupt();    
  24.     LATCbits.LATC3 = 1;
  25.    
  26.     while(1){
  27.         if(tmr2_flag){  // eltelt 20ms
  28.             tmr2_flag       = 0; // Megszakítást jelző változó törlése
  29.             PIR4bits.TMR2IF = 0; // Megszakítást jelző bit törlése
  30.             cnt_1++;             // Megszakítás számláló léptetése
  31.            
  32.             if(cnt_1 == 50){     // eltelt 1 sec
  33.                 LATCbits.LATC3 = ~PORTCbits.RC3;
  34.                 cnt_1 = 0;
  35.             }
  36.         }
  37.        
  38.     }
  39.    
  40.     return;
  41. }
  42.  
  43. /****************** Alapbeállítások ****************/
  44. void init(void){
  45.    
  46.     // Az összes port összes lába digitálisra állítva. Analóg funkció letiltva.
  47.     ANSELA = 0b00000000;
  48.     ANSELB = 0b00000000;
  49.     ANSELC = 0b00000000;
  50.    
  51.     // Minden lábat kimenetnek állítok be. A nem használt lábak jó ha így maradnak.
  52.     TRISA = 0b00000000;
  53.     TRISB = 0b00000000;
  54.     TRISC = 0b00000000;
  55.    
  56.     // Beállítom az összes láb jelszintjét. A nem használt lábak jó ha így maradnak.
  57.     LATA = 0b00000000;
  58.     LATB = 0b00000000;
  59.     LATC = 0b00000000;
  60. }
  61.  
  62. /******************* Timer 2 *****************/
  63. void init_tmr2(void){
  64.     // 20ms -onként fog a túlcsordulás bit bebillenni. Ez a PIR4 regiszter TMR2IF bitje!
  65.     T2CON = 0b10111001;  // előosztó 1:8 utoósztó 1:10
  66.     T2PR  = 250;
  67.     PIE4bits.TMR2IE = 1; // Timer 2 megszakítás engedélyezve
  68. }
  69.  
  70. /***************** Interrupt ****************/
  71. void init_interrupt(void){
  72.     INTCONbits.GIE_GIEH  = 1;  // Globális megszakítás engedélyezve
  73.     INTCONbits.PEIE_GIEL = 1;  // Perifériás megszakítás engedélyezve
  74.     INTCONbits.IPEN      = 1;  // Megszakítás prioritás engedélyezve
  75. }
  76.  
  77. /************* Megszakításkor lefutó függvény **************/
  78. void isr(void){
  79.     // Ha Timer2 megszakítás érkezett
  80.     if(PIR4bits.TMR2IF){
  81.         tmr2_flag = 1;  // eltelt 20ms
  82.     }
  83. }
(#) Tasznka válasza Peet19 hozzászólására (») Dec 10, 2020 / 1
 
Szia!
Ez talán segít ....Bár nem toltam még 8 biteseket,csak 16-osokat.
A szimulátorom szerint így már megy a Timer2.
  1. void init_tmr2(void){
  2.     // 20ms -onként fog a túlcsordulás bit bebillenni. Ez a PIR4 regiszter TMR2IF bitje!
  3.     T2CONbits.ON = 0;
  4.     T2CON = 0b10111001;  // előosztó 1:8 utoósztó 1:10
  5.     T2CLKCONbits.T2CS = 2;  // 2 = Fosc
  6.                             // 6 = Sosc
  7.                             // 1 = Fosc/4
  8.     T2PR  = 250;
  9.     PIR4bits.TMR2IF = 0;
  10.     PIE4bits.TMR2IE = 1; // Timer 2 megszakítás engedélyezve
  11.     T2CONbits.ON = 1;
  12. }
  13. void isr(void){
  14.     // Ha Timer2 megszakítás érkezett
  15.     if(PIR4bits.TMR2IF){
  16.         tmr2_flag = 1;  // eltelt 20ms
  17.         PIR4bits.TMR2IF = 0;
  18.     }
  19. }
A hozzászólás módosítva: Dec 10, 2020
(#) Peet19 válasza Tasznka hozzászólására (») Dec 10, 2020 /
 
Működik, köszi csak nem értem miért.
A 3. sorban kikapcsolod a Timer2 -t, de a 4. sorba visszakapcsolja a bináris beállítás 0b1....
A T2CLKON regiszterrel még nem találkoztam, de szerintem itt lesz a bibi. Utána olvasgatok.
Itt a 2 gondolom decimálisan értendő, vagyis akkor 0010 a valós érték? Ha igen akkor nekem itt a táblázat szerint fosc -van. Vagyis nem értem amiket kommentben oda írtál mellé. Írsz erről egy pár mondatot?
Köszi mégegyszer.
A hozzászólás módosítva: Dec 10, 2020
(#) Tasznka válasza Peet19 hozzászólására (») Dec 10, 2020 / 1
 
Elvileg szabály,hogy ha valamit configolsz,akkor előbb kikapcsolod,utána configolod,majd indíthatod.Volt olyan PIC aminél ment az állítgatás menet közben is,valamelyiknél nem,de fő a biztonság
a T2CON-t nem is néztem,ment anélkül is.
Amiket odaírtam az a datában van leírva,hogy honnan menjen a timer clock-ja,van még ott 4-5 dolog is amiről mehet,de csak azokat írtam be,amik az alapok.
Igen decimálisat írtam,bár az adatlapon bin van,csak ritkán használok bint,jobb a dec,hex,nem kell annyit gépelni .
Következő: »»   1140 / 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