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   1071 / 1203
(#) jethro válasza Bakman hozzászólására (») Feb 17, 2019 /
 
Helo.Lehet,hogy nem tudja kezelni a 16F628-at?No device found,és a listában sem találom.
(#) Bakman válasza jethro hozzászólására (») Feb 17, 2019 /
 
Kezdjük az elején, mert sok a bizonytalan információ. Milyen panelbe ültetted a kontrollert? Melyik programmal próbálkozol? Az előbb még megismerte a PIC-et (valami), de már nem. Hogyan van összekötve a PIC és a PICKit2?
(#) eSDi válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Hali!

Ezen táblázat szerint teljesen rossz adatot küldesz ki neki.
L1:L0 legyen 01 ez passzol a 8bit-es interfészhez. LSBF-el pedig a bit kiléptetés irányát határozod meg MSB First, Vagy LSB First. Nem pedig a kiolvasni kívánt érték alsó, vagy felső bájtját.
Valahogy így kellene:
  1. AdCSon(); //CS Low
  2. __delay_us(10); //Ha nincs az AdCSon/off függvényben.
  3. spiWrite(0b00000100); //AIN0, Out interface:8bit, MSB First, Unipolar
  4. ual = spiRead();
  5. uah = spiRead();
  6. __delay_us(10); //Ha nincs az AdCSon/off függvényben.
  7. AdCSoff(); //CS High
A hozzászólás módosítva: Feb 17, 2019

tlc2543.PNG
    
(#) eSDi válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Bocsánat L1:L0-t 11-re kellene állítani (16bit), így lesz meg a 2 teljes bájtod az olvasáshoz. 8bit-es módban eldobja a maradék 4bit-et.
(#) Bakman válasza eSDi hozzászólására (») Feb 17, 2019 /
 
A vezérlő bájt után kell a várakozás, amíg elvégzi a konveziót az IC.
(#) eSDi válasza Bakman hozzászólására (») Feb 17, 2019 /
 
Ja igen, az elmaradt. Vagy az EOC lábat kell figyelni. Én be szoktam rakni egy kis delayt a CS-hez is kezdetekben. Az adatlap szerint is van 1.425us Setup time, mielőtt beléptetné az órajellel az adatot.
(#) jethro válasza Bakman hozzászólására (») Feb 17, 2019 /
 
Mivel a hexet nem én írtam csak a PICkit programot használnám ahogy mutattad import,írás.Csakhogy automatikusan nem ismerte meg a pic-et,próbáltam megkeresni de nem is ajánlotta föl ezt a típust.Teljesen véletlen valahol találtam manuális keresést azt kipipálva már megtalálta az ic-t,majd import,írás és képen látható az eredmény.Ez egy nixie óra lenne aminek a paneljét itt vettem a HE-n.
(#) Bakman válasza jethro hozzászólására (») Feb 17, 2019 /
 
Az a panel nem alkalmas annak a kontrollernek az írásához. 4, 14 és 20 lábú PIC-et lehet vele programozni, teljesen máshol vannak az adatvezetékek, mint ahova a 18 lábú kéri. Mutattam már egy képet mit, mivel és hogyan kell összekötni, aszerint cselekedj pl. egy dugdosós próbapanelen.
(#) Bakman válasza eSDi hozzászólására (») Feb 17, 2019 /
 
Valóban, az meg nálam maradt le.
(#) jethro válasza Bakman hozzászólására (») Feb 17, 2019 /
 
Köszi
(#) BenőAladár válasza eSDi hozzászólására (») Feb 17, 2019 /
 
Köszönöm mindkettőtöknek a segítségeket.

Valami még nem kerek, próbáltam ez szerint amit írtok (ha jól értem)
  1. AdCSon();//TLC2543 CS-láb L
  2.     __delay_us(2);
  3.     spiWrite(0b00001100);// A0 láb konvertálása 16bit adat
  4.     __delay_us(10);
  5.     ual = spiRead();
  6.     uah = spiRead();
  7.     __delay_us(10);
  8.     AdCSoff();//TLC2543 CS-láb H


A második byte beolvasásába elakad ha kitörlöm az egyik "spiRead();" sort akkor az első byte-t megvan de ha mindkettő sor bent van akkor nem lép tovább a programom.
EOC-t figyelni már nem tudom nincs több szabad port a PIC-en.

Egyenlőre itt tartok.
(#) jethro válasza Bakman hozzászólására (») Feb 17, 2019 /
 
Egyszer már belefutottam ebbe csak elfelejtettem.Gyártottam is hozzá másik panelkát és azzal úgy néz ki föl is szaladt a progi.Kipróbálni ma már nem tudom.Nagyon köszönöm a segítségedet.
(#) Bakman válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Próbáld így:
  1. AdCSon();
  2. __delay_us(10);
  3. spiWrite(0b00001100);
  4. __delay_us(10);
  5. AdCSoff();
  6. __delay_us(10);
  7. AdCSon();
  8. __delay_us(10);
  9. ual = spiRead();
  10. uah = spiRead();
  11. AdCSoff();
Egyébként fura a hibajelenség. Ha az IC nem szolgáltatna adattal, akkor a vett byte lehetne bármi de valami akkor is lenne, nem szabadna ezen fennakadnia.
(#) BenőAladár válasza Bakman hozzászólására (») Feb 17, 2019 /
 
Megszűnik az órajel szkóppal mérve a második kiolvasásnál, de közben kipróbálom amit írtál.
(#) BenőAladár válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Az utolsó verzióban már az első byte sem érkezik meg
(#) eSDi válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Áá! Nem túl jó az SPI kezelés, ki kell léptetned egy üres byte-ot, hogy venni tudd az adatot.

  1. static void spiReceiveWait()
  2. {
  3.     while ( !SSPSTATbits.BF ); // Wait for Data Receive complete
  4. }
  5.  
  6. char spiRead() //REad the received data
  7. {
  8.     spiReceiveWait();        // wait until the all bits receive
  9.     return(SSPBUF); // read the received data from the buffer
  10.    
  11. }


Csak vár, de a bemeneti puffer sosem lesz tele így. Az első azért jó, mert a beírt adat kiléptet valamit, de az sem a mért érték lesz, mert az akkor még nem került bele.
(#) BenőAladár válasza eSDi hozzászólására (») Feb 17, 2019 /
 
Azon is túlestem már de az sem jó.
Ha a két olvasás között kiléptetek 8db 0 bitet akkor az eredményem a második olvasáskor mindig 0 lesz ha viszont kiadom neki az első (0b00001100) adatot akkor ugyan az lesz az eredmény mindkét változóban tehát az 1. byte.
(#) eSDi válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Esetleg így. Ennek így elvileg mindig az előző mérést kellene visszaadnia.
  1. AdCSon();
  2. __delay_us(10);
  3. spiWrite(0b00001100); //Command
  4. ual = spiRead();
  5. spiWrite(0b00000000); //Dummy
  6. uah = spiRead();
  7. __delay_us(10);
  8. AdCSoff();
  9. __delay_ms(1); //Wait for EOC
(#) BenőAladár válasza eSDi hozzászólására (») Feb 17, 2019 /
 
Ezt is kipróbáltam már korábban, ha az AD-nek kiküldöm a nullákat a két olvasás közben akkor mindkét mérés csak 0 byte-os változókat eredményez..
(#) eSDi válasza BenőAladár hozzászólására (») Feb 17, 2019 /
 
Akkor passz, mert elvileg így jónak kellene lennie. Talán másik SPI beállítással jó lesz.
(#) eSDi válasza BenőAladár hozzászólására (») Feb 18, 2019 /
 
Idézet:
„The next falling edge of I/O CLOCK drives DATA OUT to the logic level corresponding to the next MSB/LSB, and the remaining bits are shifted out in order.


Ha jó a matekom, akkor neked ez kell:
CKP = 0
CKE = 1
SMP = 1
(#) BenőAladár válasza eSDi hozzászólására (») Feb 18, 2019 /
 
Azt hiszem jó lett a matek, Megérkezett a második byte.
Már csak egy kérdés: A második byte-nak csak az első 4 bitje lényeges ezért hogy azt kapjam meg el kell toljam balra 12bitet unsigned int esetén vagy 4 bitet ha char változóba van? Így 0 bitek kerülnek a felesleges 4 bit és a maradék eltolt üres helyre.
(#) Kera_Will válasza BenőAladár hozzászólására (») Feb 19, 2019 /
 
Ha biztosan 0 szeretnél látni valahol akkor inkább AND eld össze egy olyan változóval amiben 0 szerepel az adott bit helyeken.
Alsó 4 legyen biztosan 0 akkor pl xF0 (11110000)b
Változo = Valtozo AND xF0
Ha a felső 4 bit biztos 0 legyen akkor meg x0F el AND (00001111)b
Valtozo = Valtozo AND xF0
Minden paros bit 0 legyen akkor meg xAA kell AND elni ... (1010 1010)b

Ekkor biztos 0 lesz ott attól függetlenül , hogy mi történt vele előtte.
(#) eSDi válasza BenőAladár hozzászólására (») Feb 19, 2019 /
 
Válaszd az LSB First opciót, úgy nem kell majd semmit tologatni.
(#) rolandgw válasza BenőAladár hozzászólására (») Feb 19, 2019 /
 
  1. ad_val = (((unsigned int) high_byte) << 4) | (low_byte >> 4);
(#) glaci hozzászólása Feb 19, 2019 /
 
Sziasztok!
A gond a következő: pic18f46k80 piccel mérném DS18B20 hőmérőszenzor hőmérsékletét. A mikroc onewire függvényeit használnám, de nem hajlandó kommunikálni. A példaprogram pic16f887-íródott.
Lehetséges, hogy a 18f46k80-at nem tudja kezelni a mikroc onewire függvényei?
A hozzászólás módosítva: Feb 19, 2019
(#) usane válasza glaci hozzászólására (») Feb 19, 2019 /
 
Nem valószínű. Valami beállítási hiba lesz. órajel, IO-pin stb.

Szerk. Leggyakoribb hiba. Analóg funkciókat kikapcsoltad?
A hozzászólás módosítva: Feb 19, 2019
(#) glaci válasza usane hozzászólására (») Feb 19, 2019 /
 
Igen.
(#) BenőAladár válasza rolandgw hozzászólására (») Feb 19, 2019 /
 
Ezt több helyen is láttam már alkalmazni viszont nem értem.
Jelenleg az van, hogy van egy változóban (char H) 8 bitem és van egy másik változóban (char L) 8 bitem aminek csak az első négy bitje kell és mindezt szeretném egy (unsigned int LH) változóban látni. Lényeg hogy egyszerű legyen a 12bites DAC értékeit szeretném egy változóban tudni tehát a 4095 értéket. Viszont ez jelenleg két részben van...első 8 bit és a maradék 4 + szemét..
(#) superuser válasza BenőAladár hozzászólására (») Feb 19, 2019 /
 
Könnyen értelmezhetően:
  1. unsigned int Val12bit;
  2. Val12bit = ((unsigned int) high_byte) << 8) + low_byte; //két bájt egy wordbe összerakva
  3. Val12bit >>= 4; //a word 12 bitesre butítva, alsó 4 bit eldobásával, felső bitek jobbra tolásával


A korábban írt kód
  1. ad_val = (((unsigned int) high_byte) << 4) | (low_byte >> 4);

ha a shiftelések értékeit összeadod, látható hogy ezzel egyenértékű.

fent: high 8 balra majd 4 jobbra, low 4 jobbra
lent: high 4 balra, low 4 jobbra
A hozzászólás módosítva: Feb 19, 2019
Következő: »»   1071 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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