Fórum témák
» Több friss téma |
Szia.
Összeraktam asztalon egy teszt "kapcsolást" az uart próbálgatására. (Jelenleg két különböző pic, mert ezekhez van teszt panelom, de 20MHz a kristály mindegyiken, ha számít valamit) Addig jutottam hogy küld illetve fogad adatott mind két fél, de.... Nem mindig azaz adat jön amit küldök, vagy a fogadó oldalon mást olvas. Amit csinál a két program hogy az egyik mindig 48-at kül, a másik ha nem ezt a számot kapja akkor a hiba változó értékét növeli eggyel, s vissza fele is, csak ott 99-et küld. Sajnos pörög a hiba számláló felfelé. Mit rontok el? Ha van időd, vagy valakinek aki érti ránézne a két prg-ra? Van egy tippem, a hibára. Azaz hogy akkor is olvassa a RX lábat amikor nincs beérkező adat s ezért kapok nem megfelelő adatot. Viszont ezt hogy lehetne kivédeni, van valami jelző bit vagy valami amit letudok kérdezni a uart receive makró használata előtt? De lehet hogy hülyeség amit írtam, s teljesen más a hiba oka. Segítséget előre is köszönöm.
Használj port megszakítást, vagy az adat előtt legyen egy azonosító küldés és utána a valós adat, vagy az adathoz fűzd hozzá az azonosítót.
Igy a többi false adatot el tudod dobni. De a folyamatos kommunikáció helyett majd jobb lenne egy port megszakítás és utána a valós adatok küldése.
A
"receive=ReceiveRS232Char(1)" makróban az 1-es az időlimit (max. 255 lehet). Ennyi ideig vár arra, hogy beérkezzen valamilyen adat. Valahol annó kérdeztem a Matrix fórumán, hogy ezt az időt hogyan kell értelmezni, de már nem emlékszem a válaszra, időközben okafogyottá is vált. A lényeg az, hogy ha az időtúllépés bekövetkezik, akkor a "receive" változód értéke 255 lesz, ami pedig növeli a hibás vételi adatok számát. A 18F26K22-es verziót módosítottam úgy, hogy megszakítás kezelje a vételt. Ebből elvileg el tudsz indulni arra, amerre szeretnél.
Nagyon szépen köszönöm!
A hozzászólás módosítva: Ápr 26, 2022
Sziasztok!
PWM-el szeretnék vezérelni LED-et. 14.4Voltról a betáp, 6V-on szeretném üzemeltetni 12F675-ös PIC-el. A kérdésem az lenne, mekkora frekvenciát állítsak be? Köszönöm a válaszokat.
A PWM -nél tökmindegy a frekvencia. A lehetőségekhez képest a minél magasabb frekvencia beállítása célszerű, egyrészt, hogy kívül essék a hallható tartományon, de a LED még elbírja, ill minél nagyobb a frekvencia, annál nagyobb felbontást tudsz használni.
A frekvencia kb. mindegy, de 100 Hz alatt már látni fog a villogást. Úgy állítsd be a LED meghajtását, hogy 100 %-os kitöltést is viselje el, majd a PWM segítségével csökkented a fényerőt.
A felbontás akkor a legnagyobb, illetve a PWM frekvenciája akkor a legkisebb, amikor a PR2 értéke a lehető legnagyobb, ez 255 nevezett PIC esetén. A Flowcode-ban 256-ot is be lehet állítani, de igazábol a háttérben ebből mindig levon 1-et. Ha nem valami extra dolog, akkor 1:16 előosztó mellett állíts be 256-ot periódus regiszter gyanánt. A táblázatban 8 MHz-es órajel mellett láthatóak az értékek.
A gyári CRC kezelés, legalábbis a v5-ben gyakorlatilag kuka. Itt találsz egy működő példát, több szenzor kezeléséhez: Bővebben: Link. A programban egy trükk van ami nem látható azonnal:
Build menü -> Projekt opciók -> Kiegészítő kód Itt van az a táblázat, ami a CRC-hez kell. Akkor is ilyen hibát fogsz kapni, ha a valós és a 'Projekt opciókban' megadott órajel eltér.
Én a 8 verzióban próbálom életre kelteni (érdekes hogy fél éve lcd kijelzővel működött) most hogy egy VFD- nyüstölök nem hajlandó beindulni . a kiegészítő kódot kipróbálom köszönöm a segítséget .
Sajnos nem fordítja be hex be ha benne van a kiegészítőkód
Target folder: D:\OneDrive\Asztal
Source name: D:\OneDrive\Asztal\RS_232_DS18B20.fcfx Title: Description: Device: PIC.18F.18F252 Generated by: Flowcode v8.0.0.6 1 Launching the compiler... C:\Program Files (x86)\Flowcode\Common\Compilers\pic\batch\pic_xc8_comp.bat 18F252 "D:\OneDrive\Asztal\" "RS_232_DS18B20" D:\OneDrive\Asztal>C:\PROGRA~2\Flowcode\Common\COMPIL~1\pic\batch\..\bin\xc8.exe --chip=18F252 "RS_232_DS18B20.c" --MSGDISABLE=359,1273,1388 --FLOAT=32 --DOUBLE=32 Microchip MPLAB XC8 C Compiler (PRO Mode) V1.45 Employing 18F252 errata work-arounds: * Address 4000h boundary * Faulty table reads at -40 degrees C * GOTO instruction at reset vector must be preceded by NOP * Peripherals can misbehave if BSR = 15 * DAW instruction may improperly clear CARRY bit * Specifically disable interrupt sources during tblwt instruction * Writes to flash must target opposite side of 4000h boundary RS_232_DS18B20.c: 443: rom char* CRCTABLE = { ^ (374) missing basic type; int assumed (warning) ^ (314) ";" expected 444: 0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53 ^ (316) "}" expected ^ (314) ";" expected RS_232_DS18B20.c: FCD_0bbd1_One_Wire1__Get_Next_ID() 933: break; ^ (345) unreachable code (warning) (908) exit status = 1 (908) exit status = 1 Error returned from [xc8.exe] C:\Program Files (x86)\Flowcode\Common\Compilers\pic\batch\pic_xc8_comp.bat reported error code 1 A hozzászólás módosítva: Júl 13, 2022
Valószínűleg hiányzik a sor végéről a kapcsos zárójel '}' és a pontosvessző ';'.
Megvan a kódban mindkettö ugyanazt a hibát dobja ...
Próbáld meg az alábbit beilleszteni. Lehet, hogy másolás - beillesztés alkalmával bekerült a rendszerbe valamilyen nem oda illő, láthatatlan karakter:
Ha megtalálod a generált .c fájlt, akkor a 314, 316, 345 és 374-es sorok környékét nézd át, ott jelez hibát a fordító. A C kódból lehet következtetni, hol hibás a program.
* Peripherals can misbehave if BSR = 15
* DAW instruction may improperly clear CARRY bit * Specifically disable interrupt sources during tblwt instruction * Writes to flash must target opposite side of 4000h boundary RS_232_DS18B20.c: ^ (374) missing basic type; int assumed (warning) ^ (314) ";" expected (316) "}" expected ^ (314) ";" expected ^ RS_232_DS18B20.c: FCD_0bbd1_One_Wire1__Get_Next_ID() 931: break; ^ (345) unreachable code (warning) (908) exit status = 1 Szerintem nincs változás
A zárójelben vannak jelölve a hibásnak vélt sorok. Ezeket, illetve ezek környékét kell átnézni. Már ha kapsz .c kiterjesztésű fájlt. v5 még adott ilyesmit.
Van c fájlom megnézed ?
A hozzászólás módosítva: Júl 13, 2022
Próba így:
Ez sem tetszik a fordítónak , nem lehet hogy a 18f252 buta ehhez ?
Az kizárt, hogy ehhez buta lenne a PIC-ed. Elég fura hibákat dob a fordító. Töröld ki azoat a részeket, amiket utoljára raktál bele, hátha úgy jó lesz. Ha nem, indíts egy új projektet és másolj át mindent a régiből az újba. Egyszer-kétszer jártam már így, valami beragadhatott a programban. Amit korábban jól lefordított, később már nem ment neki, miközben csak egy ikont töröltem. A fene érti.
Utoljára a kiegészítő kódot tettem bele de ha gondolod mindent átmásolok , elég lehet ha a makrókat másolom át ?
Ha törlöd a kiegészítő kódot, és azt a részt, ami a CRCTABLE részre hivatkozik, lefordul a program?
Igen Csak beégetve CRC hibát ír a kijelző
A hozzászólás módosítva: Júl 13, 2022
Sziasztok. Tudna valaki segíteni a következő problémában ? A flowcodon megírok egy progit LCD kijelzöt vezérlő 16f628A pic -re , azt átfordíttatom Hex . Próbálom indítani a Proteusban és egyszerűen az LCD kijelző a szimulációban nem csinál semmit. Mellékelem mindkét programot. Köszönöm előre is .
Most nézd meg , a konfigurációt beállítottam és picit átrandeztem , a kurzor mindig a szöveg előtt kell hogy legyen , onnan tudja hol kezdődik a kiírás . A 628 a 4megás beállítást kedveli belső oszcillátoral ha jól emlékszem nem is tud 8 at .
A hozzászólás módosítva: Szept 20, 2022
Konfigurációban az OSCILLATOR: INTOSC CLOCKOUT -ban maradt. LCD kijelző RS lába az RA4-re van kötve, a többi a B portra csatlakozik, az a láb kimenetként csak nyitott kollektoros üzemmódra képes.
|
Bejelentkezés
Hirdetés |