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   626 / 1210
(#) Frenzy válasza bbalazs_ hozzászólására (») Jan 29, 2015 /
 
Az igazság az, hogy nem akarom ugyan ezt a progit, mert csináltam újat (ugyanis változtatni akartam a funkcióin) flowcode-ban, csak mivel önszorgalomból meg akarok tanulni programozni, ezért szeretném visszafejteni a régit.

Köszi, kísérletezek.
(#) spgabor válasza don_peter hozzászólására (») Jan 30, 2015 /
 
Szia!

Kezdem kicsit hülyének érezni magam. A példádat átírtam az sda2131 adatlapja alapján úgy, hogy elvileg működjön, de sajnos nem működik. Most már nem is proteusban, hanem dugdosós panelen próbálkozom. A vezérlés megy, mert a led villog másodperces intenzitással. Mit rontok el?

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <htc.h> // Itt automatikusan vállassza ki a kontrollert
  4.  
  5. __CONFIG(WDTE_OFF & FOSC_XT & CP_OFF & LVP_OFF & BOREN_OFF & MCLRE_ON & PWRTE_ON); // eredeti
  6. //__CONFIG(UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & XT); // Ezt kiveheted ha nekem nem megy
  7.  
  8. #define _XTAL_FREQ 4000000
  9. #define DATA RB0
  10. #define CLK RB1
  11. #define ENABLE RB2
  12. #define LED RB3
  13. #define readbit(data,bitno) ((data>>bitno)&0x01) // Digit kijelzés makrója
  14. int szamlalo = 0;
  15. int szam = 0;
  16.  
  17. unsigned char Digit[10] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
  18.  
  19. void digit_display(int dignum){
  20.     ENABLE = 1;
  21.     CLK=0;
  22.     for(int i = 0; i < 8; i++){
  23.         DATA = readbit(Digit[dignum], i);
  24.         CLK = 1;;
  25.         CLK = 0;
  26.     }
  27.     __delay_ms(10);
  28.     ENABLE = 0;
  29. }
  30.  
  31. static void interrupt isr(void){
  32.     szamlalo++;
  33.     if(szamlalo == 1000){
  34.         if(LED == 0){
  35.             LED = 1;
  36.         }else{
  37.             LED = 0;
  38.         }
  39.         if(szam > 9){
  40.             szam = 0;
  41.         }
  42.         digit_display(szam);
  43.         szam++;
  44.         szamlalo = 0;
  45.     }
  46.     TMR2IF = 0;
  47. }
  48.  
  49. int main() {
  50.     TRISA = 0xFF;  //A lábai bemenet lettek állítva
  51.     PORTA = 0; // Port alacsony szinten
  52.     PORTB = 0x00;
  53.     TRISB = 0x00; // B lábai kimenetek
  54.     CMCON = 7; // Comparator kikapcsolva
  55.     CCP1CON = 0; // Capt/Comp/PWM kikapcsolva
  56.     INTCON = 0; // Összes interrupt láb kikapcsolva
  57.     PR2 = 249; // Timer2 PR2 8bites periódus regiszter
  58.     T2CON = 5; // T2CON regiszter
  59.     TMR2IE = 2; // 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.     DATA = 1;
  63.     ENABLE = 0;
  64.     CLK = 0;
  65.     while(1){
  66.         TMR2IE = 1;
  67.     }
  68. }
(#) don_peter válasza spgabor hozzászólására (») Jan 30, 2015 /
 
A while ciklusba minek teszed bele a timer2 engedélyezését?
Azt még előtte kell while ciklusba jelen esetben nem kell semmi:
  1. while(1);

A CLK a te shift regiszterednél nem fordított?
Ez persze csak kérdés...
Ne feled, hogy ez elvileg csak 1 kijelzőre fog tudni írni a többin vagy ugyanazt vagy az egyel korábbi adatot kell látnod vagy semmit.
Csomagold be a proteus projektet és töltsd fel.
(#) spgabor válasza don_peter hozzászólására (») Jan 30, 2015 /
 
Az véletlen volt, eredetileg előtte szerepelt, csak ahogy kísérleteztem, bent felejtettem.
CLK a Pulse diagram szerint amikor az Enable 1 lesz, akkor a CLK nulla. Bár lehet, hogy rosszul értelmezem. Azt értem, hogy egy kijelzőre kellene megjelennie. De arra is gondoltam, hogy lehet, hogy az a baj, hogy a tranzisztor nincs kapcsolva a 15, 18-as lábakról, és azért nem jelenik meg semmi.

Proteus projektel az a baj, hogy az SDA-t nem tartalmazta, ezért azt kézzel csináltam meg, így nem is tudok vele modellezni, mert nem ismeri a működését és hibát ír rá. Azért is dugdostam inkább össze. De mellékelem azért.

Proteus.zip
    
(#) usane válasza spgabor hozzászólására (») Jan 30, 2015 /
 
Még jó, hogy nem jelenik meg semmi ha nem kapcsolod az anódot.
A LED nem világít ha csak az egyik lábát kötöd be. A kijelzőben is LED-ek vannak amik esetünkben tranzisztorral vannak kapcsolva az egyik oldalról. Már nem emlékszem, hogy közös anód vagy katód, de azt már annak idején is mondtam, hogy azon felül, hogy leprogramozod a kijelzést, a multilplexelést, azaz a tranzisztorok kapcsolását is meg kell oldani.
A hozzászólás módosítva: Jan 30, 2015
(#) don_peter válasza spgabor hozzászólására (») Jan 30, 2015 /
 
Átalakítottam 74HC595-re.
Csak hogy lásd mi képen működne..
A tranzisztor model nem működik, így az 5v-ot fixen adom a kijelzőnek ha más nem kísérletezésnél te is fixen adj neki feszültséget, és majd utána ráérsz foglalkozni a tranzisztorok meghajtásával.
Koncentrálj előbb 1 majd 2 és utána már mind a 4 kijelző működésére..
Szerintem jó felé kísérletezel szóval nem vagy elveszve...
Még megnézem hátha van 16bites-shifregiszter bár eddig nem találtam benne..
A hozzászólás módosítva: Jan 30, 2015

Proteus.rar
    
(#) vicsys válasza don_peter hozzászólására (») Jan 30, 2015 /
 
Anno csináltam én is. A stabIC-t is ráterveztem, hogy rögtön legyen 3,3V is.

DSCN0002.JPG
    
(#) kt hozzászólása Jan 30, 2015 /
 
Sziasztok.
Az lenne a kérdésem hogy a táplábak mellé miért kell kondenzátort rakni ?
(#) csiberaptor válasza kt hozzászólására (») Jan 30, 2015 /
 
Zavarszűrés a feladata, így megbízhatóbb a működés.
(#) Bakman válasza kt hozzászólására (») Jan 30, 2015 /
 
Zavarszűrés és puffer. A kontrollerek nem folyamatosan fogyasztanak mint a megszokott analóg alkatrészek, hanem "csipegetnek" áramot, ezt segíti a kondenzátor.
(#) zenetom válasza kt hozzászólására (») Jan 30, 2015 /
 
Szia!
Ha a 100nF-os kondenzátorokra gondolsz, akkor azok zavarmentesítésre kellenek. Ez a gyakorlatban azt jelenti, hogy bár egyenfeszültségről járatjuk a PIC-et, de mégis megjelennek nemkívánatos feszültségimpulzusok, amik megzavarhatják a PIC-et, illetve bizonyosos áramköröknél (pl. erősítőknél) gerjedést okozhatnak. A "megzavarás" következménye lehet a futó program leállása, vagy rendellenes működése.
Ezek ellen véd a kondenzátor, ugyanis ezt a (bizonyos frekvenciájú) feszültségváltozást gyakorlatilag nem engedi eljutni a PIC-ig, azáltal, hogy rövidre zárja. Ugyanis a kondenzátor adott frekvenciatartományban vezetőként viselkedik az AC jel útjában.
Szerk.: mire megírtam ezt a regényt, addig már ketten is válaszoltak.
A hozzászólás módosítva: Jan 30, 2015
(#) csiberaptor válasza zenetom hozzászólására (») Jan 30, 2015 /
 
Azért a Te válaszod egy kicsit tudományosabb
(#) kt hozzászólása Jan 30, 2015 /
 
Köszönöm mindenkinek .
(#) don_peter válasza vicsys hozzászólására (») Jan 30, 2015 /
 
És szuper is lett.
Gondolom jó néhányszor hasznát is vetted.
Stab IC-n és is gondolkodtam, de úgy voltam vele, hogy mivel a 3v és az 5v-is adott a cél boardon így azt külön nem terveztem rá.
Remélem külön szűrést nem igényel majd a FET ellátás.
(#) mark.budai hozzászólása Jan 31, 2015 /
 
Sziasztok!
Vettem egy PICKit3-at, de lenne vele egy kis problémám. Megnyitom az MPLAP IDE (v2.26) programot, látja az égetőt. Beállítottam a pic típusánál a 16F628A-t, és csatlakoztattam az ICSP portra. A program nem találja a pic-et, ha rákattintok a connect-re, akkor kiírja, hogy csatlakoztassam az eszközt a Pickit3-hoz.
Mi lehet a baj? Próbáltam több PIC-kel is, az ICSP jól van bekötve.
Ehhez nincs olyan szoftver, mint a Pickit2-höz volt? Az sokkal szimpatikusabb, ha tudom, hogy ehhez nem adnak, akkor 2-est vettem volna, csak újabbat akartam, hátha olyan mikrovezérlőt használnék, amit a 2 már nem támogat.
A hozzászólás módosítva: Jan 31, 2015
(#) eSDi válasza mark.budai hozzászólására (») Jan 31, 2015 /
 
Üdv!

Nem fogod megbánni a hármast, csak hozzá kell szokni. Be kell kapcsoni, hogy a PICKit adja ki a tápot a PIC-nek. Esetleg tedd fel az MPLAB X-et, abból tudod külön használni az IPE-t csak felprogramozásra.
(#) Pali79 válasza mark.budai hozzászólására (») Jan 31, 2015 /
 
Itt valami nagy kavar van. A V2.26 a PicKit2 saját programjának kéne, hogy legyen. Az MpLab IDE V8.92 volt az utolsó verzió. A PicKit3 programozó progija az MpLab IPE, a fejlesztő pedig az MpLab X.
Szóval akkor mit próbáltál mivel?
(#) mark.budai válasza eSDi hozzászólására (») Jan 31, 2015 /
 
Igazad van, nem kapcsoltam be, hogy az égető adja a tápot a pic-nek. Már működik rendesen.
Pali, lehet hogy ilyen régi mplab-ot használok?

mplab.jpg
    
(#) kissi válasza mark.budai hozzászólására (») Jan 31, 2015 /
 
Szia!

Van (volt ) saját, önálló programja: Bővebben: Link, kb. lap alján 3.10-es verzió !
(#) Pali79 válasza mark.budai hozzászólására (») Jan 31, 2015 /
 
Kihagytad az X-et
(#) kt hozzászólása Jan 31, 2015 /
 
Sziasztok.
Watt féle LPT programozót építettem meg és WinPic800 szeretném használni.
Beállítottam a WinPic800 úgy ahogy volt írva.
Betöltöm a hex filet, rámegek hogy beírás és ezt kapom :

HIBA -> Cím írása 0x000000 Beírva: 0x2FEE Kiolvasás: 0x3FFF

Mit ronthattam el ?
(#) Hp41C válasza mark.budai hozzászólására (») Jan 31, 2015 / 1
 
A PICkit3 alapesetben nem kapcsolja a tápot a kontrollerre. MpLabX -ben nem vagyok járatos. Az IPE esetén az alábbiakat kell megtenni:
IPE indítása (nekem jópár másodpercbe beletelik...)
Programozó elismerése után:
Settings / Advanced mode - Jelszó megadása - Power lap -on 4.75V és Power target circuit from Tool beállítása, majd Operate...
És mindezt minden indítás után, mert nem jegyzi meg...
(#) kt válasza kt hozzászólására (») Jan 31, 2015 /
 
Időközben megoldottam .
(#) csiberaptor hozzászólása Feb 1, 2015 /
 
Fél másodpercenként szeretnék timer0 megszakítást. A calculator ezt adja:
  1. void InitTimer0(){
  2.   T0CON  = 0x82;
  3.   TMR0H  = 0x0B;
  4.   TMR0L  = 0xDC;
  5.   GIE_bit        = 1;
  6.   TMR0IE_bit     = 1;
  7. }

4Mhz 18f4520
Akármit csinálok, közel sem pontos. Elég rendesen siet.
Itt a megszakítás kezelésem. Valaki rá tudna nézni, hogy mit rontok el?
  1. if (INTCON.TMR0IF==1){
  2.    Num ++;                                  //500ms
  3.    LATD.F6=0;
  4.    if(Num == 2)                             //1sec
  5.    {     if(time>=0)                        //time=perc*sec
  6.      {   LATD.F6=1;
  7.          Sec--;
  8.          time--;
  9.          LEDt = ~LEDt;
  10.          Num = 0;
  11.  
  12.      }else {  INTCON=0;T0CON.TMR0ON=0;Latd.F7=1;Latd.F6=1;}
  13.    }    if(Sec==0){perc--;Sec=59;}
  14.          TMR0H= high;
  15.          TMR0L=low;
  16.          INTCON.TMR0IF = 0;
  17.    }   }


Tulajdonképpen egy visszaszámláló lenne.
A hozzászólás módosítva: Feb 1, 2015
(#) Hp41C válasza csiberaptor hozzászólására (») Feb 1, 2015 /
 
A PLL be van kapcsolva?
Ha az órajel ténylegesen 4MHz és a TMR0 előosztó 8, akkor a TMR0 órajele 125kHz. 500ms -enkénti megszakításhoz a TMR0 -t valóban 0xBCD -re kell inicializálni. Azonban a TMR0 regisztereit minden megszakításban újra be kell állítani 0xBDC -re. Az írásnál előbb a TMR0H -t aztán a TMR0L -t kell beírni.
Idézet:
„Writing to TMR0 when the prescaler is assigned to Timer0 will clear the prescaler count but will not change the prescaler assignment.”

Nem lenne egyszerűbb az automatikusan működö TMR2 -vel és egy belső számlálóval? Men kellene a timer regisztereket írogatni.
(#) csiberaptor válasza Hp41C hozzászólására (») Feb 1, 2015 /
 
PLL nincs bekapcsolva, belső oszcillátorról megy. A regiszter írások szerintem jók.
De akkor utánanézek a tmr2-nek, mert ezzel így már 2 napja szívok.
(#) Hp41C válasza csiberaptor hozzászólására (») Feb 1, 2015 /
 
Azonban a TMR0 regisztereit minden megszakításban újra be kell állítani 0xBDC -re.
(#) csiberaptor válasza Hp41C hozzászólására (») Feb 1, 2015 /
 
  1. TMR0H= high;
  2.          TMR0L=low;

A definiáltam ezeket a változókat, és így minden megszakításban visszaállítom.
(#) benjami válasza csiberaptor hozzászólására (») Feb 1, 2015 /
 
Timer2-höz egy kis segítség a mellékletben.
(#) mark.budai hozzászólása Feb 1, 2015 /
 
Megint lenne egy kérdésem.
Én a CCS C Comilerében írok, mert az mplab annyira nem szimpatikus, így nekem jobban tetszik. Eddig az 5.040 demo változata volt meg, most beszereztem az egész verziót, ez az 5.008-as. Sajnos nincs benn pár PIC típus, többek között a 16F1705, amit most használni szeretnék. A kész programmal nincs is gond, azt be tudom tölteni, de ha új projektet akarok indítani, akkor nem tudom azt felhasználni, pedig most nagyon jó lenne. Telepítés előtt a demo változat fájljait eltettem máshova, így minden megmarad. Próbáltam bemásolni a Devices mappába azokat a header fájlokat, ami ebben nem volt meg, de ez nem elég. Hogy tudok hozzáadni új piceket? Nagyon fontos lenne.
Következő: »»   626 / 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