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   887 / 1210
(#) DJozso válasza kriszrap hozzászólására (») Dec 19, 2016 /
 
Elektro.on ilyesmire gondolt (legalább is szerintem):
  1. void Szunet(unsigned int ms){
  2.   for (ms; ms--; ms>0) {
  3.     delay_ms(1);} }

Így a Szunet(ms); paranccsal bármilyen várakozási idő kiadható 0-65536 ms közt, erőforrás spórolósan...
A hozzászólás módosítva: Dec 19, 2016
(#) szuperman válasza don_peter hozzászólására (») Dec 19, 2016 /
 
Beírtam, de továbbra sem történik semmi. El se kezd futni a kód. Csak ezt a hibát obálja a szimulátor:
(#) kriszrap válasza DJozso hozzászólására (») Dec 19, 2016 /
 
Kedves DJozso tudom mire gondol Elektro.on azért köszönöm
Kedves Elektro.on gondolom tapasztaltabb vagy ezért megkérdezem amit tudunk for ciklussal megoldani akkor azzal oldjam meg a hely sporolásért??
(#) Elektro.on válasza kriszrap hozzászólására (») Dec 19, 2016 /
 
Sajnos a MicroC és a MicroPascal fejlesztői valami okból csak úgy tudták megoldani a Delay ms késleltetést, hogy mindenhová ahová beírod berak egy méretesebb asm ciklust ami konkrétan a késleltetést végzi. Ezért ha több helyre írod gyorsan megtölti a memóriát. A leírásban ők javasolták a fügvény hívást, mert így mindig "oda ugrik" a program és azt futtatja. Ezért csak egyszer foglalja a helyet. Djozsó azért javasolta pluszba a függvénybe a for ciklust, mert így nem csak egy előre beállított értékkel tudsz késleltetni. Hanem ha a Delay -t monjuk 1 ms re állítod és a függvény hívásnál megadod paraméterként hányszor fusson le, akkor a programodban olyan értéket állíthatsz be amire szükséged van.
Remélem érthetően fogalmaztam és a segítségedre lessz.
(#) kriszrap válasza Elektro.on hozzászólására (») Dec 19, 2016 /
 
kedves Elektro.on értem ezt használom is de más esetekbe is érdemes for ciklust használni hely sporolás miatt??
(#) Hp41C válasza szuperman hozzászólására (») Dec 19, 2016 /
 
Nem tudom, mit csináltál vele, nálam működik az MpLab 8 Szimulátorában.
A hibajelzés arra utal, hogy eljut a programtár végére (0x7FE)...
A láthatóság kedvéért a delay idejét 1ms -ra írtam át.
A hozzászólás módosítva: Dec 19, 2016
(#) Elektro.on válasza kriszrap hozzászólására (») Dec 19, 2016 / 2
 
Nem feltétlen. Itt a Delay késleltetés sajátossága miatt hasznos lehet. De például neked a programodban nagyon sok helyen kell késleltetés de mindenhová ugyan annyi, akkor nem kell a for ciklus csak simán a Delay -t teszed egy fügvénybe.
Azt, hogy mikor érdemes ciklust használni, kizárolag a megoldandó feladat, és a programod szerkezete határozza meg. Ez mindig egyedi. Érdemes mindig tagolt, funkcionális részekre elkülönülő jól átlátható kódot írni. De ez gyakorlat és tapasztalat kérdése. Elöbb utóbb te is ráérzel.
(#) Elektro.on válasza kriszrap hozzászólására (») Dec 19, 2016 / 1
 
Tagolással kapcsolatban itt egy korábbi kódom. Ez sem tökéletes és ráadásul pascal, de a tagolás lényegét talán láthatod benne.
Bővebben: Link
(#) don_peter válasza szuperman hozzászólására (») Dec 20, 2016 /
 
Nem igazán értem mi nem megy ezen a programon.
Nincs mi rossz legyen..
A szimulátorban milyen kapcsolás van?
(#) szuperman válasza don_peter hozzászólására (») Dec 20, 2016 /
 
Na ez kezd érdekes lenni. Csatolom a kapcsolást.

kapcs.GIF
    
(#) szuperman válasza Hp41C hozzászólására (») Dec 20, 2016 /
 
A szimulátor azt állítja, hogy be sem lép a main metódusba. Szóval nem tuom, hogyan érhet a program végére. Ez egy rejtély, úgy látszik.
(#) szuperman válasza szuperman hozzászólására (») Dec 20, 2016 /
 
ó! Mevan a hiba! Rosz PIC volt a kapcsoláson.
(#) kriszrap hozzászólása Dec 20, 2016 /
 
Sziasztok pic16f628 nak beállítottam a 2 timerjét hogy 10ms enként szakítsa meg a fő programot.
Jól állítottam be??
  1. void InitTimer2(){
  2.   T2CON = 0x4D;
  3.   PR2 = 250;
  4.   TMR2IE_bit = 1;
  5.   INTCON = 0xC0;
  6. }
  7. // plussz
  8. void interrupt(void){
  9.    if(TMR2IF_bit)
  10.    {
  11.      TMR2IF_bit = 0;
  12.      if(!count--)
  13.      {
  14.        count=100;
  15.        idoszamol();
  16.      }
  17.    }
  18. }
(#) foxi63 válasza kriszrap hozzászólására (») Dec 20, 2016 / 1
 
Szia!
Majdnem jó. A PR2 értéke csak 249 kell,hogy legyen.
(#) sonajkniz válasza foxi63 hozzászólására (») Dec 20, 2016 /
 
Ebben neked tökéletesen igazad van, csak most jól megkeverted kriszrap-ot, mert a miérteket nem tetted hozzá.
Anélkül pedig hanyatt esik a matematika.
Tehát:
Mivel PR2 értékét be kell töltenie a rendszernek a timerbe, minden lejárat után, ezért ez a művelet egy számolási ciklust elhasznál. Így ha 250 kerül beírásra, a tényleges osztás 251 lesz.
(#) kriszrap válasza sonajkniz hozzászólására (») Dec 20, 2016 /
 
Vagy is a betöltési idő is fontos....
(#) foxi63 válasza sonajkniz hozzászólására (») Dec 20, 2016 /
 
Most te keverted meg szegényt, mert nem szoftveres, hanem hardveres az összehasonlítás. Amikor a timer 2 eléri a PR2 értékét, ekkor nullázódik, viszont az említett egységnyi idő az a nullátó az 1-ig telik el.
(#) sonajkniz válasza foxi63 hozzászólására (») Dec 20, 2016 /
 
Ez van, ha az ember a google fordítóval fordít műszaki tartalmat.
De végül is tökmindegy. A lényeg abban van, hogy megértsük a miértet .
De a nullától egyig való számolás is a számolás része, tehát nem töblet. A nullázási művelet a töblet.
A hozzászólás módosítva: Dec 20, 2016
(#) don_peter válasza szuperman hozzászólására (») Dec 20, 2016 /
 
No, pontosan ezért kérdeztem..
(#) Pali79 válasza sonajkniz hozzászólására (») Dec 21, 2016 /
 
Ne legyen igazam, de szerintem a kollégának tök mindegy, hogy mitől, csak működjön...Legalábbis abból amit eddig olvastam, nekem ez jött le.
(#) kriszrap válasza Pali79 hozzászólására (») Dec 21, 2016 /
 
Hát.... Azért nem ... Sok kolégátol kapok pmbe segítséget.Csak One wire/timer kicsit új nekem ennyi nehéz belerázódni.
(#) apromax hozzászólása Dec 21, 2016 /
 
Egy 16 bites PIC en a következő problémába ütköztem.
Van egy struktúra változó, melyet adatokkal töltök fel. Amikor ezek kiolvasom a PIC little-endian tárolása miatt nem a kívánt sorrendben jelenek meg a byte ok az ssss változóban. (0xAA - 0xBB - 0x08 - 0x00 - Op)

  1. typedef struct {
  2. u16 SType;        
  3. u16 ProtType;  
  4. u8  SSize;            
  5. } mat;
  6.  
  7.  
  8. void sender_a (u8 Op){
  9.  mat  Frame;
  10.  char *Ptr;
  11.  Ptr = &Frame;
  12.  
  13.   Frame.SType = 0xAABB;
  14.   Frame.ProtType = 0x0800;
  15.   Frame.SSize   = Op;
  16.  
  17.   unsigned char cnt = 5;  
  18.   unsigned char ssss;
  19.   while (cnt){
  20.    ssss = *Ptr++;
  21.   send (ssss);
  22.   cnt--;
  23.   }
  24. };



Hogy lehet orvosolni a fenti problémát?
(#) Tasznka válasza apromax hozzászólására (») Dec 22, 2016 /
 
Van pár lehetőség,de az lenne a legegyszerűbb,ha az int-eket felcserélve tárolnád el,így lépkedve meglenne a jó sorrend.

A mutatókkal így macera,mert az első a Ptr+1 , Ptr , Ptr+3 , Ptr+2 , Ptr4 lenne a kiolvasási sorrend,ami még megoldható,de amikor itt a példádnál char az utolsó,ott már nem kell csere.Ezt meg lehetne írni ciklusban,de egyszerűbb a csere.
(#) don_peter válasza apromax hozzászólására (») Dec 22, 2016 /
 
Bár nem pontosan értem a dolgot, de nem lenne egyszerűbb még a struktúrában felbontanod byte-okra az adatokat?
(#) joco53 hozzászólása Dec 22, 2016 /
 
Sziasztok ! Érdeklődnék,hogy BAS kiterjesztésü fájlt,hogyan tudnám átforditani HEX-re.Előre is köszönöm a segitséget
(#) Hp41C válasza joco53 hozzászólására (») Dec 22, 2016 /
 
Egy BASIC fordítóval.
(#) joco53 válasza Hp41C hozzászólására (») Dec 22, 2016 /
 
Lennél szives ajánlani egyet. Köszönöm szépen
(#) Elektro.on válasza joco53 hozzászólására (») Dec 22, 2016 /
 
Szerintem ez attól is függ melyik Basic környezetben írodott a kód. Ott van például a MicroBasic. Tartalmaz olyan beépített fügvényeket amit más gyártó fordítója nem.
(#) Hp41C válasza joco53 hozzászólására (») Dec 22, 2016 /
 
Mikroelectronika: Mikro BASIC
PIC Basic Pro
Free BASIC
Proton BASIC
Swordfish - Modular BASIC for PIC
Great Cow BASIC
OshonSoft PIC Basic Compiler
Proton PIC® BASIC
sbt...
Goooogle: "basic compiler for PIC"
(#) joco53 válasza Elektro.on hozzászólására (») Dec 22, 2016 /
 
Erről lenne szó
Következő: »»   887 / 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