Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Tudom egy kicsit bonyolult eloszor felfogni a struct es az union tipusok mibenletet. Ebben az esetben ugy kell felgfogni, hogy a Da_cntr egy 16 bites valtozo, es ugynarra a cimre deklaraltuk a struct valtozot. Amikor a struct reszeit valtoztataod az unionban valtoztatsz tulajdonkeppen, de a struct deklaralt valtozoival. Nagyon hasznos tud lenni pl mikor sok 1-2 bites valtozot akarsz EEPROM-ba menteni es onnan kiolvasni. Csak egy 16 bites (lehet 8 is, vagy 32 es float is) valtozot kell irni olvasni az EEPROM-bol.
Igen nagyon annak tünt elsőre de segítségeddel, türelmeddel én is megértettem. Köszönöm a segítségedet. Tetszik így nagyon kis frappáns megoldás.
Van még kérdésem. ezt a sort szeretném a programomban külön elhelyezni (main--en kívül), de nem lehet mert hibát dob a da_cntrw;-re. ennek oka miben keresendő?
Lényeg lemaradt
Az uniont nem latja a dataconv fveny. A main belso valtozoja. At kellene irni a dataconv() fvenyt valami ilyesmire : dataconv(int16 x) es mikor a mainbol hivod, akkor atadod neki a kivant valtozot, vagy erteket.
Esetleg az union deklaraciot kiteszed az elejere global valtozonak, es akkor mindenki latni fogja.
Epp most linkeltek a "PIC haladoban: C konyv Olvasgasd szorgalmasan.
Idézet: „zip' is unavailable. This file was deleted.” ![]()
Igeeen így már jó azért tőletek sem rosszabb tanulni mint tankönyvekből. Lementettem a linket, köszönöm még egyszer a segítségedet.
Sziasztok!
Bár már egy LCD kijelzővel foglalkozó fórumba feltettem ezt a kérdést. Most felteszem ide is mert a programommal van probléma. A lényeg hogy van egy 4x20 karakteres lcd kijelzőm. PHICO D-0 0529 94V. A vezérlője vagy hd44780 vagy hd 66712. Na de ami fontosabb. Akárhogy inicializálom a kijelzőt. A 12ik karakter utáni rész a következő sorban is megjelenik. Az adatlapban van valami leírás hogy a 13-20ik karakterig egy "EXTENSION DRIVER" vezérel, de pontosan ez nemtudom mit jelent és hogy hogy kéne ezt beleírni a driver-be. Természetesen CCS-ben írok programot. Ha valaki tud kérem segítsen!
Milyen programmal próbálod meghajtani?
Nálam a sorok címe (1-4) 0x80 0xc0 0x94 0xd4
Próbáltam már a CCS beépített drivereivel, univerzális driverekkel(flex_lcd.c) átírtam sokféleképpen a címeket de nem akar jó lenni.
Igazából kezdek kétségbe esni mert akárhogy címzem a sorokat, mintha nem is csinálnék semmit. A sorok ugyanott maradnak és a hiba sem tűnik. Egy-két oszlop beállításnál szélsőséges dolgok történnek pl: a kijelző közepére kezd kiiratni. Vagy fura kontrasztos a felső két sor.
A kétségbeesés nem sokat lendít a helyzeteden, inkább próbáld megérteni a működését, az előrébb visz
![]() Az include-nak add meg hogy hol keresse az lcd drivert, mert hajlamos rá hogy a sajátját használja ha nincs megadva elérési út, az pedig csak két sorost kezel (bár lehet hogy verzioó függő). Tényleg hanyas CCS? Ha hazaérek megkeresem és feltolom ha addig nem oldódik meg. Nem emlékszem bztosan hogy 4x16 vagy 4x20, de a címekből ítélve 4x20-as....
Sajnos jól emlékeztem, 4x16-os
![]() Szerintem ha a CGRAM, DDRAM ot kijavítod az adatlapnak megfelelően (lehet hogy nem is kell hozzányúlni) és az lcd_gotoxy-ban a sorok kezdőcímét szintén az adatlap szerint működnie kell. Nekem ezzel ment a 4*16-os. Próba cseresznye....
Köszönöm a forrást. Majd nekilátok estefelé.
Sziasztok!
Egy gyors kérdésem volna, mégpedig, hogy a PIC16F628 -on a belső osc-t hogy tudom beállítani? Köszönöm!
A 16F628.h fileban talalhato kulcsszavakat kell alkalmazni.
Ahham! Köszönöm!
De szerintem majd még lesz néhány kérdésem...
Helló mindneki!
Van egy PIC 16f628a -m és egy ledem. A led fényerejét szeretném szabályozni a PIC -el. Valahogy sehogy sem jön össze. Tudom ,hogy megfelelő időközönként kell ki-be kapcsolgatni ,de valamiért vagy nem látszik semmi változás a fényerőn vagy pedig látszik a villogás. Valaki be tudna linkelni egy működő programot? Előre is köszi!
TRISB3 = 0;
PR2 = 95; T2CON = 0; CCPR1H = 0; CCPR1L = 10; TMR2ON = 1; CCP1CON = 0x0c; Ez 14.7456MHz-es kvarc esetén 38400Hz-cel fogja villogtatni a LED-et (az RB3/CCP1 kimenetre kell kötni, előtét ellenállással!), a fényerőt a CCPR1L-be írt számmal tudod szabályozni. A szám 0 és a PR2-be írt szám között állítható, ha 0, akkor végig 0 lesz a kimenet, ha >PR2, akkor meg végig 1, közötte meg lineárisan változik a bekapcsolt állapotban eltöltött idő. Ha nem ennyi az órajel, akkor arányosan változni fog a frekvencia; ha audió cucc is van a környéken, akkor 25-30kHz alá nem kéne vele menni, mert hallható lehet az audiókimeneten ez a freki. A PR2 változtatásával lehet a frekvenciát állítgatni, de persze akkor változik a 100%-hoz tartozó érték a CCPR1L-nél is. A pontos frekvencia: az órajel / 4 / (PR2+1) (nem próbáltam ki 628-cal, de egy 16F887-esben futó tesztprogramból van a kódrészlet, és ott működött)
Ezt nem tudnád esetleg CCS -ben elírni, mert így nem értek belőle semmit.
Elvileg a Te szamitogepeden van CCS mintapelda PWM kezelesre. A neve ex_pwm.c. Ez egy AD csatornat olvas be, es ezzel valtoztatja a kitoltesi tenyezot. Persze a 16F628-ban egynel kevesebb az AD csatorna, de a mintapeldaban az AD ertek helyett fix szamot lehet beirni, es ezzel lehet valtoztatni a kitoltesi tenyezot.
Hát nem tudom. Átírtam kézzel az értéket, de mind1 mit írok be ugyan az az eredmény. Villog párat a led, aztán folyamatosan kezd világítani.
Esetleg feltenned a programot, hogy lassuk mitol nem mukodik.
Csak átírtam a value változót, ha jól értem ez szabályozza ,hogy mennyire világítson a ledem.
Probald valahogy igy:
Ez így azért nem lesz jó szupermannak, mert egy pillanat alatt (főleg, ha néhány kHz a PWM freki) teleíródik a duty változó és csak villogó LED-et fog látni.
Inkább ezt ajánlom:
a delay argumentumával be elehet állítani, hogy milyen gyorsan változzon a kitöltési tényező/fényerő. És nem kell megszakítás sem, meg interrupt flag figyelés, meg semmi sem. That's all folks! off: hogyan kell ilyen szép kódokat írni, hogy tabulátorokat is lehessen bele tenni?
Nade minek folyamatosan tekerni a duty-t? Be kell állítani a fényerőnek megfelelő értékre, aztán örülni a megfelelő fényerővel világító LED-nek...
Ez demo akart lenni a mukodes kiprobalasara. Termeszetesen meg lehet cifrazni, pl 2 gombbal duty++, duty--, de azert azt inkabb a kedves kerdezo oldja mar meg.
|
Bejelentkezés
Hirdetés |