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   724 / 1210
(#) edison14 hozzászólása Nov 10, 2015 /
 
A másik mikrovezérlővel is a debug express kártyán keresztül próbáltad ki?
(#) jany1966 hozzászólása Nov 10, 2015 /
 
motoron is mérted a feszültséget mind két irányba?
(#) Kapagerenda válasza edison14 hozzászólására (») Nov 10, 2015 /
 
a debug expresen van egy beépített 16F887 es chip. Ott azt a chippet használom.
(#) Kapagerenda válasza jany1966 hozzászólására (») Nov 10, 2015 /
 
Igen. Elöre forgás esetén van feszültség, hátramenet esetén 0 feszültség van. Ha debug express panelon keresztül csinálom akkor mindkét irányban van feszültség és ugye tud előre is meg hátrafele is forogni ebben az esetben
(#) jany1966 hozzászólása Nov 10, 2015 /
 
Az előbb azt írtad PORTD,1 D,2-őn polaritást vált?
(#) Kapagerenda válasza jany1966 hozzászólására (») Nov 10, 2015 /
 
Igen. Ha debug expresses megoldás esetén ha PORTD1 van magas szinten akkor 3 V van a hídágban azaz a motoron, ellenkező esetben a PORTD 2 van magas szinten és - 3V van a motoron. De ha a másik chipet használom akkor ez a -3V nem jelenig meg, abban esetben 0 V lesz a motoron pedig a mikrokontrollerböl ugyanazok a vezérlőfeszültségek jönnek ki mint a debug express próbapanel esetében
(#) Kapagerenda hozzászólása Nov 10, 2015 /
 
Végül a programban volt a hiba. Az if/ else parancssorral a visszafele menet nem működött. Két if parancsot irtam be és nem irtam else-t és igy már megy visszafele is. Érdekes
Ez lett végül a megfelelő:
  1. void main() {
  2.  ANSEL = 0;                      // All I/O pins are configured as digital
  3.  ANSELH = 0;
  4.  PORTB = 0;
  5.  TRISB = 0b11111111;
  6.  PORTD = 0b00000000;
  7.  TRISD = 0b00000000;
  8.  PORTC = 0;
  9.  TRISC = 0;
  10.  
  11.  vissza:
  12.  
  13.  if (PORTB.F0 == 0) {             // előre menet
  14.  PORTD = 0b00000100;
  15.  PORTC = 0b00000000;
  16.   }
  17.  
  18.  if (PORTB.F0 == 1) {            // hátra menet
  19.  PORTD = 0b00000000;
  20.  PORTC = 0b00000010;
  21.   }
  22.  goto vissza
  23.  
  24. }
(#) don_peter válasza Kapagerenda hozzászólására (») Nov 11, 2015 /
 
Azért egy pergésmentesítőt tennék bele a gombnyomás vizsgálatára.
A kód működhet persze így is, de ez nem a legjobb megoldás. Sőt..
És a program ugrálást is kihagynám a helyedbe, később okozhat gubancot és nagyobb programok esetében el fogod veszteni a fonalat az ugrándozás miatt.

Ez helyett:
  1. vissza:
  2.  
  3.  if (PORTB.F0 == 0) {             // előre menet
  4.  PORTD = 0b00000100;
  5.  PORTC = 0b00000000;
  6.   }
  7.  
  8.  if (PORTB.F0 == 1) {            // hátra menet
  9.  PORTD = 0b00000000;
  10.  PORTC = 0b00000010;
  11.   }
  12.  goto vissza
  13.  
  14. }
Próbáld ki így:
  1. // hátra menet (ezt még a while ciklus elé
  2. PORTD = 0b00000000;
  3. PORTC = 0b00000010;
  4. while(1){
  5.  
  6.  if (!PORTB.F0) {             // előre menet
  7.      PORTD = 0b00000100;
  8.      PORTC = 0b00000000;
  9.      while(!PORTB.F0);        // Várakozás gomb felengedéséig
  10.      // hátra menet
  11.      PORTD = 0b00000000;
  12.      PORTC = 0b00000010;
  13.  }
  14.  
  15. }//while
Én így csináltam volna, persze lenne még ezen is mit alakítani..
A hozzászólás módosítva: Nov 11, 2015
(#) ybanez hozzászólása Nov 11, 2015 /
 
Sziasztok!
Másik topikba írtam, de ez pörög, az meg október óta pihen... (úgyhogy bocs, adminék a duplaposztért! )

Sziasztok!
12f683-t akarnék programozni (eddig 18-s sorozat volt csak a kezemben).
Az asm elején beírom:
  1. org 0x00
  2.       goto  INIT
  3.          org   0x04
  4. TITRUT  ....



Majd a 44. sorban jön majd az INIT .
Eddig rendben, de ha a 12f683.inc van beírva a fejlécbe, a quickbuild ezzel a hibaüzenettel kiszáll:

Error[113] D:\PROJECTS\MCU\ELGYSZAB.ASM 29 : Symbol not previously defined (INIT)

Másik chipet választva ez nem jelent neki gondot.
Kérdésem1: ezeknél a kisebb sorozatúaknál miért nem engedi a RESET utáni ugrást ill. hogyan kell azt beírnom?
(Kipróbáltam, 18f1220, 1320-t kiválasztani, simán eszi a BRA INIT sort. )

Köszönettel: András

Ja, az úgy volt... ebből a kis tokból van a fiókban sok darab, el szeretném használni őket!
A hozzászólás módosítva: Nov 11, 2015
(#) Pali79 válasza ybanez hozzászólására (») Nov 11, 2015 /
 
Pedig ez így jó! Kisbetű-nagybetű eltérés vagy ilyesmi?
(#) ybanez válasza Pali79 hozzászólására (») Nov 11, 2015 /
 
Köszönöm, én is így gondoltam, akkor megint a W..f*s akadékoskodik.
MPlab 8.92, Win 8.1, saját mappába telepítve, Projektek másik tárolón vannak. Az a furcsa, másik, már meglévő projekttel nincs baja, ez nem tetszik neki.
Na majd megpróbálom Linux alól, csak ott még nem mókoltam PIC-et...

Ja, amúgy próbáltam kis- és nagybetűvel is, másik oszlopba... nem akarja. Pedig a saját maga által létrehozott projekt, nem import.
(#) kissi válasza ybanez hozzászólására (») Nov 11, 2015 /
 
Ékezetes betűk és egyéb, nem odaillő dolgok ( pl. space ) nincsenek az elérési úton ?!
(#) Hp41C válasza ybanez hozzászólására (») Nov 11, 2015 /
 
Szépen kiírta, mi a baja: Symbol not previously defined (INIT) - A szimbólum nem definiált (INIT)
Szövegszerkesztővel keress rá. Lehet, hogy más karakter is van a címkében (html olvalról copy+paste).
(#) ybanez válasza Hp41C hozzászólására (») Nov 11, 2015 /
 
Hali!
Nos, ezt elkerülendő, átneveztem másra, akkor sem szereti. Csak ha másik csipet választok, akkor hajlandó. Ha 18f1320 a célvezérlő, rendben leszalad a fordítás, ha visszaváltok 12f683-ra, beakad ezzel. Pedig a projektet ő maga hozta létre...
(#) don_peter válasza ybanez hozzászólására (») Nov 11, 2015 /
 
Javaslom a fórdító által használt 12f683.asm vagy .inc fájlt amit be include-olsz nézd meg, hogy van benne definiálva az az (INIT).
Volt már nekem is ilyen gondom, persze C10-12-16-ban, de talán pont ennél a típusnál.
A hozzászólás módosítva: Nov 11, 2015
(#) ybanez válasza don_peter hozzászólására (») Nov 11, 2015 /
 
Hali!
Nincs az INIT definiálva, ez csak egy címke. De közben megoldódott!

Idézet:
„(#) nedudgi válasza ybanez hozzászólására (») Válasz • 14:22 /

Címkét tartalmazó sor nem tartalmazhat makrót.”
A hozzászólás módosítva: Nov 11, 2015
(#) Pali79 válasza don_peter hozzászólására (») Nov 11, 2015 /
 
Nem azért de tök másról van szó... Az INIT ebben a programban egy címke, ami gyakorlatilag lehetne bármi, nem kell, hogy definiálva legyen bárhol is, csak ha valahol hivatkozol rá, mint pl itt egy goto val akkor valahol a programban lennie is kell egy ilyennek, hogy oda tudjon ugorni.
(#) Kapagerenda válasza don_peter hozzászólására (») Nov 11, 2015 /
 
Ok kösz a válltoztatást.
Egy távirányitós autót szeretnék vezérelni így, szóval tudjon előre hátra menni valamint tudjon kanyarodni is. Ehhez ugye két motorra van szükség és mind a két motor esetében szükséges a forgásirány váltás. Öreg CD meghajtóbol szereltem ki a motrokat. Egy 9 V -os elemet szeretnék használni tápnak. Külön külön képes ez a táp meghajtani a motrokat viszont egyszerre a két motrot már nem birja. Mi lenne erre a megoldás, vagy mikrokontroleral készíteni egy vezérlést ami mindig csak az egyik motor vezérlését engedélyezi? Kanyarodni ugye nem kell állandoan addig le lehetne kapcsolni a másik motrot? Valamint mivel két motor van két H híd is kellene a forgásirány válltoztatások miatt?
(#) sonajkniz válasza Kapagerenda hozzászólására (») Nov 11, 2015 / 1
 
Gyanítom, ezek a motorok elég kicsik, ha már CD-böl vannak.
Hasznáj L293D tipusjelű motordrivert. Ezzel mindkét motort meg tudod hajtani.
(#) Moderátor hozzászólása ybanez hozzászólására (») Nov 11, 2015
 
Másik topikba írtam, de ez pörög, az meg október óta pihen... (úgyhogy bocs, adminék a duplaposztért!

XVIII. Csak egy helyen kérdezz! A fórumon egy kérdést egyszerre csak egy helyre tegyünk fel. Amennyiben több helyre is beírjuk ugyan azt a hozzászólást, a moderátorok kérdés nélkül törölhetik hozzászólásainkat és ki is tilthatnak türelmetlenség és tiszteletlenség miatt.
(#) ybanez hozzászólása Nov 11, 2015 /
 
Értem, bocsánat.
(#) don_peter válasza Pali79 hozzászólására (») Nov 11, 2015 /
 
Nem értek az ASM-hez, de gondoltam mivel definíció hibára hivatkozik a fórdító megemlítettem.
(#) don_peter válasza Kapagerenda hozzászólására (») Nov 11, 2015 /
 
Egyet értek sonajkniz bejegyzésével:
Idézet:
„Használj L293D típusjelű motor meghajtó IC-t.”
2 motort könnyedén lehet vele vezérelni.
Bővebben: L293D manual
A hozzászólás módosítva: Nov 11, 2015
(#) Kapagerenda hozzászólása Nov 12, 2015 /
 
Üdv.
A vagy kapcsolatot és az és kapcsolatot hogy szokták C ben megadni, valamint a magyar billentyűzeten hol találom ezeket az irásjeleket?
(#) Hp41C válasza Kapagerenda hozzászólására (») Nov 12, 2015 /
 
C -ben a vagy jele a |, az és jele a &.
Magyar billenytűzeten a <alt-gray><w> illetve <alt-gray><c>.
(#) benjami válasza Kapagerenda hozzászólására (») Nov 12, 2015 /
 
Annyit még hozzátennék, hogy az egyszeres | a bináris, a dupla || a logikai vagy operátor. Az és operátorral ugyanez a helyzet.
(#) KaiserA hozzászólása Nov 13, 2015 /
 
Sziasztok!

Van egy MCP9808 hőszenzorom, és egy PIC32MX440F -es mikrokontorllerem.
Valamiért a szenzorbol kiolvasott érték,amit egy 2x16 os kijezőre irok ki, 31.94 fok, ha pedig melegitem a szenzort a kezemmel. 15.94-t.
Mi lehet a probélma? a, rosszul van a konvertálás, viszont azt az adatlap alpján csináltam.:
  1. if ((fogadottadat & 0x80) == 0x80){ //TA 3 TCRIT
  2. }
  3. if ((fogadottadat & 0x40) == 0x40){ //TA > TUPPER
  4. }
  5. if ((fogadottadat & 0x20) == 0x20){ //TA < TLOWER
  6. }fogadottadat = fogadottadat & 0x01; //Clear flag bits
  7. if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
  8. fogadottadat = fogadottadat & 0x0F; //Clear SIGN
  9. Temperature = 256 - ((float)(fogadottadat *16) + fogadottadat2);
  10. }else //TA 3 0°C
  11. Temperature = (fogadottadat * 16 + ((float)fogadottadat2 ) / 16.0);
  12. //Temperature = Ambient Temperature (°C)
  13.                                        
  14.                                                        
  15.                                                          sprintf(felsosor,"TEMP: %3.2f    " ,Temperature);
  16.                                
  17.                                                
  18.                                                        
  19.                                                                 LCDWriteString(felsosor,1,1);
  20.                                                                 DelayMS(50);


b, rosszul konfiguráltam az i2c-t:
  1. StartI2C1();
  2.                                                  IdleI2C1();
  3.                                                 MasterWriteI2C1(AddressByte & 0xFE);
  4.                                                 MasterWriteI2C1(0x05);
  5.                                                  IdleI2C1();
  6.                                                 StartI2C1();
  7.                                                  IdleI2C1();
  8.                                                 MasterWriteI2C1(AddressByte | 0x01);
  9.                                                 IdleI2C1();
  10.                                                 fogadottadat = MasterReadI2C1();
  11.  
  12.                                                 fogadottadat2 = MasterReadI2C1();
  13.                                                 IdleI2C1();
  14.                                                 StopI2C1();
  15.                                                 IdleI2C1();

c, rossz az órajel,
d, nem tudom mi a baj.
Addressbyte = 0x3F mivel 0011 és az A lábak tápra vannak huzva, b00111111
Előre is köszönöm a segítséget.
az adatlap még ir hogy mikor i2c_read(ACK)
i2c_read(NAK);
nálam mikor irom hogy fogadottadat = MasterReadI2C(); ide hogy mondom neki hogy vegye az ACK bitet? lehet itt a baj.

MCP9808
A hozzászólás módosítva: Nov 13, 2015
(#) Hp41C válasza KaiserA hozzászólására (») Nov 13, 2015 /
 
Idézet:
„Addressbyte = 0x3F mivel 0011 és az A lábak tápra vannak huzva, b00111111”

Az adattlapja szerint a címe vagy 0x3E vagy 0x9E, ha az A2 , A1 és A0 láb a tápra van húzva. A címhez jön még a 0 biten a R/W bit.
Idézet:
„if ((fogadottadat & 0x80) == 0x80){ //TA 3 TCRIT
}
if ((fogadottadat & 0x40) == 0x40){ //TA > TUPPER
}”

Ezt a két sort értem, nem csinál semmit sem.
Idézet:
„if ((fogadottadat & 0x20) == 0x20){ //TA < TLOWER
}fogadottadat = fogadottadat & 0x01; //Clear flag bits”

Ezt már nem értem. A flag az 5 biten van, az utasítás a 0. -at hagyja csak meg.
Inkább így:
  1. Temperature = ((fogadottadat & 15) * 16 + ((float)fogadottadat2 ) / 16.0);
  2. if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
  3. Temperature = 256 - Temperature;
  4. }
(#) KaiserA válasza Hp41C hozzászólására (») Nov 13, 2015 /
 
Szia!
Köszönöm a segítségét, nem lett sok változás, az a legföbb problémám, hogy a szenzor, két értéket mutat csak, alapbol 28,06, ha pedig a kezemmel a szenzort lefogom ,hogy melegedjen akkor 12,13 at. semmi köztes érték, csak ez a két érték létezik neki. Nem lehet hogy csak az i2c konfigurlásával, vagy orajel beállitássla lehet baj? vagy inkább a konvertálással lehet, hogy fokot irjon ki, amit elöbb néztünk.
(#) attika hozzászólása Nov 13, 2015 /
 
Sziasztok.
Ezzel a kapcsolással kapcsolatban szeretnék kérdezni tőletek.
Az oldal vége felé található egy olyan,hogy"Contrast Adjustment "
Ott leírja,hogy mit és hol kell átírni ahhoz,hogy a conrastot lehessen állítani,az alapérték A9,a minimum kontraszt az 80h a maximum meg FFh.
A kérdésem az lenne,hogy a két érték között mennyi lehetőség van még?
A minimumra állítva semmit nem látok a kijelzőn,és ugyan ez van maximumon is csak akkor ugye minden fekete
Következő: »»   724 / 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