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   1222 / 1222
(#) protorg válasza István_2 hozzászólására (») Dec 29, 2025 /
 
NA most kattintottam rá a képre amire bele írtál. ÉS én a csatolt rajz szerint forrasztottam!!!!!

16f887.jpg
    
(#) protorg válasza protorg hozzászólására (») Dec 29, 2025 /
 
ISTVÁN 2 igen az lesz most néztem az ic-ém TQFN és én a KKKKK QFN rajz szerint csináltam és ott a kvartz ahogy irtad másholvan.
(#) tki válasza protorg hozzászólására (») Dec 29, 2025 /
 
"most egy pengével műtöm"

Az ilyesmit nehéz külön folyasztószer nélkül megúszni, akkor az olvadt ón szétválik és magától csusszan az alkatrészlábakra és vezetősávokra, ahol a legtöbb hasznot hajtja. Persze gyakran elég szörnyen néz ki az ilyen szerek maradéka a panelon, amit nem árt letakarítani, de az már apróság.

"Ami szögletes, azt gurítani, ami kerek, azt vinni nem célszerű, de baromira katonás dolog."
A hozzászólás módosítva: Dec 29, 2025
(#) protorg válasza István_2 hozzászólására (») Dec 29, 2025 / 3
 
MŰKÖDIK.(fut pali79 kis progija)
Szeretném megköszönni a segítségedet TE világítottál rá az alapvető hibára (amit az elején észre se vettem mikor küldted).TQFP....QFN
A többi hozzászólónak is megemelem a kalapom hogy ilyen kitartóan foglalkoztatok evvel a ... igazából ezt a laza néhány napi kínlódást CSAK egy adatlapi figyelmetlenségem okozta .
Kellemes ÚJ ÉVET NEKTEK.
(#) István_2 válasza protorg hozzászólására (») Dec 29, 2025 / 1
 
Na ennek örülök , hogy működik ! Sziv SN

Én a QFN-t nem is szoktam nézni , mert olyat nem használok.
De így megvan mi volt az elkötés alapja.

Pali79 kis programja is segített a többi segítő mellett , hogy legyen egy működő példány , amíg semmi se működik addig a legrosszabb.

Neked is boldog ÚJ ÉVET , ha addig semmilyen problémád nem adódna
(#) Izeg. válasza István_2 hozzászólására (») Szo, 15:00 /
 
A hozzászólás módosítva: Szo, 15:02
(#) Izeg. válasza Izeg. hozzászólására (») Szo, 15:33 /
 
(#) tki válasza Izeg. hozzászólására (») Szo, 15:48 /
 
Egy hozzászólás egy vagy több hosszabb link miatt szokott üresen megjelenni a többi szövegtől függetlenül, de csak tippelek, mivel próbálkozol. : -)

A link beszúrásához használd a LINK gombot középtájt és ne csak bemásold azt, akkor jó lesz. Ha nem ez volt a baj, akkor bocs.
(#) Moderátor hozzászólása Izeg. hozzászólására (») Szo, 16:34
 
Dolgozunk a hiba keresésén, addig türelmedet kérjük!
(#) Bakman válasza tki hozzászólására (») Szo, 17:45 /
 
Az uni on szót (szóköz nélkül) sem szeretni a fórummotor.
(#) tki válasza Bakman hozzászólására (») Szo, 18:47 /
 
Hm, azzal még nem találkoztam. Tartott valaki a szakszervezetektől?
(#) Bakman válasza tki hozzászólására (») Szo, 19:14 /
 
Lásd melléklet, merthogy leírni nem lehet.
(#) tki válasza Bakman hozzászólására (») Szo, 20:57 /
 
Csak vicceltem, mert így még nem találkoztam vele, de a C nyelv "u n i o n" adattípusának nincs köze a webes technológiákhoz. Viszont vannak olyan biztonsági eszközök (pl. a modsecurity az Apache-hoz), amik a webszerverekhez érkező kérésekben és az arra adandó válaszaiban is sima mintafelismeréssel próbálják a veszélyes szituációkat megfogni. Az SQL felől fújhat a szél, mert a U N I O N kulcsszóval támadásokat is lehet kivitelezni (erre rákerestem), és valamilyen paranoid beállítás, esetleg hiba miatt a webszerverben már a szó előfordulásától sem fut végig a folyamat. Az én honlapomat kiszolgáló webszerveremen is előfordul, hogy valami olyan is Access denied hibát eredményez, ami amúgy egy ártatlan kérés vagy válasz. A logokban általában nyoma marad, lehet elemezni.
A hozzászólás módosítva: Szo, 21:00
(#) Izeg. válasza Bakman hozzászólására (») Vas, 16:53 /
 
Megpróbálom nem használnj a tiltott szót

Na igen, szóval az a problémám, hogy megpróbáltam UNI ON-ba rakni egy float-ot és egy int32-t.
Adtam egy értéket a floatnak binárisan pl: DATA b00001111 00110011 01010101 11110000.
De amit kiszedek in32-ként, azt valamiért nem ezt a bitsorrendet hozza ki.. az lenne a célom, hogy az int32 ben meg tudjam nézni a float bitjeit (nem az értéke érdekes, hanem a bitek.

Így néz ki ezen részlet (ccs c)

Uni-on{
float input;
int32 output;
} konvert;

Aztán az alábbi parancsokkal mahinálok:
konvert.input = DATA
TOSEND = konvert.output

Köszönöm ha tudtok segíteni!

Es köszönöm a mod-ot!
A hozzászólás módosítva: Vas, 16:53
(#) Bakman válasza Izeg. hozzászólására (») Vas, 17:44 /
 
Így:

typedef uni-on{
float input;
char output[4];
}number;

Elvileg.
(#) tki válasza Izeg. hozzászólására (») Vas, 17:57 /
 
Szóval ez volt a hiba oka. : -)
***
Mit szólnál egy ilyenhez? Sima char-ral is működik:
A hozzászólás módosítva: Vas, 18:02
(#) Izeg. válasza Bakman hozzászólására (») Vas, 21:22 /
 
Ez sajnos nem segített. :/
(#) Izeg. válasza tki hozzászólására (») Vas, 21:57 /
 
Ezt pediglen nem sikerül értelmezzem

a printf utáni funkciókat nem sikerül dekódoljam, sem a CCS C könyve alapján, sem google segítségével :/. Erre esetleg egy kis magyarázatot kérheetek, mert ha ezt próbálom bemásolni, akkor hibákba fulladok.
(#) tki válasza Izeg. hozzászólására (») Vas, 22:13 /
 
A u n i o n-nal is működhet, csak alternatívát akartam adni. Ki kellene próbálni, de még nem világos, mi nálad a fő probléma.

Amit én csináltam, az úgy működik, hogy készítek egy float változót, ami elfoglal egy memóriacímen négy bájtot, ahogy te is próbáltad, aztán ezt a memóriacímet bájtsorozatként (tömbként) értelmezem és egyesével kiíratom a konzolra a bájtokat - erre szolgál a for ciklus. Méghozzá hexában, mert azt könnyű olvasni, de akár binárisan is lehetne.

Mutatók, printf használata, hosszmeghatározás, egyebek - ha ez még bonyolult neked, inkább ne foglalkozz azzal, amit írtam, amúgy is általános módszer akart lenni, nem lépésenkénti, PIC-es környezetre írt megoldás.
(#) pipi válasza Izeg. hozzászólására (») Vas, 23:18 /
 
Hali! Tekintve hogy a float és int számábrázolás teljesen más formátumú, így a tartalmazó bájtok egyesével mind a két esetben tök mást jelentenek, vagyis nincs értelme az u n i onnak.Tárolhatod vagy így vagy úg, és ha a másik kell akkor kényszerkonverzió. De vigyázz, floatban nem minden érték adható meg pontosan, így például összehasonlitáskor adhat fals értéket....
Közelítés : A float számok rögzített számú bitet használnak (előjel, kitevő, mantissza), így a valós számokat közelítésként, nem pedig pontos értékként ábrázolják.Pontosságvesztés : Emiatt néhány egyszerű tizedesjegy (például a 0,1) nem ábrázolható tökéletesen, ami apró hibákhoz vezet (pl.\(0.9999999999999999\)). A float műveletek egyébként sokkal erőforrás igényesebbek, több flash-t használnak a műveletvégzéshez, lassúbbak... Szóval jótanács, én ha tudom messze kerülöm a használatát. Ha tizedes kell, akkor használom az érték 10-100szorosát, ezzel végzem a műveleteket, kijelzéskor meg figyelek, hogy hová teszek tizedespontot.
A hozzászólás módosítva: Vas, 23:19
(#) Izeg. válasza tki hozzászólására (») Vas, 23:28 /
 
Köszönöm,
nem, hálistennek ezek már megvannak, a prinf fromázások is, csak ez most nem áltl össze a szemem előtt így

bemásolom ide a kódom, hátha valaki észreveszi a hibát.
A beírt float-ot szeretném kiléptetni egy led-re, egyelőre.

  1. #include <12F1572.h>
  2. #device ADC=10    
  3. #fuses NOWDT,NOMCLR,NOPROTECT,NOLVP,INTRC_IO
  4. #use delay (internal=8MHz)
  5.  
  6. int32 KULD;
  7. float DATA = 0b00001111000011110011001100110011;
  8.  
  9. int8 i = 0;
  10. int1 SEND = 0;
  11.  
  12. u n i o n {
  13. int32 kijovet;
  14. float bevitel;
  15. } konvert;
  16.  
  17.  
  18.  
  19. #INT_RA
  20.  
  21. VOID RA_isr (void)
  22. {
  23. disable_interrupts(INT_IOC_A4);
  24. clear_interrupt(INT_IOC_A4);
  25. SEND = 1;
  26. }
  27. void main()
  28. {
  29. setup_oscillator( OSC_8MHZ );
  30.  
  31. CLEAR_INTERRUPT(INT_IOC_A4);      
  32. ENABLE_INTERRUPTS (INT_IOC_A4);    
  33. ENABLE_INTERRUPTS (GLOBAL);            
  34.  
  35. while(TRUE)
  36. {
  37. if (SEND == 1)                    
  38. {
  39. konvert.bevitel = DATA;
  40. KULD = konvert.kijovet;
  41.  
  42. i=0;
  43. while(!input(PIN_A4));                  
  44.    
  45. for (i=0;i<32;i++)                
  46.   {
  47.   if (bit_test(KULD,i))          
  48.       {
  49.       output_low(PIN_A2);
  50.       delay_ms(1000);
  51.       output_high(PIN_A2);
  52.       delay_ms(2000);
  53.       }
  54.   if (!bit_test(KULD,i))            
  55.       {
  56.       output_low(PIN_A2);
  57.       delay_ms(1000);
  58.       output_high(PIN_A2);
  59.       delay_ms(100);
  60.       }
  61.  
  62.   }
  63. output_low(PIN_A2);
  64.  
  65. output_float(PIN_A4);
  66.  
  67. SEND = 0;
  68.  
  69. enable_interrupts(INT_IOC_A4);
  70.  
  71. }
  72.  
  73.  
  74. }
  75. }
A hozzászólás módosítva: Vas, 23:30
(#) Izeg. válasza pipi hozzászólására (») Vas, 23:33 /
 
Köszönöm, ezek megvannak, már csak azt nem értem ha a memóriájának valahol 4 bájtjában tárolja a float-ot, akkor annak a 4 bájtnak miért nem tudom kiolvasni a 0-1-0... értékeit...

(Alapvetően azt szerettem volna elérni, hogy anélkül, hogy egyik és másik eszköz tudja mit kellene csináljon, ki tudja jelezni az A PIC által küldött számot a B PIC-hez kapcsolt 7 szegmenses (mondjuk). Ehhez csak egy float kellene neki, meg egy ,,felbontás" jelzés, de azt el is tudom küldeni. Tudom, hogy vannak erre kommunikációs interfészek stb, de most már baromira csiklandozza az ingerközpontomat, miért nem tudom a fizikai biteket kiolvasni.)
A hozzászólás módosítva: Vas, 23:37
(#) pipi válasza Izeg. hozzászólására (») Vas, 23:37 /
 
Hali!
Értsd meg, a float ban tárolt bájtoknak semmi köze a tárolt szám bináris bitenkénti tartalmához, nincs értleme az u n i onnak float és int között !!!!
float
(#) Izeg. válasza pipi hozzászólására (») Vas, 23:43 /
 
MEgpróbálok még egyszer írni, hátha most megitn nem futok ugyanabba a szóhazsnálatba

Tehát a CCS a saját kódjaiban is használ IEE és PIC float közötti átalakításra bájtonkénti (bitenkénti műveletet).

ennek egy részlete:

  1. float32 f_PICtoIEEE(unsigned int32 pic)
  2. {
  3.    uni on{
  4.       float32 f;
  5.       unsigned int8 b[4];
  6.    } result;
  7.    
  8.    un ion{
  9.       unsigned int32 d;
  10.       unsigned int8 b[4];
  11.    } data;
  12.    
  13.    data.d = pic;
  14.    
  15.    result.b[0] = data.b[3];
  16.    result.b[1] = data.b[2];
  17.    result.b[2] = data.b[1];
  18.    
  19.    if(bit_test(data.d,0))
  20.       bit_set(result.b[2],7);
  21.    else
  22.       bit_clear(result.b[2],7);
  23.    
  24.    shift_right(&data.b[0],1,bit_test(data.b[1],7));
  25.    result.b[3] = data.b[0];
  26.    
  27.    return(result.f);
  28. }
(#) pipi válasza Izeg. hozzászólására (») Vas, 23:52 /
 
Engedd el az u n i ont! használj külön float, és külön int változót, ha az érték mégis a másik formában kell akkor tedd át egyik váltózóból a másikba. Nézd már meg a float fizikai számábrázolását a 4 bájt melyikében mit tárol, és megérted. Ez azt jelenti ha van négy bájtod és belenézel int-ként akkor tök más értéket látsz, mintha float-ként tekintesz rá.

float.jpg
    
(#) moltam válasza Izeg. hozzászólására (») Vas, 23:55 /
 
Itt mindenhol uint van nem sima int. A sima intnél bezavar a kettes komplemens.
(#) tki válasza Izeg. hozzászólására (») 0:53 /
 
"Alapvetően azt szerettem volna elérni, hogy anélkül, hogy egyik és másik eszköz tudja mit kellene csináljon, ki tudja jelezni az A PIC által küldött számot a B PIC-hez kapcsolt 7 szegmenses (mondjuk). Ehhez csak egy float kellene neki, meg egy ,,felbontás" jelzés, de azt el is tudom küldeni."

1. Lebegőpontos számokat valóban csak akkor érdemes használni, ha muszáj. Pl. ha 1731,23-at akarsz tárolni vagy átküldeni, szorozd meg a számot százzal, a visszaalakítás sem nehéz kijelzés előtt - a float-os műveleteknél gyorsabb lesz. Arra kell figyelni, hogy az adott változótípusba belefér-e minden szám, ami előfordulhat a programodban (mért értékként?), egy int32 általában elég nagy az ilyesmihez, de nem akarok beleszólni.

2. A u n i o n alapvetően használható át- és visszaalakításra, ha szokatlan megoldás is (inkább pointereket érdemes használni, ahogy mutattam, ill. char tömböket gyakrabban használnak bitek manipulációjára, mint integer változókat), csak rosszul teszteled: a float-ban levő szám úgy fog előállni, hogy a DATA a bináris szám értékét fogja megkapni (mintha odaírnád, hogy pl. "= 14583"), de egészen más biteket tárol majd, még hasonlítani sem fognak.

3. Ha viszont ezeket a biteket átküldöd egy másik PIC-nek és az visszaalakítja a u n i o n-os küldő megoldás tükörképével, az jó gondolat, akkor tényleg működhet a dolog, az is csak pár sor lesz, ahogy a bemásolt kódod. Csak az egészet próbáld ki egyben. Nincs olyan, hogy egy valamilyen típusú változónak "nem lehet kiolvasni" a bitjeit vagy valami miatt rosszul kezeli a nyelv - nyugodtan lehet hinni az eredményeknek.

Igazából pont így szoktak működni egyes kommunikációt végrehajtó függvények, mert valahogy meg kell ezt oldani, hogy például megkapják egy már feltöltött struktúrának a címét és hosszát és elkezdik a biteket vakon kiolvasni a memóriából, átküldeni egy vonalon, ott pedig a fogadó oldal egy függvénye visszatölti ugyanolyan sorrendben a biteket oda, ahova a hívója memóriát foglalt egy ugyanolyan típusú struktúrának, és akkor elérhetővé válnak ugyanazok az adatok. Az, hogy csak egy int32 változót használsz és nem egy egész struktúrát, annak nincs jelentősége.

Tudom, hogy az érne többet, ha átnézném a kódodat, de most nincs rá energiám, bocsánat. Amúgy is csak az egyik fele van meg, mert úgy gondolod, hogy nem működik, pedig... : -)
A hozzászólás módosítva: 1:00
(#) Izeg. válasza tki hozzászólására (») 9:07 /
 
Köszönöm a konstruktív segítséget!

Igen, alapvetően ezt meg lehet oldani másképpen is. Az ötlet csak onnan jött, hogy univerzális legyen, hogy a ,,dekódoló,, oldalnak tényleg ne kelljen tudnia hogy mennyivel kell visszaossza a számot stb stb.

Igen, egyre inkább az az érzésem, hogy azzal, ha beírom binárisan a float-ot, azzal nem a bitjeit állítom be, hanem az értékét. Szerintem itt a hiba, ma ezzel haladok tovább, és megpróbálom az általad használt verziót.

Köszönöm!
Következő: »»   1222 / 1222
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