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   618 / 1210
(#) Hp41C válasza adamhollos hozzászólására (») Jan 11, 2015 /
 
A PICkit3 -ban sincs Step-Up konverter, így az USB tápnál eleve nem tud kiadni nagyobb feszültséget. Sőt ugyan azt a MOS-FET et (FDC6420) és diódát (ZHCS1000) alkalmazza, mint a PICkit2. A FET -en és a diódán eső feszültség miatt még nem tudja kiadni az 5.00V -ot sem. Próbálkozz 4.75 V -ot beállítani. Nekem bevált.
De akkor minek van a beállítási lehetőségeknél 5.00 fölötti érték?
(#) ktamas66 válasza adamhollos hozzászólására (») Jan 11, 2015 /
 
Nem is tud többet kiadni, mint ami bejön . De nem is ajánlott:
Idézet:
„The internal debugger power is limited to 30 mA. This may be of benefit for very small
applications that have the device VDD separated from the rest of the application circuit
for independent programming, but is not recommended for general usage as it imposes
more current demands from the USB power system derived from the PC.”

Amúgy egy 500mA-es biztosíték van benne.
(#) adamhollos válasza Hp41C hozzászólására (») Jan 11, 2015 /
 
Ha 4.75 V-ot állítok be, akkor csak 4.67 V jön ki
Megyek lejjebb de mindig a beállítási érték alatt marad a frszültség
(#) cross51 válasza Hp41C hozzászólására (») Jan 11, 2015 /
 
Pontosan nem tudom, hogy mit állít a pk3, de ha nem a pk3-ról hajtod a kört akkor adhatsz rá 5.5 V-ig maximum feszültséget és ahhoz igazodik a pk3 lehet, hogy PGC és PGD szintet tologatja egy picit.
A hozzászólás módosítva: Jan 11, 2015
(#) Hp41C válasza cross51 hozzászólására (») Jan 11, 2015 /
 
Köszönöm. A FET és a dióda adatait a kapcsolási rajzáról olvastam le... Még van az USB táp útjában egy alacsony maradékfeszültségű PNP tranzisztor és egy biztosíték.
Idézet:
„PICkit 3 is trying to supply 5.500000 volts”

Szerintem a PICkit3 kívánná ellátni az áramkört tápfeszültséggel.
Most megmértem: Beállítva 4.75V, terhelés egy dsPIC33EV256GM102, feszültség a BlankCheck alatt megmérve 4.72V. Nem panaszkodik. 5.0V beállításra panaszkodik.
A hozzászólás módosítva: Jan 11, 2015
(#) adamhollos válasza Hp41C hozzászólására (») Jan 11, 2015 /
 
Méricskéltem egy kicsit, és kiderült, hogy az USB feszültsége bizony elég rendesen esik már 100 mA terheléstől is. 900 mA-en már csak 4.5 V
A hozzászólás módosítva: Jan 11, 2015
(#) Hp41C válasza adamhollos hozzászólására (») Jan 12, 2015 /
 
Próbáld meg másik kábellel, másik portról. Volt USB-HUB a lancban? Esetleg külső táplálású HUB segíthet.
(#) don_peter hozzászólása Jan 12, 2015 /
 
Srácok a segítségeteket kérném egy számomra érdekes és egyben bosszantó probléma megoldásában.
P18F24K20-as PIC el szeretnék egy adatot SPI-n fogadni, de az adat nem a megszokott módon érkezik, hanem az MSb, LSb fordítva jön.
C18-ban dolgozom, és MPLAB a környezet.
Van rá mód, hogy beállításokkal ezt a 2 adatot felcserélve kapjam meg?
Ezt megtaláltam az adatlapban: "SSPSR - léptetőregiszterek (közvetlenül nem hozzáférhető)"
Előre is köszi..
(#) Hp41C válasza don_peter hozzászólására (») Jan 12, 2015 /
 
Egy jó kis bitforgató rutinnal: Bővebben: Link
(#) don_peter válasza don_peter hozzászólására (») Jan 12, 2015 /
 
Mennyiben nincs rá lehetőség, úgy egy olyan algoritmust kérnék tőletek amely egy 8bit-es vagy is 1 byte-ot fordít meg. A lényeg, hogy a lehető legkevesebb erőforrást igényeljen a bitművelet.
Egy olyan rutin kellene ami nagyon gyorsan és pontosan illetve rugalmasan dolgozik mert nagyon sok különböző adatot kell felcserélni..
Persze a legjobb lenne, ha regiszterből megoldható lenne a felcserélés, bár ezt ahogy az adatlapot nézem nem fog menni.
(Azért nem én álltam neki megírni a rutint, mert, itt kevés az, hogy jól működik, itt sokat számít, hogy a lehető leggyorsabb és legkevesebb erőforrást igényelve cserélje fel a bitsorozatot.)
Előre is köszi... (egyébként egy makró vagy struktúra is jó lehet, ha az gyorsabb)

Hp41C: köszi, gyors voltál
Ugyan ezt C18-ra?
A hozzászólás módosítva: Jan 12, 2015
(#) don_peter válasza don_peter hozzászólására (») Jan 12, 2015 /
 
Lookup table jó megoldás lehet erre a problémára? (figyelembe véve a mikrokontrollert)
Bővebben: Link
(#) Hp41C válasza don_peter hozzászólására (») Jan 12, 2015 / 1
 
Érdemes átkacsintani az AVR világba:
  1. // Reverses the order of bits in a byte.
  2. // I.e. MSB is swapped with LSB, etc.
  3. unsigned char Bit_Reverse( unsigned char x )
  4. {
  5.     x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
  6.     x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
  7.     x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
  8.     return x;    
  9. }

Bár én átírtam _asm .. _endasm közé néhány assembly sorba, sokkal rövidebb lett....
Főleg az utolsó sor: swapf...
A hozzászólás módosítva: Jan 12, 2015
(#) don_peter válasza Hp41C hozzászólására (») Jan 12, 2015 /
 
Véleményed szerint melyik gyorsabb és jobb mikrokontrollerre ez amit írtál vagy a táblázatos módszer? (egyébként pont arrafelé kacsingatok (AVR), de csak ötletelés gyanánt..)
A hozzászólás módosítva: Jan 12, 2015
(#) csiberaptor hozzászólása Jan 12, 2015 /
 
Hogyha a pickit2-ben állítom a Vdd-t, de multiméterrel mérve nem változik a fesz, akkor olyan klónom van, ami fix Vdd-s? Máshol nem látom, hogy lehetne állítani. Mire leírtam tulajdonképpen teljesen biztossá váltam ebben...
(#) Hp41C válasza don_peter hozzászólására (») Jan 12, 2015 / 1
 
Táblázatos gyors, de terjengős, a léptetős lassú, de rövid. A többi a kettő közötti mind sebességben, mind hosszra. Sokat számít, hogyan érhetők el a változók. C18 függvény paramétereit elérni elég körülményes, a címzéshez a WREG kell, azt nem lehet használni az adat tárolására.
(#) don_peter válasza Hp41C hozzászólására (») Jan 12, 2015 /
 
No igen....
Most azt hiszem a sebesség a döntő mivel sok a parancs amit át kell forgatni SPI küldés előtt.
Köszi a segítséget.
(#) adamhollos hozzászólása Jan 12, 2015 /
 
Épp UART kommunikációt szeretnék összehozni pic18f25k80-al, CX8-ban programozva.
Meg tudja valaki mondani, hogy amíg ez működök:
  1. char BufferIN[20], R;
  2. ...
  3. R = RCREG1;
  4. BufferIN[1] = R;
  5. R = BufferIN[1];
  6. TXREG1 = R;


Ez miért nem (a fleg bitek nem törlődnek ki pl.)
  1. char BufferIN[20];
  2. ...
  3. BufferIN[1] = RCREG1;
  4. TXREG1 = BufferIN[1];
A hozzászólás módosítva: Jan 13, 2015
(#) usane hozzászólása Jan 13, 2015 /
 
Hello!

Hardveres PWM-el szeretnék RGB ledeket vezérelni. A baj az, hogy a PIC amire a project épül nem támogatja ezt (18f14k50). Szoftvereset meg nem szeretnék, mert van mivel foglalkoznia a vezérlőnek, nem lenne jó, ha villogna közben a LED. Vagy ha nem is villogna akkor meg el szeretném altatni a holt időkben. Tudtok valami soros RGB vezérlő csipet, vagy be kell építenem még egy PIC12-est ami csak ezzel foglalkozik?
(#) vilmosd válasza usane hozzászólására (») Jan 13, 2015 /
 
Ezen az oldalon talalsz 1-2 projektet RGB LED vezerlesere. Igaz 12F683-12F675 tipusokra.
(#) usane válasza vilmosd hozzászólására (») Jan 13, 2015 /
 
Köszönöm a linket.Ezeket ismerem. Már rájöttem, hogy nem úszom meg egy külön vezérlő PIC nélkül, de azért letesztelem szoftveresen is, hátha nem lesz probléma. Viszont ha már külön vezérlő PIC akkor nem 675 lesz hanem 12f1572, több szempontból előnyösebb, és még olcsóbb is(igaz nem számottevően, de ha több darab kell akkor már más). Még megnézem az erratáját, de ha nincs benne nagy gebasz akkor ez lesz.
(#) Hp41C válasza usane hozzászólására (») Jan 13, 2015 /
 
Hány függtelenül állítandó RGB led-et kell vezérelni?
- WS2812B LED -ekből felfűzött lánc.
- SPI vagy I2C led meghajtó: Bővebben: Link
- 12F1501, 16F150x 4 beépített HW PWM
(#) usane válasza Hp41C hozzászólására (») Jan 13, 2015 /
 
Köszönöm a hozzászólást. Egyetlen LED sáv van. Tehát 3 PWM kell csak. A WS2812B már megvan, csak nagyokos kolléga kitalálta csináljuk meg sima RGB LEDekkel is. Na mondom jókor, mikor már majdnem legyártottam a tesztpéldányt. Az SPI és I2C meghajtók jónak tűnnek(ezeket nem is láttam korábban), de kb 20-25 led lesz és ezek a max 150mA-es kimenetükkel kevesek. Ha meg már úgyis kell meghajtó FET akkor olcsóbb egy PIC12. És mivel a 12F1501-ben nincs kommunikációs modul, ezért választottam a 1572-t.
(#) spgabor hozzászólása Jan 13, 2015 /
 
Sziasztok!

Ismét kérdéssel fordulok hozzátok. Megcsináltam don_peter segítségével az időzítőmet. Kicsit az óta ült a dolog, mert időm sem volt folytatni, valamint el is akadtam a kijelző vezérléssel. Az időt és a percet hétszegmenses kijelzőkkel szeretném megoldani, mert van belőlük itthon jó sok. Mint korábban írtam, hogy találtam egy régi, talán pénztárgép kijelzőt (4x7 szegmenses) egy sda2131 led vezérlővel meghajtva. Erről csatoltam képeket is. Bár mint utóbb kiderült, lehet nem lesz jó, mert az sda2131, csak 2x7 szegmenses kijelzőt tud meghajtani. Így nem is értem, ennek a panelnak az értelmét egyenlőre.
A sok szócséplés után amiért írtam az az, hogy kerestem példaprogramokat C-ben, de sehol nem találtam olyat, ami nem, hogy sda2131-hez, hanem bármilyen led meghajtó áramkörhöz készült volna. Ebben tudtok segíteni, hogy kellene nekiállnom egy ilyet elkészíteni?
Youtube-on és pár talán spanyol oldalon van fent pic16f628A és sda2131-el megvalósított számláló, de csak a működéséről találtam leírást.

Üdv:
spgabor
(#) cross51 válasza adamhollos hozzászólására (») Jan 13, 2015 /
 
Hiányzik az UART beállítás a programodból nem tudom, hogy meg van-e, de én gyorsan egy kis progit összedobtam ami megvár egy beérkező karaktert 9600-as BAUD-on és visszaküldi azt.
  1. void main(void)
  2. {
  3.     unsigned char BufferIN[20];
  4.  
  5.     RCSTA1 = 0x90;
  6.     TXSTA1 = 0x20;
  7.     SPBRG = 12;
  8.    
  9.     while(!PIR1bits.RC1IF);
  10.     BufferIN[1]= RCREG1;
  11.     TXREG1 = BufferIN[1];
  12.     while(!PIR1bits.TX1IF);
  13.     while(1);
  14. }

jelen esetben a TXIF figyelés elhagyható de, ha több bájt küldéséről van szó akkor nem. Azzal figyeljük, hogy az adatküldés végbe ment-e. Az RCIF azért kell mert addig várakozik a program amíg nem jön be egy bájt UART-on miután be jött utána kiolvasható az RCREG és beírható a TXREG-be a BRG értéke 8MHz-en BRGH = 0,BRG16 = 0 van megadva.
A hozzászólás módosítva: Jan 13, 2015
(#) don_peter válasza spgabor hozzászólására (») Jan 13, 2015 /
 
Shift regiszterrel meg tudod oldani a dolgot.
Én magam is nézegettem már, de eddig még nem volt rá szükségem.
Szimulátorban bele kezdtem, de végül nem írtam meg fullra a programot.
74HC595-el írom a 7 szegmenses kijelzőt, azt hiszem pont 4-et mert órát akartam készíteni

Vagy közvetlen is meghajthatod a szegmenseket: Bővebben: Link (a kapcsoláson közös anódos van)
A hozzászólás módosítva: Jan 13, 2015
(#) Hp41C válasza spgabor hozzászólására (») Jan 13, 2015 /
 
A középső képen T1 és T2 mit csinál? Men a tápfeszültséget kapcsolja két - két kijelzőre?
(#) usane válasza spgabor hozzászólására (») Jan 13, 2015 /
 
Mint Hp41C kolléga írja, gyanítom a 4 kijelzőt multiplexelve kezelné az sda2131.(2-2)
De ha neked nem jó, akkor szedd le róla, és hajtsd meg úgy mint Don_Peter fórumtárs írta.Vagy amivel én, de az sokkal drágább.(MIC5841)
Ha meg nem akarod szétszedni akkor elég korrekt adatlapja van a meghajtónak megírható belőle egy szoftver.
(#) icserny válasza usane hozzászólására (») Jan 13, 2015 /
 
Sima RGB LED vezérléséhez a WS2811 IC is használható.
(#) Kapagerenda hozzászólása Jan 13, 2015 /
 
Sziasztok,
Az alábbi program egy 7 szegmenses kijelző vezérléséhez van, 0 -tól elszámol 99 ig. Szeretném megérteni a program működését, de nem teljesen világos minden sor. A do és a benne levő for ciklus valamint a mask. c file amiben a switch van nem világos. Ha valaki elmagyarázná ezen részeit a programnak mi történik megköszönném.

  1. /*Header******************************************************/
  2.    
  3. unsigned short mask(unsigned short num);
  4. unsigned short digit_no, digit10, digit1, digit, i;
  5.  
  6. void interrupt() {
  7.     if (digit_no==0) {
  8.         PORTA = 0;                 // Turn off both displays
  9.         PORTD = digit1;            // Set mask for displaying ones on PORTD
  10.         PORTA = 1;                 // Turn on display for ones (LSD)
  11.         digit_no = 1;
  12.     } else {
  13.         PORTA = 0;                 // Turn off both displays
  14.         PORTD = digit10;           // Set mask for displaying tens on PORTD
  15.         PORTA = 2;                 // Turn on display for tens (MSD)
  16.         digit_no = 0;
  17.     }
  18.     TMR0 = 0;                      // Reset counter TMRO
  19.     INTCON = 0x20;                 // Bit T0IF=0, T0IE=1
  20. }
  21.  
  22. void main() {
  23.     OPTION_REG = 0x80;             // Set timer TMR0
  24.     TMR0 = 0;
  25.     INTCON = 0xA0;                 // Disable interrupt PEIE,INTE,RBIE,T0IE
  26.     PORTA = 0;                     // Turn off both displays
  27.     TRISA = 0;                     // All port A pins are configured as outputs
  28.     PORTD = 0;                     // Turn off all display segments
  29.     TRISD = 0;                     // All port D pins are configured as outputs
  30.    
  31.     do {
  32.         for (i = 0; i<=99; i++) {        // Count from 0 to 99
  33.             digit = i % 10u;
  34.             digit1 = mask(digit);          // Prepare mask for displaying ones
  35.             digit = (char)(i / 10u) % 10u;
  36.             digit10 = mask(digit);       // Prepare mask for displaying tens
  37.             Delay_ms(1000);
  38.         }
  39.     } while (1);                   // Endless loop
  40. }
  41.  
  42. mask.c file:
  43.  
  44. /*Header******************************************************/
  45. unsigned short mask(unsigned short num) {
  46. switch (num) {
  47. case 0 : return 0x3F;
  48. case 1 : return 0x06;
  49. case 2 : return 0x5B;
  50. case 3 : return 0x4F;
  51. case 4 : return 0x66;
  52. case 5 : return 0x6D;
  53. case 6 : return 0x7D;
  54. case 7 : return 0x07;
  55. case 8 : return 0x7F;
  56. case 9 : return 0x6F;
  57. }
  58. }
(#) spgabor válasza Hp41C hozzászólására (») Jan 13, 2015 /
 
Nincs előttem a panel, de mintha ahogy írtad, az kapcsolná a két-két kijelzőt.
Igazából nekem ez tökéletesen megfelelne, csak nem tudom, hogy kellene pic-cel életre kelteni egy ilyen led driver ic-t.
Azért is örültem neki, hogy találtam otthon egy dobozban, mert ez lényegében csak tápot és vezérlést kér és működik. Viszont a vezérlés részével egyáltalán nem vagyok tisztában.

usane: Néztem az adatlapját, viszont belekeveredtem a CLK, data és enable lábakba, így sajnos még azt sem tudom, hogy kellene nekiállnom. Megpróbálok még utánaolvasgatni ennek.
Következő: »»   618 / 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