Fórum témák
» Több friss téma |
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
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:
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:
Hogyan kell helyesen használni a 7219-et? A hozzászólás módosítva: Feb 1, 2014
Ez nem LED mátrix, hanem 8 karakteres kijelző
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
Ugye a Scan Limit regisztert is beállítottad?
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.
Így inicializáltam:
és így próbáltam kiíratni a 95-ös számot az első két helyre:
A végeredményt csatoltam képben
A teszt kikapcsolása szerintem:
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!
Már így is próbáltam. Az eredmény ugyanaz.
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? Idézet: 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. „hogyan kell üresen hagyni egy karaktert, ha oda nem akarok írni semmit?”
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.
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.
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.
Ha ezt meg kell dupláznom, akkor kétszer 16 bitet kellene küldenem? De hogyan?
Kicseréltem a mikrokontrollert a tesztbe olyanra, amiben van hardveres SPI is,
majd így próbáltam küldeni az adatokat:
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
Idézet: Konfigurálása megtörtént? „A távolabbi kijelző max7219-e viszont nem dolgozik egyáltalán.”
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.
Nehezen hihető, hogy a bekapcsolást három lépésben kellene csinálni!
Így miért nem jó neked?
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
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!
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
"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 ! ) !
Igen, köszönöm kissi, ez volt az, amit sejteni véltem! Most már biztos!
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.
Ü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.
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.
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.
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? |
Bejelentkezés
Hirdetés |