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   624 / 1210
(#) Balagemann2031 hozzászólása Jan 28, 2015 /
 
Sziasztok! Egy hőmérő IC adatait szeretném feldolgozni, de az adatlap vagy hibás vagy én nem értek valamit. 0 fok felett már megy a kijelzés, viszont minusz értékeket nem tudom hogyan vegyem, 1-es vagy 2 es komplemenssel számolva. Csatoltam az adatlap részletet. A -10 fok bináris értéke egyes komplemenssel számolva stimmel az adatlap szerintihez, de a -25 fok feletti értékek, már 2-es komplemenssel számolva stimmelnek... Elírás lehet vajon, vagy elkerüli valami a figyelmem?
A hozzászólás módosítva: Jan 28, 2015
(#) Balagemann2031 válasza Balagemann2031 hozzászólására (») Jan 28, 2015 /
 
Közben rájöttem, hogy a tized jelző félbájt csordulásokkal nem számoltam...
(#) killbill válasza Balagemann2031 hozzászólására (») Jan 28, 2015 /
 
Ha elshifteled 4 bittel jobbra, akkor teljesen tisztan 0.0625C/LSB, es kettes komplemens. De, ha nem shifteled el, akkor is vegig kettes komplemens, csak akkor 0.00390625C/LSB.
(#) Hp41C válasza don_peter hozzászólására (») Jan 28, 2015 /
 
Van egy negyedik út is: Csak az LCD jár 5V -ról, a többi mehet a 3.3V -ról.
Az XJ2004A adatlapján az szerepel, hogy a minimális magas szint a vezérlő jeleken és adat vonalakon 2.0V. Csak arra kell ügyelni, hogy ne olvassunk az LCD -ből.
A hozzászólás módosítva: Jan 28, 2015

XJ204A.jpg
    
(#) don_peter válasza Hp41C hozzászólására (») Jan 28, 2015 /
 
Elvileg a 4bit-es használatnál nem olvasunk csak írunk rá.
Elég sok módon kipróbáltam, de nem ad életjelet a kijelző..
Ellenállás, dióda, 3v + 5v együttes használata, külön külön, és simán 3v-ról is, időzítés növelése, de semmi.

A másik baj az, hogy ha a kijelzőt 5v-on hajtom, akkor valamiért a vezérlő RS,RW lábakon is megjelenik ez a feszültség ami gondolom nem tesz jót a PIC-nek.
A másik, hogy valamiért abban a pillanatban, hogy D5 kijelző láb vezérlést kap abban a pillanatban leülteti a PIC-et.
Mint, ha leszívná a tápot és ezáltal leáll az egész (műszerrel rámértem és leesik a táp 1-1.5v-ra), vagy csak leakasztja, nem tudom...
Mindegy, mivel 5v-os PIC-ekkből van még bőven, inkább valami szint illesztést kellene kitalálni ami megbirkózik a fentebb leírtakkal. (SPI ~1MHz)
A hozzászólás módosítva: Jan 28, 2015
(#) kissi válasza don_peter hozzászólására (») Jan 28, 2015 /
 
Idézet:
„Elvileg a 4bit-es használatnál nem olvasunk csak írunk rá.”

A 4 bites üzemmódban is lehet olvasni ( de nem néztem a konkrét kódot, de azért figyelj rá! ) !
(#) icserny válasza kissi hozzászólására (») Jan 28, 2015 /
 
Vannak 5 V-ot elviselő lábak, azokat kell használni bemenetként.
(#) spgabor hozzászólása Jan 28, 2015 /
 
Sziasztok!

Még mindig a shift registerrel vagyok elakadva. Sajnos Proteusban nem találtam meg az általam használni kívántat, de mint tanácsoltátok, másik hasonlóval próbálkoztam. A működését már nagyjából értem is, viszont azt, hogy kellene kódba ezt átfordítani, abban teljesen tanácstalan vagyok. Tudtok segíteni egy mintával, amiből kiindulhatok és illeszthetem az időzítőmhöz? Közben az eredeti időzítő kapcsoláshoz hozzárajzoltam a kijelző részt is..

Köszi és üdv:
spgabor
(#) Pali79 válasza don_peter hozzászólására (») Jan 28, 2015 /
 
3 és 5V-tal nem is fog menni, max 4,5 lehet ha 3V-t használsz.
(#) don_peter válasza spgabor hozzászólására (») Jan 28, 2015 / 1
 
Szerintem elsőnek csinálj egy megszakítást ami 1mp-es időközönként nővel egy változót.
Ezt a részt még a PIC beállításához tatozik. (ennek eredményét majd élesben is kell tesztelned mert a szimulátor nem mindig modellezi jól le, főleg, ha egy gyengébb gépen fut)
Aztán ne felejtsd el beállítani a kristályod értékét, majd a PIC-et is be kell állítanod.
2szer kell az elemre rákattintani.
Gondolom 4MHz-es kristályod lesz, így azzal nem lesz nehéz beállítanod a timert.
Azt hiszem timer2-vel menni fog.

A jó beállítások 628-hoz: (4MHz)
  1. CMCON = 7;                              // Comparator kikapcsolva
  2.         CCP1CON = 0;                    // Capt/Comp/PWM kikapcsolva   
  3.         INTCON = 0;                             // Összes interrupt láb kikapcsolva
  4.         PEIE   = 1;                             // Peripheral interrupt engedélyezése
  5.         GIE    = 1;                             // Globális interrupt engedélyezése
  6.        
  7.     //Timer2
  8.         PR2 = 249;
  9.     T2CON = 5;
  10.     TMR2IE = 1;
  11.     PEIE = 1;
  12.     GIE = 1;

A megszakítás pedig valahogy így:
  1. extern interrupt isr(void) {
  2.         timer_count++;
  3.         if(timer_count == 1000){
  4.                         timer_count = 0;
  5.                         masodperc++;
  6.         }
  7.         TMR2IF = 0;
  8. }


Aztán ez pedig a digitek:
  1. unsigned char Digit[10] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09}//0-9-ig digitászámok
A hozzászólás módosítva: Jan 28, 2015
(#) kissi válasza icserny hozzászólására (») Jan 28, 2015 /
 
Ezt nem nekem szántad !?
A hozzászólás módosítva: Jan 28, 2015
(#) spgabor válasza don_peter hozzászólására (») Jan 28, 2015 /
 
Igen, ez a része meg is van, még te segítettél benne még talán karácsony előtt. Az óta kicsit ült a dolog és most akartam befejezni, a kijelzővel, hogy az időzítő áramköröm teljes legyen.
Az eredeti kódom a következő:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#include <pic16f628a.h>
  4. #include <htc.h> // Itt automatikusan vállassza ki a kontrollert
  5.  
  6. __CONFIG(WDTE_OFF & FOSC_XT & CP_OFF & LVP_OFF & BOREN_OFF & MCLRE_ON & PWRTE_ON); // eredeti
  7. //__CONFIG(UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & XT); // Ezt kiveheted ha nekem nem megy
  8.  
  9. int szamlalo = 0;
  10. int perc = 30;
  11. int masodperc = 0;
  12. int stop = 1;
  13. #define GOMB_PERC_ALLIT RA0
  14. #define GOMB_MASODPERC_ALLIT RA1
  15. #define LEHAJTOT_AJTO RA2
  16. #define GOMB_START RA3
  17. #define GOMB_STOP RA4
  18. #define RELE RB6
  19.  
  20. static void interrupt isr(void){
  21.     szamlalo++;
  22.     if(szamlalo == 1000){
  23.         if(masodperc == 0 && perc != 0){
  24.             perc--;
  25.             masodperc=60;
  26.         }else if(masodperc == 0 && perc == 0){
  27.             TMR2IE = 0;
  28.             RELE = 0;
  29.         }else{
  30.             masodperc--;
  31.         }
  32.         szamlalo = 0;
  33.     }
  34.     if(LEHAJTOT_AJTO || !GOMB_STOP){
  35.         while(!GOMB_STOP);
  36.         stop = 1;
  37.         TMR2IE = 0;
  38.         RELE = 0;
  39.     }
  40. /*      if(!GOMB_STOP){
  41.             while(!GOMB_STOP);
  42.             perc = 0;
  43.                         masodperc = 0;
  44.         }*/
  45. }
  46.  
  47. int main() {
  48.     TRISA = 0xFF;  //A lábai bemenet lettek állítva
  49.     PORTA = 0; // Port alacsony szinten
  50.  //   TRISB = 0b00100000;  //RB 5 bemenet (stop)
  51.     TRISB = 1; // Port magas szinten
  52.  
  53.     CMCON = 7; // Comparator kikapcsolva
  54.     CCP1CON = 0; // Capt/Comp/PWM kikapcsolva
  55.     INTCON = 0; // Összes interrupt láb kikapcsolva
  56.  
  57.     PR2 = 249; // Timer2 PR2 8bites periódus regiszter
  58.     T2CON = 5; // T2CON regiszter
  59.     TMR2IE = 0; // TMR2IE megszakítást engedélyez? bit (leállítva a Timer2)
  60.     PEIE = 1; // Peripheral interrupt engedélyezése
  61.     GIE = 1; // Globális interrupt engedélyezése
  62.  
  63.     while(1){
  64.         if(!GOMB_PERC_ALLIT){
  65.             while(!GOMB_PERC_ALLIT);
  66.             perc++;
  67.             if(perc == 30){
  68.                 perc = 0;
  69.             }
  70.         }
  71.         if(!GOMB_MASODPERC_ALLIT){
  72.             while(!GOMB_MASODPERC_ALLIT);
  73.             masodperc++;
  74.             if(masodperc == 61){
  75.                 masodperc =0;
  76.             }
  77.         }
  78.         if(!GOMB_START){
  79.             while(!GOMB_START);
  80.                         stop = 0;
  81.             while(!LEHAJTOT_AJTO){
  82.                 if(perc > 0 || masodperc > 0){
  83.                     szamlalo = 0;
  84.                     RELE = 1;
  85.                     TMR2IE = 1; // Timer2 indítás
  86.                                         //break;
  87.                 }
  88.             }
  89.         }
  90.  
  91.     }
  92. }
(#) don_peter válasza don_peter hozzászólására (») Jan 28, 2015 /
 
Ehhez még megy egy makró függvény:
  1. // Makrók
  2. #define readbit(data,bitno) ((data>>bitno)&0x01)        // Digit kijelzés makrója

Aztán még megy egy rutin ami a shiftregiszterbe küldi ki az adatot:
  1. void send_byte(int dignum){
  2.        ST_CP=0;
  3.        SH_CP=0;
  4.         for(int i=0; i<8; i++){
  5.            DS = readbit(Digit[dignum], i);
  6.            SH_CP=1;
  7.            SH_CP=0;
  8.        }
  9.        ST_CP=1;
  10. }

A használata pedig majd így lesz: (0-9-ig írhatod a számokat)
  1. send_byte(1);

Nem 100%, hogy egyből jó lesz, főképpen azért nem mert itt nem kezeljük azt hogy neked 4 kijelződ van és azok sem egymás után hanem 2-4,1-3 kiosztásba ha jól emlékszem.
És azt hiszem ez 74HC595-re írtam anno szóval az enable lábat biztosan fordítanod kell.

Nekem a definíciókban így van megadva:
  1. // Definíciók
  2. #define SH_CP   RB0                     // 74HC595 Shift regiszter adat kezeléshez
  3. #define ST_CP   RB1
  4. #define DS              RB2

Ez utóbbit csak, ha nem értenéd, hogy mi mért van..
Szerintem ez több mint elegendő, hogy elindulj és talán meg is tudd írni
A hozzászólás módosítva: Jan 28, 2015
(#) don_peter válasza spgabor hozzászólására (») Jan 28, 2015 /
 
Egy pár észrevétel:
Idézet:
„TRISB = 1; // Port magas szinten”

A TRISx regiszter a prot ki vagy bementet állítja nem a szintjét.
Tehát neked most a B port 1-es bitje vagy is 0b00000001 (hexában 0x01) bemeneten van a többi kimeneten.

Ha ezek megvannak és jól működnek akkor a digites rész kell neked, bejegyzésembe azt is megtalálod..
A hozzászólás módosítva: Jan 28, 2015
(#) don_peter válasza Pali79 hozzászólására (») Jan 28, 2015 /
 
Igen, diódával és ellenállásokkal is próbáltam kicsit a feszültségeket csökkenteni.
Nem hozott eredményt. Marad a szintillesztés, csak ebben kevés még az infóm..
(#) spgabor válasza don_peter hozzászólására (») Jan 28, 2015 /
 
Köszönöm a segítséget, jelentkezem, ha elakadnék megint.
(#) silent15 hozzászólása Jan 28, 2015 /
 
Sziasztok, nemrégiben elővettem újra a PICkit 2-őm (eredeti) , kb 2 hónapos állás után.
Először egy 16f505-öt próbáltam programozni vele, majd egy 16f723A-t, mindkettőnél ugyanaz a probléma, nem látja a PICkit2 a chippeket. Ha manuálisan írok bele, akkor beírja, de kiolvasni már nem tudja(szóval gondolom nem írja be ténylegesen, mert el sem indul a chip) .
Átfrissítettem a PICkit2-őt a v2.32.00-ra.
Én rontok el valamit, vagy tönkre ment a PICkit2?
Köszönöm a segítséget!
(#) Hp41C válasza silent15 hozzászólására (») Jan 28, 2015 / 1
 
Kis piros felirat Code protect vagy Data protect, esetleg All protect nem jelenik meg?
Egy kép kellene a hibáról.
(#) silent15 válasza Hp41C hozzászólására (») Jan 28, 2015 /
 
Szia, közben szenvedésemben sikerült valahogy életrekeltetem, beleírta a programot, és tényleg benne is van., viszont még mindíg csak manuálisban látja a picet. Se code, se data protectes felirat nincs.
(#) Hp41C válasza silent15 hozzászólására (») Jan 28, 2015 /
 
A 16F505 nem rendelkezik típusazonosítóval (device id), így automatikusan nem ismerhető fel. A kiválasztásához kézi kiválasztába ment a program. Valószínüleg így léptél ki belőle és az ismételt indításoknál mindig erre a módra áll be. Programmer / Manual device select....
Amúgy a továbbiakra nézve az automatikus felismertetés nem lesz perspektivikus... De ezt már többször leíram.
(#) don_peter hozzászólása Jan 28, 2015 /
 
Használt már valaki PIC-hez ilyen szint illesztést? (3v-5v és 5v-3v)
állítólag ez oda vissza megoldja a szint illesztést és árban is barátságos lenne, bár kicsit nagy lenne a helyigénye...
Csatoltam a képet..
Szerintetek működhet?
BSS138 FET van a kapcsolásba..
(#) Balagemann2031 válasza don_peter hozzászólására (») Jan 29, 2015 /
 
Szia! Optocsatolós szint illesztésen nem gondolkoztál?

Bulgh.png
    
(#) killbill válasza Balagemann2031 hozzászólására (») Jan 29, 2015 / 1
 
Annal dragabbat es nagyobbat erre a feladatra nem is talalhatna. Raadasul egy altalanos opto ide meg lassu is. Egy 74HCTxx IC-vel meg lehet oldani a problemat. A HCT bemenete 0.8V alatt L, 2.0V folott H, de a kimenete 5 voltos. Pl. 74HCT245. A HC nem jo, mert annak 0.7V * Vdd a Vihmin-je.

Az a FET-es megoldas jo, bar a 10k-s felhuzokkal nagyobb bemeno kapacitasok mellett lehetnek problemak, tul magas frekvencian nem lesz jo.
(#) Hp41C válasza don_peter hozzászólására (») Jan 29, 2015 /
 
(#) don_peter válasza Hp41C hozzászólására (») Jan 29, 2015 /
 
Ez még jó is lehet, de ha jól látom akkor ez csak 1 csatornás.
Vagy is annyi ilyen IC-ét kellene használnom amennyi vezetéket szint illeszteni akarok.
Akkor mér inkább ezt nem? SN74LVC14

Balagemann2031: ezt nem ismerem, de gyanítom itt is olyan probléma lehet mint a 74LVC1T45-nél illetve, nagy is...

killbill: Én még ezt is nézegettem, tudom HC, de azt hittem jó lehet: 74HC573, adatlap
SPI vonalakat kellene elvinnie a FET-es megoldásnak, ahogyan nézem sokan ezt ajánlják és mint ha ebay-on és egyéb más oldalon is árulnak pontosan ilyen felépítésű modulokat.
Az SPI 1MHz körül fog járni, annál nem hiszem, hogy szükség lenne nagyobb sebességre..
Nézegettem 2 tranzisztoros megoldásokat is az ida vissza illesztés miatt, de azt már a sok alkatrész miatt elvetettem.
Ez a FET-es megoldás oda vissza tud elvileg így illeszteni..
(#) Hp41C válasza don_peter hozzászólására (») Jan 29, 2015 / 1
 
Hogy mikre képes a Gooooooogle....
74LVC2T45, 74LVC8T245
A hozzászólás módosítva: Jan 29, 2015
(#) kt hozzászólása Jan 29, 2015 /
 
Na készen van az égetőm.
Viszont azt nem értem hogy az a külső 10kohm os ellenállás most a PIC vdd és a PIC mclr lába közé kell, vagy a PIC vdd és az égető mclr lába közé kell-e a céláramkörben...
Itt a fórumon felül olvastam hogy : "Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre." ebből arra következtetek hogy a PIC vdd és mclr lábát kell összekötni vele, viszont a kapcsolási rajzon a szöveg eléggé félreérthető.
(#) don_peter válasza Hp41C hozzászólására (») Jan 29, 2015 /
 
Na igen ez a 74LVC8T245 tényleg jó lenne, de elég drága...
Köszi amúgy..., nem kerestem típuson belül..
74HCT245 szimpatikusabb árban.. (killbill linkelte), csak itt ügye nincs duál suply..
A hozzászólás módosítva: Jan 29, 2015
(#) Hp41C válasza kt hozzászólására (») Jan 29, 2015 /
 
Nyomkövetést végzel az égetőddel?
Ha igen, a 10k a Vdd és a MCLR/Vpp közé kell.
Ha nem, akkor a 10k a MCLR/Vpp és a Vss közé kell.
(#) usane válasza don_peter hozzászólására (») Jan 29, 2015 /
 
Nos igen. Az ár nem mindegy, de az sem hova kell belenyúlni. A legegyszerűbb icserny javaslata lenne, egy inverting charge pump a kontrasztra,pl egy ICL7660, de az nem versenyezhet a 90 Ft-os meghajtóval.
Következő: »»   624 / 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