Fórum témák
» Több friss téma |
Helló , működik igen , köszönöm. Lassabb villogást , hogy lehetne elérni ? Átírtam a
Oda maximum 255-öt írhatsz azt hiszem.
2 dolgot tudsz csinálni. egyik: Ha duplázod az időzítéseket...
Vagy ha írsz egy rutint hozzá:
Nyilván ez már rugalmas, úgy használod vagy alakítod át ahogyan akarod. A hozzászólás módosítva: Okt 23, 2014
Ezeket tudom valahol tesztelni , szoftveres módon , hogy ne kelljen mindig beleprogramoznom a pic-be?
Proteus programban.
Az egy virtuális építő és tesztelő program.. Nagyon jó.. 90%-ban jól működik..
Uraim, C18-ban szeretnék USART-ről adatokat fogadni.
Ezzel próbálkozom:
Jól teszem? 1 byte-ot szeretnék olvasni majd kitenni portra, hogy lássam működik e.. A programot amit írtam feltettem, ha valakinek pont van ilyen projektje az kipróbálhatná, hogy működik e a dolog. putty és virtuális serial port jelzi, hogy működik, de élesben még nem tudtam kipróbálni. A lényeg, hogy szeretném fogadni az USART (RX/TX) -on keresztül az adatokat. Kérném segítségeteket.. Köszi előre is..
Ha azt szeretném , hogy villanjon 3 - at majd szünet , és megint 3 at és így tovább , akkor elméletben az úgy jó lenne ha
Tehát minden páros számnál betenne egy villanást + - ba. Ezt hogy lehetne?
A delay()-al a ciklus késleltetését állítod be.
De ha csak a delay() -t akarod változtatni cikluson belül akkor jó lehet amit írtál. Bár itt én inkább a delay()-t hagynám simán késleltetésnek és a while() cikluson belül csinálnék egy külön feltétet amiben számolnám a ciklus számát és annak megfelelően engedném a led villogását...
Vagy ha írsz egy olyan egyszerű rutint hozzá amely pontosan azt teszi amit akarsz
A hozzászólás módosítva: Okt 23, 2014
Srácok mit nézek be ennyire?
Ne tudok adatot fogadni USART-on keresztül:
Nem értem miért nem fogadja a beérkező adatot mert azt látom, hogy érkezik, de rá sem hederít a PIC. Élesben sem..... Előre is köszi.. (MPLAB + C18, 18F4550 + 20MHz + PLL4 (48MHZ)) A hozzászólás módosítva: Okt 23, 2014
char típus itt nem 8 bit? Ha igen, akkor 12. sor nem lesz jó.
Azt várod el, hogy mindig mi nézzünk a probléma után az adatlap(ok)ban:
A 18F4550 adatlapjából: Idézet: „The pins of the Enhanced USART are multiplexed with PORTC. In order to configure RC6/TX/CK and RC7/RX/DT/SDO as an EUSART: • SPEN bit (RCSTA<7>) must be set (= 1) • TRISC<7> bit must be set (= 1) • TRISC<6> bit must be set (= 1)” A programodban pedig a 11 sorban:
Ha mér végkép nem találom a hibát...
Valamiért mindig átsiklok e lényeges részeken.. Köszi...
Sziasztok!
Össze szeretném hozni a nyomógombos programot,az LDC-sel,de csak annyit csinál,hogy gombnyomásra felvillan az RC0-ás LED (amíg nyomom a gombot), akkor kiír az LCD-re egy a-betűt,elengedéskor kialszik a LED.Ha nem teszem bele az LcdAdat('a'); sort,akkor úgy működik a LED,ahogy azt én szeretném,hogy első gombnyomásra felvillan,másodikra kialszik,elengedéskor nem csinál semmit.Tehát azt hogy kell megcsinálni,hogy az első gomlenyomásra felvillan a LED,és vele egyidejűleg kiír adatokat az LCD-re,második gombnyomásra kialszik a LED,és mondjuk letörli a kijelzőt?
Kimásoltam a programod main fg-ét, és kicsit módosítottam. Próbálj ki valami ilyesmit:
(!! Nem fordítottam le, nem próbáltam ki, ez csak javaslat !! ) A hozzászólás módosítva: Okt 24, 2014
Sziasztok!
Rég foglalkoztam már PWM-el(CCP,ECCP) és nem emlékszem rá, hogy ha a PWM modul a timer2-ről megy és a timer2 túlcsordul akkor törölni kell e a TMR2IF-et vagy nem probléma ha nem törlöm?
A TMR2IF (vagy más timer IF) bit mindenképen 1 -re áll, ha a timer átfordul, de megyszakítás csak akkor lesz belőle, ha a hozzá tartozó IE (TMR2IE) bit is 1. Nem kell törölni, ha a megszakítása tiltva van.
Közben megnéztem kicsit mélyebben az OpenUSART() függvényt amelyet én is használtam (lást a beágyazott kódom) és kiderült, hogy alapból megcsinálja azokat a beállításokat amikre te utaltál.
Ettől független kipróbáltam a bitenkénti beállításokat is, de nem hozott eredményt. Továbbra sem tudok programból adat kiküldeni.. Érthetetlen mivel a gyári függvényeket használom és elvileg ki kellene küldenie az adatokat.. Legalább is, ha terminálon keresztül küldöm ki akkor kiküldeni, de ha a programból akarok egy WriteUSART() parancsot kiküldeni úgy tesz mint ha nem is lenne ott az utasítás..
MpLab -ban "MpLab Sim" beállítása debugger-ként. Debugger / Settings / "Uart1 Io" lapon "Enable Uart1 Io" -ba pipa, az "Output to Window" -ba pipa. Debugger / Settings / "Osc / Trace" lapon a kiválasztott órajelnek megfelelő értéket beállítani. Újrafordítás. Töréspont a WriteUSART() hívására. Indítás. Megáll a törésponton, Innen lépésenként lehet haladni....
Nem értem, miért kell egy nem működő programkönyvtár idétlen, szószátyár rutinjaival küzdeni napokat, amikor szépen végiggondolva, a lépéseket beprogramozva meg lehet írni egy konkrét típusra egyből jól működőre. TRISC beállítása, Baud generátor felprogramozása, TXSTA felprogramozása, RCSTA felprogramozása - kész is van az inicializálás. Ha kell a megszakítás: RCIE =1, TXIE = 0. A könyvtári küldő és fogadó eljárások úgyis használhatatlanok lesznek egy komolyabb programban, mivel mind a két rutin várakozik....
Egy kis segítség
http://saeedsolutions.blogspot.hu/2012/11/pic16f877-uart-code-prote...n.html valamint itt találsz egy kész programot igaz 16f877-re de ebből el tudsz indulni. A hozzászólás módosítva: Okt 24, 2014
Köszi, srácok.
A baud sebességét hogy számolom ki? Adatlap ezserint így kell:
Nekem be van állítva a PLL így 20MHz kristállyal 48MHz-en ketyeg a CPU. (18F4550) Gondolom ebben az esetben ezzel kell számolni és mint, ha valahol ezt olvastam volna. Ha ezt a számolást követem, akkor a következőre jön ki: ((48MHz/9600)/64)-1 == 77. Viszont, ha itt nem számít a PLL és csak a 20MHz kvarccal kell számolni akkor az eredmény csak 31. Addig eljutottam már, ha küldök be jelet és az SPBRG regiszterbe 77van beletöltve, akkor teljesen más karakter jelenik meg mint amit küldtem és kiakad, ha a 31-et írom bele akkor pedig nullát olvas be. Jól számolom a Baud sebességét? Csatoltam egy képet is.. Terminálban megjelenik a jó karakter, így biztosan beérkezik az adat... A hozzászólás módosítva: Okt 24, 2014
Köszi,kipróbáltam,de bizonytalanul működik,és csak az a-betűt írja ki,az RC0-t nem invertálja.
Tettem még bele egy delay-t,most már biztosabban működik,de az RC0 még most sem kapcsolgatja,folyton ki van kapcsolva,viszont RC1 kapcsolódik helyette
LcdAadat ('a')-nélkül tudom kapcsolgatni.
Próbáld ki LCD nélkül..
Általában az LCD vezérlését a C portra teszik.. (Feltételezve, hogy tényleg a C porton van)
Aztán esetleg próbáld ki úgy, hogy az RC0 = ?; sort helyettesíted erre:
A hozzászólás módosítva: Okt 24, 2014
Jól számoltad csak a BRGH és a BRG16-ot figyelembe kell venni ha a BRGH vagy a BRG16 1 akkor 16-al kell osztani nem 64-el és ha mindkettő 1 akkor 4-el a BEGH a High Baud rate a BRG16 pedig h nem csak az SPBRG használja hanem az SPBRGH-t is, tehát nem 8 bites hanem 16 bites a baud generátor, mint az ahogy a neve is takarja.
A PPL-el meg amit látsz OSC. blokk diagramban ami a peripherials felé megy órajel azzal kell számolni, ha a perifériák felé(CPU is ideértve) 48MHz-es jeled megy akkor azzal számolj. A hozzászólás módosítva: Okt 24, 2014
Szia!
Rájöttem,az RC0 benne van az LCD vezérlésben,áttettem RC2-re és most már működik.Kicsit zavaró volt a megoldás.
Igen ezt néztem is az Adatlapban ezért számoltam a leírtak szerint.
Most így néz ki a kódom amivel szenvedek persze sikeretlen.:
Ha rá néznétek örülnék.. Köszi.. A hozzászólás módosítva: Okt 24, 2014
|
Bejelentkezés
Hirdetés |