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   1057 / 1210
(#) icserny válasza tirisztortetróda hozzászólására (») Dec 4, 2018 /
 
Itt van magyarul is, nem kell annyit szenvedni!
(#) tirisztortetróda válasza icserny hozzászólására (») Dec 4, 2018 /
 
Köszönöm, könyvjelzőztem is
(#) glaci hozzászólása Dec 5, 2018 /
 
Sziasztok!
Segítséget szeretnék kérni! PIC18f46k80 pic-kel szeretnék egy rendszert működtetni. A pic belső RC oszcillátorról működne 16Mhz-en. A program mikroc-ben íródik.
  1. //Timer0
  2. //Prescaler 1:64; TMR0 Preload = 3036; Actual Interrupt Time : 1
  3.  
  4. //Place/Copy this part in declaration section
  5. void InitTimer0(){
  6.   T0CON  = 0x85;
  7.   TMR0H  = 0x0B;
  8.   TMR0L  = 0xDC;
  9.   GIE_bit        = 1;
  10.   TMR0IE_bit     = 1;
  11. }
  12.  
  13. void Interrupt(){
  14.   if (TMR0IF_bit){
  15.     TMR0IF_bit = 0;
  16.     TMR0H        = 0x0B;
  17.     TMR0L        = 0xDC;
  18.     //ezt kell csinálnia
  19.     PORTD.RD0= ~PORTD.RD0;
  20.   }
  21. }
  22.  
  23. void main()
  24. {
  25.     TRISA=63;                    //kezdetben a 0. láb és az 1. láb input, majd induláskor a begyujtás miatt output vagyis TRISA=60
  26.     TRISB=224;                   // az 5,6,7 lábak áramfigylő bemenetek lesznek, a többi láb motorvezérlő kimenet
  27.     TRISC=0;                     // minden láb kimenet
  28.     TRISD=0;                     //minden láb kimenet
  29.     TRISE=9;                     //az 1. és a 4. láb bemenet a többi kimenet. a 4. láb vagy analóg bemenet vagy digitális
  30.      Portd.RD0=0;
  31.      Portc.RC6=0;
  32.      Portc.RC1=1;
  33.     InitTimer0();
  34.  
  35. }


Megszakításban, az RD0 bitnek szekundumonként felváltva kéne 0 és 1 között billegnie.
Ezzel szemben az RD0 kb 3 s-ig 0-ban van, majd átvált 1-be és úgy marad. Az RC6 viszont nem vált nullára és az RC1 sem vált 1-re. Olyan mintha nem is menne az oszcillátor, de akkor miért van 1 váltás az RD0-án.
A hozzászólás módosítva: Dec 5, 2018
(#) Hp41C válasza glaci hozzászólására (») Dec 5, 2018 /
 
A program ciklikusan újra és újra végrehajtja az inicializálásokat. Tegyél a main() -be az InitTimer0() utánra egy végtelen ciklust.
(#) glaci válasza Hp41C hozzászólására (») Dec 5, 2018 /
 
Szia!
Ezt csináltam, ha erre gondoltál:
  1. //Timer0
  2. //Prescaler 1:64; TMR0 Preload = 3036; Actual Interrupt Time : 1
  3.  
  4. //Place/Copy this part in declaration section
  5. void InitTimer0(){
  6.   T0CON  = 0x85;
  7.   TMR0H  = 0x0B;
  8.   TMR0L  = 0xDC;
  9.   GIE_bit        = 1;
  10.   TMR0IE_bit     = 1;
  11. }
  12.  
  13. void Interrupt(){
  14.   if (TMR0IF_bit){
  15.     TMR0IF_bit = 0;
  16.     TMR0H        = 0x0B;
  17.     TMR0L        = 0xDC;
  18.     //ezt kell csinálnia
  19.     PORTD.RD0= ~PORTD.RD0;
  20.   }
  21. }
  22.  
  23. void main()
  24. {
  25.     TRISA=63;                    //kezdetben a 0. láb és az 1. láb input, majd induláskor a begyujtás miatt output vagyis TRISA=60
  26.     TRISB=224;                   // az 5,6,7 lábak áramfigylő bemenetek lesznek, a többi láb motorvezérlő kimenet
  27.     TRISC=0;                     // minden láb kimenet
  28.     TRISD=0;                     //minden láb kimenet
  29.     TRISE=9;                     //az 1. és a 4. láb bemenet a többi kimenet. a 4. láb vagy analóg bemenet vagy digitális
  30.      PORTD.RD0=0;
  31.      PORTC.RC6=0;
  32.      PORTC.RC1=1;
  33.     InitTimer0();
  34.  while(1);
  35. }


Maradt minden a régiben.
(#) usane válasza glaci hozzászólására (») Dec 5, 2018 /
 
Miért PORT? Ennek van LAT regisztere, használd azt. A PORT nem megbízható kimenetvezérlésshez ha terhelt. Analóg funkciót nem néztem meg, de az nincs egyiken sem véletlenül? Alapból az dominál ha nem kapcsolod ki.
A hozzászólás módosítva: Dec 5, 2018
(#) glaci válasza usane hozzászólására (») Dec 5, 2018 /
 
Szia!
Átírtam

  1. //Pic18f46k80 belső RC oszcillátor 16Mhz
  2.  
  3.  
  4. //Timer0
  5. //Prescaler 1:64; TMR0 Preload = 3036; Actual Interrupt Time : 1
  6.  
  7. //Place/Copy this part in declaration section
  8. void InitTimer0(){
  9.   T0CON  = 0x85;
  10.   TMR0H  = 0x0B;
  11.   TMR0L  = 0xDC;
  12.   GIE_bit        = 1;
  13.   TMR0IE_bit     = 1;
  14. }
  15.  
  16. void Interrupt(){
  17.   if (TMR0IF_bit){
  18.     TMR0IF_bit = 0;
  19.     TMR0H        = 0x0B;
  20.     TMR0L        = 0xDC;
  21.     //ezt kell csinálnia
  22.     LATD.RD0= ~LATD.RD0;
  23.   }
  24. }
  25.  
  26. void main()
  27. {
  28.     TRISA=63;                    //kezdetben a 0. láb és az 1. láb input, majd induláskor a begyujtás miatt output vagyis TRISA=60
  29.     TRISB=224;                   // az 5,6,7 lábak áramfigylő bemenetek lesznek, a többi láb motorvezérlő kimenet
  30.     TRISC=0;                     // minden láb kimenet
  31.     TRISD=0;                     //minden láb kimenet
  32.     TRISE=9;                     //az 1. és a 4. láb bemenet a többi kimenet. a 4. láb vagy analóg bemenet vagy digitális
  33.      LATD.RD0=0;
  34.      LATC.RC6=0;
  35.      LATC.RC1=1;
  36.     InitTimer0();
  37.  while(1);
  38. }


most billeg de az RC6 és az RC1 nem veszi föl a kijelölt állapotot. Az RD0-án az állapotváltozás
1.9 sec körüli.
(#) glaci válasza glaci hozzászólására (») Dec 5, 2018 /
 
Az RC1 az igazából RD1, vagyis rossz helyre küldtem a parancsot.
viszont a fél periodus idő az változatlan 1,9 s.
Tehát rezgés van.
(#) eSDi válasza glaci hozzászólására (») Dec 5, 2018 /
 
Neked HF-INTOSC beállítás kell az Oszcillátor beállításánál. OSCCON regisztert nem állítottad be sehol! Ezen belül az IRCF<2:0> = 111 esetén lesz 16MHz-ed.

Interrupt Flag-et közvetlenül az interrupt-ból való kilépés előtt törlünk!

  1. void Interrupt() {
  2.    if (TMR0IF_bit) {
  3.       //ezt kell csinálnia
  4.       PORTD.RD0 = ~PORTD.RD0;
  5.       TMR0H       = 0x0B;
  6.       TMR0L       = 0xDC;
  7.       TMR0IF_bit = 0;
  8.    }
  9. }
(#) usane válasza eSDi hozzászólására (») Dec 6, 2018 /
 
Mikroc-ben nem a kódban van az osc beállítás ha jól tudom, bár lehet azt is kezeli. Az IDE-ben kell beállítani.
A hozzászólás módosítva: Dec 6, 2018
(#) eSDi válasza usane hozzászólására (») Dec 6, 2018 /
 
Kétlem. Eddig olyannal még nem találkoztam, hogy az OSCCON-t is az IDE kezelne, hisz az csak egy regiszter. Abból az ablakból ítélve, amit mutatott, az IDE csak a Config bit-eket állítja be.
(#) Elektro.on válasza eSDi hozzászólására (») Dec 6, 2018 /
 
Én MikroPascalozok ugyan de az IDE beállítja au oszcillátór típusát( pl.belső oszcillátorra) De a konkrét frekvenciát én mindig kódból OSCON -al állítom be.

Részlet egy UH távmérőből:
  1. program UH_Tav_mero;
  2.  
  3. uses MyUnit_meres  , MyUnit_LCD ;
  4.  
  5. { LCD Deklaráció }
  6. var LCD_RS : sbit at RC2_bit;
  7. var LCD_EN : sbit at RC3_bit;
  8. var LCD_D4 : sbit at RC4_bit;
  9. var LCD_D5 : sbit at RC5_bit;
  10. var LCD_D6 : sbit at RC6_bit;
  11. var LCD_D7 : sbit at RC7_bit;
  12.  
  13. var LCD_RS_Direction : sbit at TRISC2_bit;
  14. var LCD_EN_Direction : sbit at TRISC3_bit;
  15. var LCD_D4_Direction : sbit at TRISC4_bit;
  16. var LCD_D5_Direction : sbit at TRISC5_bit;
  17. var LCD_D6_Direction : sbit at TRISC6_bit;
  18. var LCD_D7_Direction : sbit at TRISC7_bit;
  19.  
  20. var tavolsag : dword;
  21. txt : array[4] of char;
  22. var  MertEgyseg , MerCyc : word;
  23.  
  24.  
  25. begin   { Main program }
  26.  
  27.   OSCCON.IRCF0 := 1 ;          // belsõ oszcillátor 8 MHz
  28.   ANSEL := 0;                  // analóg bemenet tiltása
  29.   ANSELH := 0 ;                // analóg bemenet tiltása
(#) eSDi válasza Elektro.on hozzászólására (») Dec 6, 2018 /
 
Így van! Máshogy nem is lehet szerintem.
(#) usane válasza eSDi hozzászólására (») Dec 6, 2018 /
 
Logikus, csak emlékezetből írtam. Egyszer volt a gépemen és mintha úgy rémlene, hogy a frekvenciát is be lehetett állítani, én is csak ember vagyok. Majd a megmondja aki használja.
(#) glaci hozzászólása Dec 6, 2018 /
 
Sziasztok!
Ismét problémába ütköztem! Változatlanul a PIC18F46k80 a problémás darab. A megszakításból szépen villog a led, viszont nem kel életre az LCD. 4 soros LCD-n szeretnék megjelentetni adatokat, de ő nem akarja.

  1. //Pic18f46k80 belső RC oszcillátor 16Mhz
  2.  
  3.  
  4. // LCD module connections
  5. sbit LCD_RS at RD2_bit;
  6. sbit LCD_EN at RD3_bit;
  7. sbit LCD_D4 at RD4_bit;
  8. sbit LCD_D5 at RD5_bit;
  9. sbit LCD_D6 at RD6_bit;
  10. sbit LCD_D7 at RD7_bit;
  11.  
  12. sbit LCD_RS_Direction at TRISD2_bit;
  13. sbit LCD_EN_Direction at TRISD3_bit;
  14. sbit LCD_D4_Direction at TRISD4_bit;
  15. sbit LCD_D5_Direction at TRISD5_bit;
  16. sbit LCD_D6_Direction at TRISD6_bit;
  17. sbit LCD_D7_Direction at TRISD7_bit;
  18. // End LCD module connections
  19. /*hőmérsékleti változók*/
  20. short int kazanvize,kazanvizv,fust,efust,fustalap,szobaalap,viz,eviz,vizalap;     //8 bites egész
  21.  
  22. szám
  23. int tuz,etuz,tuzalap;                                                            //16 bites egész
  24.  
  25. szám
  26. float szoba,eszoba,kulsoho,kornyezetiho;                                        //32 bites
  27.  
  28. lebegőpontos szám
  29. /*hőmérsékleti változók vége*/
  30.  
  31. //működtető válozók
  32. short int meresi_ido;
  33. float beadagolasi_ido,beagolas_szunet;
  34. int i;   //ciklusokban használt egész változó
  35.  
  36. //LCD kiíratás sorai
  37.               //12345678901234567890
  38.  char txt1[] = "Fü:230C >230C Ve:70%";
  39.  char txt2[] = "Tű:450C >450C  Kulso";
  40.  char txt3[] = "B:23.5C >23.5C  ho";
  41.  char txt4[] = "Viz:68C?>68C -1 5.5C";
  42.  
  43.  
  44.  
  45.  
  46.  
  47. //Timer0
  48. //Prescaler 1:64; TMR0 Preload = 3036; Actual Interrupt Time : 1
  49.  
  50. //Place/Copy this part in declaration section
  51. void InitTimer0(){
  52.   T0CON         = 0x85;           //megszakítási idő 1 sec
  53.   TMR0H         = 0x0B;
  54.   TMR0L         = 0xDC;
  55.   GIE_bit         = 1;
  56.   TMR0IE_bit         = 1;
  57. }
  58.  
  59. void Interrupt(){
  60.   if (TMR0IF_bit){
  61.     TMR0IF_bit = 0;
  62.   TMR0H         = 0x0B;
  63.   TMR0L         = 0xDC;
  64.     //ezt kell csinálnia
  65.     LATD.RD0= ~LATD.RD0;
  66.     meresi_ido++;
  67.   }
  68. }
  69. void uzem()
  70. {
  71.  
  72.  Lcd_Out(1,1,txt1);  
  73.  Lcd_Out(2,1,txt2);
  74.  Lcd_Out(3,1,txt3);
  75.  Lcd_Out(4,1,txt4);
  76.  
  77. }
  78. void main()
  79. {
  80.     TRISA=63;                    //kezdetben a 0. láb és az 1. láb input, majd induláskor a
  81.  
  82. begyujtás miatt output vagyis TRISA=60
  83.     TRISB=224;                   // az 5,6,7 lábak áramfigylő bemenetek lesznek, a többi láb
  84.  
  85. motorvezérlő kimenet
  86.     TRISC=0;                     // minden láb kimenet
  87.     TRISD=0;                     //minden láb kimenet
  88.     TRISE=9;                     //az 1. és a 4. láb bemenet a többi kimenet. a 4. láb vagy
  89.  
  90. analóg bemenet vagy digitális
  91.      LATA=0;
  92.      LATB=0;
  93.      LATC=0;
  94.      LATD.RD0=0;
  95.      LATD.RD1=0;
  96.     InitTimer0();
  97.     Lcd_Init();        
  98.     Lcd_Cmd(_LCD_CLEAR);
  99.    
  100.     Lcd_Cmd(_LCD_CURSOR_OFF);
  101.    // uzem();  
  102.  
  103.  Lcd_Out(1,1,"hol vagy");
  104.  Lcd_Out(2,1,txt2);
  105.  Lcd_Out(3,1,txt3);
  106.  Lcd_Out(4,1,txt4);
  107.  delay_ms(1000);
  108.    
  109.  while(1)
  110.  {
  111.  
  112.  }
  113. }


Legyetek szívesek segíteni, hol rontottam el? A második és negyedik sorból csak 3 3 sor jelenik meg
karakterenként. Kiírás viszont semmi.
Köszönöm a segítséget!
A hozzászólás módosítva: Dec 6, 2018
(#) pipi válasza glaci hozzászólására (») Dec 6, 2018 /
 
Hali!
Meg kell nézni a könyvtári?? függvényben az lcdinit milyen parancsokat ad ki,
és az lcdout fuggvény tudja-e a 4 sort kezelni...
Kiindulás HD44780 adatlap...
(#) glaci válasza glaci hozzászólására (») Dec 7, 2018 /
 
Sziasztok!
Annyi változás történt, hogy egy lapon találtam hasonló problémára megoldást, amit a mellékelt kód tartalmaz. Vagyis az LCD pic-kel való kapcsolatát a LAT-on keresztül oldja meg, valamint a main részben az oscon regisztert átírja. Van kijelzőre írás, viszont a kijelzőn harmadik sorában van egy karakter ami nincs txt3 kiírandó sorban.

  1. /*  kazánvezérlő */
  2.  
  3. //Pic18f46k80 belső RC oszcillátor 16Mhz
  4.  
  5.  
  6. // LCD module connections
  7. sbit LCD_RS at LATD2_bit;
  8. sbit LCD_EN at LATD3_bit;
  9. sbit LCD_D4 at LATD4_bit;
  10. sbit LCD_D5 at LATD5_bit;
  11. sbit LCD_D6 at LATD6_bit;
  12. sbit LCD_D7 at LATD7_bit;
  13.  
  14. sbit LCD_RS_Direction at TRISD2_bit;
  15. sbit LCD_EN_Direction at TRISD3_bit;
  16. sbit LCD_D4_Direction at TRISD4_bit;
  17. sbit LCD_D5_Direction at TRISD5_bit;
  18. sbit LCD_D6_Direction at TRISD6_bit;
  19. sbit LCD_D7_Direction at TRISD7_bit;
  20.  
  21.  
  22. //működtető válozók
  23. short int meresi_ido;
  24. float beadagolasi_ido,beagolas_szunet;
  25. int i;   //ciklusokban használt egész változó
  26.  
  27. //LCD kiíratás sorai
  28.               //12345678901234567890
  29.  char txt1[] = "Fu:230C >230C Ve:70%";
  30.  char txt2[] = "Tu:450C >450C  Kulso";
  31.  char txt3[] = "B:23.5C >23.5C  ho";
  32.  char txt4[] = "Viz:68C >68C  -15.5C";
  33.  
  34.  
  35. //Timer0
  36. //Prescaler 1:64; TMR0 Preload = 3036; Actual Interrupt Time : 1
  37.  
  38. //Place/Copy this part in declaration section
  39. void InitTimer0(){
  40.   T0CON         = 0x84;           //megszakítási idő 1 sec
  41.   TMR0H         = 0x0B;
  42.   TMR0L         = 0xDC;
  43.   GIE_bit         = 1;
  44.   TMR0IE_bit         = 1;
  45. }
  46.  
  47. void Interrupt(){
  48.   if (TMR0IF_bit){
  49.     TMR0IF_bit = 0;
  50.   TMR0H         = 0x0B;
  51.   TMR0L         = 0xDC;
  52.     //ezt kell csinálnia
  53.     LATD.RD0= ~LATD.RD0;
  54.     meresi_ido++;
  55.   }
  56. }
  57. void uzem()
  58. {
  59.  
  60.  Lcd_Out(1,1,txt1);  
  61.  Lcd_Out(2,1,txt2);
  62.  Lcd_Out(3,1,txt3);
  63.  Lcd_Out(4,1,txt4);
  64.  
  65. }
  66. void main()
  67. {      
  68. // OSCCON bits
  69.  
  70.     IDLEN_bit = 0;
  71.  
  72.     IRCF2_bit = 1;   // setup for 8MHz
  73.     IRCF1_bit = 1;   //
  74.     IRCF0_bit = 0;   // set all to 1 for 16MHz + PLL = 64MHz        korábban=0
  75.  
  76.     OSTS_bit  = 0;   // running  internal OSC
  77.  
  78.     HFIOFS_bit = 0;  // read only, 1 = osc stable
  79.  
  80.     SCS0_bit   = 0;  // System Clock
  81.     SCS1_bit   = 0;  // Primary Clock ed even with internal OSC
  82.                      // this is to enable the use of PLL
  83.   //=============================
  84.   //OSCTUNE = 0b01000000;    // PLL enabled
  85. //
  86.   PLLEN_bit = 1;
  87.  
  88.   //OSCCON2 = 0b10000000;
  89.   //PLLRDY_bit;
  90.   while(!HFIOFS); // wait for HFINTOSC to be stable
  91.  //eddig másoltam
  92.  
  93.  
  94.     TRISA=63;                    //kezdetben a 0. láb és az 1. láb input, majd induláskor a begyujtás miatt output vagyis TRISA=60
  95.     TRISB=224;                   // az 5,6,7 lábak áramfigylő bemenetek lesznek, a többi láb motorvezérlő kimenet
  96.     TRISC=0;                     // minden láb kimenet
  97.     TRISD=0;                     //minden láb kimenet
  98.     TRISE=9;                     //az 1. és a 4. láb bemenet a többi kimenet. a 4. láb vagy analóg bemenet vagy digitális
  99.     //
  100.    PMD2 = 0xFF;
  101.    PMD1 = 0xFF;
  102.    PMD0 = 0xFF;
  103.      LATA=0;
  104.      LATB=0;
  105.      LATC=0;
  106.      LATD.RD0=0;
  107.      LATD.RD1=0;
  108.     InitTimer0();
  109.     Lcd_Init();        
  110.     Lcd_Cmd(_LCD_CLEAR);
  111.    
  112.     Lcd_Cmd(_LCD_CURSOR_OFF);
  113.  
  114.  delay_ms(1000);
  115.    
  116.  while(1)
  117.  {
  118.   uzem(); delay_ms(1000);
  119.  
  120.  
  121.  }
  122. }


Ellenben a megszakítás megszűnt. Vagyis az RD0- nem változik az állapot.
(#) glaci válasza glaci hozzászólására (») Dec 7, 2018 /
 
Sziasztok!
Megoldódott! A main-ből kitöröltem az osccon beállításokat, valamint a PMD regiszterek beállításait. Csak az LCD pic csatlakozás LAT-jai maradtak. Van megszakítás és a kijelzőn csak az van ami txt-ben szerepel.
(#) glaci hozzászólása Dec 8, 2018 /
 
Sziasztok!
Megint falba ütköztem!
Elindítom programot, ami bejelentkezik az LCD-n az üzem függvényben levő sorokkal. Majd anélkül, hogy megnyomnám a PORTA.RA2-re menő nyomógombot belép az if után levő utasításokra és megjelenik a főmenü az LCD-n és ezt végtelen ciklusban teszi is mert villog 150ms-mal.

  1. /*  kazánvezérlő */
  2.  
  3. //Pic18f46k80 belső RC oszcillátor 16Mhz
  4.  
  5.  
  6. // LCD module connections
  7. sbit LCD_RS at LATD2_bit;
  8. sbit LCD_EN at LATD3_bit;
  9. sbit LCD_D4 at LATD4_bit;
  10. sbit LCD_D5 at LATD5_bit;
  11. sbit LCD_D6 at LATD6_bit;
  12. sbit LCD_D7 at LATD7_bit;
  13.  
  14. sbit LCD_RS_Direction at TRISD2_bit;
  15. sbit LCD_EN_Direction at TRISD3_bit;
  16. sbit LCD_D4_Direction at TRISD4_bit;
  17. sbit LCD_D5_Direction at TRISD5_bit;
  18. sbit LCD_D6_Direction at TRISD6_bit;
  19. sbit LCD_D7_Direction at TRISD7_bit;      
  20. #define ok PORTA.RA2   // nyomógomb program megáll menü előugrik
  21. #define elore PORTA.RA0    //nyomógomb balra visszamozgat számol  +
  22. #define vissza PORTA.RA1   //nyomógomb jobbra előremozgat számol
  23. #define  PORTA.RA3     //nyomógomb ok
  24. #define start PORTA.RA5   // program futása
  25.  
  26.  
  27.  
  28.  
  29. //Timer0
  30. //Prescaler 1:64; TMR0 Preload = 3036; Actual Interrupt Time : 1
  31.  
  32. //Place/Copy this part in declaration section
  33. void InitTimer0(){
  34.   T0CON         = 0x84;           //megszakítási idő 1 sec
  35.   TMR0H         = 0x0B;
  36.   TMR0L         = 0xDC;
  37.   GIE_bit         = 1;
  38.   TMR0IE_bit         = 1;
  39. }
  40.  
  41. void Interrupt(){
  42.   if (TMR0IF_bit){
  43.     TMR0IF_bit = 0;
  44.   TMR0H         = 0x0B;
  45.   TMR0L         = 0xDC;
  46.     //ezt kell csinálnia
  47.     LATD.RD0= ~LATD.RD0;
  48.     meresi_ido++;
  49.   }
  50. }
  51. void uzem()
  52. {
  53.  Lcd_Out(1,1,"Fu:230C >230C Ve:70%");
  54.  Lcd_Out(2,1,"Tu:450C >450C  Kulso");
  55.  Lcd_Out(3,1,"B:23.5C >23.5C  ho");
  56.  Lcd_Out(4,1,"Viz:68C >68C  -15.5C");
  57.  
  58. }
  59. void main()
  60. {  
  61. /*
  62. // OSCCON bits
  63.  
  64.     IDLEN_bit = 0;
  65.  
  66.     IRCF2_bit = 1;   // setup for 8MHz
  67.     IRCF1_bit = 1;   //
  68.     IRCF0_bit = 0;   // set all to 1 for 16MHz + PLL = 64MHz        korábban=0
  69.  
  70.     OSTS_bit  = 0;   // running  internal OSC
  71.  
  72.     HFIOFS_bit = 0;  // read only, 1 = osc stable
  73.  
  74.     SCS0_bit   = 0;  // System Clock
  75.     SCS1_bit   = 0;  // Primary Clock ed even with internal OSC
  76.                      // this is to enable the use of PLL
  77.   //=============================
  78.   //OSCTUNE = 0b01000000;    // PLL enabled
  79. //
  80.   PLLEN_bit = 1;
  81.  
  82.   //OSCCON2 = 0b10000000;
  83.   //PLLRDY_bit;
  84.   while(!HFIOFS); // wait for HFINTOSC to be stable
  85.  //eddig másoltam
  86.       */
  87.  
  88.     TRISA=1;                    //kezdetben a 0. láb és az 1. láb input, majd induláskor a begyujtás miatt output vagyis TRISA=60
  89.     TRISB=224;                   // az 5,6,7 lábak áramfigylő bemenetek lesznek, a többi láb motorvezérlő kimenet
  90.     TRISC=0;                     // minden láb kimenet
  91.     TRISD=0;                     //minden láb kimenet
  92.     TRISE=9;                     //az 1. és a 4. láb bemenet a többi kimenet. a 4. láb vagy analóg bemenet vagy digitális
  93.  
  94.      LATA=0;
  95.      LATB=0;
  96.      LATC=0;
  97.      LATD.RD0=0;
  98.      LATD.RD1=0;
  99.     InitTimer0();
  100.     Lcd_Init();        
  101.     Lcd_Cmd(_LCD_CLEAR);
  102.     Lcd_Cmd(_LCD_CURSOR_OFF);
  103.     uzem();
  104.  delay_ms(1000);
  105.  
  106.    
  107.  while(1)
  108.  {
  109.       if (ok==0)
  110.       {
  111.         delay_ms(150);  
  112.         Lcd_Cmd(_LCD_CLEAR);
  113.         fomenu();
  114.      }
  115.  }
  116. }
(#) cross51 válasza glaci hozzászólására (») Dec 8, 2018 /
 
Nem olvastam végig, hogy mi merre van kötve, de az RA2-őn szokott leni analog port is és egy sor ANSEL=0 (vagy ANSEL/ANSELH/ANSELA) ami digitálisra állítaná a portot így a PORT olvasással mindig 0-t fogsz vissza kapni.

Tanács kerüld el a kis betűs define-okat jobban jársz ha pl ilyen szemantikát követsz (mert így két nap múlva is tudni fogod mi az ok), #define BTN_OK PORTA.RA2 (persze ez nem kötelező)
(#) glaci válasza cross51 hozzászólására (») Dec 8, 2018 /
 
Szia!
Köszi! Valóban az volt a hiba oka, hogy nullázni kellett az ANCON0 és az ANCON1 regisztereket.
Szuperül megy.
(#) silent15 válasza eSDi hozzászólására (») Dec 8, 2018 /
 
Sziasztok!

Így 1 hónap után lett annyi időm, hogy ránézzek erre, és eSDi, a te kódoddal (átírva a PPS-eket, hogy az RC3-4-et használja) működésre tudtam bírni. Ebből adódóan megállapítottam a hibám; az MSSP modul PPS-e ki lett választva a RC3-4-nek, de a lábak PPS-e nem lett és ez okozta a gondot.

Köszönöm !
(#) Auf hozzászólása Dec 8, 2018 /
 
Sziasztok!

16 bites chipnél C nyelven, hogyan csinálnátok két float különbségéből signed char-t? A két float értéke nem sokban tér el egymástól, így a kivonás eredménye egy előjeles kis értékű szám. A kis értéket, az eltérést kellene egy 8 bites előjeles számon ábrázolnom. Valahogyan így gondoltam:
  1. float a = 3,86, b = 3,88, c = 3,85;
  2. signed char d = 0;
  3. a - b = - 0,02   -->
  4. d = -2;
  5. a - c = + 0,01  -->
  6. d = 1

Sajnos már nem tudok elszakadni a megvalósítás legbonyolultabb módjainak gondolataitól. Beállt az agyam egy nézőpontra és nem tudok kizökkenni másik irányba.
Minden segítséget örömmel fogadok. Hasonló megoldások is érdekelnek.
(#) eSDi válasza silent15 hozzászólására (») Dec 8, 2018 /
 
Ebbe én is belefutottam, nem volt egyértelmű a dolog. Tízszer biztos átolvastam ezt a részt az adatlapban. Aztán 18F4550-en szintén nem működött pár hete, pedig ott nincsenek ilyen kacifántok. Mire rájöttem, hogy bemenetnek kell állítani azt a két lábat. Pedig ez is le volt írva.
(#) Hp41C válasza Auf hozzászólására (») Dec 8, 2018 /
 
  1. d = (signed char)(100.0 * (a - b));
(#) glaci hozzászólása Dec 9, 2018 /
 
Sziasztok!
A PIC18F46k80 adatlapján az szerepel, hogyha az RE3 lábat digitális bemenetként szeretném használni
akkor a CONFIG3H regiszter 7. bitjét törölni kell. Ezt az edit projectben tudom megtenni, meg is történik a váltás, viszont az MCLR tiltás után az RG5 van engedélyezve. Viszont az RE3
nem reagál az 1-ről 0-ra történő változásra. Tenni kell még valamit?
(#) usane válasza glaci hozzászólására (») Dec 10, 2018 /
 
Mindjuk felhúzni 10k-val a tápra, ha még nincs.
(#) Bakman válasza glaci hozzászólására (») Dec 10, 2018 /
 
Az Errata-ban van említás az olvashatatlan MCLR lábról, 28 lábú kontroller esetén. Nincs kizárva, hogy érvényes a 40 lábú változatokra is...

000479.jpg
    
(#) glaci válasza Bakman hozzászólására (») Dec 10, 2018 /
 
Szia!
Már korábban leírtam az ezzel kapcsolatos ismereteimet, lényegében ugyanezt. Még feljebb azt is hogy mikroc-ben írom a programot. Csatolok 2 képet.
usane-k írom, hogy van 10K ellenállás.
(#) usane válasza glaci hozzászólására (») Dec 10, 2018 /
 
Rendben. Akkor következő kérdés. Csatolhatnád az idevonatkozó kódot (ami figyeli ezt a lábat) valamint mi alapján látod, hogy nem reagál a változásra? Debuggerben látod, vagy LED-el jelzed ki, stb?
Következő: »»   1057 / 1210
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