Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A mellékelt program a PICkit2 Starter Kit egyik demója, ami a PIC16F690-nel szerelt Low Pin Count kártyához készült.
Az RA0 lábra, az ADC bemenetére egy 10 kOhm-os potméter csúszkája kapcsolódik, ami a potméter állásátólfüggően 0 - 5V jelet ad. A program beolvassa és digitalizálja ezt az értéket, majd 4 bitre binárisan kódolva kiküldi az RC0...RC3 lábakon, ahová egy-egy LED van kötve. A PIC16F84-et ideje volna elfelejteni! Drága és buta...
Ha írsz valamit a "DMX jel"-ről, akkor talán tudunk ötletet adni, hogy merre indulj el. Tehát egy kicsit pontosabb feladatspecifikációt prbóálj meg megfogalmazni, sokkal több segítséget fogsz kapni, feltéve, hogy nem azt várod, hogy helyetted valaki készre írja meg a programot.
Egy DMX jel tudtommal nagyon sok csatornarészből áll. Azt tudom erről, hogy a diszkós lámpákon be kell állítani egy értéket, amit 1-től 512-ig lehetséges, persze púlttól függően.
Azt is tudom, hogy az USART mint olyat, nem lehet itt használni! Azt is tudom, hogy egy címosztály 44us alatt zajlik le az adatkábelen és 11 részre van felbontva, azaz 1db poti értéke 4us alatt olvasódik be... Ennyit tudok! Valójában értelmes példát az interneten nem találtam, és azt sem tudom, hogy lehetne megoldani, hogy pl a PORTB-re kapcsolt kapcsolósort hogyan fogja kezelni a PIC, illetve hogy tudom programban megadni, hogy ha ott megadok egy értéket, akkor az adatvonalon jövő részt pont akkor olvassa, amikor kell... Viszont egy dolgot már találtam, de ez nem pont azt csinálja, mit kellene! ![]() Ne kérdezzétek, ez mi, de ezt találtam ![]() És nem kértem meg senkit, hogy írja meg helyettem, de ha esetleg foglalkozott vele valaki, tud-e ötletet adni, merre induljak el!?! Ennyi.
Egy DMX jel tudtommal nagyon sok csatornarészből áll. Azt tudom erről, hogy a diszkós lámpákon be kell állítani egy értéket, amit 1-től 512-ig lehetséges, persze púlttól függően.
Azt is tudom, hogy az USART mint olyat, nem lehet itt használni! Azt is tudom, hogy egy címosztály 44us alatt zajlik le az adatkábelen és 11 részre van felbontva, azaz 1db poti értéke 4us alatt olvasódik be... Ennyit tudok! Valójában értelmes példát az interneten nem találtam, és azt sem tudom, hogy lehetne megoldani, hogy pl a PORTB-re kapcsolt kapcsolósort hogyan fogja kezelni a PIC, illetve hogy tudom programban megadni, hogy ha ott megadok egy értéket, akkor az adatvonalon jövő részt pont akkor olvassa, amikor kell... Viszont egy dolgot már találtam, de ez nem pont azt csinálja, mit kellene! ![]() Ne kérdezzétek, ez mi, de ezt találtam ![]() És nem kértem meg senkit, hogy írja meg helyettem, de ha esetleg foglalkozott vele valaki, tud-e ötletet adni, merre induljak el!?! Ennyi.
Előző leveledben ezt írod:
Idézet: „Egy DMX jelet kellene lefordítani 4 BIT-es kimenetre!” Majd leírod mit szeretnél. Ezzel szemben a következőkben már értékekről és címzésekről is beszélsz. Lássuk: Amit találtál az egy RS485-ös soros kommunikációra alkalmas áramkör az illesztővel. Ezt írod: Idézet: „Azt is tudom, hogy az USART mint olyat, nem lehet itt használni!” Ha ez igaz amit írsz, akkor ez nem lehet jó(vagy nem ismered a DMX működését, ahogy én sem.) Írod: Idézet: „Azt tudom erről, hogy a diszkós lámpákon be kell állítani egy értéket, amit 1-től 512-ig lehetséges, persze púlttól függően.” Mihez kapcsolódik ez az érték? Milyen fizikai vonalakon kersztül lehet ezt az értéket beállítani? Milyen csatlakozó van ott, hány db vezetékkel lehet összekötni ezeket a vezérlőket? írod: Idézet: „Azt is tudom, hogy egy címosztály 44us alatt zajlik le az adatkábelen és 11 részre van felbontva, azaz 1db poti értéke 4us alatt olvasódik be...” Milyen az az adatkábel? Akkor most 11 poti értékét lehet beadni és te csak 4-et akarsz? Egy egy 4us-es csomag felépítése hogy néz ki? (Ez lenne egyébként a fő kérdés!) Végül még annyit, hogy minden arra vall, hogy a kommunikáció soros, azaz pont az USART-ot lehet erre használni, csak ki kell deríteni a fizikai(RS485?) és a kommunikációs protokollt! Ez lesz a nehezebb dolog, hacsak a belinkelt áramkör eleve nem ezt csinálja, csak nem potiról, hanem más forrástól függően vezérel. Talán ki lehet hámozni a protokollt a programból, ha valaki rászán néhány napot! Írd meg a vezérelni kívánt DMX típusát is, hogy legyen fogalmunk miről is van szó! szerk: Megnéztem a programot, nem is olyan bonyi, bár azt még nem vetettem össze, hogy a PortA,0-n kiadott jelsorozat megegyezik-e egy szabványos soros protokollal, de végül is ha nem, akkor is át lehet írni más PIC-re, (idő szimulációval kideríteni a pontos időket). Kérdés, hogy erre van-e szükséged, mert az első kérdésedben teljesen másról beszéltél.
Igen ebből megint tanultam. A datasheet az "alldatasheet.com" ról való nem a gyártótól, az errata meg eszembe sem jutott...(még sosem volt rá szükségem)
Szia!
Az adatlap DS40044F verziójában a kérdéses rész már javítva van. Azokban az újabb típusokban szerepelnek csak az említett bitek, melyek képesek a saját program memória olvasására, programozására (16F87, 16F88, 16F87x, 16F88x stb.) Szia
Köszönöm, tehát ennél nem kell külön kiválasztani az eeprom területet. Az írás meg indirekt címzéssel történik hasonlóan mint az INDF esetében.
Idézet: „És nem kértem meg senkit, hogy írja meg helyettem, de ha esetleg foglalkozott vele valaki, tud-e ötletet adni, merre induljak el!?!” Elso lepes: Probaldd meg megtalalni a google-lal a DMX protokolljanak leirasat. Maosik lepes: Ertelmezd a protokollt, osztalyozd, hogy milyen tipusu (soros / parhuzamos, mekkora a sebessege, stop/startbitek szama, van-e szinkron jel, mekkora az egyszerre atvitt bitek szama, van-e csomag azonsitas stb stb stb -- de ha kiderited, hogy az egy szabvanyos atviteli mod az a legkonyebb, pl valamilyen soros atviteli mod mint pl RS232, RS485, SPI, I2C, bar nekem abbol az ""agyon kommentezett" asm kodbol parhuzamosnak tunik) Harmadik lepes: Valositsd meg a protokollt -- ebben mar tudunk valoszinuleg segiteni. Idézet: „Igen ebből megint tanultam. A datasheet az "alldatasheet.com" ról való nem a gyártótól, az errata meg eszembe sem jutott...(még sosem volt rá szükségem)” Akkor meg egy tanulsag: "Cipot a cipoboltbol" -- azaz Microchip dokumentaciot a microchip.com-rol ![]()
Őszintén szólva egyre kevésbé értem, hogy mit akarsz. Először úgy tűnt, hogy egy potméter állásának függvényében akarsz valami négybites adatot kiküldeni.
Most meg egy olyan kapcsolást kerestél elő,amelyiken kapcsolók vannak, s (gondolom) ennek függvényében küld ki valamit EGY vonalon, soros jellel. Mindez azonban tökéletesen ellentétes az első hozzászólásodban elejtett egyik mondattal, amelyikből úgy tűnik, hogy mégsem küldeni, hanem fogadni/értelmezni akarod a jelet. Jó lenne tehát, ha eldöntenéd és világos(abb)an kifejtenéd, hogy mit akarsz, s melyek a peremfeltételek! Mert az eddigiekről csak az alábbi vicc jut az eszembe. Rendszertervező a programozónak: - Te kezdd el a kódolást, én közben megpróbálom kideríteni, hogy mit is akarnak! Idézet: „Mert az eddigiekről csak az alábbi vicc jut az eszembe. Rendszertervező a programozónak: - Te kezdd el a kódolást, én közben megpróbálom kideríteni, hogy mit is akarnak!” Ez nem vicc sajnos ![]() ![]()
Én most csak gyorsan ráguglizva ennyit találtam:
http://en.wikipedia.org/wiki/DMX512-A http://hu.wikipedia.org/wiki/DMX Ebből már nagyjából világos, hogy hogyan történik itt a kommunikáció (pl. hogy EIA485 alapú a kommunikáció, 4us egy bitidő, ami 250kbps, és megfelelő órajel mellett ezt tudja is a PIC USART) De a megoldandó feladat számomra is elég homályos.
Nem muszáj Guglihoz menni. Itt, a HE fórum keresője is kidob néhány topikot, ha a topikcímekben a DMX kulcsszóra kerestetünk.
![]()
Sziasztok!
WATT, hazaérek válaszolok neked, most épp net közelébe kerültem kb 5 percig xD A Hobbielektronika fórumon nincs DMX vevő szinten! Van olyan, hogy LPT DMX-re, Pc-ről DMX-re motorvezérlés, báár itt LPT portot láttam... Már végignéztem, és nincs! Én is ezt olvastam el, innen tudom, hogy 44 us-os jel megy, meg ilyesmi ![]() TOPIK Valójában nekem 10 csatorna kellene, amit a DMX vonalról leveszek, ez többnyire ( 2 eres + test ) mikrofon kábellel szokták megoldani! Otthon mindenkinek válaszolni fogok, köszi a segítséget
Szerintem ne a DMX-el kezdd a PIC-ekkel torteno fejleszteseket. Kezdd el a led villogtatassal es ha majd az megy akkor lepj tovabb egyre komolyabb feladatok fele, beleertve a soros kommunikacios protokollokat. Ha azok is mennek (asynchron, SPI, I2C) akkor mar nem lesz nehez a DMX protokolljat megvalositanod a leirtak alapjan...
Sziasztok!
Írtam egy programot, mely egy karaktertömbben a vesszővel elválasztott számok közül az első és a második vessző közti adatot kiolvassa és beleírja egy másik tömbbe, ez működik devC-ben. Debugnál, a vesszők közti adatok belekerülnek a másik tömbbe. Ezután próbáltam PIC16F690-re is megírni (cc5x fordító), de itt rossz értékeket látok (amelyik tömbbe írom az adatokat, azt soroson kiküldöm, ebből gondolom..) Tudnátok segíteni, hogy mi a hiba, mit csinálok rosszul? ![]() Nekem nincs több ötletem.. Csatolom az eredeti progit is (proba1.cpp). Köszi
Idézet: „de itt rossz értékeket látok” Nem indul az autóm, de egy másik autó ugyanezzel az akkuval már indult. Segítenétek, miért nem indul?
Értem, köszi.
Szia!
Bár nem értek a CC5X fordítóhoz, de szerintem már rosszul definiáltad a karaktertömböt is. Bővebben: Link a 30. oldalnál keresgélj, meg úgy általánosságban is érdemes a User's manualt nézegetni. Üdv.
köszi szépen, pont én is erre gondoltam!
![]()
Ha így csinálod, ahogy a manual is írja, akkor nem kell a vesszőket vizsgálgatni, elég csak a nullát figyelni.
Ez igy nyilvanvaloan nem jo. A 'kar' sohasem lesz nulla... hisz az egy pointer egy statikus tombre.
C-ben tipikusan az ilyet pointerrel szokas megoldani. Valami hasonlo elkepzeles mar inkabb C-s:
Ennek meg annyi ibaja van, hogy jo C szokas szerint exploitalhato, konnyen buffer overflow-hoz vezethet tobb okbol is kifolyolag. Az elso problema, hogy ha a 'kar' tomb veletlen nem lenne lezarva 0-val akkor amiatt szaladna tul a karaker feldozlgozason, a masodik problema, hogy nem tudja az 'ertek' char tomb-ben van-e elegendo hely, sot ha 'kar' ban nincs masodik vesszo akkor csak firkalja a memoriat ameddig csak lehet. Epp emiatt az ilyen megoldasok csak C tanulasara valok ill vegszukseg eseten mikor kodmeret vagy egyeb miatt mar mas megoldas nem johet szoba. Valosagban azonban erdemes bele tenni meg futas ideju buffer meret korlatozasokat - magyaran figyelni nehogy tullepjuk a rendelkezesre allo buffereket...
Én azt nem értem, hogy egy PIC-nél ennek egyáltalán mi értelme van. Ha csak valami konstans stringek sorozatát kellene előállítani, akkor olyan megoldást kellene választani, ami fordítási időben jelent többletmunkát, de a futáskor egyszerű, pl. egy konstans stringvektor, aminek az elemeit szedi elő a beolvas(). Egyébként sem szerencsés túl nagy konstans struktúrákat tárolni egy ilyen progiban, a PIC-ek erőforrásai elég szűkösek ahhoz.
Idézet: „A Hobbielektronika fórumon nincs DMX vevő szinten!” Ebben a hozzászólásban ajánlanak egy DMX projektet (dimmer, DMX demultiplexer, motorvezérlő, stb). A DMX transciever-re azt mondja, hogy adni és venni is tud. A demultiplexerről pedig azt, hogy 8 egymást követő DMX csatorna jelét alakítja 0 - 10 V analóg jellé. A két-tengelyes léptetővezérlő pedig két léptetőmotor vezérlését teszi lehetővé. Ezek szerint van vevő. Igaz, nem PIC, hanem AVR, de gondolom, ez nem probléma.
köszönöm az eddigi segítséget. egy példa progit már át tudtam alakítani magamnak, és működött a kijelzőm. Írtam, rá, kapcsoló hatására változtattam pozíciót stb. Viszont átalakítottam a kapcsolásomat kezdődtek újból a bajok. Átírtam a progit, de már megint nem fut le az inicializálás sem. (Úgy néz ki ez nem megy nekem) Leegyszerűsítettem már mindent, de nem tudok rájönni a proglémára. Esetleg nem nézne rá valaki. Küldöm a működő progit, meg az újat is.
köszönettel : denisz
azt már látom, hogy miután átalakítottam, kimaradtak a movwf PORTB-k és fordított sorrendben vannak a bitsorok, de kijavítva sem kel életre, még az inicializáláson sem megy túl a kijelző.
denisz
Amit hirtelen beleolvasva láttam erről a DMX-ről, nem lehet egy olyan rettenet nagy ördöngösség megírni egy 10 csatornás vevőt, ami a 10 adatot lepakolja egy memóriaterületre. Ezután már csak a vett adatok szerint kell ezt vagy azt csinálni.
|
Bejelentkezés
Hirdetés |