Fórum témák
» Több friss téma |
Sajna nem megy, így egyik példa kóddal sem jelenik meg semmi a kijelzőn.
A level shifter szo szerint szinteltolot jelent, de amire neked szukseged van az a szintilleszto. A ketto nem ugyanaz. Vagy itt, vagy az AVR miertek hogyanok topikban volt errol szo par napja. Kulonbozo megoldasok felmerultek, bar ott 3.3V-os mikrokontrollerhez kellett illeszteni 5V-os kijelzot.
Szia!
Ha csak 5V-ról akarsz 3V-ra, akkor a legegyszerűbb megoldás egy feszültségosztó: Bővebben: Link Itt az inputhoz kell kötni az 5V-os jelet, és az outputon már csak 3.3V lesz belőle. Ha oda-vissza kell, akkor ez a kapcsolás lehet a megoldás, bár én még nem használtam: Bővebben: Link. Illetve az utána következő hozzászólásokban is találsz megoldásokat. A hozzászólás módosítva: Feb 3, 2015
Sziasztok. Teljesen kezdő vagyok. PIC16-ra milyen analóg-digitális átalakítók és mennyi köthető? 3-10 khzes jelek. És ezeket hogyan lehetne feldolgozni programozással? Összehasonlítás, stb.
Volt más hibája is, amit közben észrevettem, mert sokszor nem kapott értéket a digit_display fv.
Héztem killbill által írt példát is és a shift register adatlapja alapján próbáltam állítgatni a vezérlést. Most ott tartok, hogy 16 bit információt küld, de így is értelmezhetetlen karakterek jelennek csak meg.
Zavart érzek az erőben....
A kiragadott részek ellentmondásban vannak egymással. A szam bemeneti változó 0..9 ig terjedő érték. A léptető regiszterbe 16 bitet léttetünk be, de a minta csak 8 bites... Hogy jól működjön, a léptetést két digitre kellene egyszerre végrehajtani. Valamint azt is meg kell mondani, hogy a 4 digit közül melyik kettőre legyen kijelezve. Továbbá a readbit makró kifejtése egy ciklus lesz, így indokolatlanul lassú lesz a rutin működése. Ráadásul a 16 bites léptetés miatt tovább csökken a sebesség. Mivel minden lépésben egy bitet viszünk ki a dispword változóból, elegendő ciklusonként egy bittel léptetni.
Hívása kb. 20ms -enként felváltva kell a digiteket frissíteni:
Szia! Nem tejesen érthető a kérdésed, de pl a PIC16F1526-nak 30 analóg bemenete van, ezekre tudsz TTL szintet küldeni és programmal feldolgozni, de ha teljesen kezdő vagy akkor ez szinte lehetetlen vállalkozás. A pic programozást egy egyszerű led villogtatóval kell kezdeni és fokozatosan haladni, megérteni mi, miért van úgy ahogy van melyik regiszter mit csinál.
Az általad javasolt változást kipróbáltam, de sajnos nem kapcsolódik be egyik szegmens sem. Azt megkérdezhetem, hogy a RIGHT_DIGIT, LEFT_DIGIT és a két tömb értékei mi alapján adhatóak meg, vagy ez mindig egységes 8 illetve 16 bites regisztereknél?
Ebben a hozzászólásodban feltöltöttél egy kapcsolási rajzot.
Szegmens vezérlések - DigitL[10] és DigitH[10] tömbök: A rajz szerint az A16..A0 a következő kivezetéseket vezérlik.
Ebből és a kapakterek képéből áll össze a két tömb elemeinek értéke. Egy szegmens akkor világít, ha a digitje be van kapcsolva és a hozzá tartozó kimenet 0, azaz a hozzá tartozó beléptetett bit 1. Pl. 1 kijelzése esetén a B és C szegmenseket kell bekapcsolni: DigitL[1] = 0x05 és DigitH[1] = 0x60 Sajnos az előbb a DigitH[] tömb elemeit 1 bittel balra léptetve adtam meg.... Digit vezérlés: Az A9 vezérli a bal, az A8 a jobb oldali digitek tranzisztorát. Ha a beléptetett minta 8. bitje 1, akkor az A8 kimenet 0, ez bekapcsolja a bal oldali digiteket. Ha a beléptetett minta 9. bitje 1, akkor az A9 kimenet 0, ez bekapcsolja a jobb oldali digiteket. Még egy progléma lehet: Fordítva kell beléptetni - az adatlap elég homályosan fogalmaz...
A hozzászólás módosítva: Feb 4, 2015
Ezzel a kóddal most az első két kijelzőn két hatost, a második két kijelzőn pedig az alsó négy szegmens kapcsolja. Viszont amikor
Viszont ha más értékeket szeretnék adni az első és a második paraméterben, vagyis különböző karaktereket, pl 1234, akkor már krixkraxokat ír csak ki a kijelzőre.
Egy apró megjegyzést figyelmen kívül hagytál:
Idézet: „Sajnos az előbb a DigitH[] tömb elemeit 1 bittel balra léptetve adtam meg....”
Sajnos még valamit elrontottam: unsigned int dispword = (DigitH[dignumh] << 9) | (DigitL[dignuml]) | pos; Próbálj meg 0 .. 9 értékeket kiírni a "bal" és a "jobb" oldali digitekre és rajzold le vagy fényképezd le a megjelenő "krixkraxokat" és töltsd fel ide. Látatlanban, csak annyiból, hogy nem jó, nem lehet rájönni a hibára.
0-tól 7-ig írtam át a számokat a két függvényhívásban:
Azért csak hétig, mert ennyit engedett feltölteni a hobbielektronika egyszerre.
Közben don_peter segítségével csináltam térképet a szegmensekről.
Ezt felhasználva már csak a helyes mintát kell a DigitL és DigitH tömbökbe megadni...
Sziasztok!
Segítséget szeretnék kérni. A megszakításokkal szeretnék foglalkozni, de a program amit megítam az MPLAB szimulátorban működik, de a proteus szimulátorában már nem. Ülök felette már két órája de nem tuom hogy mi lehet a probléma. Néztem éldaprogramokat is, de azok alapján sem megy. A válaszokat és segítséget előre is köszönöm.
Sziasztok,
Készítettem egy elektromos gitár hangolót (frekvenciamérőt) 16F887 kontroller segítségével. Teszt képpen építettem egy frekvencia generátort egy 4060 as ic segítségével. Először ennek a frekvenciáját vizsgáltam és azzal működött is a cuccos ahogy kell. Most megpróbáltam konkrétan az elektromos gitár jelével de nem csinál semmit sem. Ötlet? Talán gyenge a jel ami a gitárból jön? Próbáltam úgy is, hogy a gitár jelét áttküldtem egy multiefekten amiben van előerősítő, de ugyis semmi.
A gitár hangszedője pár mV nagyságrendű. Az nagyon kevés frekvenciaméréshez, a szükséges voltos nagyságrend helyett.
Építsek hozzá egy előerősítőt? De mint irtam áttküldtem a jelet egy multieffekten amiben van előerősítő.
Konkrét adatok, kapcsolások nélkül nem lehet tanácsot adni. A multieffekt milyen jelszintet ad ki? Elég az a frekvenciamérő meghajtásához? A 4060 több voltos jelet ad, az elég a frekvenciamérőnek. Tudsz hangfrekvenciás feszültséget mérni?
Ha jól emlékszem az INTx lábak csak digitális bementként használhatóak és az INT0 az pont egy analog bemenet is. Bár ezt a PIC-et nem ismerem és a doksiában nem igazán láttam ilyen ansel regisztert amivel be lehetne állítani melyik port analog pufferelésű.
Igazad van, az RB0 az AN10. Átállítottam digitális portra, de így sem reagál.
Ezt a részt pontosan mire használod:
meg az INT0IE előtt törölj egy INT0IF-et, még egy dologra tudok gondolni ha ez nem működik a comparator egyik bemenete is ott van bár a doksi szerint ki van kapcsolva de tegyél be egy clrf CM1CON-t, ha ez se akkor nem tudom sajnos.
Sikerült lemérnem a jel nagyságát. Ha áttküldöm a multieffekt előerősítőjén akkor is csak max 300 mv jön ki belőle. Előerősítő nélkül pedig csak 10 mv. Nekem kéne legalább 700 mv.
A bemeneten van egy komparátor ami 0,6 V-nál billen. Esetleg lehet olyat csinálni, hogy leviszem a referencia feszültséget pár mV- os nagyságrendre? Ez esetben áttbillene a komparátor és meglenne az a 5V - 0v négyszögjelem elvileg. Csak kérdés, hogy olyan kis referenciát be e lehet állitani?
Beleírtam még azokat a részeket amiket írtál, de nem nagyon akar menni. Már nem tudom mi a fene baja lehet.
Frekvenciamérésnél mindig hasznos, ha alacsonyabb jelszinteket tudsz mérni, ugyanakkor jobb, ha a gitár nagyobb jelszinted ad le. Szerintem nem ártana egy alacsonyfogyasztású előerősítő a gitárba. Legalábbis ötven évvel ezelőtt így csináltuk.
A hozzászólás módosítva: Feb 5, 2015
Szia!
Nem ismerem a Proteus-t, de az MPLAB alatt ha megy valami, akkor az jó szokott lenni... Amire az MPLAB nem figyel, azt kell megnézni ( mert a Proteus valószínűleg azt is figyeli !), azaz pl. a konfigurációs bitekkel mi újság ?!
Semmit sem jelent, hogy a Proteusban nem megy. Nekem van olyan programom ami valóságban működik, de Proteusban semmit sem csinál. Egy breadboard-on rakd össze, úgy próbáld.
Sziasztok! Azt szeretném kérdezni, hogy ami MPASM fordítóban a #define, az ASM30 fordítóban mi? Olvasgatom az útmutatót, de ezt nem találtam meg
.equ symbol, expression
|
Bejelentkezés
Hirdetés |