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   503 / 1224
(#) usane válasza vladcepes hozzászólására (») Márc 26, 2014 /
 
Csak akkor érdemes ilyet csinálni, ha sokat foglalkozol smd csipekkel és ráadásul hasonló tokozásúakkal különben a más méretű és tokozásúakhoz is kell készítened,(TQFP, QFN, stb.,fölösleges). 1 darab esetében csináld amit Hp41c kolléga javasolt. Úgy készítsd el az áramkört, hogy kivezeted a programozó lábakat, (ICSP->ez van a Pickiten) és a kész áramkörön programozod fel a PIC-et.
(#) KaiserA válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Köszönöm szépen a segítséget, már csak egy errorom van: ezt írja ki:

Expecting LVALUE such as a variable name or * expression

ehez a sorhoz írja:
SLAVE_ADDRESS = 0x30;

Mi lehet a baj?

Köszönöm
(#) Hp41C válasza KaiserA hozzászólására (») Márc 26, 2014 /
 
Hogyan van a SLAVE_ADDRESS deklarálva? #define ... Akkor az értékét ott kell beállítani...
(#) KaiserA válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Igen,

Most lefordította, de még minidg azt írja hogy ertek : 255,

Köszönöm a segítséget!

Adrián
(#) Hp41C válasza KaiserA hozzászólására (») Márc 26, 2014 /
 
Hogyan van az MCP9808 A2, A1, A0 lába bekötve? Ha mind 0, alacsony szintre van kötve, akkor igaz a 0x30 slave cím. Ha nem mind 0, akkor a szinteket A2.. A0 sorban írd fel, írj a végére egy 0 bitet, az így kiolvasható 4 bites számot add hozzá a 0x30 -hoz.
(#) kly válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Nem 0x18?
Én használok ilyet , épp itt van előttem , a0,a1,a2 magas. címe: 0x1f
(#) kly válasza KaiserA hozzászólására (») Márc 26, 2014 /
 
Szia
Én ez a szenzort most épp PHP ben olvasom de könnyű átírni C-re.
A lényeg a matek ami lekezeli a negatív értékeket is ,az meg benne van:
  1. #!/usr/bin/php -q
  2. <?
  3. @$value[address]="0x1f";
  4. @system("/usr/sbin/i2cset -y 1 ".$value[address]." 0x05");
  5. @$temp=system("/usr/sbin/i2cget -y -f 1 ".$value[address]." 0x05 w ");
  6.  
  7. $UpperByte=hexdec("$temp[4].$temp[5]");
  8. $LowerByte=hexdec("$temp[2].$temp[3]");
  9.  
  10. $UpperByte = $UpperByte & hexdec("1F");
  11.  
  12.  if (($UpperByte & hexdec("10")) == hexdec("10")){
  13.   $UpperByte = $UpperByte & hexdec("0F");
  14.   $Temperature = 0-(256 - (($UpperByte * 16) + ($LowerByte / 16)));
  15.   }
  16.   else.
  17.   $Temperature = (($UpperByte * 16) + ($LowerByte / 16));
  18.  
  19.  
  20. echo $Temperature." C\n";
  21. ?>
(#) kly válasza kly hozzászólására (») Márc 26, 2014 /
 
Nemszóltam ez esetben tényleg 0x30.
Béna i2c_write fügyvény......
(#) vladcepes válasza usane hozzászólására (») Márc 26, 2014 /
 
Hello!
"Úgy készítsd el az áramkört, hogy kivezeted a programozó lábakat" ... csináltam ilyet, de azért akarom külön felprogramozni,(aztán majd beforrasztani)mert olyan kicsi a hely hogy nem fér el még külön a kivezetett lábak is.
De valóban úgy van ahogy írod,1 db-ért nem érdemes,de megpróbálok egyet ami most kell max abból a többlábast.
Üdv!
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Márc 26, 2014 /
 
Miért nem használod magát a RAM -ba helyezett table[] tömböt adattárolásra? Hagyd el a const -ot és a kezdőértéket a deklaráció elől. Avagy néhán #define -vel az egyedi néven való hivatkozás is megoldható, bár ilyen rövid nevek esetén beláthatatlanok lesznek a következmények:
  1. #define xxx table[0]
  2. #define yyy table[1]
  3. #define zzz table[2]
  4. #define aaa table[3]
A hozzászólás módosítva: Márc 26, 2014
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Nagyon köszi!
Ezt most kipróbálom. Az előbb öcsémmel beszélem. Ő nem pic-cel foglalkozik, ezt javasolta:
char table[2] = { 'a' , 'b' }; de megnéztem a dissasembly-t és még sokkal lassabb mintha végig 'if'elném az egészet.
(#) n_yálastrubadúr hozzászólása Márc 26, 2014 /
 
A létrehozott változók milyen típusúak? Hogyan lehet kezdő értéket adni nekik? És hogyan hívhatók elő? pl: PORTA = table[2] ?? az akkor yyy lesz?
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Márc 26, 2014 /
 
A C program fordítása egy előkészítő (preprocessor) fázisból és egy fordítási fázisból áll. A #define direktíva a preprocesszornak szól. Arra utasítja, hogy a fenti példában, hogy az xxx minden előfodulását cserélje le table[0] -ra. A tényleges fordító a lecseréléssel előálló programot fordítja.
Tehát nem hoz létre új változót, ennek megfelelően az xxx típusa megegyezik a table[0] típusával.
pl. Ha PORTA = xxx; szerepel valahol a kiindulási forrásban, akkor a #define xxx table[0] hatására a fordító a PORTA = table[0]; sort fogja fordítani.
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Elég jól elszerencsétlenkedem ezzel. Ha létrehozok eg ilyet:
  1. char table[0];

akkor ezt a hibát hozza: 154.13 invalid dimension
A hozzászólás módosítva: Márc 26, 2014
(#) n_yálastrubadúr hozzászólása Márc 26, 2014 /
 
De így sem lesz PORTB-n a 'v'..

  1. char q = 2;
  2.         char v = 32;
  3.  
  4.         char table[2] = { 'q' , 'v'};
  5.  
  6.         PORTB = table[2];
(#) KaiserA válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Köszönöm a segítséget!
(#) n_yálastrubadúr hozzászólása Márc 26, 2014 /
 
Rájöttem hogy miért nem az van kinn a portb-n .
  1. char table[2] = { 'q' , 'v'};

Ezzel az a baj hogy még ismét konstans marad csak az ascii tábla értéke lesz a betűk helyén.
Nekem hasonló kellene, de ez ugye nem jó:
  1. char table[4] = { l1,l2,l3,l4 };


Sőt igazából az is jó lenne ha maga a táblázat készlet sem lenne fix
  1. char table[x] = { l1,l2,l3,l4 };

De egyenlőre az előző ami nagyon fonts lenne.
A hozzászólás módosítva: Márc 26, 2014
(#) p_istvan válasza n_yálastrubadúr hozzászólására (») Márc 26, 2014 /
 
Szervusz!

Ez egy két elemmű tömb: char table[2] = { 'q' , 'v'};
melynek első eleme a table[0] a második pedig a table[1] és ez tartalmazza a 'v' karaktert!
(#) KaiserA válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
  1. Most addig jutottam hogy, kírja hogy ertek:193 a felső sorba, alsosorba pedig: 255,
  2. Megtudod mondani hogy mi nincs rendesen beállítva? vagy hogy mi hiányzik, hogy kiírja az aktuális hőmérsékletet?
  3. Az A lábak tápra vannak húzva.
  4.  
  5.  
  6. #zero_ram                                                                      
  7. #include <h fileok/18F4550.h>                  
  8. #DEVICE ADC=10                  
  9. #include <h fileok/stdio.h>                                  
  10. #include <string.h>                                            
  11. #include <h fileok/float.h>    
  12. #use i2c(master,sda=PIN_B0, scl=PIN_B1)
  13. #define SLAVE_ADDRESS 0x3E
  14. #fuses HS,BROWNOUT,NOPUT,NODEBUG,NOWDT      
  15. #use delay(clock=24000000)                                        
  16. #include <lcd.c>                                                                      
  17. #include <h fileok/prototypes.h>
  18.  
  19.  
  20. unsigned char felsosor[16];              
  21. unsigned char alsosor[16];                
  22. int8 a=0;      
  23. unsigned long fogadottadat=0;
  24. unsigned long fogadottadat2=0;
  25.  
  26. void init()                                                  
  27.         {
  28.         set_tris_a(0xc3);                                                
  29.         set_tris_b(0xff);                                                
  30.         set_tris_c(0xff);                                                
  31.         set_tris_d(0x1f);                                                
  32.         set_tris_e(0xff);                                          
  33.  
  34.         output_low(PIN_A3);                                
  35.         output_low(PIN_A4);                                
  36.         output_low(PIN_A5);                                
  37.         output_low(PIN_A2);                                
  38.  
  39.         lcd_init();                                                  
  40.  
  41.         SETUP_ADC(ADC_CLOCK_INTERNAL);      
  42.         SETUP_ADC_PORTS(AN0_TO_AN1|VSS_VDD);  
  43.         SET_ADC_CHANNEL(0);                              
  44.         }
  45.  
  46. void main()
  47.                 {
  48.                 init();
  49.        
  50.                        
  51.                 while(1)
  52.                         {
  53.                   i2c_start();
  54.                   i2c_write(SLAVE_ADDRESS);
  55.           i2c_write(0x05);
  56.           i2c_start();
  57.           i2c_write(SLAVE_ADDRESS | 0x01);
  58.           fogadottadat=i2c_read(0);
  59.           fogadottadat2=i2c_read(1);      
  60.           i2c_stop();
  61.                                                
  62.                         lcd_putc("\f");
  63.                         sprintf(felsosor,"ertek: %lu" ,fogadottadat);
  64.                         sprintf(alsosor,"ertek: %lu" ,fogadottadat2);
  65.  
  66.        
  67.                                                                         a=0;                                      
  68.                                                                         while(a<=16)                          
  69.                                                                                 {
  70.                                                                                 lcd_putc(felsosor[a]);      
  71.                                                                                 a++;                              
  72.                                                                                 }
  73.                        
  74.                         lcd_putc("\n");
  75.                                                                         a=0;                                      
  76.                                                                         while(a<=16)                          
  77.                                                                                 {
  78.                                                                                 lcd_putc(alsosor[a]);              
  79.                                                                                 a++;                                  
  80.                                                                                 }
  81.                        
  82.                 delay_ms(50);
  83.  
  84.         }
  85. }
(#) p_istvan válasza p_istvan hozzászólására (») Márc 26, 2014 /
 
valami ilyet akarsz?
  1. union {
  2.     char tomb[4];
  3.     struct {
  4.         char q;
  5.         char v;
  6.         char x;
  7.         char y;
  8.     };
  9. } u_tomb;
A hozzászólás módosítva: Márc 26, 2014
(#) n_yálastrubadúr hozzászólása Márc 26, 2014 /
 
Igen azt hiszem. Köszönöm! Megírom hogy erre gondoltam e.
A hozzászólás módosítva: Márc 26, 2014
(#) Hp41C válasza KaiserA hozzászólására (») Márc 26, 2014 /
 
Öröm és boldogság. Nálad 22.9375 °C van!
Igen. Ott van az adatlap 5-1 példájában.
A hozzászólás módosítva: Márc 26, 2014
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Márc 26, 2014 /
 
  1. #define kell szabad
  2. // Nem kell létrehozni, csak használni.... Ki kellene próbálni...

Ha ezt a két sort a forrásba teszed, a preprocesszor már a következő sort adja a C fordítónak
  1. // Nem szabad létrehozni, csak használni.... Ki szabadene próbálni..
.
A hozzászólás módosítva: Márc 26, 2014
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Márc 26, 2014 /
 
Sikerült végre egy használható tömb-öt létrehozni. Túl egyszerű volt hogy sikerüljön.
  1. unsigned char table[50];
Ami nagyon jó. de hogy lehet az elemeinek kezdőértéket adni. mert ez alatti soran írom , hogy :
  1. table[0] =0;
Akkor ez így nem jó, de ha programban adok neki értéket valahol az úgy már azt az értéket adja..
A hozzászólás módosítva: Márc 26, 2014
(#) icserny válasza n_yálastrubadúr hozzászólására (») Márc 26, 2014 /
 
Idézet:
„hogy lehet az elemeinek kezdőértéket adni?”

Ebben a hozzászólásban még tudtad.
(#) dkarcsi73 hozzászólása Márc 27, 2014 /
 
Sziasztok,
Azt szeretném kérdezni, hogy:
Ha a program elején létrehozok két változót ami legyen mondjuk 'a' és 'b' és ezeknek kezdő értékként nullát adok majd programon belül többször hozzáadok 1-et hol az egyikhez hol a másikhoz a jelenség a következő: Hiába adom meg a progi elején hogy 'A=0 ill. b=0' a számolás mindig 255-től kezdődik és csak az első hozzáadás után lesz nulla. Viszont amikor a programon belül kell ismét felvenni a kezdő nulla értéket akkor tökéletesen működik. Miért marad az elején 255-ön az érték és progin belül meg jó?
Üdv
A hozzászólás módosítva: Márc 27, 2014
(#) kissi válasza dkarcsi73 hozzászólására (») Márc 27, 2014 /
 
Másold be a programrészletet, így azt sem tudjuk, milyen nyelvről beszélsz és mit csináltál konkrétan ( azaz hol szegted meg a szabályokat az elvárásoddal kapcsolatban! ) !
(#) bbalazs_ válasza dkarcsi73 hozzászólására (») Márc 27, 2014 /
 
Nyilvanvaloan nem hozza letre a nulla erteket a valtozo letrehozasakor (nem inicializal), hanem csak lefoglal ket helyet.
A programod legeslegelejen adj nekik kozvetlenul erteket, irj bele nullat.
(#) kissi válasza bbalazs_ hozzászólására (») Márc 27, 2014 /
 
Idézet:
„és ezeknek kezdő értékként nullát adok”
Ezért inkább a lokális változóval összefüggő problémára gondolok, de ez így jóslás !
A hozzászólás módosítva: Márc 27, 2014
(#) bbalazs_ válasza kissi hozzászólására (») Márc 27, 2014 /
 
A program elejen ritkan adnak meg lokalis valtozot, eppen azert lokalis.
De ne ugy adja meg, hogy a=0, hanem mov a,0 vagy clrf a
Következő: »»   503 / 1224
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