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   415 / 1210
(#) fifadani hozzászólása Máj 24, 2013 /
 
Kicseréltem az RC tagot. 338Hz és a led villog 500 msec.
(#) fifadani hozzászólása Máj 24, 2013 /
 
Csak azt mondjátok el, hogy miért jó most így.
(#) fifadani hozzászólása Máj 24, 2013 /
 
Flow Code-ban tudok megadni egy órajel sebességet. Azt az órajelet adjam meg amit az RC ad?
(#) icserny válasza fifadani hozzászólására (») Máj 24, 2013 /
 
Watchdog le van tiltva? Ha nincs letiltva és gyorsan ketyeg a CPU, a WDT hamarabb túlcsordul (és újraindítja a programot) mielőtt elérnél a LED átkapcsolásához.
(#) fifadani hozzászólása Máj 24, 2013 /
 
Tudok olyat a flow-ban hogy watchdog automatikus törlése.
up1.: megtaláltam, Watchdog timer OFF-ra raktam.
Kipróbálom.
A hozzászólás módosítva: Máj 24, 2013
(#) Prome válasza Doky586 hozzászólására (») Máj 24, 2013 /
 
Még nem ismerem pontosan e fogalmakat de ha jól értem a kérdést akkor a válasz az hogy a PIC saját programját változtatná. Bizonyos USB-n kapott jelek esetén az utána jövő usb-n rutinnal egyszerűen felülírna a saját programmemóriája egy részét. Ez egy részbeli újraprogramozás már ha lehetséges ilyen.

Nincs eldöntve hogy egy pic csinálja e önmagával vagy két ill több egymást módosítja e majd mert a döntés sokminden függvénye. És még csak most kezdem megismerni a lehetőségeket.
Az lesz amit az összes szempont után a legelőnyösebbnek találok.
(#) fifadani hozzászólása Máj 24, 2013 /
 
Szuper! Most az RC 338Hz-et ad, Flow-ban ezt adtam meg és a watchdog-ot kikapcsoltam. Műkszik... Kipróbálok valamit futófényt vagy valamit...
(#) fifadani hozzászólása Máj 24, 2013 /
 
HM Műkszik, csak az időzítések nem okésak. Amit a flow-ban 5 másodpercnek írok, a valóságban 3 sec...
(#) icserny válasza fifadani hozzászólására (») Máj 24, 2013 /
 
Még mindig jobb annál, mint ha 3 nap lenne az esztendő... Korrigáld a beírt frekvencia értékét!
(#) fifadani hozzászólása Máj 24, 2013 /
 
Ha szerzek egy 40Mhz-s kvarcot akkor gondolom megoldódik ez a probléma.
(#) pjg válasza fifadani hozzászólására (») Máj 24, 2013 /
 
Mi a PIC típusa?
(#) fifadani hozzászólása Máj 24, 2013 /
 
16F84
(#) Doky586 válasza fifadani hozzászólására (») Máj 24, 2013 1 /
 
Kihez beszélsz?

Hallottad a nagy hírt? feltalálták a 'Válasz' gombot...
(#) pjg válasza fifadani hozzászólására (») Máj 24, 2013 /
 
Akkor felejtsd a 40MHz-es quartz-ot.
"Operating speed: DC - 20 MHz clock input"
(#) icserny válasza fifadani hozzászólására (») Máj 25, 2013 /
 
4MHz-est akartál mondani?
(#) fifadani válasza icserny hozzászólására (») Máj 25, 2013 /
 
Rendben. Köszi a segítséget...
Bocsi a sok bugyuta kérdésért...
(#) vicsys válasza fifadani hozzászólására (») Máj 25, 2013 /
 
Ezért mondtam a felső sárga mezőt!
Idézet:
„A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!”
(#) janimester válasza Petres hozzászólására (») Máj 25, 2013 /
 
Én a helyedben mikro for pic-cel kezdeném. Nemrég kezdtem énis a porgramírói pályafutásom de ebben a programban mindent meg tudtam valósítani amit eddig akartam. És a proteus-sal tudom szimulálni is ami abban fut az a valóságban is 99% hogy futni fog.
(#) matheattila hozzászólása Máj 25, 2013 /
 
Sziasztok,
Hogyan lehet úgy definiálni makrókat egyik .c állományban, hogy azokat egy másik .c állományban levő függvények is használni tudják?

Megírtam a saját alfanumerikus LCD vezérlő függvényeimet és most szertném különálló .c és .h állományokba menteni, hogy más programokban is könnyedén tudjam importálni.
főprogram.c
  1. #include "lcd.h"
  2.  
  3. void main() {
  4.    TRISB = 0x00;
  5.    PORTB = 0x00;
  6.    
  7.    delay_ms(100);
  8.    LcdInit();
  9.    
  10.    delay_ms(500);
  11.    LcdCMD(CURSOR_ON);
  12.    LcdWrite(1,4,"Hello!");
  13.    while(1)
  14.    {
  15.    }
  16. }


lcd.c
  1. /*******************************************************************************
  2. *                     4 bit PC1602 LCD (ST7066 chip) driver                    *
  3. *******************************************************************************/
  4.  
  5. #include "lcd.h"
  6.  
  7. unsigned char CURSDISP = 0x0C;
  8.  
  9. void LcdInstData(unsigned char lcd_data, char dflag, char mode)
  10. {
  11.     delay_ms(5);
  12.     if(dflag == 1) LCD_RS = 1;
  13.     else LCD_RS = 0;
  14.     LCD_D7 = (lcd_data & 0x80) >> 7;
  15.     LCD_D6 = (lcd_data & 0x40) >> 6;
  16.     LCD_D5 = (lcd_data & 0x20) >> 5;
  17.     LCD_D4 = (lcd_data & 0x10) >> 4;
  18.     LCD_E = 1;
  19.     delay_us(2);
  20.     LCD_E = 0;
  21.     delay_us(1);
  22.     if(mode == 1)
  23.     {
  24.  
  25.        LCD_D7 = (lcd_data & 0x08) >> 3;
  26.        LCD_D6 = (lcd_data & 0x04) >> 2;
  27.        LCD_D5 = (lcd_data & 0x02) >> 1;
  28.        LCD_D4 = (lcd_data & 0x01);
  29.        LCD_E = 1;
  30.        delay_us(2);
  31.        LCD_E = 0;
  32.        delay_us(1);
  33.     }
  34. }
  35.  
  36. void LcdInit(void)
  37. {
  38.     LCD_RS_DIR = 0;
  39.     LCD_E_DIR  = 0;
  40.     LCD_D4_DIR = 0;
  41.     LCD_D5_DIR = 0;
  42.     LCD_D6_DIR = 0;
  43.     LCD_D7_DIR = 0;
  44.    
  45.     delay_ms(50);
  46.     LcdInstData(0x30,0,0);
  47.     delay_ms(5);
  48.     LcdInstData(0x30,0,0);
  49.     delay_us(150);
  50.     LcdInstData(0x30,0,0);
  51.    
  52.     LcdInstData(0x20,0,0);
  53.     LcdInstData(0x28,0,1);
  54.     LcdInstData(0x08,0,1);
  55.     LcdInstData(0x01,0,1);
  56.     LcdInstData(0x0C,0,1);
  57. }
  58.  
  59. void LcdWrite(char line, char column, unsigned char *output)
  60. {
  61.     char i, j, shift = 0x40*(line-1)+column-1;
  62.     LcdCMD(DISPLAY_OFF);
  63.     LcdInstData(0x02,0,1);
  64.     for(i = 0; i < shift; i++)
  65.     {
  66.       LcdInstData(0x14,0,1);
  67.     }
  68.     j = 0;
  69.     while(j < strlen(output))
  70.     {
  71.       LcdInstData(output[j],1,1);
  72.       j++;
  73.     }
  74.     LcdCMD(DISPLAY_ON);
  75. }
  76.  
  77. void LcdWriteChar(char line, char column, unsigned char output)
  78. {
  79.     char i, shift = 0x40*(line-1)+column-1;
  80.     LcdCMD(DISPLAY_OFF);
  81.     LcdInstData(0x02,0,1);
  82.     for(i = 0; i < shift; i++)
  83.     {
  84.       LcdInstData(0x14,0,1);
  85.     }
  86.     LcdInstData(output,1,1);
  87.     LcdCMD(DISPLAY_ON);
  88. }
  89.  
  90. void LcdWriteCp(unsigned char *output)
  91. {
  92.     char i = 0;
  93.     while(i < strlen(output))
  94.     {
  95.       LcdInstData(output[i],1,1);
  96.       i++;
  97.     }
  98. }
  99.  
  100. void LcdWriteCharCp(unsigned char output)
  101. {
  102.     LcdInstData(output,1,1);
  103. }
  104.  
  105. void LcdCMD(unsigned char command)
  106. {
  107.     switch(command)
  108.     {
  109.       case CLEAR: {LcdInstData(0x01,0,1); break;}
  110.       case RETURN_HOME: {LcdInstData(0x02,0,1); break;}
  111.       case DISPLAY_ON: {LcdInstData((CURSDISP |= 0x04),0,1); break;}
  112.       case DISPLAY_OFF: {LcdInstData((CURSDISP &= 0xFB),0,1); break;}
  113.       case CURSOR_ON: {LcdInstData((CURSDISP |= 0x02),0,1); break;}
  114.       case CURSOR_OFF: {LcdInstData((CURSDISP &= 0xFD),0,1); break;}
  115.       case CURSOR_BLINK_ON: {LcdInstData((CURSDISP |= 0x01),0,1); break;}
  116.       case CURSOR_BLINK_OFF: {LcdInstData((CURSDISP &= 0xFE),0,1); break;}
  117.       case CURSOR_LEFT: {LcdInstData(0x10,0,1); break;}
  118.       case CURSOR_RIGHT: {LcdInstData(0x14,0,1); break;}
  119.       case SCREEN_LEFT: {LcdInstData(0x18,0,1); break;}
  120.       case SCREEN_RIGHT: {LcdInstData(0x1C,0,1); break;}
  121.       default: break;
  122.     }
  123. }


lcd.h
  1. /************* LCD header file ****************/
  2. #ifndef _LCD_H
  3. #define _LCD_H
  4.  
  5. // User defined pin connection
  6. #define LCD_RS PORTB.B1
  7. #define LCD_E  PORTB.B3
  8. #define LCD_D4 PORTB.B4
  9. #define LCD_D5 PORTB.B5
  10. #define LCD_D6 PORTB.B6
  11. #define LCD_D7 PORTB.B7
  12.  
  13. #define LCD_RS_DIR TRISB.B1
  14. #define LCD_E_DIR  TRISB.B3
  15. #define LCD_D4_DIR TRISB.B4
  16. #define LCD_D5_DIR TRISB.B5
  17. #define LCD_D6_DIR TRISB.B6
  18. #define LCD_D7_DIR TRISB.B7
  19.  
  20.  
  21. // Basically defined commands
  22. #define CLEAR             0x00
  23. #define RETURN_HOME       0x01
  24. #define DISPLAY_ON        0x02
  25. #define DISPLAY_OFF       0x03
  26. #define CURSOR_ON         0x04
  27. #define CURSOR_OFF        0x05
  28. #define CURSOR_BLINK_ON   0x06
  29. #define CURSOR_BLINK_OFF  0x07
  30. #define CURSOR_LEFT       0x08
  31. #define CURSOR_RIGHT      0x09
  32. #define SCREEN_LEFT       0x0A
  33. #define SCREEN_RIGHT      0x0B
  34.  
  35. // Function headers
  36. void LcdInstData(unsigned char, char, char);
  37. void LcdInit(void);
  38. void LcdWrite(char, char, unsigned char*);
  39. void LcdWriteChar(char, char, unsigned char);
  40. void LcdWriteCp(unsigned char*);
  41. void LcdWriteCharCp(unsigned char);
  42. void LcdCMD(unsigned char);
  43.  
  44. #endif


Ez így eddig tökéletesen működik, de ha az lcd.h-ból ezeket
  1. #define LCD_RS PORTB.B1
  2. #define LCD_E  PORTB.B3
  3. #define LCD_D4 PORTB.B4
  4. #define LCD_D5 PORTB.B5
  5. #define LCD_D6 PORTB.B6
  6. #define LCD_D7 PORTB.B7
  7.  
  8. #define LCD_RS_DIR TRISB.B1
  9. #define LCD_E_DIR  TRISB.B3
  10. #define LCD_D4_DIR TRISB.B4
  11. #define LCD_D5_DIR TRISB.B5
  12. #define LCD_D6_DIR TRISB.B6
  13. #define LCD_D7_DIR TRISB.B7
áthelyezem a főprogramba akkor az lcd.c-ben levő függvények már nem találják őket.
Hogyan lehetne megoldani, hogy így is működjenek?

MikroC-ben írtam PIC16F628A-ra, eddig csak Proteusban teszteltem és működött. Tudom, hogy a mikroC tele van függvényekkel, de jobban szeretném a sajátomat használni, mert ezeket majd kisebb módosításokkal pl MPLAB-ban is tudnám használni
Előre is köszönöm!
(#) nedudgi válasza matheattila hozzászólására (») Máj 25, 2013 / 1
 
Miért távolítod el az lcd.h-ból? Ha zavar, hogy ott van, csinálj egy konfig.h nevű fájlt, és oda tedd. De a konfig.h-t minden hova be kell tenni, include dirkektívával. A fordító minden c fájlt külön kezel, a fordítás végén el kell felejtenie mindent.
(#) icserny válasza matheattila hozzászólására (») Máj 25, 2013 / 1
 
Idézet:
„ha az lcd.h-ból ezeket áthelyezem a főprogramba akkor az lcd.c-ben levő függvények már nem találják őket.”
Hagyd ott az lcd.h-ban, vagy hozz létre egy hw_config.h állományt, és tedd abba (ezt minden olyan *.c állományba be kell linkelni, amelyikben szükség van a makrókra).
(#) takeit válasza icserny hozzászólására (») Máj 25, 2013 /
 
Szia,

Vettem egy HC-SR04-et. (1700Ft+postaköltség.)

Rákötöttem a egy PIC16F690-re. Teljesen jól működik, kb 1 centis felbontással tudok távolságot mérni vele, 2 cm-től kb. 3 méterig. Víz felszínéről is tökéletesen visszajön a jel, szóval egyébként teljesen alkalmas a dolog a víztartályomban a vízszint mérésére.

Köszönöm az ötletet!

Persze egy probléma azért van valóban. A tartályban ,bár tiszta vízről, ivóvízről van szó, azért elég párás minden. Még nem tudom, hogyan fogja bírni hosszabb távon a HC-SR04 a párás környezetet.

L.
(#) icserny válasza takeit hozzászólására (») Máj 25, 2013 /
 
Idézet:
„Vettem egy HC-SR04-et. (1700Ft+postaköltség.)”
Az 1,5 - 2.5 USD árat talán keveselletted (+ ingyenes házhozszállítás)?

Idézet:
„Még nem tudom, hogyan fogja bírni hosszabb távon”
Én mindesetre valami vízzáró burkolatot tennék rá, amiból csak a két "szeme" lenne szabadon.
(#) matheattila válasza icserny hozzászólására (») Máj 25, 2013 /
 
Értem, köszönöm mindkettőtöknek, akkor így fogom hagyni, csak úgy szerettem volna, hogy a két lcd-s állomány mindig érintetlen maradjon, csak include-olnám és kész, a főprogramban csak definiálni kellene a pineket mint ahogyan alapból így kell csinálni a mikroC-s lcd könyvtárnál is. Így is jó csak gondoltam hátha van megoldás arra is
(#) icserny válasza matheattila hozzászólására (») Máj 25, 2013 /
 
Idézet:
„a főprogramban csak definiálni kellene a pineket”
Ez csak az olyan gagyi fejlesztői környzeteknél/programozási stílusnál lehetséges, ahol az összes *.c forrásfájlt becsatolják a main.c-be, s így gyakorlatilag csak egy fordítási egység van. Ez nem lehet követendő példa.
(#) matheattila válasza icserny hozzászólására (») Máj 25, 2013 /
 
Ezzel tisztában vagyok, és ezután külön is választok mindent (csak nem úgy mint a microchip-es példákban, mert ott a hardver kompatibilitások miatt már túlzásba viszik), mert amúgy is át akarok térni az MPLAB-ra. A mikroC szép és jó de túl egyszerű benne programot írni a sok beépített függvénye miatt (amikhez természetesen nem lehet hozzáférni pl .h állományokból, hogy meglesd a függvény felépítését), természetesen vannak benne olyan dolgok is amik MPLAB-ban nincsenek, de hát ez már csak így van...
(#) petikkkeee hozzászólása Máj 25, 2013 /
 
sziasztok!
Olyanba tudnátok esetleg nekem segíteni, hogy hexa fájlt hogyan tudok visszafordítani assemblyre???..esetleg MP-labbal???
(#) kissi válasza petikkkeee hozzászólására (») Máj 25, 2013 /
 
Igen
Idézet:
„esetleg MP-labbal”


A File menüpontban importálod a hex-et és a View menüpontban meg tudod nézni a Disassembly listing-et ( nem egy könnyű olvasmány ! ).
(#) Hp41C válasza petikkkeee hozzászólására (») Máj 25, 2013 /
 
Szia!
Mplab indítása, Configure / Select device - beállítani a típust. File import - az állomány betöltése. View / Program memory - Machine mód kiválsztása. Már láthatod is. De jobb gomb / Output to file -vel állományba is mentheted...
(#) matheattila válasza petikkkeee hozzászólására (») Máj 25, 2013 /
 
Szia, disassembler néven keress programokat, azt hiszem erre az icprog és a winpic800 is képes, betöltöd a hex-et mintha beprogramozni szeretnéd de nem programozod, hanem keresel a menüben valahol olyant, hogy disassemble vagy assembler view. Az így visszakapott assembly kód kissé bonyolult lesz, de ha türelmes vagy szépen vissza tudod alakítani
Hex-ből vagy assembly-ből C-be már szinte lehetetlen.
Következő: »»   415 / 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