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   955 / 1210
(#) slimcolt válasza Bell hozzászólására (») Máj 31, 2017 /
 
Ebben tudnátok segíteni?
Hogy állítsam be az időzítőt és számoljam a megszakításokat?
(#) slimcolt hozzászólása Máj 31, 2017 /
 
Bemásolom az egész programot.
A problémám az, hogyan oldjam meg, hogy ha hosszan nyomom a gombot, akkor egyszerre világítson(pwm vezérléssel) a két LED amik a CCP1 és CCP2 kimenetein vannak? A LATC értékét is módosítanám ilyenkor, lényegében úgy, mintha egyszerre futna PORT1 és PORT2 függvény.
Jelenleg szépen működik, tudom váltogatni pont ahogy szeretném.
Tudom vannak benne hibák bőven, de ez életem 2. programja!
  1. #include <xc.h>
  2. #include "config.h"
  3. #define _XTAL_FREQ 500000
  4.  
  5. volatile unsigned char BP = 1;
  6.  
  7. void interrupt IOC()
  8. {
  9.        
  10.     if (IOCAFbits.IOCAF4 || IOCAFbits.IOCAF5)
  11.     {
  12.         if (!PORTAbits.RA4 && !PORTAbits.RA5)
  13.         {
  14.             RESET();
  15.         }
  16.     }
  17.     if (IOCAFbits.IOCAF2)
  18.     {
  19.        
  20.         if (BP == 1)
  21.         {
  22.             BP = 0;
  23.         }
  24.         else
  25.         {
  26.             BP = 1;
  27.         }
  28.        
  29.     }
  30.    
  31.     IOCAF = 0;
  32. }
  33.  
  34. void PORT1 (void)
  35. {
  36.     while (BP == 0)        
  37.     {
  38.         unsigned char DUTY;
  39.         LATC = 0b00010010;
  40.         PR2 = 0b01111100;
  41.         T2CON = 0b00000100;
  42.         CCP1CON = 0b00001101;
  43.         CCP2CON = 0;
  44.            
  45.         while (BP == 0)
  46.         {
  47.             for(DUTY = 120 ; DUTY > 0 ; DUTY--)
  48.             {
  49.                 if (BP == 1)
  50.                 {
  51.                     break;
  52.                 }
  53.                 CCPR1L = DUTY ;
  54.                 __delay_ms(16) ;
  55.             }
  56.             for(DUTY = 0 ; DUTY < 120 ; DUTY++)
  57.             {
  58.                 if (BP == 1)
  59.                 {
  60.                     break;
  61.                 }
  62.             CCPR1L = DUTY ;
  63.             __delay_ms(5) ;
  64.             }
  65.         }
  66.     }
  67. }
  68.  
  69. void PORT2 (void)
  70. {
  71.     while (BP == 1)                      
  72.     {
  73.         unsigned char DUTY2;
  74.         LATC = 0b00010100;
  75.         PR2 = 0b01111100;
  76.         T2CON = 0b00000100;
  77.         CCP1CON = 0;
  78.         CCP2CON = 0b00001101;
  79.        
  80.         while (BP == 1)
  81.         {
  82.             for(DUTY2 = 120 ; DUTY2 > 0 ; DUTY2--)
  83.             {
  84.                 if (BP == 0)
  85.                 {
  86.                     break;
  87.                 }
  88.                 CCPR2L = DUTY2 ;
  89.                 __delay_ms(16) ;
  90.             }
  91.             for(DUTY2 = 0 ; DUTY2 < 120 ; DUTY2++)
  92.             {
  93.                 if (BP == 0)
  94.                 {
  95.                     break;
  96.                 }
  97.             CCPR2L = DUTY2 ;
  98.             __delay_ms(5) ;
  99.             }
  100.         }
  101.     }
  102. }
  103.  
  104. void RST (void)
  105. {
  106.     LATC = 0b00101110;
  107.     __delay_ms(150);
  108.     LATC = 0b00000110;
  109.     __delay_ms(150);
  110.     LATC = 0b00101110;
  111.     __delay_ms(150);
  112.     LATC = 0b00000110;
  113.     __delay_ms(150);
  114.     LATC = 0b00101110;
  115.     __delay_ms(150);
  116.     LATC = 0b00000110;
  117.     __delay_ms(150);
  118.     LATC = 0b00101110;
  119.     __delay_ms(150);
  120.     LATC = 0b00000110;
  121.     __delay_ms(150);
  122.     LATC = 0b00101110;
  123.     __delay_ms(150);
  124.     LATC = 0b00000110;
  125. }
  126.  
  127. void main(void)
  128. {
  129.     OSCCONbits.IRCF = 0b0111; // 4XPLL kikapcsolva, 500Khz belső oszcillátor kiválasztva.
  130.     TRISA = 0b00110100; // PORTA bemenetei beállítva.
  131.     LATA = 0b00000000; // PORTA kimenetei 0-ra állítva.
  132.     INLVLA = 0b00110100; // RA2-RA4-RA5-re Shmitt trigger inputok beállítva.
  133.     ANSELA = 0b00000000; // Digitális I/O engedélyezve PORTA-n.
  134.     TRISC = 0b00000000; // PORTC kimenetre állítva.
  135.     LATC = 0b00000000;
  136.     ANSELC = 0b00000000; // Digitális I/O engedélyezve PORTC-n.
  137.     IOCAP = 0b00110000; // RA4 és RA5-ön felfutó él IOC
  138.     IOCAN = 0b00110000; // RA4 és RA5-ön lefutó él IOC
  139.     INTCONbits.IOCIE = 1; // IOC engedélyezve
  140.     INTCONbits.GIE = 1; // Globális megszakítások engedélyezve.
  141.     APFCON1bits.CCP2SEL = 0; // CCP2 kimenete RC3-on.
  142.    
  143.     RST();
  144.    
  145.     while (1)
  146.     {
  147.         if (PORTAbits.RA4 && PORTAbits.RA5) // Ha RA4 ÉS RA5 = 1
  148.         {
  149.             IOCAP = 0b00000100; // RA2-n felfutó él IOC engedélyezve. RA2 a nyomógomb.
  150.             LATCbits.LATC4 = 1;
  151.                        
  152.             while (PORTAbits.RA4 || PORTAbits.RA5)
  153.             {
  154.                 PORT1();
  155.                 PORT2();
  156.             }            
  157.         }
  158.         else
  159.         {
  160.             LATC = 0b00000110;
  161.             SLEEP();
  162.         }
  163.     }
  164. }
A hozzászólás módosítva: Máj 31, 2017
(#) ktamas66 válasza slimcolt hozzászólására (») Máj 31, 2017 /
 
A programodban van egy 16ms-os várakozás, ezt ki lehet kerülni, ha az egészet megszakításba helyezed. Ha jól látom 1kHz a PWM frekvencia, így ha a TMR2-re beállítod a 16-os utóosztót pont egy 16ms-os megszakítást kapsz. Minden megszakításban növeled/csökkented a PWM értékét, a főprogram közben bármit csinálhat. Mivel ez az IT rendszeresen jön, itt mérheted a gombnyomás hosszát is.
(#) slimcolt válasza ktamas66 hozzászólására (») Máj 31, 2017 /
 
Értem. Köszönöm a tanácsod!
Megpróbálkozok vele! Bár a Timer rész még eléggé új nekem
Bele kell még jönni..
(#) kriszrap válasza kriszrap hozzászólására (») Máj 31, 2017 /
 
Sajnos még mindig nem tudom mileheta baj már mindent probáltam (
Ugyan azt megy az animáció egy idei azt minden elsötétül sé az elsö while után nem hajtvégre semmitse...(
(#) Hp41C válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
Izzítsd be a szimulátort (Debug / Start debugger), tegyél a kritikus utasításra (vagy elé) egy töréspontot, futtasd a programot a töréspontig. Amikor megáll, a változók tartalma vizsgálható, sőt átállítható. Lépésenként is lehet utasításokat végrehajtani és vizsgálni milyen értékeket ír a változókba, ill. merre megy tovább (if, while,..).
Meg kell barátkozni ezzel a lehetőséggel, sokkal hatékonyabb, mint feltenni ide a kérdést. Mi is ezt a módszert használnánk a hiba felderítésére, de csak akkor lehet, ha az egész program forrása rendelkezésre áll.
(#) don_peter válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
Debug-old ki a kritikus sorokat.
Tegyél bele egy ideiglenes feltételt, amelynél elhelyezel egy töréspontot.
(#) kriszrap hozzászólása Jún 1, 2017 /
 
Ha minden igaz ez a probléma)

Ugye ranadom generátorral generálok egy x,y változót.
Szépen generálom azt újra ha kell és amikor már 120 dbnál járunk akkor már nagyon neheze tud olyat generálni pontosan ami üres és ez nagyon hosszú idő. 123db kb 2 percig nyomtam a gombot hogy db változom váltson Ötlet??
(#) pajti2 válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
Ha igazi random számok kellenek, valami olyasmit kellene csinálnod, mint egy ellenirányban előfeszített diódáról (kvázi fehérzaj generátor) levett jelet tovább erősíteni, és azt küldeni be a/d-be.

Ha a teljes 8 bites skálára van szükséged random sorrendben, és feltétel, hogy minden számnak 1x kell szerepelnie a végig futás során, akkor neked nem véletlen számok, hanem véletlenszerűen sorbarendezett számok kellenek. Fogod a random generátort, bepakolod tömbbe a 8 bites számokat 0..255, és a kapott véletlen értékekkel pozíciókat cserélgetsz benne mondjuk 10ezerszer. Kikapcsolásig már úgy hagyod. Kb jó lesz.

Ha ugyan az kell még kezelhetőbben folyamatos hatékony változtatással működés közben, akkor sajnos még több memória kell. Logikai láncot kell felépítened az értékekből, és tudnod kell előre-hátra mozogni az elemek között. Minden értékhez kell pointer_prev és pointer_next is. 256 elemű tömbnél az összesen 1024 byte memóriát jelent (+indexxel együtt). Csinálsz egy 0..255 sorbarendezett láncot, és a véletlen szám generátorral mindig kiveszed a láncból azt az egy elemet, amit a logikai lánc elejére raksz. Ahonnét kivetted, ott az előző / következő elemeket egymáshoz láncolod. Ha végeztél a keveréssel, egyszer végig futsz a láncon, és csinálsz egy indexet, ahova feljegyzed, hogy melyik slotban van a logikai első, második, stb elem. Anélkül az elemek kikeresése lassú lesz. Ha kell a 128. elem a láncból, akár elölről keresed, akár hátulról, jó sok művelet lesz kikeresni.

Hogy mit használhatsz az adott áramkörnél, azt a véges erőforrásaid döntik el.

Ilyesmikre gondoltál?
(#) sonajkniz válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
Ha jól értelmezem, mit szeretnél, akkor a célod az, hogy van egy 1-től 125-ig terjedő számsorod, amit össze akarsz keverni.
Én ezt úgy oldanám meg, hogy először feltöltenék 125 byte-nyi memóriát növekményesen 1-125-ig számokkal. Ezután elindítanám a véletlen generátort, ami 1 és 125 közötti számokból válogathat.
kigenerálnék két számot, majd a kigenerált számoknak megfelelő ramok között adatot cserélnék. Ezután újabb kettőt generáltatnék, újra cserélnék. Ezt kb 1000-szer. Ez elég gyorsan megvan, és jó alaposan összekutyulja. A számok ismétlődése, vagy hogy kimaradjon bármi is, kizárt.
A hozzászólás módosítva: Jún 1, 2017
(#) kriszrap hozzászólása Jún 1, 2017 /
 
Na akkor remélem értelmesen eltudom magyarázni) (nem erősségem.)

A fényjáték lényege random elkeztem a ledeket egyesével kigyujtani szépen 100ms enként rajzolom is ki.
Addig amig az összes led nem villágit . az 125 led összesen 5db oszlop és 25 dbrab szint .

És én ugy csinálta random elkeztem generálni a szintet(x) és az oszlopot(y)
És amikor már a 120 lednél jártam akkor pici esélye volt azt a kombinációt kapja ami üres és igy "pörgöt" a while ciklusom.
(#) sonajkniz válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
Na, stimmel. Akkor jól írtam. Összekevered a számokat a tároló memóriában, majd egyesével, sorrendben kiolvasod a RAM-ok tartalmát, és azt a LED-et kapcsolod fel, aminek a sorszámát épp megkapod. Ebből pedig úgy kapsz szinteket és oszlopokat, hogy a kiolvasott értéket osztod 25-el. Ha az eredmény 0, az az első szint, ha 4, az az 5. szint. A maradék pedig az oszlopszám.
(#) slimcolt válasza ktamas66 hozzászólására (») Jún 1, 2017 /
 
Sikerült megoldanom amit szerettem volna. Most tökéletesen működik.
Az egészet még nem ültettem át megszakítás alapúra. De a gomb hosszan nyomás érzékelését megoldottam a Timer0 időzítő segítségével.
Így:
  1. if (INTCONbits.TMR0IF)
  2.     {
  3.         INTCONbits.TMR0IF = 0;
  4.         if (PORTAbits.RA2)
  5.         {
  6.             SWCOUNT++;
  7.             if (SWCOUNT >= 250)
  8.             {
  9.                 BP = 3;
  10.                 SWCOUNT = 0;
  11.             }
  12.         }
  13.         else
  14.         {
  15.             SWCOUNT = 0;
  16.         }
  17.     }
(#) kriszrap válasza sonajkniz hozzászólására (») Jún 1, 2017 /
 
Mert az én progim azt csinálta([color=red],[/color]) hogy<>gen(e)rált kiiratatat? aztán amikor 120 nál járt mondjuk tegyük fel az üres mezök poziciói
y=5 x=20
y=4 x=1
y=4 x=18
y=3 x=11
Ebben az esetbe nagyon kicsi volt a valoszinusége(,) hogy a generá(l)t szám pl(.)
x=20 y=4
legyen(,) ezért mindi(g) arra az ágra futott(,) ahol volt már generálva szám(,) vagy az tömb helyén 1 volt és ez hosszúúú idöt vett igénybe igy kifutott az időből...

Remélem amikor "Össze >< kutyulom" a dolgokat(,) akkor ilyen jelenség nem lesz(.)
A hozzászólás módosítva: Jún 1, 2017
(#) ktamas66 válasza slimcolt hozzászólására (») Jún 1, 2017 /
 
Így a helyes, de ha belegondolsz már fut a TMR2 (hiszen ez csinálja a PWM-et), ami 1ms (1kHz). Ehhez lehet utóosztót rendelni (T2OUTPS) ami IT-t generálhat. Ugyanezt ott is megoldhatod, és még a kitöltést is megváltoztathatod a beállított időközönként.
(#) Hp41C válasza sonajkniz hozzászólására (») Jún 1, 2017 /
 
Máshogy:
Mindig lehet tudni, hány hely üres. Elég egy véletlen számot generálni (0 .. (üres_hely-1)) közötti tartományba, aztán az annyiadik üres helyen bekapcsolni a LED -et, az üres helyek számát csökkenteni. Ha már csak 1 led marad kikapcsolva, nem kell véletlen számos sem generálni.
(#) sonajkniz válasza Hp41C hozzászólására (») Jún 1, 2017 /
 
EZ teljesen rendben van, csak az az algoritmus elég bonyolult, ami úgy számol el mondjuk 47-ig, hogy közben megnézi egyesével az összes kimenetet, és csak azoknál von le az induló számból, ahol nincs bekapcsolt LED, majd 0-ra érve a soron következőt bekapcsolja. Arról nem beszélve, hogy ahhoz is kell egy háttértár, ami rögzíti a pozíciókat, mert a multiplexelésből kifolyólag a kimenetek közvetlenül nem ellenőrizhetőek.
(#) kriszrap hozzászólása Jún 1, 2017 /
 
Sikerült meg minden CSAK
  1. char i,y,x,k,rand2,rand1,db1=1,db2=0;//db1=1 nem véletlenül
  2.  int unsigned sebesseg;
  3.  char ideiglenes[2];
  4.  char s[6][26];
  5.  char csere[126][2];
  6.  for(i=0;i<6;i++)
  7.     for(k=0;k<26;k++)
  8.         s[i][k]=0;
  9.        
  10.   for(k=1;k<126;k++)//csere tömb rendezés
  11.   {
  12.      db2++;
  13.      csere[k][0] = db1;//y
  14.      csere[k][1] = db2;//x
  15.      if (db2 == 25)
  16.      {
  17.          db1++;
  18.          db2 = 0;
  19.      }
  20.   }
  21.   for(k=0;k<200;k++)//össze keverés
  22.   {
  23.     rand1=myRand(1, 125);
  24.     rand2=myRand(1, 125);
  25.    
  26.     ideiglenes[0] = csere[rand1][0];//y
  27.     ideiglenes[1] = csere[rand1][1];//x
  28.  
  29.     csere[rand1][0] = csere[rand2][0];
  30.     csere[rand1][1] = csere[rand2][1];
  31.    
  32.     csere[rand2][0] = ideiglenes[0];
  33.     csere[rand2][1] = ideiglenes[1];
  34.     if(megszakitas==1)break;
  35.   }
  36.   for(i=0;i<126;i++) //kivilagítatás
  37.   {
  38.        y=csere[i][0];//y
  39.        x=csere[i][1];//x
  40.        s[y][x]=1;
  41.        for(k=1;k<6;k++)sajat_kirajzol(s[k][1],s[k][2],s[k][3],s[k][4],s[k][5],
  42.        s[k][6],s[k][7],s[k][8],s[k][9],s[k][10],
  43.        s[k][11],s[k][12],s[k][13],s[k][14],s[k][15],
  44.        s[k][16],s[k][17],s[k][18],s[k][19],s[k][20],
  45.        s[k][21],s[k][22],s[k][23],s[k][24],s[k][25],k,k);
  46.        if(i==125)sebesseg=2000;
  47.        else sebesseg=100;
  48.        tombol_rajz(sebesseg);
  49.        if(megszakitas==1)break;
  50.   }

Ha 300 írok for ciklusba kiakad a pic és nem értem miért.......
itt:
  1. for(k=0;k<200;k++)//össze keverés
  2.   {
  3.     rand1=myRand(1, 125);
  4.     rand2=myRand(1, 125);
  5.    
  6.     ideiglenes[0] = csere[rand1][0];//y
  7.     ideiglenes[1] = csere[rand1][1];//x
  8.  
  9.     csere[rand1][0] = csere[rand2][0];
  10.     csere[rand1][1] = csere[rand2][1];
  11.    
  12.     csere[rand2][0] = ideiglenes[0];
  13.     csere[rand2][1] = ideiglenes[1];
  14.     if(megszakitas==1)break;
  15.   }

Nem értem miért ötlet??
A hozzászólás módosítva: Jún 1, 2017
(#) Tasznka válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
Mert a k char. Próbáld int-ként
(#) kriszrap válasza Tasznka hozzászólására (») Jún 1, 2017 /
 
Köszi milyen figyelmetlen voltam istenem......
(#) slimcolt válasza ktamas66 hozzászólására (») Jún 1, 2017 /
 
Teljesen jogos.
Megírom a programot úgy is. Fő a gyakorlás
Köszönöm!
(#) pajti2 válasza kriszrap hozzászólására (») Jún 1, 2017 /
 
A véletlenszám generátorodnak programozhatónak kell lennie korlátokra.

Csinálsz egy jelző bit memóriát, amiben kezdetben még törölve van az összes bit. Első alkalommal keresel véletlen számot 0..124 között, mondjuk kaptad a 3-ast. Megkeresed a 3. üres bitet, megnézed, melyik pozíciót találtad meg, mint érvényeset (első alkalommal tuti a 3-as lesz az), töltöd azt a flaget, bekapcsolod azt a ledet. Következő alkalommal generálsz 0..123 között. Mondjuk újra a 3-ast kaptad. Számolod újra a még üres flageket, ezúttal a 4-est fogod megtalálni, mint 3. üreset (ugye indexelés 0-tól..). Bekapsolod a 4. ledet, töltöd a 4. flaget. Generálod a következő véletlen számot 0..122 között. És úgy tovább.

Csak egy tipp.
(#) kriszrap válasza pajti2 hozzászólására (») Jún 1, 2017 /
 
Ez se rosssz.... Most mennyire megnyilvánul hogy egy programot hány féleképpen meglehet írni és hányféleképpen gondolkozunk vagy is eltért a gondolkozásunk.
(#) nagym6 válasza kriszrap hozzászólására (») Jún 2, 2017 /
 
Idézet:
„egy programot hány féleképpen meglehet írni”
És mekkora memóriafoglalás, működési sebesség eltérések lehetnek különböző variációknál, amik ugyanazt a végeredményt adják.
(#) kriszrap hozzászólása Jún 5, 2017 /
 
Akkor itt is felteszem a kérdést mert picit PIC téma is.
Elözmények:
Idézet:
„Sziasztok
Egy természetfeletti dolgot megtudnátok nekem magyarázni hogy miért??
Pic-el vezérlek egy 74hc595-t és azt akartam elérni hogy programozásközbe ne villogjon a led .

Megszakítottam a VDD-t semmi ugyan úgy működik a shift.
Megszakítottam a Resetlábat semmi rendesen működik úgy is (élesbe is teszteltem nem csak be programozásakor)

Clock lábat megszakítottam akkor már nem ment .....

Ezt nem értem hogy miért működik VDD,RESET nélkül.”


Válasz:
Idézet:

Parazita tápot kap az adatvonalakon, azért működik. Reset lebeg, de inkább táp felé hajlik azért működik. Adatvonalakra rakj áramkorlátozó ellenállást, hogy a jel átmenjen, de táplálni már ne tudja az IC-t. Resetet pedig húzd földre, ha resetben akarod tartani. Simán lehet benne belül egy gyenge felhúzó ellenállás, ami miatt lebegéskor inkább a táp felé billen a reset.

>Clock lábat megszakítottam akkor már nem ment .....
Ott kapta a parazita tápot...


Na 100k val próbáltam úgy müködik (lehet túl löttem a 100k-val) .

Na de még egy próblémába ütköztem Shiftregiszter kimenő lábain PNP tranziztorok vannak vagy is ha kivan kapccsolva a shiftregiszter akkor mindegyik villágit gondolom pár k felhuzó ellenállás kell a bázisra de mekkora kell??

Amit elszeretnék érni hogy amikor a Picket programozom akkor a shiftteljesen kilegyen kapcsolva és a PNP ne legyenek nyitva.
Mert amikor programozom mindig egy két led villágit(Előző status) és nem szeretném hogy a ledek megsüljenek.
(#) don_peter válasza kriszrap hozzászólására (») Jún 5, 2017 /
 
Amikor nem kell 74hc595, akkor helyezd magas impedanciába.
Vagy is MR és OE lábakat állítsd magas szintre.

Bázisra tegyél 1-10K-oig felhúzót..
A hozzászólás módosítva: Jún 5, 2017
(#) kriszrap válasza don_peter hozzászólására (») Jún 5, 2017 /
 
OE fixen testen van az OE(RESET) pedig pic lábába megy .
Húzzam fölöket VDDre ellenálláson keresztül????
(#) don_peter válasza kriszrap hozzászólására (») Jún 5, 2017 /
 
Itt egy kép, erről be tudod azonosítani azt a két lábat.
PIC-el kellene vezérelned, mert ha nincs használatban akkor mind két lábat magasba kell húznod. Ekkor teljesen kikapcsol a 74HC595 és nem terhel be semmit.., olyan mint ha bemenetek lennének a lábai.. MR és OE lábakról van szó.. Ha fix valamelyik, akkor azt javítsd és kösd be PIC egyik feles lábára..
A hozzászólás módosítva: Jún 5, 2017
(#) kriszrap válasza don_peter hozzászólására (») Jún 5, 2017 /
 
Idézet:
„olyan mint ha bemenetek lennének a lábai”

De ilyenkor a pnp tranziztorok kinyotnak nem???
(#) don_peter válasza kriszrap hozzászólására (») Jún 5, 2017 /
 
Nem, ha bázisukat felhúzod.. Olvasd el amit írok..
Következő: »»   955 / 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