Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1116 / 1319
(#) mateakos válasza Lüke Aladár hozzászólására (») Márc 12, 2013 /
 
Szia.
Ilyen esetben az SD kártya felé ellenállásosztóval le kell osztani a PIC kimenetét, vagy más módszerrel illeszteni. Az SD kártyától a PIC felé pedig ellenőrizni kell, hogy elég lesz-e a PIC-nek a 3,3V, hogy logikai magasnak észlelje. Amelyik típusokat én használtam, azoknál a TTL bemeneteken 5V-os tápnál már 2V is magasnak számít, de Schmitt triggeres bemenetnél még nem (pl. pic18f2550 esetén 5V-os tápnál 4V a schmitt triggeres bemenetek felső billenőpontja). A hardveres SPI modul schmitt triggeres bemeneti puffert használ ennél a típusnál és gondolom sok másnál is, úgyhogy ilyen vegyes tápfeszültség mellett érdemes megvizsgálni az adott típus adatlapját a stabil és hibátlan működés érdekében (Az electrical characteristics fejezetben írnak ezekről). Amennyiben nincs komoly ok a vegyes tápfeszültség használatára, érdemes inkább azonos tápfeszültségről használni az egészet.
Megjegyzés: Nekem valamiért működött a hardveres SPI-vel is de ez csak szerencse kérdése lehetett, magyarázatot nem találtam rá.
A hozzászólás módosítva: Márc 12, 2013
(#) benjami válasza Hp41C hozzászólására (») Márc 12, 2013 /
 
Jelen esetben egy program működőképessége a probléma, nem a sebessége. Az XXXbits.YYY forma lehet hogy hosszabb/lassabb, de olvashatóbb és jobban megállapítható belőle hogy mit is csinál.
Ha már működik a program akkor tényleg lehet az általad leírt módokon optimalizálni, csak később már ne vidd át a forrásod egy olyan vezérlőre ahol esetleg az adott bitet máshová tették. Nem tudom a fordító miért nem szereti a btfsc/btfss utasításokat, azzal is lehetne rövidebbé és gyorsabbá tenni a kódot, ráadásul a W regisztert sem állítaná át.
(#) janish válasza _vl_ hozzászólására (») Márc 13, 2013 /
 
Hali,
nyertél....
Valóban a USART adó megszakítása volt a ludas és úgy tűnik, hogy az alacsony prioritású megszakításoknál jelentkező problémáért is ez volt a felelős. Mondjuk még van egy-két olyan részlet ami nem teljesen úgy működik mint szeretném, de legalább már tudom, hogy a megszakításkezelés okozza a gondot.
Nagyon szépen köszönöm a segítséget.
(#) Lüke Aladár válasza mateakos hozzászólására (») Márc 13, 2013 /
 
Köszönöm a segítséget!
Egy 18F97J60-at néztem ki ezek után, ez elvileg 2.35V és 3.6V közötti tápfeszt igényel, ha jól értelmeztem az adatlapot, szóval mennie kell a dolognak.
(#) Hp41C válasza benjami hozzászólására (») Márc 13, 2013 /
 
Szia!
Mivel a perifériák felépítése a PIC családok között meglehetősen egyformák, ezért egy csomó kontrollerre sikeresen átvittem már ezeket a megoldásokat. Ha pedig, mondjuk az uart2 -re kell átvinni, a xxxbits.yyy -t is át kell írni - majdnem ugyanannyi fáredtság. Mosdjuk más gyártó eleve más felépítése miatt az ennyire HW közeni rutinok úgysem hordozhatók - márcsak a könyvtárak nevei és a bennük levő függvények nevei, paraméterezésük miatt sem.
Tényleges problámáról írok: Miért olyan hosszú egy C program, amikor ugyanazt csinálja, mint az assembly (16F1829 asm 3K, C bele sem fér a 8K -ba)??
(#) janimester hozzászólása Márc 22, 2013 /
 
Üdv. Valaki nem tud lcd-s sebességmérő programot 16F szériához? Vagy az sem baj ha más picre való csak lássam a program felépülését.
(#) watt válasza janimester hozzászólására (») Márc 22, 2013 /
 
A sebességmérés két impulzus közötti idő mérésére vezethető le. Ezt a CCPx modul capture módjával szoktuk megoldani. Adatlapban megtalálod a hozzá tartozó regisztereket.
LCD-hez lehet találni kész projecteket, de meg is lehet írni, egy haladónak ez nem jelenthet problémát!
A hozzászólás módosítva: Márc 22, 2013
(#) kameleon2 válasza janimester hozzászólására (») Márc 22, 2013 /
 
Milyen sebességet szeretnél mérni? Esetleg frekvencia-feszültség átalakítóval egy sima panelméter nem jó? Mivel mérnéd a sebességet?
(#) janimester válasza kameleon2 hozzászólására (») Márc 22, 2013 /
 
Motorra lenne , ha lehetne egy pc ventillátor hall érzékelőjével mérném a sebességet belekalkulálva a kerék körátmérőjét.
(#) kameleon2 válasza janimester hozzászólására (») Márc 22, 2013 /
 
Akkor, ha jól gondolom - 1 érzékelővel 1 fordulat másodpercenként az 1 Herz, 10 fordulat másodpercenként 10 Herz stb. Akkor mást nem kell tenned, mind számlálni a teljes köröket és összevetni azzal, 1 másodperc alatt mennyi kör volt (mennyi impulzus érkezett be). Ez egy resetehető számláló. A reset jelet 1 másodpercenként kell előállítani. A számláló értékét pedig kijelezni az LCD-n decimális értékben. Ez nem tűnik nagy feladatnak, vagy rosszul gondolom? Én ugyan nem PIC-et használok, de nem tűnik pilótavizsgás feladatnak. A mikrokontroller órajeléből az 1 sec előállítása sem bonyolult. A legnehezebb része, ha soros LCD-d van, annak a kódolása, de erre számtalan kész projekt létezik. Propellerrel (p8x32) az asztalomon lévő elemekből összedobálnám.
(#) proba válasza janimester hozzászólására (») Márc 22, 2013 /
 
A múltkor tanulmányozott ventilátorban benne volt a szükséges alkatrészek helye ,egy SMD tranzisztor meg egy ellenállás beépítése után szépen adta a négyszögjelet.Ha nincs benne a szabályzó vezeték lehet egyszerűen pótolható.(vagy olyat kell választani ami tudja.(nem csak a forgást jelzi ,hanem jelet is ad)
Maga a mérés tényleg nagyon egyszerű,legtöbb PIC-ben a TIMMER1 számláló képes erre.A bemenetét külső jelre állítva ,már csak másodpercenként kiolvasod,majd törlöd.(ha nagyon pontos akarsz lenni ,akkor egy másik számlálóval kapuztatod a bemenetét)
(#) pjg válasza proba hozzászólására (») Márc 22, 2013 /
 
Ez így nem lesz valami komfortos. Nagyon alacsony a frekvencia. Sokkal jobb lenne megmérni egy körülfordulás idejét. és abból számolni a sebességet.
(#) watt válasza pjg hozzászólására (») Márc 22, 2013 /
 
Pontosan, én is ezt írtam le először. A dolog egy haladónak triviális. Nem csak a kérdésnek kellene haladónak lenni...
A hozzászólás módosítva: Márc 22, 2013
(#) proba válasza pjg hozzászólására (») Márc 22, 2013 /
 
Jól van na ,lehet én vagyok a lassú ,de nekem már gyorsan forog,nem győzöm számolni,lehet a PIC ügyesebb...
(#) NickE hozzászólása Márc 23, 2013 /
 
MCP2200 USB-soros átalakítóval kapcsolatban van kérdésem, remélem, nem off ez itt. Maga az IC jól működik, IO vonalait használom, tehát nem USB-soros átalakításra kell. Viszont az egyik ügyfélnek az lenne az igénye, hogy több ilyet is csatlakoztatni kellene, viszont én úgy látom, hogy ennek az IC-nek a VendorID : ProductID párosa gyárilag van beégetve fixen. (Microchip igény esetén egyedit éget be, de ez nyilván kis tételnél nem működik) Van több IC kezelésére szolgáló függvény (GetNoOfDevices, SelectDevice, stb), próbálgattam, hát érdekes eredményeket adott. Szóval a kérdés az, hogy lehet MCP2200-ból egyszerre többet csatlakoztatni és külön vezérelni őket, vagy az azonos VID : PID miatt ez nem fog működni?
A hozzászólás módosítva: Márc 23, 2013
(#) _vl_ válasza NickE hozzászólására (») Márc 23, 2013 /
 
Szerintem működnie kellene annak, hogy több ugyanolyan VID : PID van a gépre egyidőben rákötve (nyilván külön host portok vagy hub kell hozzá), az USB-nek ezt kezelnie kell tudni, az egyedüli kérdés, hogy hogyan tudod azonosítani, hogy melyik melyik... Ha van összerakva egy (nekem nincs ilyenem), nézd meg, hogy nem mond-e valami gyári számot magáról a chip az USB paraméter blokkban - azt gondolnám, hogy van neki ilyenje. Vagy lehet az MCP2200 mögé kötött cucc soros protokolljába beépíteni valami azonosító adatot.
A hozzászólás módosítva: Márc 23, 2013
(#) watt válasza NickE hozzászólására (») Márc 23, 2013 /
 
Szia! Régen jártál itt!
Megvan a forrása az átalakítónak? Ebben egyPIC18F14K50 van és ha jól sejtem egy CDC stack. A stack-ben bármit át lehet írni.
(#) _vl_ válasza NickE hozzászólására (») Márc 23, 2013 /
 
Egyébként ott van benne az adatlapban, hogy szabadon konfigurálható (8-9. oldal) az összes USB paraméter (VID, PID, gyártó és termék elnevezés, stb.), és bónuszként minden egyes példány egyedi gyári szám stringet tartalmaz kapásból, szóval még csak hozzájuk sem kell nyúlni, anélkül is azonosíthatóak.
(#) NickE válasza watt hozzászólására (») Márc 23, 2013 /
 
Szia!

Az utóbbi években keveset fórumozok.
Azt tudom, hogy PIC a belseje, de annyira nem akarok belemélyedni, hogy átírjam a firmwaret.
(#) NickE válasza _vl_ hozzászólására (») Márc 23, 2013 /
 
Letöltöttem a legújabb drivert. Sajnos ezzel is gond volt, írták a verzióinfóban, hogy pont ezzel a funkcióval volt gond a korábbi driverrel. Most már szépen visszaadja a GetNoOfDevices függvény a csatlakoztatott eszközök számát, de a SelectDevice függvény valamiért még mindig nem változtat semmit. Elvileg a függvény paraméterében 0, 1, 2, ... hivással kellene kiválasztani, hogy melyik eszköz legyen aktív. Eddig akármilyen paraméterrel hívtam, mindig ugyanaz az eszköz volt aktív. Na még próbálkozok.
(#) Hp41C hozzászólása Márc 24, 2013 /
 
Egy idézet a Microchip fórumáról:
Idézet:
„MPLAB IDE v8.92 (June release) will be last MPLAB 8 version wth new devices.”
A hozzászólás módosítva: Márc 24, 2013
(#) potyo válasza Hp41C hozzászólására (») Márc 24, 2013 /
 
Ezekszerint muszáj lesz áttérni lassan az MplabX-re
(#) nedudgi válasza potyo hozzászólására (») Márc 24, 2013 /
 
Olvasd tovább. "Három hónap elég lesz áttérni Cortex-Mx architektúrára...
(#) watt válasza potyo hozzászólására (») Márc 24, 2013 /
 
Nem ez a baj! Nem jó, tele van hibával, lassú mindt az állat(java). Valószínű nem fogok legújjabb PIC-eket használni...
(#) potyo válasza watt hozzászólására (») Márc 24, 2013 /
 
Sajnos nekem is ez a bajom, hogy piszok lassú, és a Pickit3-al is tökéletlenkedik (tökéletlenkedett pár hónapja, amikor próbáltam).
(#) agressiv hozzászólása Márc 26, 2013 /
 
Tiszteelt fórumlakók. Adott két PIC, I2C kapcsolattal, illetve van még a buszon egy másik IC is. Az egyik master módban megy, a másik slave módban. Az lenne aprobléma, hogy a slave PIC az harmadik IC-nek küldött adatot is veszi attól függetlenül, hogy más címre van állítva. Az igaz, hogy a küldött adat ugyanaz, de a cím nem. PIC C compilerben van írva a programja, be van állítva a cím, de hiába. Ha teljesen értlemetlen címet állítok be (amit a compiler még enged) akkor is veszi az adatot a slave PIC. Mit hagyhatok ki, vagy a címzést a programba is bele kell írni?

A slave PIC programja.

  1. #include <16F877A.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6. #FUSES PUT                      //Power Up Timer
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NODEBUG                  //No Debug mode for ICD
  9. #FUSES NOBROWNOUT               //No brownout reset
  10. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  11. #FUSES NOCPD                    //No EE protection
  12. #FUSES NOWRT                    //Program memory not write protected
  13. #FUSES RESERVED                 //Used to set the reserved FUSE bits
  14.  
  15. #ZERO_RAM
  16.  
  17. #use delay(clock=20000000)
  18. #use i2c(SLAVE, SDA=PIN_A0, SCL=PIN_A1, ADDRESS=0x10001010, force_hw, fast)
  19.  
  20.  
  21. int16 matek,matekb;
  22.  
  23. void main()
  24. {
  25.  
  26.    setup_adc_ports(NO_ANALOGS);
  27.    setup_adc(ADC_CLOCK_DIV_2);
  28.    setup_psp(PSP_DISABLED);
  29.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  30.    setup_timer_1(T1_DISABLED);
  31.    setup_timer_2(T2_DISABLED,0,1);
  32.    setup_comparator(NC_NC_NC_NC);
  33.    setup_vref(FALSE);
  34.    output_c(0b00000010);
  35.    output_d(0b00000010);
  36.    I2C_SlaveAddr(0x10001010);
  37.    delay_ms(2000);
  38.    
  39.  
  40. for(;;)
  41.  
  42.   {
  43.    
  44.     matek=i2c_read(0);
  45.    
  46.      
  47.      if (matek==(0b11100000))
  48.      
  49.      {
  50.       output_d(0b11111100);
  51.      }
  52.      
  53.      if (matek==(0b11100001))
  54.      
  55.      {
  56.       output_d(0b01100000);
  57.      }
  58.      
  59.      if (matek==(0b11100010))
  60.      
  61.      {
  62.       output_d(0b11011010);
  63.      }
  64.      
  65.      if (matek==(0b11100011))
  66.      
  67.      {
  68.       output_d(0b11110010);
  69.      }
  70.      
  71.      if (matek==(0b11100100))
  72.      
  73.      {
  74.       output_d(0b01100110);
  75.      }
  76.      
  77.      if (matek==(0b11100101))
  78.      
  79.      {
  80.       output_d(0b10110110);
  81.      }
  82.      
  83.      if (matek==(0b11100110))
  84.      
  85.      {
  86.       output_d(0b10111110);
  87.      }
  88.      
  89.      if (matek==(0b11100111))
  90.      
  91.      {
  92.       output_d(0b11100000);
  93.      }
  94.      
  95.      if (matek==(0b11101000))
  96.      
  97.      {
  98.       output_d(0b11111110);
  99.      }
  100.      
  101.      if (matek==(0b11101001))
  102.      
  103.      {
  104.       output_d(0b11110110);
  105.      }
  106.      
  107.       matekb=i2c_read(0);
  108.      
  109.      if (matekb==(0b11010000))
  110.      
  111.      {
  112.       output_c(0b11111100);
  113.      }
  114.      
  115.      if (matekb==(0b11010001))
  116.      
  117.      {
  118.       output_c(0b01100000);
  119.      }
  120.      
  121.      if (matekb==(0b11010010))
  122.      
  123.      {
  124.       output_c(0b11011010);
  125.      }
  126.      
  127.      if (matekb==(0b11010011))
  128.      
  129.      {
  130.       output_c(0b11110010);
  131.      }
  132.      
  133.      if (matekb==(0b11010100))
  134.      
  135.      {
  136.       output_c(0b01100110);
  137.      }
  138.      
  139.      if (matekb==(0b11010101))
  140.      
  141.      {
  142.       output_c(0b10110110);
  143.      }
  144.      
  145.      if (matekb==(0b11010110))
  146.      
  147.      {
  148.       output_c(0b10111110);
  149.      }
  150.      
  151.      if (matekb==(0b11010111))
  152.      
  153.      {
  154.       output_c(0b11100000);
  155.      }
  156.      
  157.     }
  158.    }
(#) _vl_ válasza agressiv hozzászólására (») Márc 26, 2013 /
 
Ha nem CCS-ről lenne szó, azt mondanám, hogy az adott PIC címregiszterét és az SSP konfigurációját kell jól beállítani - az adatlapból ezek kiolvashatóak. Ill. címnek bizonyos értékek nem használhatóak (lásd I2C doksi), mivel azok különféle egyéb (pl. broadcast) célokra valók.
Hogy aztán ezeket CCS-ben hogy kell - azt a CCS fórumban kéne kérdezni.
(#) agressiv válasza _vl_ hozzászólására (») Márc 26, 2013 /
 
Világos, de akkor ezekszerint ennek épp nem működnie kellene. Az a baj, hogy ez mindíg működik, ha értelmes címet adok meg, ha nem. Most éppen úgy van beállítva a dolog, hogy használható, de akkor is idegesít, hogy miért vesz minden adatot, mert szeretném finomítani, de így nem lehet.
(#) _vl_ válasza agressiv hozzászólására (») Márc 26, 2013 /
 
Ha rossz címet adsz meg, az nem feltétlenül azt jelenti, hogy nem fog rá reagálni az IC, lehet az is az eredmény, hogy más címekre (mondjuk mindre) reagál. Nekem pl. sikerült ilyen címmel tesztelni anno, amikor először játszottam I2C-vel - én se olvastam doksit előtte.
(#) agressiv válasza _vl_ hozzászólására (») Márc 26, 2013 /
 
Következő. Beüzelemtem egy némítás funkciót is amikor a legalsó hangerőértéknél lejjebb tekerem, akkor némítja az IC-t a kijelzőre pedig két középső vonalat ír ki. Működik is a dolog, de valamiért mindíg bevillan a nulla is amikor tekergetem, pedig nem kellene.

  1. if (matek==(0b11100000))
  2.          {
  3.          if (matek==(0b11011000))
  4.            {
  5.             output_d(0b00000010);
  6.            }
  7.            else
  8.            
  9.            output_d(0b11111100);
  10.            }
  11.  
  12.      if (matek==(0b11100001))
  13.      
  14.      {
  15.       output_d(0b01100000);
  16.      }


Most így néz ki, de ahány módon ez lehetséges, mindenhogyan megpróbáltam átugrasztani a nulla felett, de valamiért mindíg bevillan és biztos, hogy a nullával van gond, mert, ha kitörlöm akkor nem villan és persze nem is ír ki soha nullát. -79-ig megy le a számláló és úgy van megcsinálva, hogy ha 80-ra ér és az első karakter nyolcas, akkor 8 helyett vonalat jelezzen és a második is csak egy vonal legyen, ami egyébként nulla lenne ugye.
Következő: »»   1116 / 1319
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