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   1070 / 1070
(#) attika hozzászólása Feb 10, 2019 /
 
Sziasztok.
Ennek a kapcsolásnak a programját nagy meló lenne úgy átírni, hogy ha egyszer érintem hozzá a kulcsot akkor behúzzon a relé és maradjon egészen addig behúzva amíg még egyszer hozzá nem érintem?
Úgy szeretném használni mint egy kapcsolót.
(#) superuser válasza attika hozzászólására (») Feb 10, 2019 / 1
 
Nem.
Regisztrálj be, töltsd le a kódot.
Ha az eredeti kód működik jól, a módosítás nem nagy ügy.
(#) attika válasza superuser hozzászólására (») Feb 10, 2019 /
 
Köszönöm.
A fájlok meg vannak, próbálni még sajnos nem tudok alkatrész hiányában.
Nem kellett hozzá regisztrálni.
Ha meg lesz hozzá minden alkatrészem akkor kipróbálom, ha működik akkor visszatérhetünk rá?
(#) superuser válasza attika hozzászólására (») Feb 10, 2019 / 1
 
Persze. Elég egyszerű a kód.
Ha benyomott gomb mellett olvastatsz kártyát, az a tanítás.
Ha nincsen benyomva a gomb, a zöld LED jelzi az olvastatás sikerességét.
Pár sort kell módosítani ahhoz amit szeretnél:
Eredeti kód:
  1. if(iskeyonlist == 1) //ha a kártya az eepromban szerepel
  2.                 {
  3.                 GREEN_LED = ON;  //zöld LED be
  4.                 RED_LED = OFF; //piros LED ki
  5.                 BUZZER = ON; //zümmer be
  6.                 __delay_us(10); //10us vár - mondjuk ez alatt nem tudom mit csinál a zümmer, de mindegy
  7.                 BUZZER = OFF; //zümmer ki
  8.                 __delay_us(10); //ez feleslegesnek tűnik
  9.                 }

helyette ezt írod:
  1. if(iskeyonlist == 1)
  2.                 {
  3.                 RED_LED = !RED_LED; //piros LED helyére relét raksz, ezzel minden sikeres olvasasnal valtozik a piros LED allapota
  4.                 GREEN_LED = ON;
  5.                 BUZZER = ON;
  6.                 __delay_us(10);
  7.                 BUZZER = OFF;
  8.                 __delay_us(10);
  9.                 }

Emellett törölsz minden egyéb sort ahol a RED_LED-re vonatkozó értékadás szerepel.
(#) attika válasza superuser hozzászólására (») Feb 10, 2019 /
 
Köszönöm.
Ha meg lesz hozzá minden akkor ki is próbálom.
Olyan olvasóm lesz hozzá amiben gyárilag benne van egy két színű led.
A ledes visszajelzés attól még fog működni?
(#) superuser válasza attika hozzászólására (») Feb 10, 2019 / 1
 
Ha azt követed amit lejjebb írtam, akkor a zöld LED funkciója marad, viszont a piros LED nem jelzi a hibás olvasást, mert az egyszerűség kedvéért arra a lábra raktam a relét.
Ezt követheted egy próba erejéig és ha minden működik, akkor egy szabad IO lábat kimenetre konfigurálsz, elnevezed pl. RELE_KIMENET -nek és az eredeti kódot egészíted ki így:
  1. if(iskeyonlist == 1) //ha a kártya az eepromban szerepel
  2.                 {
  3.                 RELE_KIMENET = !RELE_KIMENET;
  4.                 GREEN_LED = ON;  //zöld LED be
  5.                 RED_LED = OFF; //piros LED ki
  6. ..
  7. ..
(#) attika válasza superuser hozzászólására (») Feb 10, 2019 /
 
Köszönöm.
Ha meg lesz minden alkatrészem akkor kipróbálom és jelzem, hogy sikerült e.
E szerint a rajz szerint a GPIOC lábon van a relé, akkor is kell új lábat kimenetnek konfigurálnom?
Nem maradhatna minden a helyén és úgy átírni, hogy azt a kimenetet tartsa addig magason amíg még egyszer nem érintem hozzá az Ibuttont?

key.jpg
    
(#) superuser válasza attika hozzászólására (») Feb 10, 2019 / 1
 
Nem néztem át részleteiben mindent.
- megtévesztő a GPIO lábak elnevezése, mert a lábak elnevezése helyesen GP0..GP5
- Programban így definiálta őket:
  1. #define BUZZER    GP4
  2. #define BUTTON_INPUT    GP3
  3. #define RED_LED  GP2
  4. #define GREEN_LED              GP1
  5. GP5 - OneWire (Dallas)

A rajzon meg ez szerepel - ami beazonosításra sem alkalmas:
GPIOA - LED
GPIOB - LED
GPIOC - external load (?relé?)
GPIOD - buzzer
GPIOE - iButton
MCLR - nyomógomb (az MCLR a GP3 láb)

Kizárólagos alapon, mivel a GP0-ra nincsen hivatkozás, azt gondolhatta OC (relé) kimenetnek.
A szoftverben így definiálhatod:
  1. #define RELAY_OUTPUT    GP0 //ezt a többi port definició közt helyezd el
  2.  
  3. TRISIO &= 0xFE;  //ez a sor a program elején szerepeljen; a GP0 láb kimenet lesz
  4.  
  5. RELAY_OUTPUT = !RELAY_OUTPUT;   //relé kimenet állapotváltása - ha a kártya az eepromban szerepel feltételen belülre
(#) attika válasza superuser hozzászólására (») Feb 10, 2019 /
 
Köszönöm az eddigi fáradozásodat.
Ha kezembe lesz az olvasó akkor gyors összedobom a kapcsolást és az eredeti kóddal megpróbálom, hogy működik e, ha működik akkor már többet tudok a lábak elnevezéséről is.

Utána meg átírom ahogy ajánlottad és letesztelem úgy is.
(#) superuser válasza attika hozzászólására (») Feb 10, 2019 / 1
 
Nincs mit, írj majd mire jutottál!
A hozzászólás módosítva: Feb 10, 2019
(#) attika válasza superuser hozzászólására (») Feb 10, 2019 /
 
Írok mindenképpen de sajnos még hetek mire ide ér az olvasó része.
(#) rammeradrian hozzászólása Sze, 21:20 /
 
Sziasztok!

Szükségem lenne egy kis segítségre. Adott az alábbi kapcsolás:http://usuaris.tinet.cat/fmco/home_en.htm

A legelső kérdésem az lenne, hogy a 16F84 és a 16F84A kompatibilis-e egymással. Ugyanis a leírás végig 84-et emleget, a rajzon 84A van én is megépítettem 84A-val, de nem minden funkció működik.

Megvan az eredeti asm file is, esetleg ha kompatibilitási problémák lennének a két PIC között, van lehetőség átfordítani?

Nem vagyok túl jártas a PIC-ekben ezért minden segítség jól jön.

Köszönöm!

dbacc4p.asm
    
(#) superuser válasza rammeradrian hozzászólására (») Sze, 21:50 /
 
Szerintem 10MHz alatt kompatibilis.
Égesd be, próbáld ki, előrébb leszel.

16F84 -> 16F84A migration

ps. A link amit megadtál nem jó, az URL szövege nem a kapcs. rajzra mutat.
A hozzászólás módosítva: Sze, 21:51
(#) rammeradrian válasza superuser hozzászólására (») Sze, 22:05 /
 
Itt a kapcsolás valóban a kezdőoldalt linkeltem, de nem is tudom azt az aloldalt amin van.

Túl vagyok rajta. Kész az áramkör, be van égetve, csak nem minden működik megfelelően.
Gyári alapértelmezés szerint 10ms-os impulzusok a kimenetek, de ezek átírhatók állandó kimenetre is. Ehhez a megfelelő EEPROM címre a 10 helyett 0-át kell írni az oldal szerint:
Idézet:
„The time of activation of the outputs will be 10ms by the number programmed into your CV, if you program a value of 0, you'll get a fixed output (for the semaphore).”

Itt mutatja is a CV 515-CV518-ig vannak a kimenetek időállandói. De hiába írom át bármire, semmi sem változik.


Szerk: most megnézve a képet jobban, ő is 16F84A-t használt... tehát mennie kellene
A hozzászólás módosítva: Sze, 22:06
(#) szucsistvan123 hozzászólása Pé, 17:56 /
 
Hello!

Az MPLAB XC16-os fordítójával hogyan lehet megvalósítani az SPI kommunikációt? (a PIC a master.)
Vannak a fordítóba beépített függvények, vagy a függvényt nekem kellene megírni?
(A google-t tudom használni, csak amit találtam nem volt teljesen világos.)
Köszi!
(#) szucsistvan123 válasza Hp41C hozzászólására (») Pé, 18:41 /
 
Szia!

Közben megtaláltam én is! Köszönöm!
(#) usane hozzászólása Szo, 13:07 /
 
Üdv!

Egy kis magyarázatra lenne szükségem. Valahogy sosem ment a fejembe, de eddig nem volt rá szükségem. Valaki magyarázza el nekem, miért jó egy külső jel által léptetett számlálónak, hogy szinkronizálva legyen. Nem találtam rá megfelelő leírást. 2 számlálóra van szükségem külső jel számlálására és csak egy ASYNC van, ugyebár a Timer1, a többi csak SYNCRONIZED counter módban megy. Miért jó ez, és mire figyeljek ha külső jel számlálására használom.
A hozzászólás módosítva: Szo, 13:08
(#) usane válasza usane hozzászólására (») Szo, 13:28 /
 
Jut eszembe, mielőtt valaki ismerteti a számlálókat azzal tisztában vagyok. Ha más egyéb magyarázat nincs akkor fel sem tettem a kérdést
(#) benjami válasza usane hozzászólására (») Szo, 14:06 /
 
Mert ha a kiolvasás alatt lép a számláló előfordulhat, hogy a kiolvasott érték néhány bitjébe még a régi, a másik részébe meg már az új számláló állás szerinti érték kerül. Ebből meg elég fals értékek is keletkezhetnek.
(#) usane válasza benjami hozzászólására (») Szo, 14:51 /
 
Igen, köszönöm, rájöttem a számlálók alapvető tulajdonságaiból. Viszont közben megmértem, hogy max 2kHz lesz amit mérek, tehát jó lehet az async is, de ha már van 2 szinkronosom akkor azokat fogom használni, ki tudja később mi lesz
(#) benjami válasza usane hozzászólására (») Szo, 17:24 /
 
Az aszinkron számláló kiolvasását célszerű úgy csinálni, hogy a két közvetlen egymás után kiolvasott értéket összehasonlítani, és ha egyforma csak akkor elfogadni.
(#) BenőAladár hozzászólása 14:07 /
 
Sziasztok!
Elakadtam egy 12 bites AD konverter adatfogadásával. Az áramkör egy TLC2543C AD konverter és egy PIC16F876-ból áll jelenleg. Csak az A0 bemenetét szeretném konvertálni 12 bitre és azt egy unsigned int-ben eltárolni. Viszont akár hogy próbálkozom csak az első 8 bitet tudom kihozni belőle. Azt tudom, hogy a PIC alapban 8 bit-es SPI adatokat fogad de akkor hogy tudnám elérni hogy megkapjam a maradék 4 bitet is? A jelenlegi próbálkozásaim ez egy szubrutin jelenleg amit a főprogramból hívok meg.:
  1. Kezdokep()
  2. { 
  3.    
  4.     pt:
  5.     Lcd_Clear();
  6.     Lcd_Set_Cursor(1, 1);
  7.     Lcd_Write_String("Proba");
  8.    
  9.     AdCSon();//TLC2543 CS-láb
  10.    
  11.     spiWrite(0b00001000);// A0 láb konvertálása MSB-első bit
  12.     ual = spiRead();
  13.     spiWrite(0b00001010);// A0 láb konvertálása LSB-első bit
  14.     uah = spiRead();
  15.     AdCSoff();//TLC2543 CS-láb
  16.    
  17.     sprintf(s, "%d", uah);
  18.     Lcd_Set_Cursor(2,1);
  19.     Lcd_Write_String(s)
  20.      sprintf(s, "%d", ual);
  21.     Lcd_Set_Cursor(2,5);
  22.     Lcd_Write_String(s);
  23.     __delay_ms(100);
  24.     goto pt;
  25. }


Az elején így van inicializálva az SPI
  1. spiInit(SPI_MASTER_OSC_DIV64, SPI_DATA_SAMPLE_MIDDLE, SPI_CLOCK_IDLE_LOW, SPI_IDLE_2_ACTIVE)


Köszönöm a segítséget!

spi.c
    
(#) jethro hozzászólása 14:24 /
 
Sziasztok.
Szeretnék egy 16F628-ba betölteni egy kész HEX-et.Mi ennek a menete.PIC-kit-2-őm van.
Köszi
Következő: »»   1070 / 1070
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu