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   653 / 1210
(#) killbill válasza don_peter hozzászólására (») Márc 29, 2015 /
 
Idézet:
„A "PORTB.F0" az nem javascript, hanem a főprogram része.”
Szerintem meg az igenis javascript, mert az i es str valtozokat is deklaralja, szepen megy benne a ciklus es rakja ossze az str-be a HTML szoveget. Az mas kerdes, hogy a PORTB nevu valtozo erteket hogyan lehet lekerdezni, nem tudom. En biztosan logikai and muvelettel csinalnam, de en 'C'-bol is igy csinalnam, nem pedig ezzel a bitfield-es megoldassal.
A hozzászólás módosítva: Márc 29, 2015
(#) Taki33 válasza lastewer hozzászólására (») Márc 29, 2015 /
 
Szerintem az 59. sorban a javasript csak a komplett PORTB-t kapja meg és valahogy így kellene vizsgálni: if (PORTB & 1 == 0) a 143. sorban pedig karaktert hasonlítasz össze bittel!
(#) killbill válasza Taki33 hozzászólására (») Márc 29, 2015 /
 
Idézet:
„karaktert hasonlítasz össze bittel!”
int-et hasonlit ossze int-tel, de lenyegeben ugy van, ahogy mondod. A 'C' ben nincs bit, es minden char automatikusan int-re konvertalodik minden muvelet elott.
(#) don_peter válasza killbill hozzászólására (») Márc 29, 2015 /
 
  1. if(PORTB.F0 == 0)\ //Ez a főprogram része
  2. {\// Még ez is
  3. str+='<td bgcolor=green>Bekapcsolva';\ // Ez HTML
  4. }\ // Ez a főprogram része
  5. else\ // Ez is
  6. {\ // Ez is
  7. str+='<td bgcolor=#999999>Kikapcsolva';\ // Ez HTML
  8. }\ // Ez a főprogram része

A javascript nem képes más nyelvből integrálás nélkül változót bevinni.
Az a kódrész biztos, hogy nem jó.

Az i és str a javascript velős része, abban is van deklarálva.
  1. var str,i;
A hozzászólás módosítva: Márc 29, 2015
(#) killbill válasza don_peter hozzászólására (») Márc 29, 2015 /
 
En is azt mondom, hogy az i es az str a javascript resze. Es van ott egy ciklus, ami egy PORTB.F0-t vizsgal, ami nyilvan hibas, de a tobbi nem. Amit Taki33 is mondott, es en is mondtam, hogy esetleg logikai and muvelettel lehetne vizsgalni a PORTB javascript valtozo erteket a javascriptben. A PORTB valtozo erteket pedig a 167. soraban allitja be a C kod, ha minden igaz.
(#) Taki33 válasza killbill hozzászólására (») Márc 29, 2015 /
 
Így van, a 167. 168. 169. sorban kap értéket a javascript PORTB változó.
(#) killbill válasza don_peter hozzászólására (») Márc 29, 2015 /
 
Idézet:
„(decimális, bináris vagy hexa) Az biztos jó lehet, hogy ASCII ellenőrzi port tartamát?”
A port-tol teljesen fuggetlenul: a 'C' ben a kovetkezo teljesen pont total ugyanazt jelenti:
0x30 == 48 == '0' Es egyes kibovitett 'C' implementaciok eseten == 0b00110000.
Az aposztrofok koze irt karater egy int konstans, aminek erteke az adott karakter kodja az adott szamitogepen. Ez ma gyakorlatilag minden esetben az ASCII kod.
(#) don_peter válasza killbill hozzászólására (») Márc 29, 2015 /
 
Az addig oké, de itt az "if(PORTB.F0 == '0')" azaz a B port 0. bitjét vizsgálja.
Abba nem lehet ASCII kód, abban csak 1 vagy 0 lehet mert 1 bitről van szó.
Vagy ez esetben a C ahogyan te is írtad bináris megfelelője a 0b00110000 és azt vizsgálja, hogy a 0. biten 0 avagy 1-van?
Érdekes megközelítés....

Idézet:
„A PORTB valtozo erteket pedig a 167. soraban allitja be a C kod, ha minden igaz.”

Nem teljesen a "len" (hossz) nevű változóba betölti a feltételeknek megfelelő összes stringet majd a végén vissza is tér a függvény ezzel a hosszú összerakott string sorral.
A 168.-as sorba tölti fel dyna változot a PORTB regiszter értékével, majd azt tölti bele immáron stringre konvertáltan a PORTB javascript változóba.

Illetve a pontosság kedvérét a következő képen néz ki a dolog:
  1. // add PORTB value (buttons) to reply
  2.     len += putConstString("var PORTB=");
  3.     IntToStr(PORTB, dyna);
  4.     len += putString(dyna);
  5.     len += putConstString(";");

Az eredménye pedig ez lesz:
PORTB értéke legyen most 48
  1. len = "var PORTB = 48;"

Tehát a javascript a len tartamát kapja meg vagy is így fog kinézni a html kódban:
  1. <script>
  2. var PORTB = 48;
  3. </script>
A hozzászólás módosítva: Márc 29, 2015
(#) killbill válasza don_peter hozzászólására (») Márc 29, 2015 /
 
Persze, hogy nem lehet egy egybites valtozo erteke 48. Nem is ezert mondtam, hanem azert, mert sokan nincsenek tisztaban a 'C' nyelvben a konstansokkal, valtozokkal es altalaban sokmindennel. Mivel te is kulonvalasztottad a dec, hex, binarist az ASCII-tol, ebbol gontoltam, hogy te sem erted, hogy mirol van itt szo. Sokan nem tudjak, hogy a '0' pont ugyanaz, mint a 48. (Lattam sok kodot itt a HE-n, ahol ilyesmik voltak: tomb[i] = a + 48; // 48 a 0 ASCII kodja)

Mert sok mas nyelvben a szoveg, (legyen az egyetlen karakter), az nem szam. Meg a Pascal-ban is kulon fuggveny van a karakter kod szamma alakitasara es vissza, mig a 'C'-ben ez nincs igy elkomplikalva.
A 167. sor vs 168. sor dologra inkabb nem reagalok, mert mar igy is forr a verem.

Szerk: ha utolag 80%-ban megvaltoztatod a HSZ-edet, akkor az en valaszom nem lesz vilagos senkinek... En vagyok a hlye, hogy nem ideztelek.
Idézet:
„a "len" (hossz) nevű változóba betölti a feltételeknek megfelelő összes stringet majd a végén vissza is tér a függvény ezzel a hosszú összerakott string sorral.”

A len valtozonak csupan az erteket noveli meg annyival, amilyen hosszu szoveget visz ki a putConstString fuggveny. A len (int) valtozoban a vegen csak az lesz, hogy hany karakter az egesz szoveg, amit osszerakott.
A hozzászólás módosítva: Márc 29, 2015
(#) don_peter válasza killbill hozzászólására (») Márc 29, 2015 /
 
Jaja közben vissza kellett lapoznom is, hogy mit írtál és azokat elolvasva módosítottam a bejegyzést.
Idézet:
„A len valtozonak csupan az erteket noveli meg annyival, amilyen hosszu szoveget visz ki a putConstString fuggveny.”
Igen, igazad van, most megnéztem hogy deklarálta a len változót.
A hozzászólás módosítva: Márc 29, 2015
(#) killbill válasza don_peter hozzászólására (») Márc 29, 2015 /
 
Idézet:
„Igen, igazad van, most megnéztem hogy deklarálta a len változót.”
Ezt nem a deklaraciobol kell latni, hanem a += operatorbol, amivel string-eket nem lehet osszeadni. Egy mutatot vagy egy int-et novelhetsz vele, de egy stringhez nem tudsz hozzaadni tovabbi stringeket igy. Meg ahogy te is nagyon helyesen megjegyezted, a len angolul hosszt jelent. Ebbol is lehet sejteni, hogy nem a string lesz benne, hanem annak hossza.
(#) don_peter válasza killbill hozzászólására (») Márc 29, 2015 /
 
Igen C-ben nem lehet, de javascript-ben simán lehet, így string-eket összeadni ez is kevert kicsit meg.
Lásd, egy sor egy javascript kódomból:
  1. document.getElementById(id).value += "[IMG="+img+"][/IMG]";

A len változó a stringek számát kapja meg és az összes sztring számával tér vissza a függvény.
Gondolom a tömb ciklussal való kilistázása miatt kell a sztringek száma..
Érdekes ez a webszerveres téma, én is akarok majd egyszer egy ilyen szervert készíteni..
Jó kis mókázás lenne.
A hozzászólás módosítva: Márc 29, 2015
(#) killbill válasza don_peter hozzászólására (») Márc 29, 2015 /
 
Idézet:
„Igen C-ben nem lehet, de javascript-ben simán lehet, így string-eket összeadni ez is kevert kicsit meg.”
Hat igen, ez elofordul.
Idézet:
„A len változó a stringek számát kapja meg és az összes sztring számával tér vissza a függvény.”
Miert nem hiszed el, hogy a sztring hossza van benne?
Idézet:
„Érdekes ez a webszerveres téma, én is akarok majd egyszer egy ilyen szervert készíteni..
Jó kis mókázás lenne.”
Azert mielott nekiallsz egy webszervert megirni, kicsit bele kellene huzni a C tanulasba, es kicsit jobban elfogadni azok szavat, akik mar irtak webszervert vagy hasonlo dolgot...
A hozzászólás módosítva: Márc 29, 2015
(#) don_peter válasza killbill hozzászólására (») Márc 29, 2015 /
 
Idézet:
„Miert nem hiszed el, hogy a sztring hossza van benne?”
Ugyan azt mondjuk csak másként fogalmazunk..

Idézet:
„Azert mielott nekiallsz egy webszervert megirni, kicsit bele kellene huzni a C tanulasba, es kicsit jobban elfogadni azok szavat, akik mar irtak webszervert vagy hasonlo dolgot...”
Nagyából utána néztem már, nem lesz egyszerű, de idővel mint meg lehet írni.
1éve tanulom autodidakta módon a C nyelvet, ahhoz képest talán nem vagyok annyira béna..
Tudom, mihez vagy kihez képest
A hozzászólás módosítva: Márc 29, 2015
(#) cross51 hozzászólása Márc 29, 2015 /
 
Sziasztok!

Egy apró kérdésem lenne a kvarckristályok szűrőkondijaival kapcsolatban. Adott egy 32MHz es CL= 20pF kristály mekkora legyen C1 és C2 a Microchipnél a CL = C1xC2 összefüggés alapján 47p? Vagy lehetséges-e az is, hogy C1 C2 eltérő értékűek, sajnos nem tudom eldönteni, hogy mi lenne a legideálisabb mert általában belső oszcillátort használok.
A hozzászólás módosítva: Márc 29, 2015
(#) lastewer válasza Taki33 hozzászólására (») Márc 29, 2015 /
 
Idézet:
„if (PORTB & 1 == 0)”


Így sem jó. Viszont amit észrevettem , hogy a PORTB értéke bizonyos időközönként változik. Van hogy az értéke 3 van hogy 25.
(#) icserny válasza cross51 hozzászólására (») Márc 29, 2015 /
 
Mihez szeretnél 32 MHz-es kristály használni? Az adatlap megenged ilyen magas frekvenciájú kvarcot?
(#) cross51 válasza icserny hozzászólására (») Márc 29, 2015 /
 
Egy soros LCD vezérlőt csinálok és az adott soros perifériáknak a lehető legnagyobb órajellel kell működniük. És nem akarom PLL-el hajtani mert az 2ms amíg elindul törekednék a lehető legkisebb inicializálási időre. Ja és a PIC16-os használok és 32MHz a maximum frekvencia.
A hozzászólás módosítva: Márc 29, 2015
(#) killbill válasza lastewer hozzászólására (») Márc 29, 2015 /
 
'C'-ben az '==' magasabbrendu muvelet, mint az '&', ezert a helyes megoldas:
  1. if((PORTB & 1) == 0)

javascript-ben nem biztos, hogy igy van a precedencia.
Szerk: megneztem, es javascript-ben is igy van a precedencia, szoval kell a zarojelezes.
A hozzászólás módosítva: Márc 29, 2015
(#) killbill válasza cross51 hozzászólására (») Márc 29, 2015 /
 
Idézet:
„Egy soros LCD vezérlőt csinálok és az adott soros perifériáknak a lehető legnagyobb órajellel kell működniük. És nem akarom PLL-el hajtani mert az 2ms amíg elindul törekednék a lehető legkisebb inicializálási időre.”
egy LCD vezerloben, amit az ember szemmel nez, hol van jelentosege 2ms bekapcsolasi kessesnek?


Gyakorlati oldalrol nezve a kerdesedet, szerintem 2db 22pF..27pF, es menni fog, felteve, hogy egyaltalan lehet ekkora frekvenciaju kvarcot tenni a mikrokontrollerre. Most vegigneztem egy 16F874 adatlapot, de nem talaltam benne a max. kvarc frekvenciat.
A hozzászólás módosítva: Márc 29, 2015
(#) lastewer válasza don_peter hozzászólására (») Márc 29, 2015 /
 
Idézet:
„Az eredménye pedig ez lesz:
PORTB értéke legyen most 48

len = "var PORTB = 48;"


Tehát a javascript a len tartamát kapja meg vagy is így fog kinézni a html kódban:

<script>
var PORTB = 48;
</script>”


Ez nem így van , nem 48 lesz a kimenet. A kimenet folyamatosan változik , egyszer 0 , 126,60 mikor kiadom a PORTB.F0 = 1; parancsot.

Mikor a PORTB.F0 = 0; parancsot adom ki , akkor is folyamatosan változik a kimenet , mégpedig : 195,255,185,129,191

Nem tudom ez mi szerint változik.Ezeket a kimeneteket a PORTB -t lekérdezve kapom.Ahányszor kiadom a led felkapcsolására vagy lekapcsolására a parancsot , annyiszor más és más a kimenetem.


Gondoljátok kilövöm netre és megosztom az IP címet amin fut.
A hozzászólás módosítva: Márc 29, 2015
(#) cross51 válasza killbill hozzászólására (») Márc 29, 2015 1 /
 
Az a soros port inicializálási idejére és a fogadás idejének csökkentése a lényeg mert adat jön be megszakítás adat -> RAM(indirekt) úgymond így senkit nem érdekel mit csinál közben az LCD ha a RAM mérete bírja akkor hiába kell legalább 20ms az LCD-nek addig megy oda az adat aztán kerül ki az LCD, de ez nem is annyira fontos.
Igazság szerint arra törekednék, hogy a legjobban tartson a kvarc frekvenciája a ráírtéhoz és mint említettem nem nagyon szoktam külső kvarcot használni így nem annyira tudom, hogy most akkor mekkora kondi is kell oda.
(#) Taki33 válasza lastewer hozzászólására (») Márc 29, 2015 /
 
Adok egy jó tanácsot, először kezd a programozást az alapoktól (LED villogtatás, gombok kezelése a bináris, decimális hexadecimális számrendszerekkel, a PIC regisztereinek megismerésével) hogy legalább az alapokkal tisztába legyél! Ne akarj egyből űrhajót építeni!
(#) abacs hozzászólása Márc 29, 2015 /
 
Sziasztok!!
Majdnem 3 évet tanultam C++ nyelven programozni és szeretném megtanulni a PIC programozást, csak nem tudom, hogy, hogy fogjak neki, honnan tudnék tanulni és végképp nem tudom hogy a C++ nyelvhez melyik PIC programozó program áll legközelebb.
Segítségeteket előre is köszönöm
(#) lastewer válasza Taki33 hozzászólására (») Márc 29, 2015 /
 
Teljesen jogos a tanácsod egyébként , csak ezzel az a baj ,hogy ha elkezdem magolni , azzal semmire sem megyek , de ha így lépésenként egyre többet és többet tudok meg , ráadásul azzal a dologgal kapcsolatban ami jelenleg aktuális és érdekel is , akkor jobban megmarad.

(A led villogtatás megy , gombokat egyenlőre nem akarok kezelni , így az felesleges lenne egyenlőre)
A hozzászólás módosítva: Márc 29, 2015
(#) lastewer válasza killbill hozzászólására (») Márc 29, 2015 /
 
Így sem jó , nem lép bele az else ágba.

  1. if((PORTB.F0 & 1) == 0)\
  2. {\
  3. str+='<td bgcolor=green>Bekapcsolva';\
  4. }\
  5. else\
  6. {\
  7. str+='<td bgcolor=#999999>Kikapcsolva';\
  8. }\


Az
  1. if(PORTB.F0 == '0')   { PORTB.F7 = 0;//Kikapcsoljuk a B7 es lábon lévő ledet
  2. }
működik lentebb, a javascriptben nem megy már csak.
A hozzászólás módosítva: Márc 29, 2015
(#) cross51 válasza abacs hozzászólására (») Márc 29, 2015 /
 
A PICCOLO projektből sokat megtanulhatsz az C re épül de a C++ és a C ha jól tudom hasonlóak. Az XC8 al lehetséges, hogy lehet C++ ban programozni de még sose próbáltam.
(#) killbill válasza lastewer hozzászólására (») Márc 29, 2015 /
 
Idézet:
„if((PORTB.F0 & 1) == 0)\”
Mert meg mindig nem azt irod oda, amit montdunk. Nem PORTB.F0, hanem PORTB. Az a baj, hogy csak azt akarod, hogy mukodjon, de nem erted, mi micsoda. Igy soha nem fogod megtanulni. Tudod, hogy a 'C'-ben mit jelent a PORTB.F0? Hogy mi az a .F0 a PORTB utan? Es miert lehetne a PORTB.F0-t helyettesiteni azzal, hogy (PORTB & 1)? Ha ezt megerted, akkor mar valoban az alapokkal foglalkozol. De ennek meg mindig semmi koze ahhoz, hogy a javascriptben mi a PORTB. A 'C' programozas alapja nem a LED villogtatasban rejlik, hanem a nyelv adottsagaiban, abban, hogy mi az, hogy kifejezes, utasitas, balertek, valtozo, konstans, memoria, stb.. Ezt LED villogatato programokbol nem lehet megtanulni. Meg webszerverbol sem, ha nem te irod. Raadasul szivatod magad egy olyan feladattal, ami egy kinszenvedes, mert keves az eroforras, masreszt ket program egyszerre (a C meg a javascript), es ket gepen is fut egyszerre (a PIC-en es a bongeszos gepen). Ez nem eppen rutinfeladat kezdoknek.

Idézet:
„Az
  1. if(PORTB.F0 == '0')   PORTB.F7 = 0;//Kikapcsoljuk a B7 es lábon lévő ledet

működik lentebb, a javascriptben nem megy már csak”

Nehezen hiszem, hogy az '0'-val mukodik, de gondolom, hogy a mukodo kodban nem is az van.
A hozzászólás módosítva: Márc 29, 2015
(#) Bell válasza lastewer hozzászólására (») Márc 29, 2015 /
 
Ha PORTB.F0-t használsz, akkor && a logikai és.
(#) icserny válasza cross51 hozzászólására (») Márc 30, 2015 /
 
Idézet:
„Ja és a PIC16-os használok és 32MHz a maximum frekvencia.”
Konkrétan melyik típust? Mert pl. a PIC16F1825 adatlapja azt írja, hogy "HS – High Gain Crystal or Ceramic Resonator mode (4 MHz to 20 MHz)". Tehát max. 20 MHz lehet a kristály...

Idézet:
„És nem akarom PLL-el hajtani mert az 2ms amíg elindul”
És az LCD mennyi idő alatt "indul el"? Vagy miért kell ez a nagy sietség?

A külső oszcillátor (ECH mód) lehet 32 MHz, de attól félek, hogy ezzel csak átülteted a problémát egy másik eszközbe...
A hozzászólás módosítva: Márc 30, 2015
Következő: »»   653 / 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