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   1199 / 1206
(#) treshold válasza treshold hozzászólására (») Dec 29, 2023 /
 
Úgy tűnik ezzel működik:

PROCESSOR 18F25K50

#include <xc.inc>

goto start

ledRedOn:
bcf TRISC,6
return

ledRedOff:
bsf TRISC, 6
return

start:
bcf LATC, 6 ; Set up the red LED

; Enable Timer 0 as a 16-bit timer with 1:256 prescaler:
; since the instruction speed is 12 MHz, this overflows about
; every 1.4 seconds.
movlw 10000111B
movwf T0CON

mainLoop:
movf TMR0L, W ; Trigger an update of TMR0H

; Blink the red LED with a period of 1.4 s.
btfss TMR0H, 7
rcall ledRedOff
btfsc TMR0H, 7
rcall ledRedOn

goto mainLoop

end

OK.png
    
(#) Pali79 válasza treshold hozzászólására (») Dec 29, 2023 /
 
Nekem az első változat is lefordult hiba nélkül.
(#) treshold válasza Pali79 hozzászólására (») Dec 30, 2023 /
 
MPLAB X IDE V6.15 -öt
MPLAB XC8 C Compiler v2.45
használtad ?

Tudnál egyképet felrakni?
(#) Pali79 válasza treshold hozzászólására (») Dec 30, 2023 /
 
Nem én még a régi MPLAB IDE v8.92-öt szoktam használni, ha nagy ritkán foglalkozom vele. De egy assembly kódhoz miért használsz XC8 fordítót?
(#) treshold válasza Pali79 hozzászólására (») Dec 30, 2023 /
 
Mert PIC18F16Q40-et kell progiznom és a MPLAB IDE v8.92 nem ismeri
(#) glaci hozzászólása Dec 30, 2023 /
 
Sziasztok!
Működik a rendszer, de van azért hibája. Előfordul, hogy be se lép a while(1) részbe, csak esetenként a második bekapcsolásra. Van úgy, hogy megáll (lefagy) a 400ms késleltetés után és nem folytatódik a végtelen ciklus.

  1. /*PIC16F887  8MHz belső oszcillátor
  2. KÖZELEDÉS ÉRZÉKELŐ HC-SR04 ultrasonic szenzorral
  3.  
  4. */
  5.  
  6.  // LCD module connections
  7. sbit LCD_RS at RD2_bit;
  8. sbit LCD_EN at RD3_bit;
  9. sbit LCD_D4 at RD4_bit;
  10. sbit LCD_D5 at RD5_bit;
  11. sbit LCD_D6 at RD6_bit;
  12. sbit LCD_D7 at RD7_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. // End LCD module connections
  21. //változók
  22.   int a;
  23.   char txt[7];
  24.  
  25. void main()
  26. {  
  27.   OSCCON=0x70;
  28.   C1ON_bit=0;
  29.   C2ON_bit=0;
  30.   INTCON.GIE=0;
  31.   ANSEL=0;
  32.   ANSELH=0;
  33.   TRISB = 0b00010000;           //RB4 bemenet PIN (ECHO)
  34.   TRISD=  0b00000000;            //minden RD kapu kimenet
  35.   Lcd_Init();
  36.   Lcd_Cmd(_LCD_CLEAR);          // Clear display
  37.   Lcd_Cmd(_LCD_CURSOR_OFF);     // Cursor off
  38.   PORTB.F0=0;                   //trig kimeneti jel
  39.   //PORTB.F4=0;
  40.     Lcd_Out(1,1,"HC-SR4");
  41.     Delay_ms(2000);
  42.     Lcd_Cmd(_LCD_CLEAR);
  43.     T1CON = 0x10;
  44.  
  45.    while(1)
  46.   {  
  47.     TMR1H = 0;
  48.     TMR1L = 0;
  49.  
  50.     PORTB.F0 = 1;               //TRIGGER HIGH
  51.     Delay_us(10);               //10uS Delay
  52.     PORTB.F0 = 0;               //TRIGGER LOW
  53.     while(!PORTB.F4);           //várjuk az echo jelet high
  54.     T1CON.F0 = 1;               //Timer Starts
  55.     while(PORTB.F4);            //várjuk az echo jel végét LOW
  56.     T1CON.F0 = 0;               //Timer Stops
  57.  
  58.     a = (TMR1L | (TMR1H<<8));   //Reads Timer Value
  59.     a = a/58.82;                //Converts Time to Distance
  60.     a = a + 1;                  //Distance Calibration
  61.  
  62.     if(a>=2 && a<=400)          //Check whether the result is valid or not
  63.     {
  64.       Lcd_Out(1,1,"itt vagyok");
  65.       IntToStr(a,txt);
  66.       Ltrim(txt);
  67.       Lcd_Cmd(_LCD_CLEAR);
  68.       Lcd_Out(1,1,"Distance = ");
  69.       Lcd_Out(1,12,txt);
  70.       Lcd_Out(1,15,"cm");
  71.     }
  72.     else
  73.     {
  74.       Lcd_Cmd(_LCD_CLEAR);
  75.       Lcd_Out(1,1,"Out of Range");
  76.     }
  77.    
  78.     Delay_ms(400);
  79.        // Lcd_Cmd(_LCD_CLEAR);
  80.     Lcd_Out(2,1,"itt vagyok6");
  81.   }
  82.  
  83. }
(#) Bakman válasza glaci hozzászólására (») Dec 30, 2023 /
 
1-es láb (MCLR) felhúzva tápfeszültségre? Az előző oldalon lévő beállítások alapján azon a lábon a Reset funkció van használva, a mostani képen meg éppen nem látszik a kontroller teljesen.
(#) glaci válasza Bakman hozzászólására (») Dec 30, 2023 /
 
Az 1-es láb 10K-val tápfeszre csatlakozik.
(#) Bakman válasza glaci hozzászólására (») Dec 30, 2023 /
 
A programban nincs semmi, ami meg tudná gátolni, hogy eljusson a while(1) részig. Gyaníthatóan nem jó a 10 kΩ felhúzás érintkezése. A teszt idejére a konfigurációban kapcsold át az MCLR funciót belsőre. Esetleg a tápfeszültség ingadozása folyamatosan újraindítja a kontrollert de ez szemmel nem látható csak annyi, hogy áll a program valahol. 100 nF-os kondenzátorok vannak a táplábak közelében (közvetlen a táplábak mellett)?

100nF.jpg
    
(#) Hp41C válasza glaci hozzászólására (») Dec 30, 2023 /
 
Hogyan vannak beállítva a konfigurációs bitek? A Watchdog le van tiltva?
(#) Hp41C válasza treshold hozzászólására (») Dec 30, 2023 /
 
MpLabX IPE programjával lehet programozni.
(#) glaci válasza Hp41C hozzászólására (») Dec 30, 2023 /
 
Szia!
WDT le van tiltva.

projekt.png
    
(#) glaci válasza Bakman hozzászólására (») Dec 30, 2023 /
 
Vannak 100nF kondenzátorok.

újkép.jpg
    
(#) Bakman válasza glaci hozzászólására (») Dec 30, 2023 /
 
Azok a kondenzátorok a tápfeszültségen vannak, nem közvetlen a kontroller táplábain. Nem egyenértékű a kettő. a másik oldalon is legyen 100 nF. Azt látom, hogy az 1-es láb felhúzva, de megy onnan valahova egy vezeték. Az mit csinál?

MCLR vagy tápfeszültséget továbbra is gyanusítom, de inkább az utóbbit. Mi szolgáltatja az 5 V-ot?
(#) glaci válasza Bakman hozzászólására (») Dec 30, 2023 /
 
Most mind a két oldalon közvetlenül a lábak előtti csatlakozón vannak a kondik. Az 1-es lábról a vezeték a Vpp. A tápfeszt egy stab táp adja.

táp.jpg
    
(#) Hp41C válasza glaci hozzászólására (») Dec 30, 2023 /
 
Az LCD könyvtár hogyan kezeli az LCD-t? Várakozással vagy a Busy flag kiolvasásával?
Ha az olvasás nem sikerül valamiért, azaz a Busy flag értéke minig 1, összejöhet a végtelen várakozás.
(#) glaci válasza Hp41C hozzászólására (») Dec 30, 2023 /
 
A hibát az okozza, hogyha nem jó szögben érkezik visszavert jel, akkor elindul ugyan a várakozás, de már ha jó is az irány, egy végtelen várakozásba fullad a folyamat.

hiba.png
    
(#) Bakman válasza glaci hozzászólására (») Dec 30, 2023 /
 
Nemrég azt írtad, néha el sem jut a while(1) részig a program. Vizsgáld pl. a TMR1H értékét is. Ha elérte a 255-öt lépj ki a ciklusból, így nem ragad bele a while(PORTB.F4); részbe. Ha jól számolom, már 93 esetén is "out of range" üzenet lesz a kijelzőn. Ha csak 93-ig várakozol, gyorsabban véget ér a hiábavalóság.
(#) glaci válasza Bakman hozzászólására (») Dec 30, 2023 /
 
Valóban azt írtam, mert akkor nem vizsgáltam meg analizátorral és a jelenség olyan volt mintha ott fagyott volna le. De most látható minden, a hiba oka is. Igen én is ezt számoltam.
A hozzászólás módosítva: Dec 30, 2023
(#) Bakman válasza glaci hozzászólására (») Dec 30, 2023 /
 
Valahogy így:
  1. while(PORTB.F4);
helyett
  1. while(!(!PORTB.F4 && !TMR1H<93));
A hozzászólás módosítva: Dec 30, 2023
(#) glaci válasza Bakman hozzászólására (») Dec 30, 2023 /
 
Én egy kicsit másképp oldottam meg és így most működik.
Köszönöm a segítséget!
A hozzászólás módosítva: Dec 30, 2023
(#) glaci válasza Bakman hozzászólására (») Dec 31, 2023 /
 
Én így csináltam:

  1. T1CON.F0 = 1;               //Timer Starts
  2.        while(PORTB.F4 && TMR1H<95);            //várjuk az echo jel végét LOW
  3.        T1CON.F0 = 0;               //Timer Stops
  4.     if (TMR1H < 93)
  5.     {
  6.         feldolgozás
  7.     }
(#) Pali79 válasza treshold hozzászólására (») Dec 31, 2023 /
 
Nem az MPLAB verziója volt a kérdés, hanem a fordító...
(#) Pali79 hozzászólása Jan 1, 2024 /
 
BÚÉK!
Szeretnék egy fordulatszám szabályzót készíteni. A motorok amihez használni szeretném 230V-os feszültségről működő, néhány watt (jellenzően 10W alatti) telejsítményűek. Itt a cikkek között találtam egy kapcsolát ami fényerő szabályzásra készítettek. A kérdésem az lenne, hogy ezt ebben a formában fel tudom használni vagy kellene változtatni rajta (az IR részére nincs szükségem)?

szab.jpg
    
(#) Bakman válasza Pali79 hozzászólására (») Jan 1, 2024 /
 
Akár jó is lehet. Milyen motorról van szó?
(#) Pali79 válasza Bakman hozzászólására (») Jan 1, 2024 /
 
Nem nagyon vagyok jártas a motorok világában így nem tudom pontosan hogyan nevezik ezt a típust. Akváriumba való pumpa, az elektromos része teljesen ki van öntve gyantával, a forgó része egy hengeres mágnes.
A hozzászólás módosítva: Jan 1, 2024
(#) Bakman válasza Pali79 hozzászólására (») Jan 1, 2024 / 1
 
Azzal sehogy nem lesz jó. Az egy szinkron motor, a fordulatszámot a frekvencia adja. Gondolom lassítani szeretnél rajta. Ha igen, akkor egy bypass ággal (szívó- és nyomóágat összekötöd egy csővel, amelyen van szabályzó csap/szelep) tudod megoldani, akár elektronika nélkül is.
(#) Pali79 válasza Bakman hozzászólására (») Jan 1, 2024 /
 
A mechanikus szabályozás itt nem játszik, de köszönöm. Kutakodok tovább.
(#) Bakman válasza Pali79 hozzászólására (») Jan 1, 2024 /
 
Akkor egy opciód marad, kis frekvenciaváltót készítesz. Már csak azt kell eldönteni, megéri-e vagy nem.
(#) Pali79 válasza Bakman hozzászólására (») Jan 1, 2024 /
 
Én is erre jutottam. Valószínüleg nem éri meg, de azért körbejárom a témát.
Következő: »»   1199 / 1206
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