Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1157 / 1320
(#) Zsora válasza potyo hozzászólására (») Dec 27, 2013 /
 
PWM-el szabályzod az izzó fényét? 50Hz-es hálózatnál akkor a PWM frekvencia nem lehet túl sok, és az villódzással járhat. 50Hz-es frekveniával 3 fokozat érhető el, 25Hz-essel 5 fokozat, 12,5Hz-essel pedig 9. (És ebbe a 0 és a max. szint is benne van.) Többszörös modulációval ez persze némileg javítható.
(#) watt válasza Zsora hozzászólására (») Dec 27, 2013 /
 
Szia! Én úgy olvastam, hogy fázisszögvezérlést programozott le, arról is beszélgettünk... (szinkronjel, Timer, stb.)
A hozzászólás módosítva: Dec 27, 2013
(#) Zsora válasza watt hozzászólására (») Dec 28, 2013 /
 
Tehát csak a kikapcsolás történik nullátmenetnél, a bekapcsolás meg tetszőleges időben. Gyakorlatilag az is PWM. Én arra gondoltam először hogy mind a be-, mind a kikapcsolást nullátmenetnél csinálja. Dehát írta is hogy fázishasítás...
(#) watt válasza Zsora hozzászólására (») Dec 28, 2013 /
 
Gyakorlatilag az, de annál azért több, ezért nem hívjuk annak, mert szinkron nélküli PWM-el is lehet, csak nem jó.
(#) potyo válasza watt hozzászólására (») Dec 28, 2013 /
 
Gyújtásszögvezérlés vagy másnéven fázishasítás. Fázisszögvezérlés is egy érdekes dolog, de az másra való

Egyébként sikerült úgy néz ki, működőre összehozni. Voltak apró problémák, mint például nem dugtam be a szinkronizálást végző jelet a picbe, ennek ellenére antennaként összeszedte a jelet, és egész jól működött így is Na aztán azt bedugtam, próbálgattam INT0 és INT1 lábakkal a fel-le irányú megszakítás generálást, majd átmentem INT1 és INT2 lábakra, de persze ott is elfelejtettem átdugni, és az INT2 láb a levegőben lógott, de azért mégis működött valamennyire, csak aszimmetrikus lett az eredmény a pozitív-negatív félhullámban. Amikor erre rájöttem és átdugtam a jelet az INT1 és INT2 lábakra, jó lett
(#) watt válasza potyo hozzászólására (») Dec 29, 2013 /
 
Ezt mindig összekeverem!
Látod, akkor a legjobb, ha bedugod!
(#) icserny válasza watt hozzászólására (») Dec 29, 2013 /
 
Csak nem mindegy, hogy mit, mikor, hova...
(#) janimester hozzászólása Jan 3, 2014 /
 
Üdvözletem az uraknak. Lenne egy egyszerű kérdésem . Az egyik kollegával sikerült megoldanunk a multkori hőfokszabályzós dolgomat. Most az lenne a kérdésem hogy ugye van a változó amit növelek- csökkentek. És most nem látom a kijelzőn éppen hány fokra állítottam be a dolgot. Próbáltam kiíratni de nem megy , túlcsordul a parancstól a proci. Azthiszem ezt a számot át kéne konvertálni ASCII-ra és úgy kiííratni vagy tévedek? Ez az 1040-es érték 65 foknak felel meg. De így nem írja ki a pic, valaki segítene hogy szerinte milyen számrendszer beli szám lehet ez? És +10 vagy - 10 egységgel kell növelni a változót hogy a fokom 1-et fel vagy 1-et lefele változzon ha ez segít
  1. unsigned int hatar = 1040; //65 foknak felel meg
.
(#) Hp41C válasza janimester hozzászólására (») Jan 3, 2014 /
 
65 * 16 = 1040. 16 -osával kell csökkenteni vagy növelni 1 fokos lépéshez.
A hozzászólás módosítva: Jan 3, 2014
(#) vicsys válasza janimester hozzászólására (») Jan 3, 2014 /
 
Milyen fordítóban? Mert pl. a CCS-nél int8-nak veszi ami 0-tól 255-ig mehet.
(#) janimester válasza vicsys hozzászólására (») Jan 3, 2014 /
 
Mikroc for PIC V5.61 beépített fordítójával. Igen, igazad van HP41C, csak közben variáltam pár dolgot és ennyi lett de átírtam 16-ra ez működik semmi gond vele csak nem tudom kivarázsolni a kijelzőre és most kezdtem el nézegetni a változók értékét. unsigned char-ral akartam kiíratni ami 0-255 igen de hiába osztom el a határ értékét 16-al majd azt akarom a char függvénnyel kiíratni totál hülyeségeket ír ki a helyére. A kapcsolási érték nem fog menni 80 fok fölé ezért is elég ennyi tizedesjegy ezzel nem kell foglalkozni.
  1. unsigned int hatar = 1040;
  2. char kapcsolt;   //0-255
  3.  
  4. kapcsolt = (hatar/16);
  5. LCD_Out(4,1,kapcsolt);
A hozzászólás módosítva: Jan 3, 2014
(#) Hp41C válasza janimester hozzászólására (») Jan 3, 2014 / 1
 
Valahogy így:
  1. unsigned int hatar = 1040;
  2.     char kapcsolt[2];   //0-255
  3.      
  4.     kapcsolt[1] = (hatar/16) % 10;
  5.     kapcsolt[0] = (hatar/16) / 10;
  6.  
  7.     LCD_Out(4,1,kapcsolt[0]+0x30);
  8.     LCD_Out(5,1,kapcsolt[1]+0x30);

Esetleg:
  1. char txt[4];
  2. unsigned int hatar = 1040;
  3. ByteToStr(hatar, txt);
  4. LCD_Out(1,1,txt);
A hozzászólás módosítva: Jan 3, 2014
(#) icserny válasza janimester hozzászólására (») Jan 3, 2014 / 1
 
Idézet:
„de hiába osztom el a határ értékét 16-al majd azt akarom a char függvénnyel kiíratni totál hülyeségeket ír ki a helyére.”
Csak amit mondtál neki...
Először is tisztázzuk, hogy mi a karakter és mi a kiírandó szám, majd tisztázzuk, hogy a kiírandó számból (ami nem írható le egy számjeggyel, hogyan lehet a kiírandó karakteret előállítani.

Az ASCII táblában decimális 48 és 57 közötti kódok jelölik a 0,1,2,...,9 karaktereket. Tehát ha egyjegyű számot akarsz kiíratni, akkor 48-at kell hozzáadni, hogy a megfelelő karaktert írasd ki.

Csak többjegyű számként kiírható mennyiségekből előbb helyiértékenként kell a kiírandó számjegyet meghatározni, majd ebből egyenként (48 hozzáadásával) a kiírandó karaktert előállítani, s végül kiíratni.

A MikroC egyik mintapéldájában a tlong változóban millivolt egységekben tárolt értéket így íratják ki V-ban:
  1. unsigned char ch;
  2. long tlong;
  3. ...
  4.         ch = tlong / 1000;           // Extract volts (thousands of millivolts)
  5.                                      // from result
  6.         Lcd_Chr(2,9,48+ch);          // Write result in ASCII format
  7.         Lcd_Chr_CP('.');
  8.         ch = (tlong / 100) % 10;     // Extract hundreds of millivolts
  9.         Lcd_Chr_CP(48+ch);           // Write result in ASCII format
  10.         ch = (tlong / 10) % 10;      // Extract tens of millivolts
  11.         Lcd_Chr_CP(48+ch);           // Write result in ASCII format
  12.         ch = tlong % 10;             // Extract digits for millivolts
  13.         Lcd_Chr_CP(48+ch);           // Write result in ASCII format
  14.         Lcd_Chr_CP('V');


Bővebben: Link
A hozzászólás módosítva: Jan 3, 2014
(#) DanyyX hozzászólása Jan 5, 2014 /
 
Sziasztok!

Foglalkozott-e már valaki precíz frekvenciaszintézissel?
Egy olyan feladatot kellene megoldanom, hogy kb. 120...160kHz között változtatható frekvenciájú négyszögjelet kellene előállítania a kontrollernek (18F46K22 - Fosc: 32MHz) kb. 1...10Hz lépésközzel. Szoftveres késleltetőhurok variálásával nem tudom megoldani, mert a PIC-nek van egyéb dolga is, és eddigi számítások és próbálkozások alapján a CCP modullal sem lehet efféle vezérlést készíteni. Tulajdonképpen egy NCO-t (Numeric Controlled Oscillator) kellene megvalósítani. A Microchip-nek van egy jó Technical Bulletinje, ami alapján el lehetne indulni TB3071 valamint a 16F1509-es PIC tartalmaz CLC-ket és NCO modult is, ha ezekkel kapcsolatban (vagy egyéb más megoldással) van valakinek tapasztalata, szívesen venném a segítséget!
(#) GPeti1977 válasza DanyyX hozzászólására (») Jan 5, 2014 /
 
Lehet DDS áramkört kellene használni amit a PIC programoz fel.
(#) Attila86 hozzászólása Jan 6, 2014 /
 
Előre is elnézést kérek hogy ide írom de elképzelésem sincs melyik topikba illene jobban a kérdésem:

Tervezek (egyenlőre még fejben) egy berendezést aminek bizonyos események (le és felfutó élek) hatására el kellene mentenie egy adatot (idő). Azaz konkrétan: lenne egy PIC aminek a B portja bemenet lenne és így 8db vezetéken figyelné hogy mikor jön fel vagy lefutó él. Emellett futna benne egy óra program. Amikor valamelyik lábán szintváltozás történik, gyorsan megnézné hogy mennyi az idő és eltárolná hogy pontosan mikor melyik bemenetén volt szintváltozás.
Ezzel eddig semmi probléma, most jön a csavar:
Ezeket az adatokat nem elég elmenteni a memóriájába, sem kijelezni egy kijelzőre. Ki kellene nyomtatnia egy olyan papírszalagra amilyet a pénztárgépekben is használnak!

Lehet kapni szerintetek ilyen hőpapír-nyomtató gépet? Nem is kellene nekem egy egész pénztárgép persze, csak a szalagra nyomtató része és a hozzá való papír-tekergető mechanika. Nem kis hab a tortán hogy rendkívül jó lenne ha kb az LCD-kijelzőkhöz hasonlóan egyszerű lenne a vele való nyomtatás.
(#) Hp41C válasza Attila86 hozzászólására (») Jan 6, 2014 /
 
Keress soros nyomtatót! A PIC uart -jával és egy szintillesztővel tudsz rá nyomtatni. Esetleg egy SPION Orgenizer nyomtatója...
(#) ktamas66 válasza Attila86 hozzászólására (») Jan 6, 2014 /
 
A Star SP vagy TSP sorozatból pl. választhatsz, ebből van soros és párhuzamos is.
(#) Attila86 válasza Hp41C hozzászólására (») Jan 6, 2014 /
 
Azt hiszem meg is találtam ami tökéletes lenne nekem: Bővebben: Link
Mondjuk majdnem 10000Ft. Viszont van hozzá rendes pdf amiben leírják hogyan kell vezérelni: Bővebben: Link
Azért ez assembly-ben nem lesz túl egyszerű, de legalább van hozzá korrekt dokumentáció amiből el lehet indulni.
(#) vicsys válasza Attila86 hozzászólására (») Jan 6, 2014 /
 
Csak átfutottam, de szerintem ha nem akarsz belemenni a formázásba, semmi extra nincs. A fogadás, már más tészta. A papírelakadást, kifogyást is kellene detektálni/lekezelni. Ha nem fontos, még ezzel sem kell foglalkoznod. Maga a kiíratás meg tényleg mehet a HW-es UARt-ról.
A nyomtató nem drága. Egy PC-s tintasugaras gagyi nyomtató is drágább...
(#) potyo hozzászólása Jan 11, 2014 /
 
Találkozott már valaki ilyennel? 12F683 kontroller, PWM jelet állítok elő vele tesztelési célból egy másik kontroller számára. A PWM kitöltési tényezőjét egy potméterrel állítgatom, amit az AD mutat, az lesz a PWM kitöltési tényezője. Látszólag jól működik, egy kivétellel; azt vettem észre, hogy amikor teljesen letekerem a potmétert, akkor a kitöltési tényező felmegy nagyra. Talán 100%-ra, de nincs szkópom, ezt nem tudtam megnézni, csak egy led van a lábra kötve, annak a fényerejéből saccolom. Nem értettem, mi történik, mire ma ismét elkezdtem átnézni a PWM-ről szóló részt az adatlapban, és rájöttem, hogy én a CCPR1H regiszterbe írtam a kitöltési tényezőt a CCPR1L helyett. CCPR1L-el nemis foglalkoztam sehol, ami reset után benne volt, az maradt. Átírtam a CCPR1L-re, onnan már letekerve a potmétert elalszik a led. Viszont az adatlap azt írja, hogy PWM módban a CCPR1H regiszter csak olvasható, ennélfogva eleve nem kellett volna működnie. Ha meg mégis, akkor miért csak részlegesen?
(#) watt válasza potyo hozzászólására (») Jan 11, 2014 /
 
Biztosan valami még is beleíródott, mert a kapcsolási rajz szerint a CCP1L-ből átíródik a H-ba az érték. Valószínű írható a H részlegesen, a valós bekötést nem látjuk. A gyártó csak azt írja elő, hogy az L-be tedd az értéket, nem gondoskodott arról, hogy a H valóban ne legyen írható, mert nem lényeges.
(#) havranarpi hozzászólása Jan 12, 2014 /
 
Sziasztok!
Elkezdtem tanul a PIC programozást.
Első lépésként megvettem a PIC mikrovezérlők alkalmazástechináka III. című könyvet és megépítettem a HP41C féle égetőt.Egy gond azomban akadt.A könyv mindenüt Explorer 16 Development Board fejlesztőpanelról ír.Egy ilyen fejlesztőpanel elkészíthető házilag is?
Vagy valamilyen más panelt tudnátok ajánlani?
Nem szeretnék olyan sokat kiadni egy ilyen panelért.
A hozzászólás módosítva: Jan 12, 2014
(#) watt válasza havranarpi hozzászólására (») Jan 12, 2014 /
 
Olvasd el a topic címét, majd ha megértetted, tedd fel a kérdésed újból a kiemelt PIC kezdőknek topicban!
(#) janimester hozzászólása Jan 12, 2014 /
 
Üdv az uraknak. Mivel már nagyon sok dolgot csinál egyszerre a picem ezért egy adott mennyiségű függvény után elkezdte nem szeretni ezt a fordulatszámmérő programot. Túlcsordul vele a proci, de ha az 1171875-ből kitörlöm az utolsó két számjegyet lefordul a program és elindul szimulátorban is ugye így csak két helyiértéknyi adatot tudok kiíratni a kijelzőre. Tehát a pic lábát meghajtom 50hz-el akkor nem 3000-et ír ki hanem csak 30-at mert ugye hiányzik a két utolsó szám. Mivel lehetne ezt az óriási számot egyszerűbben kezelni hogy a sok más feladat melett ne foglalja teljesen le a picet és csorduljon túl?
  1. unsigned short int falling_edge = 0;
  2. unsigned short int TMR0H_value, TMR0L_value;
  3. unsigned  int TMR0_Value;       ;
  4. char TMR0_value_to_LCD[7];
  5. unsigned int rev;
  6. char rev_to_LCD[7];   //11
  7.  
  8. void interrupt() {
  9.     if(INTCON.INT0IF) {
  10.         falling_edge++;
  11.         if(falling_edge == 1) {
  12.             TMR0H = TMR0L = 0;
  13.         }
  14.         if(falling_edge == 2) {
  15.             TMR0H_value = TMR0H;
  16.             TMR0L_value = TMR0L;
  17.             TMR0_value = (TMR0H << 8) + TMR0L;   // két nyolcbites változó összefűzése 16 bitessé
  18.           ////////////////////////////////////////////////////////////////////////  TMR0_value = (((unsigned int)TMR0H) << 8) + (unsigned int)TMR0L;
  19.             rev = 1171875 /  TMR0L_value;         // (1000 * 1000) / (256 * 4 * TMR0_value)
  20.             TMR0H = TMR0L = 0;
  21.             falling_edge = 0;
  22.         }
  23.         INTCON.INT0IF = 0;
  24.     }
  25. }
(#) icserny válasza janimester hozzászólására (») Jan 13, 2014 /
 
A rev változó milyen típusnak van deklarálva? A 1171875 ugyanis nem fér el 16 bitben.
(#) janimester válasza icserny hozzászólására (») Jan 13, 2014 /
 
Unsigned int-nek oda van írva 0-4gb-nyi méretű értéket zár be ez a típus. Előtte működött mikor nem volt ennyire teletömve a picem most fagy be ettől a nagy számítástól. Azaz túlcsordul.
(#) whalaky válasza janimester hozzászólására (») Jan 13, 2014 /
 
Hova is van írva? 32 bites fordító? 32 bites PIC? Azért a dolog felvet pár kérdést....
Az hogy mi az a 0-4gb már meg sem merem kérdezni
Az hogy egy számláló túlcsordul nem okoz fagyást, legfeljebb nem a várt eredményt kapod (ami nem hiba, teljesen normális működés).
Mindamellett a kommentekben is ott van hogy 16 bites, így nem meglepő az eredmény, az a meglepő hogy eddig ment.....
  1. rev = 1171875UL /  TMR0L_value;

persze ettől még a revnek is 32 bitesnek kell lenni ....
A hozzászólás módosítva: Jan 13, 2014
(#) tikiss válasza janimester hozzászólására (») Jan 13, 2014 /
 
Szia!
Egy kérdés, miért számolod ki a TMR0_value-t ha a rev számításánál nem használod?
Így a 32bites konstansodat a 16bites változód helyett csak egy 8bitessel osztod aminek az eredménye biztos nem fér el a 16bites rev-ben.
(#) janimester hozzászólása Jan 13, 2014 /
 
köszönöm a válaszokat, amúgy nem én írtam egy Bonca nevű tag rakta fel ide az oldalra és azt használtam fel külöünösebben nem mélyültem bele eddig mi mit csinál. A pic 18f4550 amin működnie kéne. Amúgy Tikiss ez még frekvenciát is mért , de én kiszedtem ezt a frekvenciás dolgot belőle lehet ahhoz kellet ez a tmr o value-s dolog.
A hozzászólás módosítva: Jan 13, 2014
Következő: »»   1157 / 1320
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