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   487 / 1210
(#) Hp41C válasza Bakman hozzászólására (») Feb 1, 2014 /
 
Az alól a szabály alól pont a 16C83 és a 16C84 volt a kivétel. Ezek voltak az első Flash memóriás Microchip kontrollerek. A 16C83, 16C84 törölhetők és újraprogramozhatók.
A hozzászólás módosítva: Feb 1, 2014
(#) progee hozzászólása Feb 1, 2014 /
 
Tudnátok segíteni?

Max7219-el szeretnék beüzemelni egy 8 karakteres LED kijelzőt. A kódot mikropascalban készítem, a kapcsolást pedig egyenlőre proteusban tesztelem.
A hiba amin nem tudok túljutni, az a 7219 helyes inicializálása.

A neten talált leírások alapján többféleképpen beállítom a BCD dekódolást, de csak az alábbiak szerint sikerül működtetnem:
  1. Chip_Select := 0;
  2.   soft_SPI_write(0x09);   // BCD számjegy dekódolás
  3.   soft_SPI_write(0x01);
  4.   Chip_Select := 1;


Ha a soft_SPI_write(0x01); értéket adom a dekódolásnak, akkor az első karakter helyére sikerül bármilyen számot kiíratnom, helyesen, de a többi helyre nem.
Ha a soft_SPI_write(0x02); értéket adom, akkor csak a második karakterre sikerül helyesen kiíratnom.
A soft_SPI_write(0x04); értéknél ugyan ez a helyzet a 3.-ik számjeggyel, soft_SPI_write(0x08); értéknél pedig a 4.-ik számjeggyel.

Próbáltam többféle értéket adni neki netes példák alapján, de ilyenkor többségében egyetlen számjegyet sem jelenített meg helyesen.
A számjegy megjelentésénél először megadom a számjegy helyét, majd az értéket:
  1. Chip_Select := 0;
  2.     soft_SPI_write(1);             //1-es pozició
  3.     soft_SPI_write(9);             //9-es számjegy
  4.     Chip_Select := 1;


Hogyan kell helyesen használni a 7219-et?
A hozzászólás módosítva: Feb 1, 2014
(#) progee válasza (Felhasználó 15355) hozzászólására (») Feb 1, 2014 /
 
Ez nem LED mátrix, hanem 8 karakteres kijelző
(#) icserny válasza progee hozzászólására (») Feb 1, 2014 /
 
A Max7219 adatlapjának 2. táblázata írja le, hogy melyik cím mire való. Eszerint 1-8 a digit kijelölésére szolgál, ahogy te is írtad. Mi a gond?
A hozzászólás módosítva: Feb 1, 2014
(#) icserny válasza progee hozzászólására (») Feb 1, 2014 /
 
Ugye a Scan Limit regisztert is beállítottad?
(#) nox72 válasza Hp41C hozzászólására (») Feb 1, 2014 /
 
Köszönöm a segítségeket!
(#) c27 válasza vicsys hozzászólására (») Feb 1, 2014 /
 
Van pickit2-m, bár még nem használtam másra csak programozásra, de szkóphoz is lehet hozzá tudok jutni 1-2 hét múlva. Majd próbálgatom még, addig is egy új nyákot is csinálnom kell amiben javítva lesznek az eddigi hibák, szóval egy kicsit később még rákérdezek, ha nem jutok előrébb, sajnos most akadt fontosabb dolgom is.
(#) progee válasza icserny hozzászólására (») Feb 1, 2014 /
 
Így inicializáltam:
  1. procedure max7219_init1();
  2. begin
  3.   Chip_Select := 0;
  4.   soft_SPI_write(0x09);   // BCD számjegy dekódolás
  5.   soft_SPI_write(0xFF);
  6.   Chip_Select := 1;
  7.  
  8.   Chip_Select := 0;
  9.   soft_SPI_write(0x0A);   // Szegmens fényesség
  10.   soft_SPI_write(0x0F);
  11.   Chip_Select := 1;
  12.  
  13.   Chip_Select := 0;
  14.   soft_SPI_write(0x0B);   // Kijelző frissítés
  15.   soft_SPI_write(0x07);   //8 számjegyes kijelző (0..7)
  16.   Chip_Select := 1;
  17.  
  18.   Chip_Select := 0;
  19.   soft_SPI_write(0x0C);    // Kijelző bekapcsolása
  20.   soft_SPI_write(0x01);
  21.   Chip_Select := 1;
  22.  
  23.   Chip_Select := 0;
  24.   soft_SPI_write(0x00);    // Teszt kikapcsolása
  25.   soft_SPI_write(0xFF);  
  26.   Chip_Select := 1;
  27. end;


és így próbáltam kiíratni a 95-ös számot az első két helyre:
  1. Chip_Select := 0;
  2.   soft_SPI_write(1);             //digit poziciója
  3.   soft_SPI_write(9);
  4.   Chip_Select := 1;
  5.  
  6.  
  7.   Chip_Select := 0;
  8.   soft_SPI_write(2);             //digit poziciója
  9.   soft_SPI_write(5);
  10.   Chip_Select := 1;


A végeredményt csatoltam képben

led.jpg
    
(#) icserny válasza progee hozzászólására (») Feb 1, 2014 /
 
A teszt kikapcsolása szerintem:
  1. Chip_Select := 0;
  2. soft_SPI_write(0x0F);    // Teszt kikapcsolása
  3. soft_SPI_write(0x00);  
  4. Chip_Select := 1;


Te viszont fordított sorrendben írtad...

Ha bekapcsolod mind a 8 digit megjelenítését, akkor a nem használt digiteket 0x0F-be kellene írni!
(#) progee válasza (Felhasználó 15355) hozzászólására (») Feb 1, 2014 /
 
Már így is próbáltam. Az eredmény ugyanaz.
(#) progee válasza (Felhasználó 15355) hozzászólására (») Feb 2, 2014 /
 
Köszönöm a fáradozásod!
A DSN fájlod adta meg a megoldást!
Ugyan így csináltam mindent a szoftverben. Közös anódos LED kijelzőt használtam a tesztnél ez okozta a hibát. Kicseréltem közös katódosra, és működik rendesen.
Lenne még két kérdésem.
Közös anódos kijelzőnél mit kell másképp csinálni, hogy használni lehessen a max7912-t,
illetve hogyan kell üresen hagyni egy karaktert, ha oda nem akarok írni semmit?
(#) icserny válasza progee hozzászólására (») Feb 2, 2014 /
 
Idézet:
„hogyan kell üresen hagyni egy karaktert, ha oda nem akarok írni semmit?”
Már tegnap megírtam: 0x0F-et kell beírni (feltéve, ha dekódolást használsz). Én azt olvastam ki az adatlapból, hogy ennél a bitkombinációnál alszik ki minden szegmens.
(#) progee válasza icserny hozzászólására (») Feb 2, 2014 /
 
Működik! Köszönöm mindkettőtöknek!
(#) progee hozzászólása Feb 5, 2014 /
 
Ismét problémába ütköztem.
Nem is tudom, hogy ebben a fórumban, vagy a mikropascal-ban kérjek-e segítséget, de ha már itt kezdtem a max7219-et korábban boncolgatni, inkább ide írok.

Két db max7219-et kötöttem össze, hogy két darab 8 digites kijelzőt tudjak működtetni, de nem sikerül megértenem, hogyan lehet szoftveres SPI segítségével vezérelni a másodikat.

A kapcsolás az így nézne ki: MAX7219-to-Drive-16-Seven-Segment

Eddig egy nem szoftveres SPI megoldást találtam C-ben: C kód

Sajnos ez alapján nem sikerült a logikára rájönnöm.
Ha jól sejtem, a 0x0B kód után megadható digitek száma ebben az esetben is 8 kell, hogy legyen, de innen nem tudom hogyan kell tovább lépni, hogy a 9-16 digitek is értéket kaphassanak.
(#) icserny válasza progee hozzászólására (») Feb 5, 2014 /
 
Ha így sorba vannak kötve, akkor kétszer annyi adatot kell kiküldeni, mielőtt a LOAD DATA/CHIP SELECT lábat felhúzod. Ha eddig 16 bitet küldtél ki, akkor most 32 bitet kell. Az első 16 bit a mikrovezérlőtől "távolabbi" eszközben, a második 16 bit pedig a "közelebbi" eszközön landol.
(#) progee válasza icserny hozzászólására (») Feb 5, 2014 /
 
Szoftveres SPI esetében két 8 bites adatot kel küldeni 1 kijelző esetében. Először a pozíciót, majd a kiírandó értéket.
  1. Chip_Select := 0;
  2.   soft_SPI_write(1);      //pozíció. első digit
  3.   soft_SPI_write(8);      //8-as számjegy
  4.   Chip_Select := 1;


Ha ezt meg kell dupláznom, akkor kétszer 16 bitet kellene küldenem? De hogyan?
(#) progee válasza icserny hozzászólására (») Feb 5, 2014 /
 
Kicseréltem a mikrokontrollert a tesztbe olyanra, amiben van hardveres SPI is,
majd így próbáltam küldeni az adatokat:
  1. Chip_Select := 0;
  2.   SPI1_write(1);     //pozíció. első digit, távolabbi kijelző
  3.   SPI1_write(8);      //8-as számjegy
  4.   SPI1_write(1);      //pozíció. első digit, közelebbi kijelző
  5.   SPI1_write(8);      //8-as számjegy
  6.   Chip_Select := 1;


Ekkor a közelebbi kijelző első helyén megjelenik a 8-as szám. A távolabbi kijelző max7219-e viszont nem dolgozik egyáltalán.
A hozzászólás módosítva: Feb 5, 2014
(#) icserny válasza progee hozzászólására (») Feb 5, 2014 /
 
Idézet:
„A távolabbi kijelző max7219-e viszont nem dolgozik egyáltalán.”
Konfigurálása megtörtént?
(#) progee válasza icserny hozzászólására (») Feb 5, 2014 /
 
Megint kettőtöknek sikerült megoldani a gondomat Köszönöm!
A teljes megoldás, hogy a max7219 inicializálásnál, és később az adatok küldésénél is kétszer kell meghívni a SPI1_write(0); sort mielőtt a chipselect magas érték nem lesz.
  1. Chip_Select := 0;        //Első kijelző
  2.     SPI1_write(0x0C);      //Kijelző bekapcsolása
  3.     SPI1_write(0x01);
  4.     Chip_Select := 1;
  5.  
  6.     Chip_Select := 0;        //Második kijelző
  7.     SPI1_write(0x0C);      // Kijelző bekapcsolása
  8.     SPI1_write(0x01);
  9.     SPI1_write(0);
  10.     SPI1_write(0);
  11.     Chip_Select := 1;
  12.  
  13.     Chip_Select := 0;        //Harmadik kijelző
  14.     SPI1_write(0x0C);      // Kijelző bekapcsolása
  15.     SPI1_write(0x01);
  16.     SPI1_write(0);
  17.     SPI1_write(0);
  18.     SPI1_write(0);
  19.     SPI1_write(0);
  20.     Chip_Select := 1;
(#) icserny válasza progee hozzászólására (») Feb 5, 2014 /
 
Nehezen hihető, hogy a bekapcsolást három lépésben kellene csinálni!
Így miért nem jó neked?
  1. Chip_Select := 0;        //Harmadik kijelző
  2. SPI1_write(0x0C);      // Kijelző bekapcsolása
  3. SPI1_write(0x01);
  4. SPI1_write(0x0C);      // Kijelző bekapcsolása
  5. SPI1_write(0x01);
  6. SPI1_write(0x0C);      // Kijelző bekapcsolása
  7. SPI1_write(0x01);
  8. Chip_Select := 1;


Ezek a vezérlők osztódással szaporodnak? Eddig csak kettőről volt szó, most meg már hárman lettek?
A hozzászólás módosítva: Feb 5, 2014
(#) progee válasza icserny hozzászólására (») Feb 5, 2014 /
 
Az általad írt kódot próbáltam amint javasoltad, de nem működött. Ennek az volt az oka, hogy az inicializálásnál nem használtam ezt a kód ismétlést, tehát a második kijelző nem lett inicializálva. Kipróbáltam azóta és valóban elfogadja így is a kódot.
Három példát azért írtam, hogy jobban érthető legyen SPI1_write(0); ismétlődésének logikája.
Az ismétlődést egy for ciklussal egyszerűsítettem a saját kódomban, de ide egy egyszerűbb és érthetőbb példát szerettem volna tenni azok számára akik idetévednének ugyanezen probléma megoldása miatt.
Köszönöm neked is a segítséget!
(#) gaspar_zsolt hozzászólása Feb 6, 2014 /
 
Sziasztok,

a kérdésem felétek, hogy ha egy PIC lábain a jelszint változását megszakítással akarom lekezelni, akkor a globál interrupt bittel mit kell tennem.
Tiltani, vagy engedélyezni?
A PIC megszakítás ábrájából úgy tűnik igen.
Köszönöm.
A hozzászólás módosítva: Feb 6, 2014
(#) kissi válasza gaspar_zsolt hozzászólására (») Feb 6, 2014 /
 
"global interrupt enable" --> általános megszakítás engedélyezés --> ha nem engedélyezed, akkor SEMMILYEN megszakítás nem jut érvényre ( nézd meg az interrupt logikát ábrázoló kapcsolási rajzot, ez az utolsó ÉS kapu egyik lábára menő engedélyező jel ! ) !
(#) gaspar_zsolt válasza kissi hozzászólására (») Feb 6, 2014 /
 
Igen, köszönöm kissi, ez volt az, amit sejteni véltem! Most már biztos!
(#) Hilo hozzászólása Feb 6, 2014 /
 
Sziasztok,
Kérdésem az lenne hogy hogyan tudok PIC el kétfázisú négyszögjelet előállítani? Elsősorban a kapcsolás része a kérdőjeles számomra.
Előre is köszönöm a segítséget.
(#) eSDi válasza Hilo hozzászólására (») Feb 6, 2014 /
 
Üdv!

Őőő... Kapcsolás? A PIC-nek kell mondjuk 5V tápfesz, 10k felhúzó ellenállás a MCLR és a Vdd közé, és egy 100nF-os kondi a Vdd és a Vss köze hidegítésnek. Innentől már csak attól függ a kapcsolás, hogy mit szeretnél kezdeni a kétfázisú négyszögjellel. A többi meg csak programozás kérdése.
(#) pillesoft hozzászólása Feb 6, 2014 /
 
Jó napot!
Arról érdeklődnék, hogy mennyire megbízhatók a TTL-USB átalakítók. Különösen, ami kinai (pl. ez http://www.vatera.hu/listings/index.php?q=usb+ttl), de sokkal olcsóbb mint pl. ezek (http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm).
hálás lennék, ha megírnátok a tapasztalataitokat. nekem 28-as Low Pin Demo Board van, es win7-s USB-re akarnám rákötni.
(#) nedudgi válasza pillesoft hozzászólására (») Feb 6, 2014 /
 
Hogy jön ide az, hogy kínai? Ökölszabály, hogy a legolcsóbbat csak olyanból szabad megvenni, amit meg tudsz javítani, ha nem gömbölyű valami.
(#) pillesoft válasza nedudgi hozzászólására (») Feb 6, 2014 /
 
Attól még, ha kinai valami működhet, pont ezért írtam a fórumra, hogy ha vkinek van tapasztalata. akár jó, akár rossz, sokat segítene.
másrészt nyilván azért akarok venni kész eszközt, mert nincs időm bármivel is elbíbelődni ...
de ha vmit megkapok 1000 ft alat és jó, miért fizessek töb ezer forintot?
(#) Kovabe válasza pillesoft hozzászólására (») Feb 6, 2014 /
 
Ami nem kinai az hamisitvány.
Következő: »»   487 / 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