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   404 / 1210
(#) siemenstaurus hozzászólása Ápr 26, 2013 /
 
Tiszta, értem!
Köszönöm a gyors segítséget! Ha hiszitek ha nem ezt így sehol nem lehetett megtalálni. Szóval tényleg köszönöm!
(#) bbalazs_ válasza Hp41C hozzászólására (») Ápr 26, 2013 /
 
Termeszetesen.
(#) Hp41C válasza siemenstaurus hozzászólására (») Ápr 26, 2013 /
 
Idézet:
„Ha hiszitek ha nem ezt így sehol nem lehetett megtalálni.”

Én a 18F14K50 adatlap (DS41350E) 17. fejezetéből olvastam ki: Figure 17-1 és a Register 17-1 ábrák.
(#) kissi válasza siemenstaurus hozzászólására (») Ápr 26, 2013 /
 
Szia!
Ezt is nézted ( ráadásul MAGYAR nyelven ! )Bővebben: Link, mert már sokszor volt rá hivatkozás a fórumban ?!
A hozzászólás módosítva: Ápr 26, 2013
(#) icserny válasza siemenstaurus hozzászólására (») Ápr 26, 2013 /
 
Idézet:
„Ha hiszitek ha nem ezt így sehol nem lehetett megtalálni.”

Nem hisszük. Az adatlapon kívül számos helyen megtalálható, például az agyonönreklámozott PICCOLO projektemben is leírtam, példákat is adtam rá. Pont PIC18F14K50-re...
(#) Bell hozzászólása Ápr 26, 2013 /
 
Sziasztok!
A timer2-t szeretném megszakításban használni, de csak egyszer fut le, amikor azt kikényszerítem.
Merre lehet a hiba?
Processzor: PIC24F04KL100, fordító: C30
  1. #include "p24f04kl100.h"
  2.     _FGS( GWRP_OFF); // General and Flash protection off
  3.     _FOSCSEL(IESO_OFF & FNOSC_FRC); // Dual startup off, 8Mhz internal oscillator
  4.     _FOSC( SOSCSEL_SOSCHP & POSCFREQ_MS & OSCIOFNC_ON & POSCMOD_NONE);  
  5.                 // Clock switching disabled, secondary oscillator for High Power op
  6.                 // Medium frequency (8Mhz), OSCO pin for I/O
  7.                 // Primary oscillator (external) disabled
  8.     _FWDT(FWDTEN_OFF & WINDIS_OFF & FWPSA_PR32 & WDTPS_PS1); // Watchdog off, default settings
  9.     _FPOR(MCLRE_OFF & BORV_LPBOR & PWRTEN_OFF & BOREN_BOR0);
  10.                 // MCLR off
  11.                 // BOR diabled and set to lowest BOR voltage
  12.                 // Power-up timer disabled
  13. int main(void)
  14. {
  15.         OSCCON  =       0;
  16.         OSCCONbits.COSC = 6;
  17.         CLKDIV  = 0x0000;
  18.         CLKDIVbits.RCDIV = 1;
  19.         TimerInit();
  20.         IFS0bits.T2IF = 1; // <<<<< ----- EZ fut ----- <
  21.         while(1){}
  22.    return(0);
  23. }
  24.  
  25. void TimerInit(void);
  26. void TimerInit(void)
  27. {
  28.         PR2 = 100;
  29.         TMR2 = 100;
  30.         IPC1bits.T2IP = 1;       //set interrupt priority
  31.         T2CON = 0b000000000000000;      //turn on the timer
  32.         T2CONbits.TON = 1;
  33.         IFS0bits.T2IF = 0;       //reset interrupt flag
  34.         IEC0bits.T2IE = 1;       //turn on the timer2 interrupt
  35. }
  36.  
  37. void __attribute__((__interrupt__)) _T2Interrupt(void);
  38. void __attribute__((__interrupt__, auto_psv)) _T2Interrupt(void)
  39. {
  40.         IFS0bits.T2IF = 0;
  41. }
(#) Doky586 válasza icserny hozzászólására (») Ápr 26, 2013 /
 
Idézet:
„icserny: Az ICP02V2 beszerzését ne kapkodja el senki!!! Várjatok még egy kicsit!

Nekem eddig még nem sikerült Debug módba lépni vele. Igaz, nem volt túl sok időm játszadozni vele, s lehet, hogy több MPLAB verziót is ki kellett volna próbálni.”


nem bírtam kivárni hogy meddig várjak. vettem egyet. mi az ami nem működik ?
logikai analizátorként működik, feszültség szabályozható...
(#) icserny válasza Doky586 hozzászólására (») Ápr 26, 2013 /
 
Idézet:
„mi az ami nem működik ?”
A debugolás nem működik. Figyelmesebben megnézve, a honlapján nem is írja, hogy debugolásra alkalmas, csak azt, hogy programozó.

Igen, Az ICP02V2 szabályozza a feszültséget, ezért a 3,3 V-os cuccok is programozhatók vele (pl. PIC24, vagy PIC18J). Ezzel nincs gond.
A hozzászólás módosítva: Ápr 26, 2013
(#) icserny válasza Bell hozzászólására (») Ápr 26, 2013 /
 
A PIC-kwik projektben megnézheted, hogy én hogyan csináltam.
(#) Bell válasza icserny hozzászólására (») Ápr 26, 2013 /
 
A timer1-nél jól működik, de ennél a típusnál a T2CON regiszterben csak elő / utó osztást és ki-be kapcsolgatást lehet beállítani.
A link egyébként hasznos, korábban is nézegettem, köszönöm.
(#) ELP hozzászólása Ápr 27, 2013 /
 
Sziasztok! Kérdésem lenne: van egy JDM programozóm. (Az a fajta, amelyik külön táp, 7805, 7812+2Dióda, stb.) Pl. 16F628-at és másokat már többször programoztam vele, de most itt van egy 16F873A és nem hagyja magát.
Van valami ötlet, hogy mi lehet a gond?
(#) moderboy hozzászólása Ápr 27, 2013 /
 
Félig OFF kérdésem lenne, inkább jelformálás témakor, de a TRIAC-hoz is tartozna, de végül is minden megoldás érdekel

Ezen link alapján próbálok egy dimmert építeni, ha minden jól megy csirke keltető lesz belőle. A panel pontosan a linkelt kapcsolás alapján készült el, a probléma a nullátmenet érzékeléssel van. Az opto egy pozitív impulzust ad minden nullátmenetnél, ezt figyelem mikrovezérlővel megszakításban és ehez képest van gyújtva a triak.

Na már most ez a "nullátmenet impulzus" nem túl megbízható a fel és lefutó élek is összevissza ingadoznak (mellékelek képet), szkóppal biztos jobban is meg lehetne vizsgálna, de csak logikai analizátorom van. Amikor kisfeszültségről probáltam olyan is előfordult, hogy a TRIAK gyújtásakor megzavarodott az egész, azt hittem kicsi a trafó és megrántotta a tápot, de ugyanezt produkálta hálózati feszültségről is. Azóta körülnéztem a szűrők terén, most a terheléssel párhuzamosan (60W izzó) raktam 100 Ohm 100nF -et, kicsit javult a helyzet, de az impulzus élei még mindig nagyon rondák.

Mivel lehetne megoldani hogy csak 1-1 élem legyen vagy programban mit trükközzek, hogy ne zavarjon be (felfutó élre van megírva) ? Illetve a TRIAK után milyen szűrést tegyek hogy ne zavarja az egyenirányítást?
Ha el tudtok irányítani a megfelelő témába az is megfelel, előre is köszönöm!
(#) Doky586 hozzászólása Ápr 27, 2013 /
 
Sziasztok! egy kérdés:
ha ICSP módszer helyett LVP módszerrel programoznék az a következő hátrányokkal járna?
- elvesztek két I/O lábat (ezt aláhúztam a rajzon pirossal)
- először mindenképp fel kell programozni a PIC config wordjét (ICSP vagy áramkörből kivéve)

a mellékelt rajz bal oldala a gyári adatlapból való, jobb oldalát én alkottam mert nem szerepel a pdf-ben. programozás alatt nyomni kell a reset gombot(?). ha nem jól rajzoltam akkor javítsátok ki. nemcsak ezen egy konkrét tipus a lényeg hanem úgy általában a LVP.

Az eredeti rajzon mekkora az R1, R2, R3 ??? ha bemenet lesz az áramkörben akkor 10ohmtól 1Mohmig bármekkora lehet?
A hozzászólás módosítva: Ápr 27, 2013

LVP.png
    
(#) bbalazs_ válasza Doky586 hozzászólására (») Ápr 28, 2013 /
 
Nekem az LVP oldala NAGYON nem tiszta, hogy mit ert o normal connection alatt.
Az LVP-nel csak annyi a kulonbseg, hogy a Vpp nem kell 12V legyen, eleg az 5V, meg mashogy lep be a feszultseg, de alapjaban ugyanaz. Nem tudod megsporolni a clk es dta labakat, csak a PGM labbal tobb, igazabol ezt veszited el, mert foldre kell kotni mukodes kozben.
(#) vicsys válasza moderboy hozzászólására (») Ápr 28, 2013 /
 
Bár ez már nem PIC-es kérdés, de szerintem a jelformálással van nálad gond. Ne spórold meg a hardvert, mert szoftveresen nehezebb korrigálni. Csatolok egy rajzot, ebből puskázhatsz. Nálam, ez atomstabil.
(#) Doky586 válasza Doky586 hozzászólására (») Ápr 28, 2013 /
 
na szerintem mégse jó az előző rajzom...

Néhol Low-Voltage Programming -nak (LVP), néhol pedig Single-Supply ICSP Programming -nak nevezik ezt a funkciót, de nekem úgy tünik hogy nem pickit tipusú programozáshoz lett kitalálva ez, hanem inkább olyan helyre ahol több pic van és üzemszerű működés közben az egyik átprogramozza a másikat. tehát nemcsak fejlesztéskor/gyártáskor.

magyarán engem nem érdekel, mert ilyen bonyolultságú áramköröket nem szándékozok tervezni, nekem bőven elég az egyszerű pickit-el való programozás.
(#) Lozsa hozzászólása Ápr 28, 2013 /
 
Sziasztok!

C-ben egy A/D-n feldolgozott NTC jelének szeretnék egyértelműen megfeleltetett vektrotáblát használni.
Magyarul megvan a 8 bites A/D eredményem(10 bites eredmény felső 8 értékes bitje), ennek kellene egy egyértelmű megfeleltetés szerint táblázatból kiolvastatni a megfelelő értéket.
Pl: Ha adresult=192, akkor ugrik egy már előre definiált táblázatra ahol kiveszi a 192. sor értékét, ami mondjuk 73C fok.
Hogyan kell ezt C-ben megoldani?
(#) El_Pinyo válasza Lozsa hozzászólására (») Ápr 28, 2013 /
 
Szia!
A 8 bites ADC eredményhez kell egy 256 elemű tömböt létrehozni. A tömböt az ADC eredménnyel kell indexelni. A tömb egyes elemei pedig a hőmérséklet értékeit tárolják. A tömböt inicializálni kell a hőmérséklet értékekkel.
Pl.:
  1. char tomb[] = {0,1,2,3,4};
A hozzászólás módosítva: Ápr 28, 2013
(#) Lozsa válasza El_Pinyo hozzászólására (») Ápr 28, 2013 /
 
Erre a legegyszerűbb megoldásra nem is gondoltam Köszi.
És ha pl EEPROM-ban tárolok vektortáblát ott hogyan érem el?
(#) Hp41C válasza Doky586 hozzászólására (») Ápr 28, 2013 /
 
Idézet:
„...de nekem úgy tünik hogy nem pickit tipusú programozáshoz lett kitalálva ez...”

Pedig a PICKit2 is tudja... A frissen vásárolt vagy törölt kontrollerben a LVP engedélyezett, így ha a panelen programozod fel (mert pl. SMD tokozású) még a HVP felprogramozáshoz is figyelembe kell venned a LVP módot. Általában a PGM lábra alacsony szintet kell adnod, de mindig meg kell nézni a programozási adatlapot. Egyes korai típusok (16F628A) HVP programozását megzavarhatja a PGM lábon észlelt jelátmenet.
A PICkit2 és a PICKit3 csak akkor állítható LVP módba, ha kiválasztod (manual device select) a típust és az rendelkezik LVP lehetőséggel. E programozáshoz az AUX kimenetet össze kell kötni a PGM lábbal.
(#) Hp41C válasza Lozsa hozzászólására (») Ápr 28, 2013 / 1
 
Ha a táblázat fix, akkor célszerűbb a program memóriába tenni.
Pl. C18
const rom unsigned char ProgramMemoryTable[256] = {0xFF, ...., 0xFF};

#pragma romdata EEData2 = 0xF00000
const rom unsigned charDataMemoryTable[256]={0x00, ....., 0x00 };

Az adat EEProm -beli táblázatot így érheted el:
EEADRH =0; EEADR = kod; EECON1bits.RD = 1;
az átkódolt adat az EEDAT regiszterben lesz..
(#) Doky586 válasza Hp41C hozzászólására (») Ápr 28, 2013 /
 
Igen tudja. csak nincs pozitívuma a HVP-hez képest ha pickit-et használok.
az arhívum kedvéért melléklem a javított rajzot.

Egy-két I/O láb is elvész (jelen esetben az RA5 és RB4) , illetve manuálisan nyomni kell a resetet programozás alatt.

LVP-2.png
    
(#) Doky586 válasza Doky586 hozzászólására (») Ápr 28, 2013 /
 
De igazából a lényegi kerdésem arra vonatkozott hogy: az R1 R2 R3 értékét mire szokás választani? (ohm - kohm - Mohm ?)

Ha túl kicsik akkor a Pickit2 (főleg ha 3rd parity vagy utángyártott) kimenetei nem bírják egyszerre vagy külön-külön a pár 100mA-t Hi vagy Lo -ban, ha meg túl nagy akkor a PIC elektronikájába nem jut elég meghajtás normál működéskor.
(#) janimester hozzászólása Ápr 28, 2013 /
 
Üdv. Most írok át 16F886-ról egy programot mikroc-ben 18f2550-re de a hőmérő nem akar működni hiába kötöm a jó helyre a szenzort tehát az AN0-ára mint ahogy a programban is van írva nullát mutat. Valaki meg tudná nézni mi miatt nem jó? Szerintem a comparátoros vagy a bemenet választást szúrtam el de nem tudom hogy kéne kijavítani.
  1. sbit LCD_RS at RC6_bit;
  2.  sbit LCD_EN at RC7_bit;
  3.  sbit LCD_D4 at RB4_bit;
  4.  sbit LCD_D5 at RB5_bit;
  5.  sbit LCD_D6 at RB6_bit;
  6.  sbit LCD_D7 at RB7_bit;
  7.  sbit LCD_RS_Direction at TRISC6_bit;
  8.  sbit LCD_EN_Direction at TRISC7_bit;
  9.  sbit LCD_D4_Direction at TRISB4_bit;
  10.  sbit LCD_D5_Direction at TRISB5_bit;
  11.  sbit LCD_D6_Direction at TRISB6_bit;
  12.  sbit LCD_D7_Direction at TRISB7_bit;
  13.  
  14. const unsigned short TEMP_RESOLUTION = 12;
  15.  
  16. char *text = "000.0";
  17. unsigned temp;
  18.  
  19. void Display_Temperature(unsigned int temp2write) {
  20.   const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
  21.   char temp_whole;
  22.   unsigned int temp_fraction;
  23.  
  24.   // Check if temperature is negative
  25.   if (temp2write & 0x8000) {
  26.      text[0] = '-';
  27.      temp2write = ~temp2write + 1;
  28.      }
  29.  
  30.   // Extract temp_whole
  31.   temp_whole = temp2write >> RES_SHIFT ;
  32.  
  33.   // Convert temp_whole to characters
  34.   if (temp_whole/100)
  35.      text[0] = temp_whole/100  + 48;
  36.   else
  37.      text[0] = '0';
  38.  
  39.   text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  40.   text[2] =  temp_whole%10     + 48;             // Extract ones digit
  41.  
  42.   // Extract temp_fraction and convert it to unsigned int
  43.   temp_fraction  = temp2write << (4-RES_SHIFT);
  44.   temp_fraction &= 0x000F;
  45.   temp_fraction *= 625;
  46.  
  47.   // Convert temp_fraction to characters
  48.   text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit
  49.  
  50.   // Print temperature on LCD
  51.   Lcd_Out(2, 14, text);
  52. }
  53. char Message1[] = "AKKU ";
  54.  char Message2[] = "HENGER";
  55.  unsigned int ADC_Value, DisplayVolt;
  56.  char *volt = "00.0";
  57.  
  58. void main() {
  59.   ADRESL  = 0;                                    // Configure AN pins as digital I/O
  60.   ADRESH = 0;
  61.   C1OUT_bit = 0;                                  // Disable comparators
  62.   C2OUT_bit = 0;
  63.   Lcd_Init();
  64.   Lcd_Cmd(_lcd_clear);
  65.   Lcd_Cmd(_lcd_cursor_off);
  66.   Lcd_out(1,1,"Simson Race Technic");
  67.   Delay_ms(1000);
  68.   Lcd_out(2,7,"S80/5M");
  69.   Delay_ms(1000);
  70.   Lcd_out(3,3,"by: Fekete Janos");
  71.   Delay_ms(1000);
  72.   Lcd_out(4,1,"Computer inditasa...");
  73.   Delay_ms(2000);
  74.  
  75.  ADRESL = 0b00000100; // RA2/AN2 is analog input                          // v
  76.  ADCON0 = 0b00001000; // Analog channel select @ AN2                      // o
  77.  ADCON1 = 0x00;   // Reference voltage is Vdd                             // l
  78.  CMCON = 0x07 ; // Disable comparators                                    // t
  79.  TRISC = 0b00000000; // PORTC All Outputs                                 // m
  80.  TRISA = 0b00001100; // PORTA All Outputs, Except RA3 and RA2             // e
  81.  Lcd_Init();        // Initialize LCD                                     // r
  82.  Lcd_Cmd(_LCD_CLEAR);      // CLEAR display                               // ő
  83.  Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off                                  // é
  84.  Lcd_Out(1,1,Message1);                                                   // -
  85.  Lcd_Chr(1,20,'V');                                                       // -
  86.  Lcd_Out(2,1,Message2);
  87.  Lcd_Chr(2,20,'C');
  88.  Lcd_Chr(2,19,223);
  89.  
  90.  
  91.  do {
  92.   //--- Perform temperature reading
  93.     Ow_Reset(&PORTA, 0);                         // Onewire reset signal
  94.     Ow_Write(&PORTA, 0, 0xCC);                   // Issue command SKIP_ROM
  95.     Ow_Write(&PORTA, 0, 0x44);                   // Issue command CONVERT_T
  96.     Delay_us(120);
  97.  
  98.     Ow_Reset(&PORTA, 0);
  99.     Ow_Write(&PORTA, 0, 0xCC);                   // Issue command SKIP_ROM
  100.     Ow_Write(&PORTA, 0, 0xBE);                   // Issue command READ_SCRATCHPAD
  101.  
  102.     temp =  Ow_Read(&PORTA, 0);
  103.     temp = (Ow_Read(&PORTA, 0) << 8) + temp;
  104.  
  105.     //--- Format and display result on Lcd
  106.     Display_Temperature(temp);
  107.  
  108.     ADC_Value = ADC_Read(2);
  109.    DisplayVolt = ADC_Value * 2;
  110.    volt[0] = DisplayVolt/1000 + 48;
  111.    volt[1] = (DisplayVolt/100)%10 + 48;
  112.    volt[3] = (DisplayVolt/10)%10 + 48;
  113.    Lcd_Out(1,16,volt);
  114.    delay_ms(100);
  115.   } while (1);
  116. }
A hozzászólás módosítva: Ápr 28, 2013
(#) janimester hozzászólása Ápr 28, 2013 /
 
Azthiszem erre is magamnak kell rájönnöm előre látom..
(#) Hp41C válasza janimester hozzászólására (») Ápr 28, 2013 / 1
 
Szia!
A 18F2550 -ben még egy régebbi filozófia szerinti AD van, így még nem az ANSEL és ANSELH regiszterekkel kell beállítani az analóg bemeneteket, ahnem az ADCON regiszterekkel.
18F2550 adatlap A/D fejezet....
(#) Bell hozzászólása Ápr 28, 2013 /
 
Ilyet még nem láttam. A PICKIT3 simán rákapcsol 5 Voltot egy PIC24F04KL100-ra.
Ki lehet ezt védeni?
Ez normális?

5volt.gif
    
(#) dave77 hozzászólása Ápr 28, 2013 /
 
18F14K22-nél a PORTC-t szeretném részben ki részben bemenetként használni.
A TRISC-n kívül van még valaminek hatása erre? Mert vannak olyan bitek, amik kimenetként jól működnek, de ha átkonfigurálom bemenetre, magas szintet kapcsolok rá (és mérhető is a tok adott lábán a 4,67V) ennek ellenére a WATCH ablakban 0 marad az értéke.
Lehet, hogy elszált részben az IC?
A hozzászólás módosítva: Ápr 28, 2013
(#) nedudgi válasza Bell hozzászólására (») Ápr 28, 2013 /
 
Ezen a képen azt látom, hogy 3.25V feszültséget akarsz rákapcsolni.
(#) Bell válasza dave77 hozzászólására (») Ápr 28, 2013 /
 
A C portnak van pár lába, amelyik A/D konverter bementként van alapból konfigurálva. Azt állítsd át digitális ki/bementre.
Következő: »»   404 / 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