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   68 / 1210
(#) Hp41C válasza Amjad hozzászólására (») Júl 7, 2010 /
 
Szia!

- Neked csak az egyenlőség vizgálata kell, akkor többféle módon is megoldható a feladat, mindegy a számok ábrázolása:
- Az LCD DDRam-jába ASCII karakter kódokat kell írni, hogy a karakterek megjelenjenek. Ha a kapcsolás olyan, hogy lehet az LCD-ből olvasni is, akkor a 4 karakterkód összehasonlításával megoldható az ellenőrzés és 4 byte-on a tárolás.
- Ha BCD kódolást használsz - egy byte két decimális számjegy, akkor a kód elfér két byte-on, a összehasonlítás 16 bites xor művelettel megoldható, a tároláshoz két byte kell. Két bevitt karaktert egy byte-re kell pakolni - ha csak a számok kellenek, a kódjuk alsó 4 bitjén a számok bináris kódját találod.
- Bináris számábrázolást használsz: A legproblémásabb, mert a szám előállításához a kódot binárissá kell alakítani, és nem nyersz vele semmit, ez is csak két byte-on fér el.... Ha a kódokkal más műveletet is kellene végezni, akkor ezt a formát ajánlanám...
(#) Amjad válasza Hp41C hozzászólására (») Júl 7, 2010 /
 
Köszönöm!
(#) Amjad hozzászólása Júl 10, 2010 /
 
Helo
Megint én.
Timer0 megszakítás lenne, de nem jövök rá, hogy mit nézek el folyamatosan, mert ez a kód a valóságban (próba panel) kb. 10 másodperc alatt billenti lata0-t 1-be. Na de 50000 megszakítással?
Felvilágosítana valaki? Köszönöm!
(PIC18F4321 4MHz rezonátor).

lcd_test.c
    
(#) potyo válasza Amjad hozzászólására (») Júl 11, 2010 /
 
Talán kimaradt a T0CON inicializálástól egy olyan, hogy a 00000111 érték binárisan értendő, ezért a fordító decimálisan értelmezi ezt. Így ha a T0CKI lábról lépteti a Timer0-t, ami láb nagyimpedanciás állapotban van, ezért minden zajt összeszed, többek között a főoszcillátor jelét is, így kb. 12,8 másodpercenként telik le az 50000 megszakítás.
(#) icserny válasza Amjad hozzászólására (») Júl 11, 2010 /
 
Ha már be van csatolva a timers.h állomány, akkor miért nem "öndukumentáló" módon írod a beállításokat? Például:
  1. #define USE_OR_MASKS
  2.     T0CON = T0_16BIT | T0_SOURCE_INT | T0_PS_1_256;


De akár a PIC18 programkönyvtár támogatói függvényeit is meghívhatod (ha már a Microchip mérnökei fáradtak vele és megírták):
  1. #define USE_OR_MASKS
  2.     OptenTimer0(TIMER_INT_ON | T0_16BIT | T0_SOURCE_INT | T0_PS_1_256);

Ez ugyanazt csinálja, mint amit az InitT0-ban fölöslegesen újra megírtál, a makrók használata pedig sokkal olvashatóbbá teszi a programlistát, szemben a T0CON = 0b00000111 típusú szörnyűségekkel.

Megjegyzés: az USE_OR_MASK definiálásának elhagyása esetén az AND maszkokat kell használni. Például így:
  1. T0CON = T0_16BIT & T0_SOURCE_INT & T0_PS_1_256;


Dokumentáció a C18 fordító telepítési könyvtárában!
(#) Amjad hozzászólása Júl 11, 2010 /
 
Hálás köszönet mindkettőtöknek!
Remélem eljön majd az idő, amikor az ilyen dolgok nekem is egyértelműek lesznek.
Köszönöm még egyszer!
(#) dudzsi hozzászólása Júl 16, 2010 /
 
Sziasztok.
Ha egy PIC16F676-ost sleep modbol megszakitással ébresztek az INT lábán akkor elindul a Timer0? Vagy csak azután miután a megszakitásba lévö dolgokat befejezte.
(#) vilmosd válasza dudzsi hozzászólására (») Júl 16, 2010 /
 
Hali
Akkor indul amikor a belso oszci indul. Ha kulso jelrol kap impulzust, akkor sem megy a belso oszci nelkul, mert a szamlalast szinkronizalja a belso oszcihoz.
Udv Vili
(#) dudzsi válasza vilmosd hozzászólására (») Júl 16, 2010 /
 
A timer0 az belső oszsirol megy és sleeböl a timer 1 ébreszti fel meg az INT láb. A belsö osci akkor elméletileg nem indul el ha INT láb ébreszti.Mert ha oda irok egy idözitést amit a timer0 léptetné akkor azt nem hajtra végre. Gondolom azért mert nem indult el a timer0. Jol gondolom?
(#) potyo válasza dudzsi hozzászólására (») Júl 16, 2010 /
 
Én úgy nézem, hogy nemnagyon lehet trükközni itt, ha a kontroller fut (márpedig a SLEEP-ből felébredés ezt jelenti), akkor a Timer0 is fut, feltéve hogy nem a T0CKI lábról hajtásra van beállítva. Szóval ha az OPTION_REG T0CS bitje nulla, akkor fut a Timer0 is a kontrollerrel együtt. Nálad esetleg nem ér el oda, hogy túlcsorduljon, azért nem látod jelét a futásának. Szimulátorban nézd meg.
(#) vilmosd válasza dudzsi hozzászólására (») Júl 16, 2010 /
 
Hali
SLEEP-bol barmi is feleleszti a procit. Viszont ha feleled be kell indulni az oszcinak, mert maskepp nem tudna a proci dolgozni. Ha van oszci, akkor ha mas nem tiltja, megy a TMR0. Epp valamelyik nap csinaltam egy projektet, ahol altattam a procit, de nekem rogton az ebredes utan indult a TMR0 minden gondolkodas nelkul. Jo kis proci (12F683). 3 voltrol a proci es egy Hall switch kemeny 8 uA-t zabalt. A hall switch ebresztette a procit.
Udv Vili
(#) potyo válasza vilmosd hozzászólására (») Júl 16, 2010 /
 
Volt már nekem is pár áramköröm 12F683-al, meg most is készül egy, tényleg durva, hogy teszek mellé egy egyszerű 78L05 stabkockát, az benyel alapjáraton 8mA-t, PIC meg elvan 4MHz-en kevesebb mint 1mA-el. Akkus vagy elemes üzemnél muszáj az embernek valami rendesebb stabilizátort használnia, pl. MCP1703-at, hogy tartson is valameddig, mert hiába küldi SLEEP-be a 78L05-nél, alig számít valamit. Persze én autóakkuról hajtom, de akkor is bántja a szépérzékemet a felesleges fogyasztás...
(#) dudzsi válasza vilmosd hozzászólására (») Júl 16, 2010 /
 
Oké akkor majd nézegetem ha lessz idöm. Addig is köszönöm.
(#) vilmosd válasza potyo hozzászólására (») Júl 16, 2010 /
 
Hali
Az enyem belso 31k oszcirol jar. Abban igazad van, hogy nincs egy igazan jo, kis nyugalmi aramu stabler. En is kinlodtam mar sokat ilyen miatt. Ha autoba csinalsz valami cuccot, es mindig mennie kell, bizony az a par miliamper is sokat szamit. Nekem kellett csinalni riasztos akkuhoz hordozhato cuccot, es ugy banyasztam ki stablert valami rossz panelbol, mert itt nem ismerik a kereskedok csak a 78Lxx sorozatot, es egy keszulekert nem rendelek alkatreszt az USA-bol. Kulonben is tegnapra kell minden.
Udv Vili
(#) potyo válasza vilmosd hozzászólására (») Júl 16, 2010 /
 
Én a chipcadből szereztem be MCP1790-et, meg ott elvileg van MCP1703 is. Előbbi csak 70uA nyugalmi áramú, viszont a bemenetén 30-40V környékét is elvisel. Nem mertem az 1703-at betenni, mert igaz, hogy 2uA nyugalmi áramú, de csak max. 16V, azt meg kevésnek éreztem. 70uA is már elég kellemes, bár igaz, hogy SLEEP-ben meg a kontroller kb. semmit sem fogyaszt (idő 99%-ban), akkor ahhoz képest még mindig rengeteg a 70uA is...
(#) vilmosd válasza potyo hozzászólására (») Júl 16, 2010 /
 
Nekem sajnos kiesik a bejarasi utvonalbol a chipcad. Viszont idonkent rendelek a Mousertol es akkor hozzateszek a rendeleshez 1-2 hasznos alkatreszt, mert igy a szallitasi koltseg megoszlik.
Idézet:
„de csak max. 16V, azt meg kevésnek éreztem”
Be kell tenni 15 voltos szupresszort es megszunik a problema.
Udv Vili
(#) Amjad válasza vicsys hozzászólására (») Júl 17, 2010 /
 
Helo
Végül is annál a megoldásnál maradtam, hogy gombnyomás után kikerül a szám az LCDre, majd átadja egy függvénynek, ami a,b,c,d változókban tárolja a négy számot (ezzel a törlést is meg tudtam oldani egyszerűen). Így könnyű eepromba menteni is. Ha a program elején mondjuk beolvasom eepromból a mentett kódot (pl. aa,bb,cc,dd) akkor formailag hogyan tudom összehasonlítani őket a legegyszerűbben? Vagy csak 4 IF-el lehet?
  1. void codvaltozoba (char cod)
  2. {
  3.         if (cod==10)
  4.         {
  5.          sorsz--;   //Törlés LCDn
  6.          return;
  7.         }      
  8.         switch (sorsz)
  9.         {
  10.         case 0:
  11.                 a=cod;
  12.                 sorsz++;
  13.                 break;
  14.         case 1:
  15.                 b=cod;
  16.                 sorsz++;
  17.                  break;
  18.         case 2:
  19.                  c=cod;
  20.                  sorsz++;
  21.                  break;
  22.         case 3:
  23.                  d=cod;
  24.                  sorsz++;
  25.                  break;
  26. //      case 4:
  27. //               csillag
  28. //              összehasönlítás/mentés...
  29. //              break;
  30.         }
  31. }
(#) vicsys válasza Amjad hozzászólására (») Júl 17, 2010 /
 
Miért nem képzed a számot és hasonlítod úgy össze? Pl.: számképzés=a*1000+b*100+c*10+d
Így átláthatóbb és könnyebb lekezelni mint egyesével összehasonlítgatni.
(#) Amjad válasza vicsys hozzászólására (») Júl 17, 2010 /
 
Hát azért, mert ez nem jutott eszembe.
De ezt fogom tenni.
Kössz!
(#) Hp41C válasza vicsys hozzászólására (») Júl 17, 2010 /
 
Szia!

Mint fenntebb már ajánlottam egyszerűbb az élet, ha a számképzés=a*16^3+b*16^2+c*16+d, mert csak léptetni kell (swapf, iorwf ). A kiírásnál nem kell majd osztogatni 10 hatványaival, hanem a digiteket közvetlenül (andlw 0x0F - a magasabb 4 bitnél pedig egy swapf megoldja a helycserét...) lehet felhasználni. Ez a szám is elfér 16 biten...
(#) vicsys válasza Hp41C hozzászólására (») Júl 17, 2010 /
 
Maximálisan jogos, de ez pedig az része ami fogyasztásra kész és átlátható a logika.
(#) zoli530 hozzászólása Júl 19, 2010 /
 
Sziasztok!

Remélem, hogy jó helyen teszem fel a kérdésemet. Egyetemista vagyok és néhányan szabadidőnkben *nagyon* régóta egy égető áramkörön dolgozunk, de sosem sikerült működésre bírni. Végső soron 6 darab PIC16F684 beprogramozásához kellene. Azt szeretném kérdezni, hogy ismertek-e olyan embert Budapesten vagy az agglomerációban(Érden lakok) akit megkérhetünk, hogy elvégezze a beégetést ha elvisszük neki a chipeket. Cserébe sört/csokit viszünk
(#) zenetom hozzászólása Júl 22, 2010 /
 
Hali!
Asm-ben a kivonás (8 bites) is 4 órajel periódust vesz igénybe, vagyis ugyanannyi idő alatt hajtódik végre mint az összeadás?
zoli530: ha budapesti lennék még én is elvállalnám, egyébként még nem írt senki se privit?
(#) potyo válasza zenetom hozzászólására (») Júl 22, 2010 /
 
Ugyanannyi. De az utasításlistánál te is megnézheted, írja mindegyik mellett, hogy meddig tart a végrehajtása.
(#) zenetom válasza potyo hozzászólására (») Júl 22, 2010 /
 
Köszi!
Azt írja hogy 1 "kör" alatt megcsinálja, csak biztos akartam lenni benne (ezeknél a pikeknél semmin se lehet csodálkozni ).
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 22, 2010 /
 
Igen, de ezt Te is könnyedén ellenőrizheted. Az adatlapban az utasítás készlet áttekintésénél a táblázatban fel van tüntetve minden utasításnál a ciklusszám. Egy utasításciklus a PIC mikrovezérlőknél 4 órajel periódust jelent.

szerk.: látom, Potyo megelőzött
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 22, 2010 /
 
  1. SUBWF BCD_SZAM,F

Itt a kivonás után az eredmény visszakerül a BCD_SZAM-ba?
Az adatlap szerint visszakerül...
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 22, 2010 /
 
Igen, visszakerül. Mindig az adatlap információja a döntő és ha az errata nem cáfolja az adatlapban foglaltakat, akkor szinte biztosan úgy is van.
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 22, 2010 /
 
A MOVF utasítással nem lehet változóból változóba másolni?
A
  1. MOVF BCD_SZAM,K_B_S_EGY

helyett
  1. MOVF BCD_SZAM,W
  2.  MOVWF K_B_S_EGY

ezt használva működik.

:gumicsirke:
(#) icserny válasza zenetom hozzászólására (») Júl 22, 2010 /
 
Idézet:
„A MOVF utasítással nem lehet változóból változóba másolni?”
Nyilvánvalóan nem, mert az utasítás kódjában nincs elég hely a műveleti kód mellett két változó címének tárolására.

PIC18 esetén erre a kétszavas (32 bit) MOVFF utasítás használható.
Következő: »»   68 / 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