Fórum témák
» Több friss téma |
Az írás utáni olvasás volt, itt meg folyamatos írás közben egyszer csak nem ír tovább.
De ezt is kipróbálom.
Az a MikroC saját eljárása. A manual szerint várni kell utána legalább 20ms-et.
Mint a kódból lehet látni, változók értékeit teszi, tenné ez EEPROMBA. Azokat később felhasználnám.
Még egyszer nem idézem. Olvasd el újra figyelmesen a kézikönyvben a hozzá tartozó leírást.
Rosszul értelmezed, írás/olvasás között kell. Az írás függvényben bent van a flag figyelés.
Bővebben: Link
Megcsináltam, de nem változott semmi. a 16-os memória címtől írja az adatokat, helyesen, de utána 6-ostól nem hajlandó írni semmit.
Igaz, benne van! A lefordított állományban is. Ha jól nézem pont fordítva csinálják, mint én. Nálam írás után addig nem tér vissza, amíg nem végzett. Itt pedig előtte ellenőrzi, ezért is kell várni az olvasás előtt.
No mindegy, akkor valami más gond lesz.
Megvan a hiba!
Az ominozus írás után van még egy írási metódus, ami bizonyos számítások után felülírja ezeket az EEprom helyeket, de ez a k változó, most valami miatt nem tartalmaz adatot. Most azt kell kideríteni miért?
Elsősorban Hp41C-től kérdezem, de bárkitől aki tovább tud lökni.
Beírtam a main() elé a kapott typedef u_n_i_o_n _FLOAT_VAL { float Val; unsigned char bytes[4]; } float_VAL; float_VAL f; Lefordítva hibaüzenetet küld:"275 393 'f' Identifier redefined kazan_pic18f46k80.c" nincs a változókban f nevű változó. Mi a hiba oka? A hozzászólás módosítva: Jan 5, 2019
Kivetted az aláhúzásokat a typedef után következő szóból?
Azért fogalmazunk ilyen kacifántosan, mert ha az az szó (amelyet nem írunk le) szerepel a hozzászólásban, az egész helyett egy üres hozzászólás jelenik meg...
Igen kivettem!
Viszont találtam egy utalást erre a problémára.
Ezzel lefordul. Időközben rájöttem, hogy a float f után a fioat_val f;-ben, f-t nem akarja elfogadni. Ha mást adok meg az f helyett akkor már lefordul. Itt is az aláhúzások igaziból nincsenek. A hozzászólás módosítva: Jan 5, 2019
Azért nem fordult le,mert a hibaüzi írja is,hogy az f-változód már van valahol használva ( 'f' Identifier redefined)
![]()
Sziasztok.
Szeretnek nagyobb kommunikációs sebességet beállítani egy Nextion HMI való használatához. Mivel flowcode-ba programozok, ezért nincs is C programozási ismereteim. Nagyon alap C kódot használtam eddig, az osccon regisztert állítom be, ha szükséges. Most jelen pillanatban 38400-es sebességgel működik a kommunikáció. Ezt a flowcode-on belül be tudom állítani, menüből kiválasztva. A menüben levő utolsó beállítható adat, az a 38400. Ezen felül van meg egy olyan, hogy “custom setting”. Itt beírhatom, hogy 115200. A controller típusa: 18F26K22. Belső órajellel megy, jelenleg 16MHz, PLL ki van kapcsolva. Az adatlapon találtam olyat, hogy SYNC, BRG16, BRGH. Sajnos ezek nem mondanak nekem semmit. Azt olvastam itt a fórumon egy cikkben, hogy bizonyos óra jel használat mellett nem minden kommunikációs sebesség használható, mert van bizonyos hiba százalék, ami jelentkezhet. Gyanítom, hogy a flowcode “custom” beállítás esetén nem írja az alábbi regisztereket. Olyat találtam meg, hogy SYNC=0, BRGH=1, BRG16=1, vagy SYNC=1, BRG16=1 Ekkor 115.2k-nál error:-0,08%. Ahogy nézem, csak külső orajelrol lehetne 0% error értéket elérni. Innen nem tudok tovább lépni. Kérnem szíves segítségeteket abban, hogy mi a további teendőm. Milyen C kóddal és hogyan lehetne azt elérni, hogy használni lehessen a nagyobb sebességet. Ha nem lehet, úgy azt is megértem, viszont érdekelne az, hogy miért nem. A kijelzo tudja a 115.2k sebességet, azt le tudtam ellenőrizni. Előre is köszönöm, ha kapok segítséget Tőletek. Udv. Peti A hozzászólás módosítva: Jan 6, 2019
Szia!
Az aszinkron soros port start-stop elven működik, azaz minden byte átvitele után a következő byte-nál újraindul az időmérés, azaz néhány százalék időmérés nem okoz gondot 10-12 bit átvitele közben, nyugodtan használhatod 2-3 % hibánál is, nem hogy a 0,08%-nál ![]()
Hali!
Neked a következő beállítás kell 16MHz-en: SYNC = 0 BRGH = 1 BRG16 = 1 SPBRGH = 0 SPBRG = 34 Ekkor a hiba -0.79% lesz 115.2kBaud-ra nézve. A többit, majd inkább valaki olyan írja meg, aki jártas a FlowCode-ban, mert én nem tudom mit állít be alapból és mit nem.
Köszönöm mindkettőtöknek a választ.
C korban ezt így kell beírnom, ahogy leírtad?
A belső órajel az adatlap szerint +-1% pontosságúra van gyárilag bekalibrálva, ezt a hibát is kalkuláld bele. Amúgy az OSCTUNE regiszterbe beírt értékkel lehet a belső órajelet kalibrálni.
Koszi Neked is.
Amit eSDI mondott, azokat melyik regiszterben kell megadnom? Van egy pár...
Adatlapban az EUSART részen mindent megtalálsz.
Köszönöm.
Tudom, hogy benne van minden, de mint említettem nem tudok programozni semmilyen kódban, így az adatlapban szereplő regisztereket sem ismerem. Ezért használok flowcode-öt. Egyedül amit eddig használtam az az alábbi volt: osccon:0b11100000 azaz a PIC óra jelet beállítottam 16MHz-re Ennyi, nem több, sajnos. Ezért kertem segítséget, hogy miként kell megadni helyesen azt, amit meg kell adni. Az itt jelenlevők nagy része, Téged is beleértve, kisújból kivágják ezt. Sőt ennek bonyolultabbakat is. Ezert arra kérlek, hogy “szajbarágosan” írjatok meg, hogy pontosan mit kell beírnom. UART1 kommunikációt használom, a szokásos alap beállításokkal. Ha ezenkívül szükséges meg további adat, úgy arra ha tudok, válaszolok. Köszönöm a türelmeteket. A hozzászólás módosítva: Jan 6, 2019
Mivel sosem használtam még flowcode-t, nem tudom megmondani. Szerintem érdemes lenne a saját topikjában megkérdezned.
Az a baj, hogy nem tudom milyen C-re épül. MPLAB XC8-ban imigyen kell megadni:
Köszi. Megpróbálom, aztán meglátom mit sikerül összehozni.
Az segítség lehet, hogy a flowcode ha lefordítja a programot, akkor generálja a : proba.asm proba.c proba.hex fájlokat. Én ebből a hex kiterjesztésű fájlt égetem be a PIC-be PICKIT3-al. A proba.asm-be belenézve ezt látom: ;///////////////////////////////////////////////////////////////////////////////// ;// Code Generator: BoostC Compiler - http://www.sourceboost.com ;// Version : 7.03 ;// License Type : Pro License ;// Limitations : PIC18 max code size:Unlimited, max RAM banks:Unlimited ;/////////////////////////////////////////////////////////////////////////////////
Esetleg még ez segíthet?
Belenézve a sourceboost példa programjaiba, ott így van:
Sziasztok!
A következő problémával szembesülök. LCD-n keresztül töltöm fel menüből, induló adatokkal a pic-et. Van egy adat ami a felhasználás során 1 tizedes törtként kerül felhasználásra. Pl:182.3 . A beolvasást egészként olvasom be, k=1823 , majd f=(float)k/10 utasítással teszem float-tá. Az átalakítás során az f 182.29998- at kap. Ez nem olyan nagy probléma. A probléma ott jelentkezik, ha ezt visszaíratom az lcd-re 1 tizedes pontossággal, akkor már 182,2-t kapok vissza. Ez nekem zavarónak tűnik. Van más lehetőség, hogy a bevitt adatok megmaradjanak eredeti értékükben?
Köszönöm Mindenkinek a segítséget.
A kapott infók alapján működik. ![]() Üdv. Peti
Kiírás előtt adj hozzá 0.05 -öt.
A hozzászólás módosítva: Jan 7, 2019
|
Bejelentkezés
Hirdetés |