Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Így van, de lehet lassú a digitkapcsoló tranzisztor is. Azok általában szaturálnak, amiből elég lomhán élednek fel. Én már tapasztaltam olyat, hogy pár nop-ot be kellett tenni a digitváltásoknál, hogy az előző tranyó kikapcsoljon rendesen, hiába volt amúgy a dolgok átkapcsolásának sorrendje jó. A másik, ami szerintem a túl gyors léptetés ellen szól, hogy felesleges a proci idejének nagy részét ezzel tölteni.
Na majd akkor megpróbálom, egyelőre csak dugaszolós nyákon, aztán lehet, hogy akváriumhoz fogom használni.
Üdv.
Üdv!
Jelenleg az LCD meghajtásával kezdtem el foglalkozni. Van egy 2 soros 16 szegmenses LCD kijelzőm. Olvastam itt a cikkek között az LCD - ről írt cikket. Nagyon tetszett. Viszont azt írja hogy a közölt protokoll csak HD44780 - as vagyv azzal kompatibilis vezérlővel ellátott LCD - kel működik. Nos honnan lehet eldönteni hogy az enyém ilyen e? Típusa: EW162G5YMY 16 csatlakozópont van rajta. De sajnos nem találok róla semmit, sem lábkiosztást sem hogy milyen vezérlő van benne.
"Keressetek, és találni fogtok"
Azt nem tudodm, hogy a G0 és a G5 között mi a különbség,de a ChipCAD-nél biztosan felvilágosítanak, ha megkérdezed.
Szerintem kompatibilis, de nézd meg a gyártó honlapját ( Chipcad-nél rátalálsz)!
Steve
Azt én sem tudom, a G0 és G5 között mi a különbség, de ahogy nézem, ezek teljesen standard HD44780-kompatibilis modulok, KS0066 chippel.
Hát remélem hogy kompatibilis. Viszont ezen 16 láb van ezért jó lenne egy lábkiosztás. Megnézem a chipcad - nél
A G0 - at találtam meg. Aztr írja az adatlap hogy a 15 - 16. láb a backlight. Oda mit kell kapcsolni?
A 15-16. láb a háttérvilágítás szokott lenni. Azt azért érdemes kilesni az adatlapból, hogy mi kell a háttérvilágításnak.
Szerk: kell lennie egy normál üzemi feszültségértéknek és áramértéknek a háttérvilágításhoz. Gyanítom, hogy ez LED-es backlight, és az 5V-ból egy előtétellenállással be lehet állítani simán. Egyébként háttérvilágítás nélkül is mennie kell a kijelzőnek, a felélesztéséhez az egyáltalán nem szükséges.
Igen, ez a legegyszerűbb. 4 bites mód és nincs olvasás a kijelző felől, emiatt az adatlapi időzítéseket be kell tartani, mert nem tudsz busy flaget olvasni. Én is ezt használom szinte mindig.
Szerk: a tápok melletti 3. lábat (itt C-vel jelöli) egy potméter segítségével a tápfesz és a GND között változtathatónak illik megcsinálni, ezzel lehet az LCD kontrasztját állítani.
Hopp ezt hirtelen nem értem. Azt mondtad nem kell olvasni az LCD felől. Akkor miért kell olvasni a busy flaget? Én a READ/write lábat fix GND - re kötöttem.
Nem azt írtam, hogy nem kell, hanem hogy nincs olvasás. Az azt jelenti, hogy ebben a bekötésben egyáltalán nincs lehetőség az olvasásra, mivel az RW láb fixen földre (írási irány kijelölése) van kötve.
Ha lenne olvasási lehetőség, akkor tudnál olvasni a kijelző felől egy busy flag-et minden adat elküldése után, amivel meg tudnál győződni róla, hogy mikor végzett a kijelző annak feldolgozásával. Ha nincs olvasási lehetőség, akkor ki kell várni az adatlap szerinti időzítést a következő küldés előtt. Én kiírandó karakter elküldése után 60-100us-ot szoktam adni a kijelzőnek, egyéb parancs elküldése után pedig 3ms-ot. Persze ezt sokszor úgy csinálom, hogy egy egyébként is meglévő, rendszeresen beeső timer interruptba van betéve számláló, ami számolja az eltelt időket és ha már szabad, akkor küldi a következő dolgot a kijelzőnek, és nem fixen a programba épített delay-ekkel.
Sziasztok!
Segítségre lenne szükségem. Adott egy 4x4x4 led kocka, amit egy pic16f690 vezérel. Egy hóesés szerű effektet szeretnék programozni, de akadályokba ütköztem. 1. A ledek adatait (1 vagy 0) egy 4x4x4-es mátrixban szerettem volna letárolni, hogy a következő lépésben lejjebb léptethessek minden szintet. Itt ütköztem az első problémába: simán engedi deklarálni a tömböt, viszont amint műveletet hajtok végre vele, egyből lázad a fordító. (no target memory available for section "UDL_main_0") Arra saccolok, hogy ez kb annyit jelent, hogy nincs elég memória. De hogyan? 4*4*4=64 db char=64 byte. Ennyi hely ne lenne a memóriában? 2. A felső szinten minden lépésben véletlenszerűen szerettem volna kigyújtani a ledeket. Végigkutattam az egész internetet, de konkrét sdcc-s véletlenszám generálást nem találtam sehol. Ezért az adconverter utolsó bitjével szórakoztam, de az nem az igazi. 3. A ledeket kigyújtó függvénynek több napi vértizzadás után se tudtam átadni a kívánt paramétereket. Ezért kénytelen voltam globális változókkal helyettesíteni a paramétereket. De így ez sem az igazi. Az utolsó két probléma nem a világ vége, de az elsővel egyszerűen nem tudok mit kezdeni. A segítséget előre is nagyon szépen köszönöm! Üdv:pinyó
Linux vagy Windows alatt dolgozol az SDCC-vel? Nem azért, mert most hirtelen tudnék megoldást a problémádra, hanem én is kisérleteztem már az SDCC-vel, és ha lenne valaki, akitől tudnék pár dolgot kérdezni, akkor újra elővenném.
Most per pillanat Windows alatt, de általában Linux alatt szoktam. Szóval mindkettő.
Üdv:pinyó Idézet: „4*4*4=64 db char=64 byte.” Ez elférne 64 biten! Minek kell egy bájt egy LED állapotára, ha 0, vagy 1 lehet csak? Ha mondjuk fényerőszabályzást is említettél volna akkor megérteném. Ettől függetlenül 64bájtnyi hely biztosan van, de sajnos a SDCC-ben nem tudok segíteni.
Jogos. Viszont 1 byte-nál kisebb adattípust nem tudok deklarálni. Az sdcc man szerint az sdcc ismer bool típust, ami 1 bit, viszont ha bool-ból csinálok tömböt, már a deklarálásnál behal a fordítás.
Üdv: pinyó
Bájtként kell kezelni az effekt programot nem bitenként. Egy excell táblázat segíthet a bájtok kiszámításában.
helló mindeki
Tud valaki mondani nekem egy PIC16f877A-hoz egy saját EEpromjába való irási időt? 4MHz kvarc-al és 9600 baud-on. Csak azért kérdem mert nekem nagyon lassunak tünt szimuláláskor 10 karakter kiirása kb 50ms volt. köszi tibiiii00
Adatlapban benne van a pontos érték, de nagyjából ennyi.
Arra gondolsz, hogy egy bájtba nyomorítsam bele 8 led "adatait"? Ez nem rossz ötlet , hogy ez nekem nem jutott eszembe . Csak attól félek, hogy olyan hosszú programkódot fog eredményezni, hogy most meg a programmemória lesz kicsi . Mindegy, megpróbálkozok vele így.
pinyó Ui.: Azért, ha valakinek van elegánsabb megoldása, szívesen veszem.
Ez nekem is megfelelő időzítés lenne. Én 4 MHz - es belső osc - it használok és 1:64 - es prescalert az TMR0 megszakításomhoz. Ebben az esetben mennyivel kéne feltölteni egy számlálót hogy mondjuk 1ms - os periódusonként leteljen az értéke. És ha nullázódik a számláló (1ms - onként )akkor engedem csak tovább a programot mondjuk adatírás után az LCD- re.
Idézet: „Csak azért kérdem mert nekem nagyon lassunak tünt szimuláláskor 10 karakter kiirása kb 50ms volt.” Adatlap ezt pontosan leirja, de anelkul, hogy bele neznek - had ne en tegyem meg helyetted - az 5ms byte-onkent nagyjabol realisnak tunik nekem... Idézet: „4MHz kvarc-al és 9600 baud-on.” Hat ezt igy most nem tudom az orajel sebessege mennyiben befojasolja ezt, de ugy gondolnam nem - a Vdd feszultseg szintje annal inkabb. A baud-ot meg nem ertem, milyen baud es hogy jon ez az eeprom firkalasahoz?
Tulajdonképpen ha egy egyszerű progiról van szó, akkor megengedhető az is, hogy a kiírásokba betedd a megfelelő delay-t, ami megfogja a végrehajtást a kellő ideig. Ez csak akkor kerülendő nagyon, ha amúgy van más tennivalója is a programnak, ami ráadásul nem interruptban megy.
Ha egy jelzőt timer interruptból billentesz és ezt megvárod a főprogramban, akkor gyakorlatilag ugyanott vagy, mintha delay-t tennél a főprogramba. Én úgy oldottam meg a teljesen akadásmentes, interruptos LCD vezérlést, hogy a RAM-ban lefoglaltam egy buffert, ami az LCD-n kint lévő felirat "tükörképe". A program mindig csak ebbe a bufferbe írja a megjelenítendő karaktereket. Emellett van egy rendszeres interrupt, ami másodpercenként 10000-szer jön be (valójában 9600-szor, soros porti küldés miatt) és frissíti a kijelzőt a buffer tartalma alapján. Ha az aktuális interruptban ki kellett küldeni egy karaktert, akkor a számlálót 1-re állítom, így a következő interruptban (kb. 100us múlva) megint foglalkozhatok a kijelzővel. Ha egy parancsot kellett kiküldeni, akkor a számlálót 30-ra állítom, és a következő 29 interruptban csak a számlálót csökkentve múlatom az időt. A 30. interrupt kb. 3ms idő eltelte után fog bekövetkezni, ismét foglalkozhatok a kijelzővel. A főprogram így soha nincs megakasztva, az interruptban sincs explicit várakozás.
Sziasztok !
Mi a nyúgje ilyenkor a PICKIT2 -nek ? Programming Target (2009.01.21. 21:39:15) Erasing Target Programming Program Memory (0x0 - 0x106) Verifying Program Memory (0x0 - 0x106) PK2Error0027: Failed verify (Address = 0x0 - Expected Value 0x5A3 - Value Read 0xFE0) PICkit 2 Ready
Szerintem az lehet a gond, hogy nem éri el rendesen a programmemóriát, ezért nem tudja érvényesíteni a felírni kívánt programot.
Eddig működött? Jó eszköz (device) van kiválasztva a programban? Érintkezik minden rendesen?
A
"list p=16F877 #include sorokban volt a hiba ..... Még egy kérdés . Ha Mplab -ból kiküldöm a programot ,az normális ,hogy a Pickit2 -n világít továbbra is a target led ? Csak akkor indul el a programom ,ha lehúzom a Pickitet. Elméletileg hagyhatnám rajta nem ? ja.... és a resetre kéne valamit csinálnia ? Ez csak kölcsön van nálam ,de holnap már itt lesz a sajátom Idézet: „Csak akkor indul el a programom ,ha lehúzom a Pickitet.” Prorammer menüben kattints a Release from Reset pontra! |
Bejelentkezés
Hirdetés |