Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1067 / 1319
(#) potyo válasza c27 hozzászólására (») Ápr 18, 2012 /
 
A váltakozófeszültség szépségei

Egyébként ugyanígy van két fázis között 400V színuszos feszültség. Az is két, egymáshoz képest 120 fokkal eltolt 230V-os színuszos feszültség összege.
(#) laszlobeke2 hozzászólása Ápr 18, 2012 1 /
 
Sziasztok!

Kérdésem lenne, hogy van-e valaki köztetek aki vállal pic programozást? Természetesen nem ingyen. Led vezérlés a feladat. Van program is csak rendbe kéne rakni.

Köszönöm!

Laci
(#) Soós Antal válasza icserny hozzászólására (») Ápr 19, 2012 /
 
Kösz én kapott CD readme.txt a k szériánál nem volt 18F46K20 úgy látszik nem frissítették
Mondanál egy ismert hibát a 4520 hoz képest az angol nem az erősségem?
(#) Soós Antal válasza _vl_ hozzászólására (») Ápr 19, 2012 /
 
Köszönöm a hasznos összefoglalót egy délután alatt én is erre jutottam akkor szerintem inkább a K22 igaz az opto triakok elmennek 3 V ha jól nézzem!
(#) watt válasza Soós Antal hozzászólására (») Ápr 19, 2012 /
 
A magyar sem.
(#) icserny válasza Soós Antal hozzászólására (») Ápr 19, 2012 /
 
A hibalista attól függ, hogy az IC melyik kiadását kapod kézhez (mióta porosodik a raktárban).

Az egyik meredek hiba: az ADC konverzió esetleg a teljes skála felére korlátozódik (a legfelső bit 0-ba ragadhat). Ez csak a legújabb kiadásban van kijavítva (B5).

Egy másik érdekes hiba: ha a bemeneti változást jelző megszakítás be van kapcsolva, és a bemeneti szint magas, akkor az alvásból történő ébredéskor hamis megszakítás keletkezhet.
(#) Soós Antal válasza watt hozzászólására (») Ápr 20, 2012 /
 
Bocs tényleg egy kicsit röviden írtam. De akinek írtam megértette!
(#) Soós Antal válasza icserny hozzászólására (») Ápr 20, 2012 /
 
Köszönöm az A/D nekem fontos úgyhogy erre figyelek ha esetleg mégis ez kell akkor csak B5 javított verzió a jó igazából nem a 300 Ft a jó, hanem 64 MHz a 40 MHz képest
(#) dtocy hozzászólása Ápr 21, 2012 /
 
Heló!

Ezt a kódrészletet szeretném basic-ből c-be fordítani:

  1. sub procedure TFT_Char(dim C as char,dim x,y, dim Fcolor,Bcolor as word)
  2. const PtrFont as ^byte
  3. dim Cptrfont,y_new as word
  4. dim font16x16 as word[16]
  5. dim k,i,x_new as byte
  6. dim print3,print4 as word
  7.  
  8.  ptrfont = @Font_16x16
  9.  Cptrfont = (C-32)*32
  10.  ptrfont = ptrfont + Cptrfont
  11.  
  12.  TFT_Set_Address(x,y,x,y)
  13.  x_new = x
  14.  y_new = y
  15.  
  16.  for k = 0 to 15
  17.   font16x16[k] = ptrfont^
  18.   inc(ptrFont)
  19.   font16x16[k] = (font16x16[k] << 8)
  20.   font16x16[k] = font16x16[k] + ptrfont^
  21.   inc(ptrFont)
  22.  next k
  23.  
  24.  for i = 0 to 15
  25.  
  26.    for k = 0 to 15
  27.     print3 = (font16x16[i] and 0x8000)
  28.     print4 = print3 >>15
  29.    
  30.     if print4 = 1 then
  31.        TFT_Dot(x_new,y_new,Fcolor)
  32.        inc(x_new)
  33.     else
  34.        TFT_Dot(x_new,y_new,Bcolor)
  35.        inc(x_new)
  36.        TFT_Set_Address(x_new,y,x_new,y)
  37.     end if
  38.    
  39.        font16x16[i] = font16x16[i] << 1
  40.    next k
  41.  
  42.   inc(y_new)
  43.   x_new = x
  44.   TFT_Set_Address(x,y_new,x,y_new)
  45.  next i
  46. end sub


Erre sikerült átírni, de sajnos nem működik:

  1. void TFT_Char(char C, unsigned int x, unsigned int y, unsigned int color) {
  2. const char *PtrFont;
  3. char font16x16[16];
  4. unsigned char Cptrfont, x_new, y_new, k, i, print, print2;
  5.  
  6.   PtrFont = &Font_16x16;
  7.   Cptrfont = (C - 32) * 32;
  8.   PtrFont = PtrFont + Cptrfont;
  9.  
  10.   x_new = x;
  11.   y_new = y;
  12.  
  13.   for (k = 0; k <= 15; k++) {
  14.     font16x16[k] = *PtrFont;
  15.     PtrFont++;
  16.     font16x16[k] = font16x16[k] << 8;
  17.     font16x16[k] = font16x16[k] + *PtrFont;
  18.     PtrFont++;
  19.   }
  20.  
  21.   for(i = 0; i <= 15; i++) {
  22.     for(k = 0; k <= 15; k++)  {
  23.       print = font16x16[i] & 0x8000;
  24.       print2 = print >> 15;
  25.      
  26.       if (print2 = 1) {
  27.         TFT_Dot(x_new, y_new, color);
  28.         x_new++;
  29.       }
  30.       else {
  31.         TFT_Dot(x_new, y_new, 0xFF55);
  32.         x_new++;
  33.         TFT_Set_Address(x_new, y, x_new, y);
  34.       }
  35.      
  36.       font16x16[i] = font16x16[i] << 1;
  37.     }
  38.     y_new++;
  39.     x_new = x;
  40.   }
  41. }


Mi lehet a hiba?
Előre is kösz!
(#) p_istvan válasza dtocy hozzászólására (») Ápr 21, 2012 /
 
Szervusz!
Ez így értékadási is egyben a C-ben: if (print2 = 1){
A print2 mindig 1 lesz a feltétel vizsgálat után!
Ha nem ezt szeretnéd akkor: if (print2 == 1){
(#) watt válasza dtocy hozzászólására (») Ápr 21, 2012 /
 
Ha így írod, akkor nem fogsz legközelebb ilyen nehezen felfedezhető hibát ejteni, mert a fordító kiabálni fog.
  1. if ( 1 == print2){

Persze az a==b viszgálatnál nem működik a trükk...
(#) dtocy válasza p_istvan hozzászólására (») Ápr 21, 2012 /
 
Kösz a segítséget, igaz, már többször belebuktam hogy kettő helyett csak egy egyenlőségjelet írtam, nem tudom miért csak egyet írtam. Kipróbáltam, de még mindig nem jó. Valamiért mindig 0 a print2. Hogy lehet ez?
(#) _vl_ válasza dtocy hozzászólására (») Ápr 21, 2012 /
 
Egy halom változód/tömböd van, ami word a basicben, és char/unsigned char a C verzióban. Ezek nem egyeznek meg méretben, az egyik 16-bites, a másik 8-bites.
(#) p_istvan válasza dtocy hozzászólására (») Ápr 21, 2012 /
 
Csatlakozom az előttem szólóhoz, 8 bites változón akarsz 16 bites műveleteket végezni:
print = font16x16[i] & 0x8000;
print2 = print >> 15;
Másrészt a basic változat működött egyáltalán?
Itt kimaszkolod a 14. bitet: print = font16x16[i] & 0x8000;
Ebben a sorban meg 15 hellyel jobbra léptetsz: print2 = print >> 15;
Az eredmény mindig 0! Csak 14-el kell léptetni, hogy a 14. bit a nullás bitbe kerüljön.
(#) dtocy válasza _vl_ hozzászólására (») Ápr 22, 2012 /
 
Köszi, unsigned int-re átírtam és egyből jó lett!
(#) Programmer válasza dtocy hozzászólására (») Ápr 23, 2012 /
 
Ez már a másik véglet, az uint 32 bites, az eredeti kód viszont 16 biteseket használ, a legjobb az unsigned short lenne(sajnos ezek a méretek változhatnak a fordítótól függően, a C32 viszont ezeket a típusokat a fentebb leírt módon fordítja).
(#) pontazok hozzászólása Ápr 23, 2012 /
 
Sziasztok!

Az volna a kérdésem, hogy PIC-USB-PC kapcsolat kialakítása esetén csak 20MHz-es kvarc jó, vagy ez csak a nagy sebesség miatt lényeges? Igazából 4 és 22MHz-es kvarcok vannak itthon.
(#) _vl_ válasza pontazok hozzászólására (») Ápr 23, 2012 / 1
 
Általában 4-gyel osztható MHz kell hozzá (4-24 között), ha kvarcot használsz. Szóval a 4MHz-nek is jónak kéne lennie.
(#) pontazok válasza _vl_ hozzászólására (») Ápr 23, 2012 /
 
Köszönöm a választ.
Akkor egy tesztet adok neki hamarosan
(#) icserny válasza pontazok hozzászólására (») Ápr 23, 2012 / 1
 
A 20 MHz-es kvarc szerintem onnan jött, hogy a PIC16 mikrovezérlőknél ez volt a csúcs. A PIC18F4550 és a hozzá hasonló felépítésűek PLL áramköre azonban 4 MHz-ből indul ki, tehát 4, 8, 12, 16, 20 MHz-es kvarc esetén 1, 2, 3, 4, 5-szörös előosztással kell kezdeni.

Ha 4 MHz-es kvarcot használsz 20 MHz-es helyett, akkor a konfigurációs bitek beállításánál az alábbi sor
  1. #pragma config PLLDIV   = 5         // PLL osztó 20 MHz-es kristályhoz

helyett ez kell:
  1. #pragma config PLLDIV   = 1         // PLL osztó 4 MHz-es kristályhoz
(#) pontazok válasza icserny hozzászólására (») Ápr 23, 2012 /
 
Köszönöm szépen.
Akkor úgy látom, hogy a 4MHz a minimum.
Mégegyszer nagyon szépen köszönöm!!!
(#) cmdnetwizard hozzászólása Ápr 24, 2012 /
 
Sziasztok!
Mekkora az esély arra, hogy az LCD kijelzőmet a PICkit2 térdeltette le?
Amikor programoztam a pic-emet, akkor rajta volt a kijelző...
Köszi!
(#) _vl_ válasza cmdnetwizard hozzászólására (») Ápr 24, 2012 /
 
Elég kevés.
Főleg, ha a PIC meg túlélte a programozást...
(#) cmdnetwizard válasza _vl_ hozzászólására (») Ápr 24, 2012 /
 
Még is megadta magát... Se kép - se hang... A hangon mondjuk nem is csodálkozom...
Csak nem szeretném eljétszani ugyan-azt az újjal, mert vettem mégegyet...
(#) Zsora válasza cmdnetwizard hozzászólására (») Ápr 24, 2012 /
 
Ha az LCD panel össze van kötve a PIC Vpp lábával, és nagyfeszültségű programozást használtál, akkor elszállhatott. Látni kellene hozzá a kapcsolásodat.
(#) icserny válasza Zsora hozzászólására (») Ápr 24, 2012 /
 
Idézet:
„Ha az LCD panel össze van kötve a PIC Vpp lábával...”
Nincs rá oka, hogy össze legyen kötve.
(#) cmdnetwizard válasza Zsora hozzászólására (») Ápr 24, 2012 /
 
Rendben! Reggel összedobom, és felteszem... De a VPP-re egy gombot kötöttem, amivel jelzek a pic-nek...
(#) PoC_Zoli hozzászólása Ápr 25, 2012 /
 
Sziasztok!

Viszonylag kezdő vagyok pic c-ben. Olyan problémám akadt, hogy a pic-em nem hajlandó bemenetekről adatot beolvasni. Felhúzó ellenállásnak használtam kb 2k, 5k és 10k ellenállásokat is. De nem hajlandó azt csinálni amit szeretnék vele.
A programomnak két RC szervót kellene majd megfelelő ütemben mozgatnia két előre definiált érték között egy külsö jelre. Ezt a jelet egy másik pic fogja szolgáltatni. Most egy darab dróttal és ellenállással próbáltam ki, a kimeneten pedig egy leddel.
A szervó rutinok és definiált értékek megvannak, ezek működnek is. Így csak a bemenet kezelésben szeretnék segítséget kérni. (Kimenetnek definiálva működik ez a láb,ledet meghajtja szoftveres parancsra)
A bemenetem RB6 lenne, a kimenetem amivel teszteltem pedig RB7. (nem ragaszkodok hozzá, de RB4 és RB5-ön vannak a szervók)
Legújabb MPLAB-ot használok a legújabb C18 lite fordítóval és pickit2-vel programozom a 18f14k50-emet.

  1. #include <p18f14k50.h>
  2.  
  3. #definecsukvafelso110//felso szervŰ alaphelyzete (becsukva)
  4. #definecsukvaalso110//alsŰ szervŰ alaphelyzete  (becsukva)
  5.  
  6. #definenyitvafelso150
  7. #definenyitvaalso150
  8.  
  9.  
  10. #pragma config FOSC = IRC
  11. #pragma config WDTEN = OFF
  12. #pragma config MCLRE = OFF
  13.  
  14.  
  15. int also;
  16. int felso;
  17. int szamol;
  18.  
  19. void low_isr(void);
  20. void high_isr(void);
  21.  
  22. /*****************High priority interrupt vector **************************/
  23. #pragma code high_vector=0x08
  24. void interrupt_at_high_vector(void)
  25. {
  26.   _asm GOTO high_isr _endasm
  27. }
  28.  
  29. #pragma code
  30. /*****************High priority ISR **************************/
  31.  
  32. #pragma interrupt high_isr
  33. void high_isr (void)
  34. {
  35. if (INTCONbits.TMR0IF)
  36. {  // Interrupt Check  
  37. INTCONbits.TMR0IF = 0;                
  38. TMR0H = 0xFF;
  39. TMR0L = 0xFE;                
  40. szamol++;
  41.  
  42. if(szamol==2000)szamol=0;//PWM frekvenci?ja
  43.  
  44.  if(szamol>felso)LATBbits.LATB5=0;//kit?lt?si t?nyezoje a felso szervŰnak
  45. else LATBbits.LATB5=1;  
  46.  
  47. if(szamol>also)LATBbits.LATB4=0;//kit?lt?si t?nyezo az also szervŰnak
  48. else LATBbits.LATB4=1;
  49. }
  50. }
  51.  
  52.  
  53. void main(void){
  54.  
  55. /*****************Setting OSC **************************/
  56. OSCCON = 0b11110000;
  57. while(!OSCCONbits.IOFS);
  58. ADCON1=0x0F;  
  59.  
  60. /*****************Port Setup ***************************/
  61. IOCB=0;//portb megszak?t?s kikapcs
  62. WPUBbits.WPUB6=1;//belso felh?zŰellen?ll?s bekapcsolva
  63. SSPCON1bits.SSPEN=0;//MSSP l?bak i/o
  64.  
  65.  
  66. TRISBbits.TRISB4 = 0;
  67. TRISBbits.TRISB5 = 0;
  68. TRISBbits.TRISB6 = 1;
  69. TRISBbits.TRISB7 = 0;
  70.  
  71. /***********v?ltozŰk elso be?ll?tusa *******************/
  72. felso=csukvafelso;
  73. also=csukvaalso;
  74.  
  75. /*****************Setting Interrupt ********************/
  76. INTCON = 0x20;                
  77. INTCON2 = 0x04;               //TMR0 high priority
  78. RCONbits.IPEN = 1;            //enable priority levels
  79.  
  80.  
  81.  
  82.  
  83.  
  84. /*****************Setting Timer ************************/
  85.  
  86. T0CONbits.T08BIT = 0;
  87. T0CONbits.T0CS = 0;
  88. T0CONbits.PSA = 1;
  89. TMR0H = 0xFF;
  90. TMR0L = 0xFE;
  91. T0CONbits.TMR0ON = 1;
  92. INTCONbits.GIEH = 1;          //enable interrupts
  93.  
  94. /*****************Main Program **************************/
  95. while(1)
  96. {
  97.  
  98. unsigned char a;
  99.  
  100. a=PORTBbits.RB6;
  101.  
  102. if(a==0)LATBbits.LATB7=0;  
  103.         elseLATBbits.LATB7=1;  
  104. }
  105. }
(#) _vl_ válasza PoC_Zoli hozzászólására (») Ápr 25, 2012 /
 
Az ANSEL lenne az első tippem (nem inicializálod, tehát alapbeállítással megy, amikor minden analóg bemenet analóg-only, a digitális bemenő meghajtó le van kapcsolva).
De az RB6-on nincs analóg bemenet...

Amúgy mit jelent, hogy nem azt csinálja, amit szeretnél? Kint lehúzod, és nem jelenik meg a 0?
(#) sirály12 hozzászólása Ápr 25, 2012 /
 
Egy olyan kérdésem lenne, hogy pic32mx795F512L-es picekhez milyen ethernet csatis trafó jó az alábbiak közül?

HR911105A vagy HR911102A

A belső felépítésük is más, ha jól értelmezem az adatlapokat. Valaki használt már ilyen trafós csatikat már pichez?
Következő: »»   1067 / 1319
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