Fórum témák

» Több friss téma
Fórum » PIC programozás
 
Témaindító: G-Lex, idő: Okt 24, 2005
Lapozás: OK   54 / 66
(#) kaqkk válasza elodke hozzászólására (») Aug 13, 2014 /
 
Klikkelj rá a gugli fordítóra és szavanként fordítsd le az asm ben ami a kijelzéshez tartozik .... ezután már csak mplabbal át kell fordítanod hex be és már készen is van....
A hozzászólás módosítva: Aug 13, 2014
(#) elodke válasza kaqkk hozzászólására (») Aug 14, 2014 /
 
köszi megpróbálom.
(#) jamiki hozzászólása Szept 7, 2014 /
 
Üdv mindenkinek!

18F4520 PIC -kel szeretnék a soros vonalon kommunikálni. ( Pc - ből adatot küldeni a PIC-nek (Pl. egy led felkapcsolása ) a változást a PIC küldje vissza a PC-nek. ) A soros vonal működtetésérő MŰKÖDŐ leirást nem találok. ( A pic programozási leirások a soros vonal kezelése előtt abbamaradnak, vagy az van írva, hogy folytatás következik ....) Ha valakinek volna ötlete ( használható leírás helyéről ) vagy saját tapasztalata amit megosztana velem azt megköszönném.l
(#) kissi válasza jamiki hozzászólására (») Szept 7, 2014 /
 
Szia!

Miért nem nézed meg icserny kolééga weblapját Bővebben: Link ?!
(#) watt válasza jamiki hozzászólására (») Szept 7, 2014 /
 
Szükséged lesz egy illesztő áramkörre a két, vagy több PIC közé (kivéve, ha egy nyáklapon vannak!) illetve a PC közé. A PIC-ek közé a legjobb választás az RS485 illesztő, pl. SN75176 vagy hasonló (felfűzhető több slave, távolra elvihető stb.). A PC felé ha RS232 felülettel akarsz csatlakozni a COM-ra, akkor egy MAX232 kell a másik USART kimenetre(két USART kimenettel rendelkező PIC szükséges). Ha a PC-t is RS485 vel akarod használni, akkor a PC-re egy RS485 illesztőt tehetsz USB-re, vagy a COM-ra egy RS232-RS485 illesztőt. Ha a PC lesz a Master, akkor a PIC-ek csak akkor kommunikálhatnak, ha a PC működik és irányítja a forgalmat. Ha a PIC-ek között akarsz kommunikációt PC-től függetlenül, akkor az egyik PIC-et kell kinevezned Master-nek és a PC Slave lesz. Ekkor a PC csak akkor szólhat bele, ha a Master megszólítja.
Gondolom a huzalozás nem okoz problémát, jó esetben az A és B vonalakat be kell kötni lánc szerűen és a két végét le kell zárni 120ohm-al.
Ekkor jön a programozás, el kell dönteni, hogy milyen protokoll szerint akarsz kommunikálni. RS485 esetében a MODBUS ajánlott, mert kiforrott, egyszerű "gyors" és biztonságos. A PC felé használhatod ezt külön szálon, címzés nélkül RS232-n keresztül is, de más megoldás is szóba jöhet, csak a CRC ellenőrzést érdemes használni, akár azt, amit a MODBUS használ, ha már egyszer ott van.
Ha a PC-t is RS485-el használod, akkor csak a MODBUS marad. A MODBUS-ról sok leírás található a neten, ezzel érdemes kezdeni, ha így döntesz.
Persze saját protokollt is írhatsz...
(#) icserny válasza jamiki hozzászólására (») Szept 7, 2014 /
 
Ezen az oldalon ismertetem az általam összeállított API függvények használatát. Egy kicsit búvárkodni kell a picula_usart.h és picula_usart.c állományokban a megértéséhez.

Az USB elnevezés a leírásban ne zavarjon meg, az én kártyámon van egy USB-UART átalakító is, ezért a PC oldaláról egy virtuális soros port látszik. A PIC szempontjából ez közömbös, szoftveresen minden ugyanígy kellene akkor is, ha RS232 felületre csatlakozna.
(#) Hp41C válasza jamiki hozzászólására (») Szept 9, 2014 /
 
Nem kell egyből a mély vízbe ugrani.
- Egy-egy karakter vétele kapcsolgatja a LED -et. Ekkor lehet használni a fordítók könyvtárában levő UART kezelő függvényeket, hiszen a feldolgozás rövidebb idő alatt megtörténik, minthogy beérkezne a következő karakter.
- Ha bonyolultabb a vezérlés:
Körforgó buffer mind a vételi mind az adandó karaktereknek. Megszakításos kiszolgálás a vételre és az adásra. Két eljárás kell még: az egyik kiveszi a soron következő karaktert a vételi bufferből (és jelzi, ha nincs mit kivenni), a másik egy karaktert beír az adó bufferbe, engedélyezi az adási megszakítást (várakozik, ha nincs hely). A megsuakítási rutinban a vevő kérését kiszolgáló rutinnak pontosan egyszer ki kell olvasnia a RCSTA regisztert, le kell kezelnie a hibákat és pontosan egyszer ki kell olvasnia az RCGER -et. Az RCIF jelzőbitet az RCREG kiolvasása törli. Náhány hibát csak a vevő kikapcsolásával és újrabekapcsolásával lehet törölni, de az RCREG -et is ki kell olvasni. Az adó kezelése hasonló, a TXREG írása törli a TXIF -et. HA nincs több adandó karakter, az adási megszakítást tiltani kell.
(#) glaci hozzászólása Szept 11, 2014 /
 
Sziasztok!
18f4520-at programozok, de nem úgy működik ahogy szeretném.
Bekapcsolás után, sokáig, villog az LCD kijelző, régi TV-s szóval " szalad a kép", az üzemi állapot kijelzéssel, aztán megnyugszik.Ha a menüt váltok, van úgy, bejön, van úgy, hogy csak villog. Szóval buta vagyok. Kérek tanácsot!


  1. program kazan_vezerlo;
  2.  
  3. { Declaraciós szakasz }
  4. // LCD module connections
  5. var LCD_RS : sbit at RD2_bit;
  6.     LCD_EN : sbit at RD3_bit;
  7.     LCD_D4 : sbit at RD4_bit;
  8.     LCD_D5 : sbit at RD5_bit;
  9.     LCD_D6 : sbit at RD6_bit;
  10.     LCD_D7 : sbit at RD7_bit;
  11.     LCD_RS_Direction : sbit at TRISD2_bit;
  12.     LCD_EN_Direction : sbit at TRISD3_bit;
  13.     LCD_D4_Direction : sbit at TRISD4_bit;
  14.     LCD_D5_Direction : sbit at TRISD5_bit;
  15.     LCD_D6_Direction : sbit at TRISD6_bit;
  16.     LCD_D7_Direction : sbit at TRISD7_bit;
  17.  
  18. //----------------------------------------------------------------------saját változók
  19.       var text1: array[16]  of char;  //szöveg első sor
  20.     text2: array[16]  of char;  //szöveg második sor
  21.     text3: array[16]  of char;  //szöveg harmadik sor
  22.     text4: array[16]  of char;  //szöveg negyedik sor
  23.     inter_flag: byte;            //információs  bitek
  24.     ev,ho,nap,napnev,sec,perc,ora: byte;
  25.  
  26. //---------------------------------egyéni karakterek
  27.  
  28. const fol: array[0..7] of byte = (4,14,31,4,4,4,4,0);  //----------------föl karakter
  29. const le: array[0..7] of byte = (4,4,4,4,31,14,4,0);   //----------------le karakter
  30. const _aa: array[0..7] of byte = (1,2,14,1,15,17,15,0); //---------------á karakter
  31. const _ii: array[0..7] of byte = (2,4,12,4,4,4,14,0);  //----------------í karakter
  32. const nem_valt: array[0..7] of byte = (14,0,31,0,31,0,14,0);  //---------nem változik
  33. const _ee: array[0..7] of byte = (2,4,14,17,31,16,14,0); //--------------é karakter
  34. const _oe: array[0..7] of byte = (5,10,14,17,17,17,14,0);  //--------ő karakter
  35. const _oo: array[0..7] of byte = (2,4,14,17,17,17,14,0); //----------ó karakter
  36.  
  37. procedure Char_oo(pos_row, pos_char: Byte);
  38. var i: Byte;
  39. begin
  40.   Lcd_Cmd(120);
  41.   for i := 0 to 7 do Lcd_Chr_CP(_oo[i]);
  42.   Lcd_Cmd(_LCD_RETURN_HOME);
  43.   Lcd_Chr(pos_row, pos_char, 7);
  44. end;
  45.  
  46. procedure Char_oe(pos_row, pos_char: Byte);
  47. var i: Byte;
  48. begin
  49.   Lcd_Cmd(112);
  50.   for i := 0 to 7 do Lcd_Chr_CP(_oe[i]);
  51.   Lcd_Cmd(_LCD_RETURN_HOME);
  52.   Lcd_Chr(pos_row, pos_char, 6);
  53. end;
  54.  
  55. procedure Char_ee(pos_row, pos_char: Byte);
  56. var i: Byte;
  57. begin
  58.   Lcd_Cmd(104);
  59.   for i := 0 to 7 do Lcd_Chr_CP(_ee[i]);
  60.   Lcd_Cmd(_LCD_RETURN_HOME);
  61.   Lcd_Chr(pos_row, pos_char, 5);
  62. end;
  63.  
  64. procedure Char_nem_valt(pos_row, pos_char: Byte);  //nem változik karakter
  65. var i: Byte;
  66.    begin
  67.      Lcd_Cmd(88);
  68.      for i := 0 to 7 do Lcd_Chr_CP(nem_valt[i]);
  69.      Lcd_Cmd(_LCD_RETURN_HOME);
  70.      Lcd_Chr(pos_row, pos_char, 3);
  71.    end;
  72.  
  73. procedure Char_ii(pos_row, pos_char: Byte);        //í karakter
  74. var i: Byte;
  75.    begin
  76.      Lcd_Cmd(96);
  77.      for i := 0 to 7 do Lcd_Chr_CP(_ii[i]);
  78.      Lcd_Cmd(_LCD_RETURN_HOME);
  79.      Lcd_Chr(pos_row, pos_char, 4);
  80.    end;
  81.  
  82. procedure Char_aa(pos_row, pos_char: Byte);  //á karakter
  83. var i: Byte;
  84.    begin
  85.      Lcd_Cmd(80);
  86.      for i := 0 to 7 do Lcd_Chr_CP(_aa[i]);
  87.      Lcd_Cmd(_LCD_RETURN_HOME);
  88.      Lcd_Chr(pos_row, pos_char, 2);
  89.    end;
  90.  
  91. procedure Char_fol(pos_row, pos_char: Byte); //föl karakter
  92. var i: Byte;
  93.    begin
  94.      Lcd_Cmd(64);
  95.      for i := 0 to 7 do Lcd_Chr_CP(fol[i]);
  96.      Lcd_Cmd(_LCD_RETURN_HOME);
  97.      Lcd_Chr(pos_row, pos_char, 0);
  98.    end;
  99.  
  100. procedure Char_le(pos_row, pos_char: Byte);  //le karakter
  101. var i: Byte;
  102.    begin
  103.      Lcd_Cmd(72);
  104.      for i := 0 to 7 do Lcd_Chr_CP(le[i]);
  105.      Lcd_Cmd(_LCD_RETURN_HOME);
  106.      Lcd_Chr(pos_row, pos_char, 1);
  107.    end;
  108. //--------------------------------------egyéni karakterek vége
  109.    
  110. //---------------------------------------------------------- pic iniciálás
  111. procedure pic_init();
  112.   begin
  113.     //a portok irányát be kell állítani
  114.     trisa:=%10111111;
  115.     trisb:=%11110111;
  116.     trisc:=0;
  117.     trisd:=0;
  118.     trise:=5;  //a 0. port bemenet, a nyomógomb "-", a 1, port a speaker
  119.     latb:=0;
  120.     lata:=0;
  121.     portc:=0;
  122.     portd:=0;
  123.  
  124.     //ADC regiszterek beállítása
  125.      //Az ADCO0 regiszter beállítása programból történik
  126.     // értéke attól függ, melyik analó csatornát akarjuk használni
  127.     adcon1:=13; //az an4 +vref, an0 és an1 analóg Bemenet '00011101'
  128.     //---------------------megszakítás
  129.  
  130.     inter_flag:=0;
  131.  
  132.     Lcd_Init();                    // Initialize LCD
  133.     Lcd_Cmd(_LCD_CLEAR);          // Clear LCD
  134.     Lcd_Cmd(_LCD_CURSOR_OFF);    // Turn cursor off
  135.     Sound_Init(PORTE, 1);       //a speaker a E port 1. lába
  136.  
  137.     //---------------------------------------------------timer0 initializálása
  138.     //Timer0    kristály:24Mhz
  139.     //Prescaler 1:128; TMR0 Preload = 18661; Actual Interrupt Time : 1sec
  140.     //Place/Copy this part in declaration section
  141.     T0CON:= 0x86;
  142.     TMR0H:= 0x48;
  143.     TMR0L:= 0xE5;
  144.     GIE_bit:= 1;
  145.     TMR0IE_bit:= 1;
  146.  
  147.  
  148.   end;
  149.  
  150.  
  151.  
  152. procedure interrupt();
  153. begin
  154.   if (TMR0IF_bit) then
  155.    begin
  156.     TMR0IF_bit := 0;
  157.     TMR0H         := 0x48;
  158.     TMR0L         := 0xE5;
  159.     //ide jön a programnak az a része ami a számólást végzi további felhasználásra
  160.     sec:=sec+1;
  161.     if portd.0=1 then portd.0:=0 else portd.0:=1;
  162.     if inter_flag.7=1 then inter_flag.7:=0 else inter_flag.7:=1;
  163.    end;
  164. end;
  165.  
  166. procedure uzem();
  167. begin
  168.    Lcd_Cmd(_LCD_CLEAR);
  169.    LCD_Out(1,1,'F:180C '); Char_fol(1,7); LCD_Out(1,9,'B:190C 23:16');
  170.    LCD_Out(2,1,'SH:22,5C ');    Char_le(2,9); LCD_Out(2,10,'B:23C  2014');
  171.    LCD_Out(3,1,'K:-10,6C');    Char_fol(3,9);LCD_Out(3,10,'VT:70%12.18');
  172.    LCD_Out(4,1,'V:67C');  Char_nem_valt(4,6);LCD_Out(4,8,'B:70C Szerda');
  173.    inter_flag.6:=1;
  174. end;                                     //12345678901234567890
  175. procedure menu();
  176. begin
  177.    Lcd_Cmd(_LCD_CLEAR);
  178.    LCD_Out(1,1,'Menu');
  179.    LCD_Out(2,1,'Uzem Be ll t s');    Char_aa(2,8); Char_ii(2,11); Char_aa(2,13);
  180.    LCD_Out(3,1,'Tuzel  feltolt s');    Char_oe(3,6); Char_ee(3,15);
  181.    LCD_Out(4,1,'Statisztika');        //   |
  182.    if porta.5=0 then uzem();    //start gomb megnyomás
  183.    inter_flag.6:=0;
  184. end;
  185.  
  186. begin  //--------------------------------------------FŐMENÜ
  187.   { Main program }
  188.   pic_init();
  189.   while (TRUE) do
  190.   begin
  191.        if sec=60 then begin perc:=perc+1; sec:=0; end;
  192.        if perc=60 then begin ora:=ora+1; perc:=0; end;
  193.        if ora=24 then  begin nap:=nap+1; end;
  194.        if inter_flag.6=1 then
  195.           begin
  196.              if inter_flag.7=1 then Lcd_Chr(1,18,' ') else Lcd_Chr(1,18,':');
  197.           end;
  198.        if (portb.5=0) and (portb.4=0) then
  199.           begin
  200.            // delay_ms(250);
  201.             menu();
  202.           end;
  203.        if porte.0=0 then
  204.           begin
  205.            // delay_ms(250);
  206.             uzem;
  207.           end;
  208.  
  209.    end;
  210. end.
(#) glaci válasza glaci hozzászólására (») Szept 11, 2014 /
 
Az a helyzet, hogy valami kontakthiba van. Jól át vagyok verve, már jó ideje szenvedek vele.
(#) zilahi hozzászólása Nov 11, 2014 /
 
Sziasztok!
Két kérdésem lenne:
1. ha a pickit3-mal pic12f629-et programozok, akkor ha nem bírja megtáplálni a programozó 5 v-al stabilan a pic-et akkor lehet-e attól hibás a programozás (belső oszcillátort használok)

2. ha a (fent említett picet) nem a programozóval akarom megtáplálni, hanem 1 külső stabil táppal akkor aszt úgy kell-e, hogy a mclr, data, clock lábat a programozótól kapja a vdd és a vss lábat pedig a táptól(nem tudom, hogy össze kell-e kötni a táp gnd lábát a programozó gnd lábával és így együtt kell-e a pic-re kötni)

Előre is köszönöm a válaszokat!
(#) kissi válasza zilahi hozzászólására (») Nov 11, 2014 /
 
Szia!

Meg kell tudnia táplálni ha jó a PIC !
A GND-ket össze kell kötni és ha a Vdd-ket is összekötöd, akkor fogja érzékelni azt is és nem fog érte szólni, hogy nincs tápod !
(#) zilahi válasza kissi hozzászólására (») Nov 12, 2014 /
 
Tehát akkor a gnd is és a vdd is össze kell kötni a táppal és így kell ezeket rákötni a picre.
Gondolom a programban (mplab8.7) be kell állítani a beállításoknál, hogy nem kell megtáplálni a picet vagy igen?
(#) Hp41C válasza zilahi hozzászólására (») Nov 12, 2014 /
 
Frissíteném az MpLab -ot 8.89 vagy 8.90 -re. Majdnem két évvel frissebb...
A 8.91 és 8.92 verziók ugyan több típust ismernek, de sokkal több a hiba bennük.
(#) tibike32 hozzászólása Nov 12, 2014 /
 
Sziasztok !
Egy PIC program megírásában kérném a segítségeteket. Van egy autópálya aminek van váltója. Ebben meghalt a PIC (16F630) és ezt szeretném javítani, de a PIC programozásban nem vagyok jártas. A mellékelt képen látható a kapcsolási rajz.
Négy autót tud kezelni a pálya, ezeknek a jeleit látni a képen. Ezt mindig adja a kocsi egy infra leden , a pályába van beépítve egy vevő és az érzékeli az autót, ha nyomok neki egy váltó jelet, akkor a kisugárzott jelalakot megfordítja ( invertálja ). Ilyenkor kiad egy impulzust a PIC a FET felé, és vált egyet a váltó . Ugyanígy, ha csak sima jel megy ki, akkor is ad ki egy impulzust a másik irányba. A teljes leírás itt található : Váltó
Egy ilyen programot kellene megírni a PIC-be.

Előre is köszönöm a válaszokat.
Tibi
(#) kissi válasza zilahi hozzászólására (») Nov 12, 2014 /
 
Jól gondolod, a PK2 és a PK3 is érzékeli, hogy kap az áramkör tápot, tehát nem kell előzetesen beállítani ( ha már a PicKit bekapcsolásakor is rajta lesz a táp! ) !
(#) watt válasza tibike32 hozzászólására (») Nov 12, 2014 /
 
Nem olvastam kérdést.
(#) kaqkk válasza watt hozzászólására (») Nov 12, 2014 /
 
Ez nem kérdés ! Kérés !
Idézet:
„Egy ilyen programot kellene megírni a PIC-be.”
(#) watt válasza kaqkk hozzászólására (») Nov 12, 2014 / 1
 
Nekünk?
(#) kaqkk válasza watt hozzászólására (») Nov 12, 2014 /
 
Neked ...
(#) watt válasza kaqkk hozzászólására (») Nov 12, 2014 /
 
Ott a pont!
De én csak azt szerettem volna jelezni, amit te is megértettél azonnal, hogy kérdés nélkül nem lehet válasz...
(#) tibike32 válasza watt hozzászólására (») Nov 12, 2014 /
 
Akkor itt a kérdés: segítenétek, hogy hogyan álljak neki a programnak ?
(#) nagym6 hozzászólása Nov 29, 2014 /
 
Üdv. Az lenne a kérdésem, hogy milyen lehetőség van arra, hogy az újabb pic típusokat ismerje a programozó. Pickit2 -ez van nekem- már nem ismeri, Pickit3 található letöltött programja sem. Nem találok Pickit3 frissítést sem. Házilagosan megoldható a bővítés, de nekem bonyolult, nem lehet minden egyes típusnál segítséget kérni. Mplab-ot nem használom, talán az a megoldás Pickit3-al, nem tudom.
Van Pickit3 kínai klón, ismeri-e valaki, használható-e.
Köszönöm.
(#) Hp41C válasza nagym6 hozzászólására (») Nov 29, 2014 / 1
 
MpLabX -beli IPE (Integrated Programming Environment) a gyári megoldás a PICkit3 -re.
A PICkit2 programja egyszerűen bővíthető a 12F1xxx, 16F1xxx, 18FxxK, 18FxxJ típusokkal, de az újabb 16 és 32 bitesekhez a PICkit2 firmware -t, a kezelő programot is át kell írni.
(#) nagym6 válasza Hp41C hozzászólására (») Nov 29, 2014 /
 
Idézet:
„A PICkit2 programja egyszerűen bővíthető”

Talán valahol neten megvannak a fájlok, amit nemrégen küldtél a 16F1704-re? A PK2deviceFile.dat anyaga, vagy Pic katalógusban?
Köszönöm.
A hozzászólás módosítva: Nov 29, 2014
(#) Hp41C válasza nagym6 hozzászólására (») Nov 29, 2014 /
 
A leírások hozzáférhetőek (voltak) a Microchip honlapján:
- PICkit2 firmware 2.32.00 forrása,
- PICkit2 V2.61 kezelő progam forrása és benne a működés leírása: PICkit2SourceGuidePCv2-61FWv2-32.pdf
- A programozási leírások és adatlapok.
Az idézet pontosabban:
Idézet:
„A PICkit2 programja egyszerűen bővíthető a 12F1xxx, 16F1xxx, 18FxxK, 18FxxJ típusokkal...”

Ebben az esetben nem kell más funkció, mint ami már meg van írva a firmware -ben és az applikációban. Persze néhány scriptet meg kell írni...
(#) Mircsof hozzászólása Dec 13, 2014 /
 
Sziasztok!
Egy PIC18F2550-I/SP szeretnék felprogramozni egy Pic kit2-vel. Találtam itt a honlapon egy ICSP bekötési rajzot, de ahhoz az volt írva, hogy hibás a bekötése... Kerestem a googlen is, de nem sikerült találnom (valószínű rossz kulcsszavakat adtam meg).
A lábkiosztását ismerem a cél IC-nek, de nem tudok kell e még valahova ellenállást stb. kötnöm.
Előre is köszönöm.
UI: esetleg a csatolt kép lenne az? Bővebben: Link
A hozzászólás módosítva: Dec 13, 2014
(#) vicsys válasza Mircsof hozzászólására (») Dec 13, 2014 /
 
A PIC-nek van adatlapja. Be kell kötni mindkét Vss-t, a Vdd-t, a Vpp-t és PGD-t és PGC-t. Természetesen ha használod a resetet, akkor a panelodon van egy 10k-s felhúzó a reset lábon és a tápfesz lábaknál már alapból a 100nF.
(#) Mircsof válasza vicsys hozzászólására (») Dec 13, 2014 /
 
Sikerült köszönöm, csak bekötöttem az ICSP kivezetéseket, és forrasztottam még egy csatlakozót a Vss re, így a program felismerte. Bár még nem programoztam be... előttem még meg kellene találni a propeller óra topikjában a az USB bázishoz a hexet
(#) pic13 hozzászólása Jan 15, 2015 /
 
Hello
Tudja valaki ennek az egyszerü JDM programozonak a nyák vagy a kapcs. tervét?
(#) vilmosd válasza pic13 hozzászólására (») Jan 16, 2015 /
 
A neten millio talalt van erre. De... Ez a programozo a mai gepeken nem igen megy. A regi gepeken az RS232 vonal szintjei meg +-10 V felett voltak, mig a maiaknal a +-5 V korul (ha van egyaltalan soros port) . Ez nem elegendo a PIC programozasahoz. Jobban jarnal egy 15 $ ero PicKit2-vel amit az Aliexpressen ingyen hazhozszallitassal megkaphatsz.
Következő: »»   54 / 66
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