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   440 / 1210
(#) Hp41C válasza janimester hozzászólására (») Aug 12, 2013 / 1
 
Szia!
Ne közvetlenül mérj fordulatszámot (1s alatt megtett fordulatokat), hanem egy körülfordulás idejét mérd meg. Abból számolj fordulatszámot. Ez így pontatlan és ingadozó lesz. Javítható a helyzet, ha átlagolást végzel. Mondjuk 10, 100 fordulat idejének átlagából számolsz fordulatszámot.
(#) janimester válasza Hp41C hozzászólására (») Aug 13, 2013 /
 
Köszönöm, először nem tudtam hogy álljak neki de miután az egyik fórumtag hozzászólását megtaláltam a te gondolatmeneteden keresztül az egyik fordulatszámmérővel kapcsolatos topikban jó lett a cucc. Teljesen pontos csak néhány fordulatot téved csak (4-5) és ami a legfontosabb real-time mér És a timer időzítők segítségével számolja a fordulatot úgy ahogy te leírtad csak az 18f2520-ra volt de néhány perc alatt átírtam 2550-re és tökéletes lett ezzel végére értem az 1 éve ollózgatott, okosítgatott programomnak. Mindent tud a műszerem csak éppen a lábak száma már nem elég Annak idején 20-on valahány Mátyás királyért akarták megírni nekem a programot. Nem bántam meg hogy nem fizettem ki érte ezt az összeget most már magamtól is nagyon sok mindent tudok , megtanultam ez idő alatt
(#) Hp41C válasza janimester hozzászólására (») Aug 14, 2013 / 1
 
Szia!
Gratulálok. Így kell csinálni. Megtanulni megírni azt a programot, ami kell a feladathoz. Így aztán az igények szerint módosítani is fogod tudni.
(#) janimester válasza Hp41C hozzászólására (») Aug 14, 2013 /
 
Köszönöm, egy dolog miatt viszont sajnos megint elakadtam. A megszakításoknál megakad a program mikor be próbálom másolni a fordulatszámmérő kódjait a meglévőbe ami működik. Ahogy beillesztem a void interrupt függvényt ami a fordulatszámmérő timer-jét kezeli túlcsordulással resetel a pic sajnos itt van bent valahol a hiba mégpedig ha az if falling edge ==2-es sortól ha kitörlöm a kódot megszűnik a resetelés. De lehet hogy a két megszakítást a hőmérő megszakításos dolgával kellene egy függvénybe összefűzni nem külön külön sajnos erre nem tudok rájönni mi okozza hibát.A 70. sor után jön a főprogram a main.
  1. sbit LCD_RS at RC0_bit;
  2. sbit LCD_EN at RC1_bit;
  3. sbit LCD_D4 at RC2_bit;
  4. sbit LCD_D5 at RC6_bit;
  5. sbit LCD_D6 at RC7_bit;
  6. sbit LCD_D7 at RA2_bit;
  7. sbit LCD_RS_Direction at TRISC0_bit;
  8. sbit LCD_EN_Direction at TRISC1_bit;
  9. sbit LCD_D4_Direction at TRISC2_bit;
  10. sbit LCD_D5_Direction at TRISC6_bit;
  11. sbit LCD_D6_Direction at TRISC7_bit;
  12. sbit LCD_D7_Direction at TRISA2_bit;
  13.  
  14.  
  15. unsigned long temp;
  16. unsigned int i;
  17. char digit[]="00.0V";
  18.  
  19. const unsigned short TEMP_RESOLUTION = 9;
  20. char *text = "000.0";
  21.  
  22.  
  23.  
  24.  void Display_Temperature(unsigned int temp2write) {
  25.   const unsigned short RES_SHIFT = 4;
  26.   char temp_whole;
  27.   unsigned int temp_fraction;
  28.  
  29.   if (temp2write & 0x8000) {
  30.      text[0] = ' ';
  31.      temp2write = ~temp2write + 1;
  32.      }
  33.   temp_whole = temp2write >> RES_SHIFT ;
  34.   if (temp_whole/100)
  35.   text[0] = temp_whole/100  + 48;
  36.   else
  37.   text[0] = ' ';
  38.   text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  39.   text[2] =  temp_whole%10     + 48;             // Extract ones digit
  40.   temp_fraction  = temp2write << (4-RES_SHIFT);
  41.   temp_fraction &= 0x000F;
  42.   temp_fraction *= 628;
  43.   text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit
  44.   Lcd_Out(1, 14, text);
  45. }
  46.  
  47.  unsigned short int falling_edge = 0;
  48. unsigned short int TMR0H_value, TMR0L_value;
  49. unsigned int TMR0_value;
  50. char TMR0_value_to_LCD[7];
  51. unsigned int rev;
  52. char rev_to_LCD[7];
  53.  
  54. void interrupt() {
  55.     if(INTCON.INT0IF) {
  56.         falling_edge++;
  57.         if(falling_edge == 1) {
  58.             TMR0H = TMR0L = 0;
  59.         }
  60.         if(falling_edge == 2) {
  61.             TMR0H_value = TMR0H;
  62.             TMR0L_value = TMR0L;
  63.             TMR0_value = (TMR0H << 8) + TMR0L; // két nyolcbites változó összefűzése 16 bitessé
  64.             rev = 234375 / TMR0_value;         // (1000 * 1000) / (256 * 4 * TMR0_value)
  65.             TMR0H = TMR0L = 0;
  66.             falling_edge = 0;
  67.         }
  68.         INTCON.INT0IF = 0;
  69.     }
  70. }
A hozzászólás módosítva: Aug 14, 2013
(#) kokesz185743 hozzászólása Aug 14, 2013 /
 
Amikor próbáltam beégetni a programot az 16F884-be, akkor ezt az üzenetet kaptam:

"Programming Target (2013.08.14. 23:06:41)
PK2Error0009: Write failure (GetLastError = A művelet sikeresen befejeződött.)
PICkit 2 Ready"

lenne pár kérdésem ezzel kapcsolatban:

1. nem tudom, hogy ilyenkor a PIC égetése sikeres volt-e
2. az MPLAB-ban a VDD-t ON-ra állítottam be (programmer-->set Vdd on)
ez azt jelenti, hogy a pickit2 az USB-ről kapja a tápfeszültséget az égetéshez.
3. a pk2-őt úgy kötöttem rá az USB-re, hogy már a PIC már rá volt dugva és ezután nyomtam meg az mplab-ban a connect gombot.
(#) sherlock válasza kokesz185743 hozzászólására (») Aug 15, 2013 /
 
szia,

Mit mond arra, ha verify-t nyomsz? Ha azt mondja, talál a két program (a PICben levő hex és a PCn levő hex) akkor minden oké.
(#) Hp41C válasza kokesz185743 hozzászólására (») Aug 15, 2013 /
 
Szia!
A Write Failure programozási hibára utal.
1 - Valószínűleg nem volt sikeres. Az MpLab "Readme for PICKit 2.htm" -ben van egy utalás:
Idézet:
„PK2-94 PICkit 2 does not detect the device ID of a PIC16F884 device PIC16F884”

Próbáld a PICKit2 saját programjával.
2 - A Vdd On azt jelenti, hogy a programozandó kontroller a PICKit2 -ról kap tápot.
3 - Soha nem szabad így csatlakoztatni a PICKIt2 -t. Előbb az UBS -re kell csatlakoztatni, aztán érdemes a Connect -et indítani. Ekkor panaszkodni fog, hogy nem találja a kontrollert, de elvégzi a beállításokat. Eztán lehet csatlakoztatni a kontrollert. Még egyszer le lehet futtatni a Connect -et, de nem kell feltétlenül. Ha ekkor is panaszkodik, akkor valami elkötés, kontakthiba van. Eztán mehet a read vagy a program.
(#) Hp41C válasza janimester hozzászólására (») Aug 15, 2013 / 1
 
Ne a megszakítási rutinban végezd el az osztást. Itt csak egy jelzőbitet állíts be, a főprogramban a fő ciklusban figyeld a jelzőbitet, ha 1 akkor osztás és a jelzőbit törlése.
(#) janimester válasza Hp41C hozzászólására (») Aug 15, 2013 /
 
Köszönöm szépen, ismét sokat segítettél jó is lett a dolog.
(#) Hilo hozzászólása Aug 16, 2013 /
 
Sziasztok,
Idézet:
„Programming Target (2013.08.16. 16:41:18)
PIC16F886 found (Rev 0x2)
Erasing Target
Programming Program Memory (0x0 - 0x1F)
Verifying Program Memory (0x0 - 0x1F)
PK2Error0027: Failed verify (Address = 0x0 - Expected Value 0x1683 - Value Read 0x3FFF)
PICkit 2 Ready”

Ez mit takar, mit nézzek át újra? Szimulátorban tökéletesen futott.
Előre is köszönöm!
(#) robing16 hozzászólása Aug 16, 2013 /
 
Sziasztok!

Kérdésem annyi lenne csak, hogy van-e esetleg egy olyan spéci PIC-es program, ami egy SD kártyáról olvassa le azt az adatot, amit a PIC valójában a FLASH memóriájáról kellene?

A problémám annyi, hogy egy PIC-nek komolyabb műveletekhez eléggé kevés a saját FLASH memórája, amiről maga a program fut. Egy 16F887 esetében 8192 mennyiségű WORD memória hely van. Nekem egy olyan sok beépített programot kellene írnom, ami nem fér el ebben a memóriában.

Találkoztatok-e esetleg egy olyan megoldással, mikor a PIC össze van kötve egy SD kártyával, a PIC-be beégetek egy mondjuk "BIOS"-nak nevezett programot, ami kezeli az SD kártyát, és a kártyán lévő valamilyen formátumú fájlt kezd el futtatni? Ha a programon változtatni szeretnék, akkor az SD kártyán azt a fájlt felülírom, és már az új program fut.

Segítséget kérnék, hogy keressek rá a GOOGLE-ban, van-e egyáltalán ilyen program!?

Köszi!
(#) Hilo válasza robing16 hozzászólására (») Aug 16, 2013 /
 
Fórum topic itt, kereső fent található.
(#) icserny válasza robing16 hozzászólására (») Aug 16, 2013 /
 
Idézet:
„Találkoztatok-e esetleg egy olyan megoldással, mikor a PIC össze van kötve egy SD kártyával, a PIC-be beégetek egy mondjuk "BIOS"-nak nevezett programot, ami kezeli az SD kártyát, és a kártyán lévő valamilyen formátumú fájlt kezd el futtatni?”
Fájlokat nem lehet futtatni, legfeljebb beolvasni és a flash memóriába beégetni. Ezt viszont nem lehet túl gyakran eljátszani, mert a flash újraírhatósági száma korlátos (típustól és a hőmérséklettől függően tipikusan 100 - 100 000 közötti érték).

Keress olyan mikrovezérlőt, aminek elég nagy a memóriája (belefér a programod), vagy pedig keress olyat, ami nem Harvard felépítésű, és a RAM-ból is tud futtatni! Esetleg egyes PIC18 típusok (pl. PIC18F8722) "mikroprocessor" módját felhasználva külső memóriából lehet futtathatod a programot. A külső memória egy része esetleg lehet RAM, s akkor töltögetheted bele a programot SD kártyáról (nem hiszem, hogy megérné a bajlódást!).
(#) robing16 válasza icserny hozzászólására (») Aug 17, 2013 /
 
Köszönöm válaszodat.

Igen, gondolkodtam azon, hogy mi van ha a PIC önprogramozó tulajdonságával kreálnék egy programot, ami a PIC Flash memóriájába írja bele a futtatni kívánt részt, majd futtatja azt, ekkor én is a korlátozott írási számon akadtam el, hogy az előbb vagy utóbb el fog fogyni.

Említetted, hogy nézzek szét másmilyen processzor felépítésben, és picit még tovább kutattam, megtaláltam a RaspBerry családot Ahogy olvastam, egy SD kártyán egy Linux lebutított szoftver indul el. 700MHz es procival és 512 rammal szerelték.

Ha bele gondolok, akkor a PIC-et, mint csatoló interfészként remekül tudom alkalmazni. A kezelő szoftver meg C nyelven megírt linux-os program lenne.

Beleásom magam, köszönöm a segítséget
A hozzászólás módosítva: Aug 17, 2013
(#) Hilo hozzászólása Aug 18, 2013 /
 
Sziasztok, tud valaki segíteni nekem ebben a kérdésben? Szeretnék haladni vele a 4 napos ünnep alatt. Előre is köszönöm.
(#) nedudgi válasza Hilo hozzászólására (») Aug 18, 2013 /
 
Az ICSP lábak kimenetek a programban? Ha igen, a program elején némi késleltetés segíthet.
(#) Hilo válasza nedudgi hozzászólására (») Aug 18, 2013 /
 
ICSP lábak digitális bemenetek.
(#) nedudgi válasza Hilo hozzászólására (») Aug 18, 2013 /
 
Ha bemenet, akkor a külső áramkör nem zavarhat be az ICSP működésébe? Mutasd meg a kapcsolást.
(#) Hilo válasza nedudgi hozzászólására (») Aug 18, 2013 /
 
programozáskor a pic nincs az áramkörben, egy tesztpanelben van, programozó meg bedrótozva a lábakhoz.
(#) nedudgi válasza Hilo hozzászólására (») Aug 18, 2013 /
 
A vezetékek milyen hosszúak? Programoztál ezzel az összeállítással másik kontrollert?
A hozzászólás módosítva: Aug 18, 2013
(#) Hilo válasza nedudgi hozzászólására (») Aug 18, 2013 /
 
12f683-at igen, annál nagyobbat nem. Programozó eredeti PICKIT2. Vezetékek ~ 10 cm esek. Tápot a PicKit2 ből kap programozás közben.
(#) nedudgi válasza Hilo hozzászólására (») Aug 18, 2013 /
 
Az MCLR/VPP is? LVP bekapcsolva? Több ötletem nincs.
(#) Hilo válasza nedudgi hozzászólására (») Aug 18, 2013 /
 
Ezek elvileg rendben vannak, este majd tesztelgetek hátha rájövök mi a gond. Köszönöm amúgy a segítséget.
(#) proba válasza robing16 hozzászólására (») Aug 18, 2013 /
 
Régen a basic pont ezt csinálta. A picbe megírsz egy csomó rutint, az SD kártyán meg tárolod a rutinok futtatási sorrendjét. (Régen volt ilyen primitív modul, bár ott egy eepromban tárolták a futtatandó programot. Basic Stamp)
A hozzászólás módosítva: Aug 18, 2013
(#) Hilo hozzászólása Aug 18, 2013 /
 
Sziasztok, úgy döntöttem mivel nagyon nem vagyok formában az alapoknál kezdem újra, a következő a kérdésem, ha jól tudom 12f886-nál a PortB lehet mind digitális be vagy ki menet.
Az alábbi kódnál viszont valamit kihagytam mert a PortB nél 0,3,5 bit low on marad, mit hagytam ki?
Előre is köszönöm!

  1. LIST P=16f886
  2.         #include <p16f886.inc>
  3.         __CONFIG 2007, H'20D4'
  4.         __CONFIG 2008, H'3EFF'
  5.  
  6.         CBLOCK  0x20                    ;Szabad memória hely
  7.         T1                                              ;
  8.         T2                                              ;
  9.         T3                                              ;
  10.         ENDC
  11.  
  12.         org 0
  13.  
  14.         banksel PORTB
  15.         clrf PORTB
  16.         banksel TRISB
  17.         movlw b'00000000'
  18.         movwf TRISB
  19.        
  20.         banksel PORTB
  21.         movlw b'11111111'
  22.         movwf PORTB
  23.  
  24.         IDE
  25.  
  26.         goto IDE       
  27.  
  28.         end
(#) nedudgi válasza Hilo hozzászólására (») Aug 18, 2013 / 1
 
Analóg módban vannak a bitek? ANSELH
(#) Hilo válasza nedudgi hozzászólására (») Aug 18, 2013 /
 
Akkor nem több portra is kéne hatással lennie?
Idézet:
„The state of the ANSELH bits has no affect on digital output functions”

Én ebből azt szűröm le hogy a digitális kimenethez nincs köze, vagy tévedek?
A hozzászólás módosítva: Aug 18, 2013
(#) kissi válasza Hilo hozzászólására (») Aug 18, 2013 / 1
 
Ez csak annyit jelent, hogy a digitális kimenetek megmaradnak, de ha analógra váltasz, akkor nem ezek kerülnek ki a lábakra ( ha visszaváltanál, akkor újra az eredeti szintek lennének! ) !
(#) Hilo válasza kissi hozzászólására (») Aug 18, 2013 /
 
Jogos, köszönöm az észrevételt.
(#) Hilo hozzászólása Aug 18, 2013 /
 
Újabb kérdés: "PKWarn0003: Unexpected device ID: Please verify that a PIC16F886 is correctly installed in the application. (Expected ID = 0x2060, ID Read = 0x0)"
ez mitől lehet? lehet kinyírtam a PIC-em valamivel? (12f886)
Ha a PIC rövidzár miatt 9V ot kap azonnal halott?
A hozzászólás módosítva: Aug 18, 2013
Következő: »»   440 / 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