Fórum témák

» Több friss téma
Fórum » PIC programozás mikroC fejlesztőkörnyezetben
Lapozás: OK   8 / 10
(#) Szárnyas válasza haffre hozzászólására (») Máj 29, 2020 /
 
A program azon részét is másold be, ahol értéket adsz a tömb elemeinek.

A Windows alatt a Ctrl+Alt és az AltGr billentyűk egyenértékűek egymással, ezért az AltGr+W lenyomásakor az Ctrl+Alt+W (ugyanígy az AltGr+G és az Ctrl+Alt+G esetében is) gyorsbillentyűhöz rendelt funkció is meghívódik, ami úgy tűnik, hogy a programban ütközik a speciális karakter megjelenítésével.
Én a ] zárójelet az AltGr+H billentyűkombinációhoz rendeltem hozzá a Microsoft Keyboard Layout Creator 1.4 programban. A | karaktert is hozzá lehetne rendelni valamelyik másik gombhoz, amire nincs definiálva a programban gyorsbillentyű. Sajnos jobb ötletem nekem sincs, a magyar billentyűkioszással nem éppen kompatibilis a program újabb változatai.
A hozzászólás módosítva: Máj 29, 2020
(#) haffre hozzászólása Máj 29, 2020 /
 
Szia, köszi a gyors választ és a gyorsbillentyű tanácsot!

A program-részlet:
unsigned tomb[] = {1,2,3,4};
unsigned tmp, ADC;
char i;
unsigned atlag (unsigned *a[]) {
tmp = 0;
for (i = 0; i <= 3; i++) {
tmp += a[i]; //4 elem összege
}
tmp = tmp >> 2; //átlag (osztás 4-el)
return tmp;
}
....
void main() {
ADC = atlag(tomb);
...
}
Ez csak egy átlagszámítási kísérlet, eredetileg több ADC mérést szeretnék átlagolni.
(mikrobasic-ben működik az átlagolás, a gyorsbillentyűk azonban ott is ugyanúgy viselkednek.)
(#) Szárnyas válasza haffre hozzászólására (») Máj 31, 2020 /
 
Ha még nem sikerült volna rájönnöd azóta a megoldásra, akkor úgy próbáld meg, hogy az átlag függvényed paraméterében ne unsigned tömbre mutató változót adj meg, hanem csak unsigned tömb típusú változót, mert a C nyelvben a tömb az eleve egy mutató, ami jelen esetben a meghívott atlag függvényed tomb nevű tömb típusú változójára mutat, tehát eleve cím szerinti paraméterátadás valósul meg.
Szerintem így már az elvárt módon kell működnie a kódonak.

Így gondolom:
  1. unsigned atlag (unsigned a[]) {
  2. tmp = 0;
  3. for (i = 0; i < 4; i++) {
  4. tmp += a[i]; //4 elem összege
  5. }
  6. ...
(#) haffre hozzászólása Máj 31, 2020 /
 
Igen, így helyes eredményt kapok. Köszönöm!
Azt nem tudod véletlenül, hogy hol lehet a mikroc-ben a gyorsbillentyűket be/át-állítani?
Sem a 7.1, sem a 7.6 verzióban nem találom.
Kösz mégegyszer, üdv.
(#) Szárnyas válasza haffre hozzászólására (») Máj 31, 2020 /
 
Szerintem nem lehet megváltoztatni a gyorsbillentyű kiosztását programban. Legalábbis én nem találtam ilyesmi lehetőséget. Azért is használom azt a módszert, amit a korábbi hozzászólásomban írtam.
(#) haffre hozzászólása Jún 23, 2020 /
 
Most, hogy -úgy, ahogy - megbarátkoztam a mikroc-vel, derült ki, hogy az általa generált coff fájlt a Proteus szimulációs program nem fogadja el, hibaüzenettel leáll, pontosabban el sem indul a szimuláció.
A hibaüzenet: Internal Exception: access violation in module 'LXLCORE.DLL' [0000EB3B].

Az mE fórumán már - évekkel ezelőtt - felvetették ezt a problémát. Az mE válasza az volt, hogy felveszik a kapcsolatot a Labcenterrel (a Proteus fejlesztője) ... bla, bla...
Mivel a probléma most is megvan, az mE-ra nem lehet számítani.
Más compilerek coff fájlját elfogadja a proteus, sőt a mikrobasic PIC16-os coff fájljait is néha, tehát a hiba egyértelműen a mikroc-ben van.
Találkozott valaki ezzel a problémával? Van erre megoldás?
A mikrobasic PIC12 és 16-os coff fájlját - ha a proteus szerint hibás volt - a cofmaker programmal lehetett átkonvertálni. Sajnos, a cofmakerem korlátos, max. 2k-s. Van esetleg valakinek aktiválója a cofmakerhez? Gondoltam, megveszem, de a fejlesztő honlapja megszűnt.
(#) Bakman válasza haffre hozzászólására (») Jún 23, 2020 /
 
.hex fájlt nem nyel le a Proteus?
(#) haffre válasza Hp41C hozzászólására (») Jún 23, 2020 /
 
Idézet:
„CMOS bemenetet nem szabad bekötetlenül hagyni”

Ezt hol olvastad/honnan tudod?
(#) haffre válasza Bakman hozzászólására (») Jún 23, 2020 /
 
A hex fájllal nincs gond! A coff azért kell(ene), mert azzal utasításonként lehet látni, hogy mi történik.
(#) Hp41C válasza haffre hozzászólására (») Jún 24, 2020 /
 
Gyakorlatilag minden adatlapban benne van. Pl.: PIC32MX1XX/2XX/5XX 64/100-PIN family DS60001290F-page 33.
(#) haffre válasza Hp41C hozzászólására (») Jún 24, 2020 /
 
Igaz, valóban ezt tanácsolják, köszönöm, hogy utána néztél!.
A gondom az, hogyha egy láb kimenetként definiálva zárlatba kerül (pl. egy mérőeszköz tapintócsúcsától), akkor elszáll(hat). Az mindegy, hogy egy kimenet a földre van kapcsolva és a plusz táppal kerül zárlatba, vagy fordítva. Bemenetként ez nem tud előfordulni.
A CMOS technológia kezdetén az elektrosztatikus kisülésre oda kellett figyelni (földelt csuklópánt), de ma már védettek ez ellen a ki, és bemenetek. Ettől függetlenül a gyártócégek, pl. Sanmina (kötelezően) használnak csuklópántot.
(#) Hp41C válasza haffre hozzászólására (») Jún 24, 2020 /
 
Idézet:
„A CMOS technológia kezdetén az elektrosztatikus kisülésre oda kellett figyelni (földelt csuklópánt), de ma már védettek ez ellen a ki, és bemenetek.”

Van, ami védett, de van olyan is, ami nem védett. Pl a Vdd -nél magasabb Vpp -t igénylő típusok MCLR lába.
Az idézet nem azt mondja, hogy egy fel nem használt láb nem lehet bemenet, csak azt, ha bemenet, akkor húzzuk Vdd -re vagy Vss -re.
Miért is ajánlják a kimenetnek való beállítást. Egy sok-sok lábú SMD tok esetének az a rengeted ellenállás bekötési nehézséget okoz. Emellett 20 - 50 ellenállás a sorozatgyártásnál idő veszteség és nem utolsó sorba költség (maga az ellenállás, a panel méret növekedés, a beültetés időigénye, hibalehetőségek stb.)

Ha lebegni hagyjuk a CMOS bemenetet, a fogadó P ill. N csatornás tranzisztorok nem a tervezett feszültség tartományban lesznek, hanem egyszerre lehetnek (többé - kevésbé) nyitva, ami tápáram növekedéshez, hőtermeléshez vezethet. Alvó kontrollernél ez a fogyasztás nagyobb lehet, mint a kontroller összes egyéb fogyasztása.
A hozzászólás módosítva: Jún 24, 2020
(#) haffre válasza Hp41C hozzászólására (») Jún 24, 2020 /
 
Amit írsz, mind igaz!
Azoknál a kontrollereknél, ahol bekapcsolható a felhúzó "ellenállás", ezt javasolom, ahol nem (pl. PIC18F26K20 A portja), ott én a jövőben a földre húzott kimenetet fogom használni.
(#) kaqkk válasza haffre hozzászólására (») Jún 26, 2020 /
 
Oda ezt ajánlom az egyszerű szerelhetőség és a pici helyigény miatt
A hozzászólás módosítva: Jún 26, 2020
(#) haffre válasza kaqkk hozzászólására (») Jún 26, 2020 /
 
A felhúzó "ellenállás" nem egy külső ellenállás, henem egy ki/be kapcsolható FET a kontrollerben.
Ha a portnak van ilyen (WPUx weak pull up) regisztere, akkor én a nem használt portnak a bemenet és bekapcsolt WPUx.Bx -t beállítást javasolom.
Ha nincs a lábra WPU és helyigény/ár kevéssé fontos, akkor én továbbra is a bemenetet és a külső felhúzó (valóban) ellenállást állítom. Ez zárlatbiztos!
(#) kaqkk válasza haffre hozzászólására (») Jún 27, 2020 /
 
Idézet:
„s a bemenetet és a külső felhúzó (valóban) ellenállást állítom. Ez zárlatbiztos!”
Ennek az alternatíváját ajánlottam Az ellenállás háló helyigénye és a nyákra tervezésének egyszerűsége klasszisokkal veri az egyedi felhúzó ellenállásokat ...
(#) DJozso hozzászólása Okt 7, 2020 /
 
Kedves Fórumtársak! Adott egy 16bites előjel nélküli váltózó, amit binárisan szeretnék megjeleníteni egy karakteres LCD kijelzőn, van erre jóban használható parancs a MikroC-ben?
  1. LCD[0] = Valtozo.F0+48;
  2. LCD[1] = Valtozo.F1+48;
  3. //.... egészen az utolsó bitig.
  4. Lcd_Out(1,1,LCD)

Helpet átolvastam, én nem találtam. Ti hogy szoktátok ezt csinálni?
A hozzászólás módosítva: Okt 7, 2020
(#) gyurma888 hozzászólása Márc 25, 2021 /
 
Sziasztok!

Szeretnék megvalósítani egy olyan alkalmazást Windowson, ami egy PIC-cel (mondjuk 18F4550-nel) kommunikál USB-n. Nagyon egyszerű dolgokkal kezdeném, mint pl. LED kapcsolása. Egy hasonló kis projektem volt már, akkor a LibStock-ból letöltöttem egy USB CDC-s libraryt, és így virtuális soros portként "beszélgetett" a PIC-cel a Windowsos program (C#). Ez egyébként a célnak megfelel, a soros port aránylag könnyen kezelhető a PC felől, és a PIC oldalán is megvalósítható a dolog.

Van viszont ugye egy olyan könyvtár a MikroC-ben, hogy USB HID, ez ugye egy másik eszközosztály. Azt szeretném megkérdezni tőletek, hogy ezt hogyan kellene kezelni Windows oldalról? Nem tudtok esetleg valami jó kis (nagyon naív vagyok, de esetleg magyar? Persze, angol is jó...) leírást, hogy ez hogy működik? Esetleg valami specifikáció, hogy mik a kommunikáció paraméterei?
Eddig mindenütt csak azt láttam, hogy a beépített HID Terminal-ból kommunikálnak a PIC-cel, és semmi több.

Előre is köszönöm a választ!
(#) Elektro.on válasza gyurma888 hozzászólására (») Márc 25, 2021 / 1
 
Szia!
Szintén a libstock-on találsz DLL-t Windows-hoz leírással. Lehet, hogy csak Pascal -os de nekem jól működik. Viszonylag egyszerű.

Bővebben: Link
A hozzászólás módosítva: Márc 25, 2021
(#) gyurma888 válasza Elektro.on hozzászólására (») Márc 25, 2021 /
 
Szia!
Köszönöm szépen! C esetleg nincs valamerre?
Ha nincs, akkor megpróbálom ezt értelmezni és használni.
(#) Hp41C válasza gyurma888 hozzászólására (») Márc 26, 2021 / 1
 
C: Goooogle: windows usb hid example

How to Communicate with its USB Devices using HID Protocol

C#: PICkit2 forrása.
A hozzászólás módosítva: Márc 26, 2021
(#) gyurma888 válasza Hp41C hozzászólására (») Márc 26, 2021 /
 
Köszönöm szépen, tökéletes!
(#) Marko Ramiusz hozzászólása Ápr 13, 2021 /
 
Jó szerencsét! Mikroe click-ekhez keresek konkrét felhasználásokat. Amolyan "mire" tudom használni a valóságban. Inkább link-ekre lenne szükségem, de bármit elfogadnék. Köszönöm a segítséget. Üdv.: Joe
(#) Bakman válasza Marko Ramiusz hozzászólására (») Ápr 13, 2021 /
 
A Mikroe-nek van "pár" modulja, ha konkretizálnál legalább néhány darabot. Kicsit fura a kérdés, mert pl. milyen konkrét felhasználási tippet vársz egy RS485 galvanikus leválasztó, vagy egy páratartalom mérő modulhoz? Utóbbi pl. növényház páratartalmának beállítására lehet alkalmas, előbbi adatátvitelhez, ahol a két oldal valamilyen oknál fogva nem lehet galvanikus kapcsolatban.
(#) kriszrap hozzászólása Szept 28, 2021 /
 
Sziasztok
Valaki tudna picit segíteni hogy lehet szoftweresen olyan pwm et csinálni ami ledenként szinenkét lehet állítani RGB fényerejét??

  1. for(i=0;i<mill;i++)
  2.     {
  3.       for(k=1;k<6;k++)//szint
  4.       {
  5.       shiftnullaz();
  6.       for(y=1;y<4;y++)//shiftregiszterek
  7.       {
  8.         for ( x = 8; x > 0; x--)
  9.         {
  10.             if (t[k][x] == 7
  11.             || (t[k][x] == 1 && y==1/*piros*/)
  12.             || (t[k][x] == 2 && y==2 /*zöld*/)
  13.             || (t[k][x] == 3 && y==3/*kék*/)
  14.             || (t[k][x] == 4 && (y==2 || y==1)/*sárga(zöld,piros)*/)
  15.             || (t[k][x] == 5 && (y==2 || y==3)/*cyan(zöld,kék)*/)
  16.             || (t[k][x] == 6 && (y==1 || y==3)/*lila(piros, kék)*/))
  17.             {
  18.               LATD.RD2=1;//adat
  19.               LATC.RC4=1; //clock
  20.  
  21.               LATD.RD2=0;//data
  22.               LATC.RC4=0;//clock
  23.  
  24.             }else{
  25.  
  26.               LATD.RD2=0;//data
  27.               LATC.RC4=1;//clock
  28.  
  29.               LATD.RD2=0;//data
  30.               LATC.RC4=0;//clock
  31.             }
  32.           }
  33.         }
  34.        if(k==5)LATA.RA6=1;else LATA.RA6=0;
  35.        if(k==4)LATC.RC0=1;else LATC.RC0=0;
  36.        if(k==3)LATC.RC1=1;else LATC.RC1=0;
  37.        if(k==2)LATC.RC2=1;else LATC.RC2=0;
  38.        if(k==1)LATC.RC3=1;else LATC.RC3=0;
  39.        LATD.RD3=1;//lacth
  40.        Delay_us(200);
  41.        LATD.RD3=0;
  42.       }
  43.     }


Ezt a kódot szeretném átalakítani.
(#) Bakman válasza kriszrap hozzászólására (») Szept 29, 2021 /
 
Miért nem választasz olyan kontrollert, amibe eleve van három (vagy több) PWM csatorna?
(#) kriszrap válasza Bakman hozzászólására (») Szept 30, 2021 /
 
Rendben.
Anno erre is gondoltam ha a softweres megoldás nem jönne össze.

74hc595 BLANK lábákra (3 db lábra ) rákötöttem a pic PWM lábait.
5khz futt a pwm.

Mi lenne az elképzelés??A helyes irány?
(#) Bakman válasza kriszrap hozzászólására (») Szept 30, 2021 / 1
 
Az elképzelés és a helyes irány számolással kezdődik. Mekkora felbontást akarsz és azt milyen frekvencián.

Pl. 100 Hz-es PWM frekvencia, 0 - 100 %-os kitöltés, 1 %-os lépésekben. Egy másodperc alatt 100-szor kell végigmenni a perióduson, egy periódus 100 lépésből áll, tehát 100 x 100 = 10 kHz-es megszakítást kell előállítanod, pl. Timer2-vel. Timer2 0-99 -ig számol. Ha a számláló nagyobb, mint a kitöltési tényező, akkor a kimenet alacsony, egyébként magas.

Dióhéjban ennyi a történet. Alacsony frekvenciára jó módszer, de mint a mellékelt ábra is mutatja, eléggé intenzíven igénybe veszi a kontrollert.

Amennyiben a beépített PWM modult használod, akkor kitöltési tényező átállításához elég egy-két regisztert írni, a többi a PWM modul feladata, lehet mással foglalkozni.
(#) kriszrap válasza Bakman hozzászólására (») Szept 30, 2021 /
 
Akkor maradnék HW PWM megoldásnál.
PIC18F46K22 használók.

16MHZ pörög a mikrotik .
Elképzelésem van 8x5 led ami RGB vagy is x3 120 "szin"

Ha jól emlékszem 20-16ms be bent kell maradjak egy kép leképezésébe hogy egybefűgőnek lássam.

20 000 us /120 =166us egy ledre való idő.
Vagy számoljak 1ms es idővel? Ahogy a kódomba van? Mert akkor 166us helyet 8 us lenne.


Aztán ahogy az elsö ledhez ér pwm beállítjuk és utánna megy a következő ledre és ismét.
Így gondoltam ha kivitelezhető.
(#) Bakman válasza kriszrap hozzászólására (») Szept 30, 2021 /
 
Mivel kelleni fog sor és oszlop meghajtás is, nem lenne egyszerűbb MAX7219-es IC-ket hazsnálni? SPI kimenettel lehet hajtani, akár 10 MHz-es órajellel is.
Következő: »»   8 / 10
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