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   1158 / 1159
(#) slimcolt válasza pipi hozzászólására (») Ápr 13, 2021 /
 
Én is ezt hittem addig, amíg egyszer csak tényleg nagyon sok dolgott kellett egyszer kezelnem.
A moduláris programozást sem gondoltam szükségesnek egy ideig...
(#) Lamprologus hozzászólása Ápr 14, 2021 /
 
PIC-el (16F887) szeretném mérni egy akkumulátor töltő/kisütő áramát.

Az addig ok hogy beteszek egy söntöt és analog bemenettel figyelem a söntön eső feszültség nagyságát, de válltozik a feszültség polaritása attól függően, hogy épp töltöm, vagy kisütöm az akkumulátort. Na erre a problémára kéne nekem valami frappáns megoldás!
(#) kissi válasza Lamprologus hozzászólására (») Ápr 14, 2021 /
 
Szia!

Egy összegző kapcsolással ( műveleti erősítő) toldd el 1/2 Ut-re a sönt feszültségét 0A esetén!
(#) Lamprologus válasza Lamprologus hozzászólására (») Ápr 14, 2021 /
 
Bogarászom az adatlapot, de nem egyértelmű hogy lehet-e a Vref- negatívabb a VSS-nél?
(#) Lamprologus válasza kissi hozzászólására (») Ápr 14, 2021 /
 
Erről egy kapcsolási rajzot tudnál mutatni?
A hozzászólás módosítva: Ápr 14, 2021
(#) kissi válasza Lamprologus hozzászólására (») Ápr 14, 2021 /
 
Bővebben: Link

A 7-es ábra egy összeadót mutat. Ha az egyik bemenete 2,5V, akkor a másik bemenete +/- 2,5V között váltakozása esetén a kimenet 5...0V között változik! Persze lényeges a tápfesz és a műveleti erősítő kivitele (rail to rail vagy sem, de ha elég nagy a táp és szimmetrikus /ill. kettős/, akkor nincs probléma ! )!
A hozzászólás módosítva: Ápr 14, 2021
(#) Lamprologus válasza kissi hozzászólására (») Ápr 14, 2021 /
 
Csak egy 12V-os akkumulátor feszültség (11-14,4V között) és az abból előállított +5V stabil feszültség van.
(#) kissi válasza Lamprologus hozzászólására (») Ápr 14, 2021 /
 
Rail to rail kimenetes IC-vel még jó lehet, ill. nézz utána a Millman tételnek, az is jó lehet...
(#) Lamprologus válasza kissi hozzászólására (») Ápr 14, 2021 /
 
Ok! Köszönöm!
(#) proli007 válasza Lamprologus hozzászólására (») Ápr 14, 2021 / 2
 
Hello! ACS71x
(#) Lamprologus válasza proli007 hozzászólására (») Ápr 14, 2021 /
 
Na! Ez egész jónak tűnik!

Csak hogy jól értelmezem-e a dolgot ( pl a 20A-es típusnál, 5V tápfeszültség mellett) :
Nem folyik áram akkor a kimenet 2,5V
+20A folyik akkor 4,5V a kimenet
-20A folyik akkor 0,5V a kimenet?
(#) oregharcos hozzászólása Ápr 14, 2021 /
 
Sziasztok! Hogyan tudnám megcsinálni, hogy az alprogramokat külön nyomógombbal indítanám, és
amikor a futó alprogram lefut, leállna és vár a következő indításra? Most úgy dolgozik, hogy a gombot megnyomva átlép egy másik alprogramba.
  1. //EEPROM-ba mentés
  2.   //Nyomógombbal vezérlés
  3.   //PIC18F877A
  4.   //balról jobbra
  5.   //jobbról balra
  6.   //oda vissza
  7.   //szerteszét
  8.  
  9.  
  10. #define LED PORTD
  11. #define nyg PORTB.F0
  12.  
  13. char i;
  14. char jatek=0;
  15. bit gomb;
  16.  
  17. void nygfigy()
  18. {
  19.   if(nyg!=1 && gomb !=1)
  20.   {
  21.   gomb=1;
  22.   jatek++;
  23.   EEPROM_Write(0x00,jatek);
  24.   }
  25.  
  26.   if(nyg!=0 && gomb !=0)
  27.   {
  28.   gomb=0;
  29.   }
  30. }
  31.  
  32. void Delay_nyg(int ido)
  33. {
  34.    int tmp;
  35.    for(tmp=0;tmp<ido;tmp++)
  36.    {
  37.    Delay_ms(1);
  38.    nygfigy();
  39.    }
  40.  
  41.  }
  42.  
  43. void BalrolJobbra()
  44. {
  45.      LED=1;
  46.      Delay_nyg(150);
  47.      for(i=0;i<7;i++)
  48.      {
  49.      LED=LED<<1;
  50.      Delay_nyg(150);
  51.      }
  52.  
  53. }
  54. void JobbrolBalra()
  55. {
  56.  
  57.      LED=128;
  58.      Delay_nyg(150);
  59.      for(i=0;i<7;i++)
  60.      {
  61.      LED=LED>>1;
  62.      Delay_nyg(150);
  63.      }
  64. }
  65.  
  66. void OdaVissza()
  67. {
  68.      LED = 1;
  69.     Delay_nyg(150);
  70.      for(i=0;i<7;i++)
  71.      {
  72.      LED = LED << 1;
  73.      Delay_nyg(150);
  74.      }
  75.      for(i=0;i<6;i++)
  76.      {
  77.      LED = LED >> 1;
  78.      Delay_nyg(150);
  79.      }
  80. }
  81.  
  82. void SzerteSzet()
  83. {
  84.      LED = 8;
  85.      Delay_nyg(150);
  86.      for(i=0;i<4;i++)
  87.      {
  88.      LED = LED >> 1;
  89.      Delay_nyg(150);
  90.      }
  91.      LED = 16;
  92.      Delay_nyg(150);
  93.      for(i=0;i<4;i++)
  94.      {
  95.      LED = LED << 1;
  96.      Delay_nyg(150);
  97.      }
  98. }
  99.  
  100.  
  101. void main()
  102. {
  103.    TRISD = 0b00000000;
  104.    TRISB = 0b11111111;
  105.    //ANSEL = 0;
  106.    //ANSELH = 0;
  107.    
  108.    jatek = EEPROM_Read(0x00);
  109.  
  110.    while(1)
  111.    {
  112.    nygfigy();
  113.  
  114.    switch (jatek)
  115.    {
  116.       case 0: BalrolJobbra(); break;
  117.       case 1: JobbrolBalra(); break;
  118.       case 2: OdaVissza()break;
  119.       case 3: SzerteSzet(); break;
  120.       default: jatek=0; EEPROM_Write(0x00,jatek);
  121.  
  122.      }
  123.  
  124.    }
  125.  
  126. }


Segítségeteket előre is köszönöm!
A hozzászólás módosítva: Ápr 14, 2021
(#) Bakman válasza Lamprologus hozzászólására (») Ápr 14, 2021 /
 
Igen, jól értelmezed. Ha nem folyik áram, akkor a tépfeszültség felére áll be a kimenet. Mivel a Hall elem viszonylag zajos, érdemes egy RC szűrőt tenni a kimenetre. Ha jól értem a feladatot, ez nem fog problémát okozni.
(#) ktamas66 válasza Lamprologus hozzászólására (») Ápr 15, 2021 / 1
 
Vagy INA219.
(#) moltam hozzászólása Ápr 15, 2021 /
 
Helo.
16f1615ből kispórolták az eepromot, van helyette high endurance flash terület. Hogyan tudnám feltölteni fordítási időben? Gondolom kéne neki egy psect, meg a linkernek is tudtára kéne adni hogy melyik címre tegye. -Wl,-pPor_Vec=0h,-pIsr_Vec=4h már be van írva, ennek mintájára akár meg is tudnám adni, de mivel 8bites ez a terület 14 helyett retlw ket nem tehetek bele, csakis magát az értékeket, amiket aztán indirekt mód kell majd olvassak.
A hozzászólás módosítva: Ápr 15, 2021
(#) Hp41C válasza moltam hozzászólására (») Ápr 15, 2021 /
 
A HEF is 14 bites.
(#) silent15 válasza Hp41C hozzászólására (») Ápr 15, 2021 /
 
A kolléga itt a __EEPROM_DATA() makróra gondol, legalábbis ennek a HEF alternatívájára. Nincs előttem egy XC8 fordító, de nem ismeri fel a megvalósítást és pakolja be ezzel? Egy gyors próbát megér.
(#) moltam válasza Hp41C hozzászólására (») Ápr 15, 2021 /
 
Akkor valamit benéztem. Az adatlap 1F80-1FFF területet ír, és hozzá azt hogy "This device has a 128-byte section of high-endurance Program Flash Memory" Akkor elég lehet a retlw és a reset és interrupt vektorok mintájára megadott kezdőcím?
(#) moltam válasza silent15 hozzászólására (») Ápr 15, 2021 /
 
Az kimaradt hogy pic-as assemblyvel próbálkozom.
(#) Zsora válasza moltam hozzászólására (») Ápr 15, 2021 / 1
 
A HEF a programmemória végén található (0x1F80-0x1FFF ) és csak 8-bites. Az adatok olvasása indirekt eléréssel történik FSR-en kereszül, akár az adatmemória. (doksi 23. oldal)
Az írás viszont csak a PMADRx, PMDATx és PMCONx regisztereken keresztül végezhető el. Valamint olvasható is így. (doksi 120. oldal)

Az adatok elhelyezése:
  1. ;---------------------------- HEF terület
  2.         PSECT   data
  3. Adatok: DB      0x55,0xAA,0x55,0xAA
  4.         DB      '0','1','2','3'

Adatok fix címen:
  1. ;---------------------------- HEF terület
  2.         PSECT   data,abs
  3.         ORG     0x1F80
  4. Adatok: DB      0x55,0xAA,0x55,0xAA
  5.         DB      '0','1','2','3'
(#) moltam válasza Zsora hozzászólására (») Ápr 15, 2021 /
 
Köszönöm a választ. Holnap kipróbálom. A PSECT data miatt nem fogja azt hinni hogy az adatmemóriába kell tenni mint változó, tudni fogja hogy én konstansokat akarok a programmemóriába pakolni?
A hozzászólás módosítva: Ápr 15, 2021
(#) Zsora válasza moltam hozzászólására (») Ápr 15, 2021 / 1
 
Helyesbítenék:
Azt hiszem Hp41C-nek mégiscsak igaza van. Úgy tűnik hogy az a terület is teljes értékű programmemóriaként használható, viszont az ottani memóriacellák alsó byte-ja sokkal strapabíróbb. (Ez a HEF.) Tehát a RETLW megoldás is használható, de ha EEPROM-ként akarjuk használni, akkor érdemes csak az alsó byte-ot használni. (A fentebb leírt módon.)

HEF.png
    
(#) Zsora válasza moltam hozzászólására (») Ápr 15, 2021 /
 
Nem fogja összekeverni az adatmemóriával , mert az így foglalható:
(Az nem data, hanem udata, vagyis az inicializálatlan adatok területe.)
  1. ;---------------------------- RAM foglalása a változóknak (BANK 0)
  2.         PSECT   udata_bank0
  3. A_valt: DS      3        ; A_valt[1,2,3]
  4. B_valt: DS      3

A pic16f1615.inc állomány végén található definíciók:
  1. psect udata_shr,class=COMMON,space=SPACE_DATA,noexec
  2. psect udata,class=RAM,space=SPACE_DATA,noexec
  3. psect udata_bank0,class=BANK0,space=SPACE_DATA,noexec
  4. psect udata_bank1,class=BANK1,space=SPACE_DATA,noexec
  5. psect udata_bank2,class=BANK2,space=SPACE_DATA,noexec
  6. psect udata_bank3,class=BANK3,space=SPACE_DATA,noexec
  7. psect udata_bank4,class=BANK4,space=SPACE_DATA,noexec
  8. psect udata_bank5,class=BANK5,space=SPACE_DATA,noexec
  9. psect udata_bank6,class=BANK6,space=SPACE_DATA,noexec
  10. psect udata_bank7,class=BANK7,space=SPACE_DATA,noexec
  11. psect udata_bank8,class=BANK8,space=SPACE_DATA,noexec
  12. psect udata_bank9,class=BANK9,space=SPACE_DATA,noexec
  13. psect udata_bank10,class=BANK10,space=SPACE_DATA,noexec
  14. psect udata_bank11,class=BANK11,space=SPACE_DATA,noexec
  15. psect udata_bank12,class=BANK12,space=SPACE_DATA,noexec
  16. psect code,class=CODE,space=SPACE_CODE,delta=2
  17. psect data,class=STRCODE,space=SPACE_CODE,delta=2,noexec
(#) moltam válasza Zsora hozzászólására (») Ápr 15, 2021 /
 
Igen, én kevertem össze. Köszönöm, így már minden tiszta.
A hozzászólás módosítva: Ápr 15, 2021
(#) Laja1 hozzászólása Hé, 20:17 /
 
Sziasztok!
Ránéznétek erre a kapcsolási rajzra?
Szeretnénk megvalósítani, de nagy munka kikábelezni, ezért szeretném előre lecsekkoltatni. Ez 3 ajtó vezérlése. Egyszerre csak egy ajtó lehet nyitva. A programot megírtam, jól működik. Az ajtók nyitottságát egy reed-relé adja (PARAMC-10F W). Az ajtókat zárva tartó mágnes EMAGKIT-ZOA-180. (24 VDC; 180 mA). A működtető relék: G6B-1114 (5V). A bemeneteket földre húzom 100k-val. A tiltókapcsolók a reteszelést törlik. Természetesen a PIC minden VDD és VCC pontját bekötöm, az MCLR pontját +5V-ra kötöm.
Amire kíváncsi volnék:
- Probléma-e, ha az egyes ajtók a PIC-től kb. 25 m-re vannak? (Tehát a mágnesek, reed-relék, relék, LED-ek és a tiltókapcsolók is.)
- Tudok-e így 24 VAC-ból stabil +5 V-t csinálni a rajzolt módon.
- Az 1N4004 megfelelő-e ide?
- Kihagyhatom-e a kimeneteknél a tranzisztorokat (ahogy rajzoltam is)?
- Ha a mágnes behúz, akkor a piros LED kigyullad. Hogy oldható meg az, hogy egyébként meg egy zöld LED világítson? (Ha az a kimenet nem aktív.)

Köszönöm szépen!
(#) superuser válasza Laja1 hozzászólására (») Hé, 22:02 / 1
 
Minden rosszindulat nélkül: inkább rajzoltasd meg valakivel.
Teljesség igénye nélkül:
- PIC-nek a táp lábait nem tartalmazza a rajz
- MCLR-t ellenállással szokták tápra kötni, tesznek mellé 100nF kerámia kondit is
- 100nF kerámia kondit tesznek a PIC mellé a táp lábakra is
- relét nem a mikrokontroller lába hajtja, direktben, hanem tesznek közé pl. egy kapcsoló tranzisztort.
- A 25m távolsághoz nem árt vm. korrekt áramköri megoldás, pl. áramhurok, optikai leválasztás, stb.
- A 7805 adatlapját érdemes lenne megnézni, hogy mennyi kapacitást javasolnak a lábaira.
Biztos lehet még találni. Hirtelen ennyi jött.
(#) morfi007 válasza Laja1 hozzászólására (») Hé, 22:41 /
 
...az AC-t először egyenirányítani kéne pl. graetz híddal, utána plusz kerámia kondi,,, a stabilizátor után már nem kell elektrolyt.
Ha 24V AC-t egyenirányitasz, abból lesz kb. 32V DC, ugyhogy az 5V stabilizátorodnak becsületes hűtés fog kelleni, számolva minimum a relék tekercseinek áramával.
A PIC kimenetei max. 25mA-t bírnak, az általad írt relé 5V-nál 40mA.
A lehúzó ellenállások legyenek 5-10kohm
Zöld LED úgy világíthatna, ha az RB0, RB1, RB2 és az 5V közé kötöd. pl. 5V anód, RB0 katód - persze soros ellenállással.
Ami pedig a hosszú vezetéket illeti ... Ezzel biztos menne akár 50m-ig is.
(#) Kera_Will válasza Laja1 hozzászólására (») Kedd, 8:55 / 1
 
uC portjait nem lógatjuk ki több 10 - 100 méteres drótokra.
Azok antennaként összeszednek mindenféle zajt, túlfeszültség tüskéket és bizonytalanná válik a port bemenei állapota vagy átütnek a félvezető rétegek.
OPTOcsatolós leválasztás kimenet és bemenetek felé.
A hozzászólás módosítva: Kedd, 8:56
(#) nedudgi válasza Laja1 hozzászólására (») Kedd, 8:55 /
 
Ha már ott van a 24V, akkor nyugodtan használhatsz 24V reléket, természetesen tranzisztorokon keresztül. Ráadásul így a PIC tápját nem zavarja annyira a relék működése.
(#) Hp41C válasza Laja1 hozzászólására (») Kedd, 9:15 / 1
 
Módosítási javaslatok:
- Greatz egyenirányító (DB102), puffer kondenzátor (~ 1000µF/63V), DC/DC konverter, szűrőkondenzátor.
- Írtad a PIC táp és föld lábának bekötését. Közvetlenül a táp lábakhoz (dip tok esetén pl. a fólis oldalon SMD kiviletű) 100nF .. 1µF kerámia kondenzátor.
- MCLR lábhoz elég egy felhúzó ellenállás, de ne legyen 4k7 -nél nagyobb, nem kell kondenzátor. A konfigurációban engedélyezni kell a power on timer funkciót.
- Egy láb a 16F716 -on max 25 mA -t képes leadni, de ekkor már a visszaolvasott érték nem az lesz, amit kiírtál. A tok összes áram a a föld/táp felé max. 200mA lehet.
- A békesség kedvéért a reléket egy-egy tranzisztorral kapcsolnám. (Könnyebb a tranzisztor cserélni, mint a PIC -et).
- Zöld LED -et a kimenet és a +5V táp között lehetne elhelyezni előtét ellenállással.
- 20m nem lehet akadály a vezérlésnél. A relék működhetnek (a tranzisztor típusától függően) akár a 24V DC -ről is.
- A bemeneteken a relék helyett lehetne optocsatoló is.
- Az ajtómágnesekhez is kellene egy-egy dióda.
Következő: »»   1158 / 1159
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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