Fórum témák
» Több friss téma |
Köszi! Megtaláltam szerencsésen és működik is, annyira azért nem betűnként rakják azt ide-oda meg ki tudja hova.
Nem teljesen világos a kérdés...
Ha kezedben a forrás, egyszerűen a szövegszerkesztővel megkeresed az angol kifejezést, és átírod. A program ismerete nélkül csak azonos karakterszámot írj át... Utána lefordítod, besütöd és kész. Ettől sokkal komplikáltabb ha csak a hex fájl áll rendelkezésre, akkor kell egy hex editor... vagy beolvasod az mplab-ban a flash tartalmát és bájtonként átírod benne a szöveget...
Köszi! Én nem tudok programozni ezért a sok fájl közül nem tudtam melyik tartalmazza az LCD-re printelt szöveget, végül a Main.c-be bukkantam rá, abban átírtam magyarra a kijelzéseket.
"csak azonos karakterszámot írj át" ezt, hogy értetted? Csak sima hex-et is lehet magyarítani? Bocsánat a nagyon amatőr kérdésekért! A hozzászólás módosítva: Jan 28, 2020
Az azonos karakterszám azért kell, mert sokszor úgy van megoldva a kijelzés, hogy számolja a kiírandó karaktereket. Pl. ki akarjuk írni az, hogy hello. Ezt tudjuk, hogy 5 karakterből áll. Feltöltünk egy számlálót 5-tel és minden betű után csökkentjük az értéket. Ha eléri a 0-át minden betűt kiírtunk. Ha a számláló értéke marad de a betűk száma a fordítás miatt változik, nyilván hibás lesz a program.
Ajajj akkor baj van. Sokkal bonyolultabb ezekszerint azt a pár szót lefordítani magyarra. Ebbe ilyenek vannak.
"if (aqutime!=MID_AQU_TIME) { lcd_line(LCD_LINE1); lcd_printf((far rom char*)"Mesure en 30sec\0"); TempoS(3); if (BOUTON) { plein = 0; aqutime = MID_AQU_TIME; break; } } if (aqutime!=LONG_AQU_TIME) { lcd_line(LCD_LINE1); lcd_printf((far rom char*)"Mesure en 120sec\0"); TempoS(3); if (BOUTON) { plein = 0; aqutime = LONG_AQU_TIME; break; } } if (!beepon) { lcd_line(LCD_LINE1); lcd_printf((far rom char*)" BUZZER ACTIF \0"); beepon = 1; TempoS(3); } else { lcd_line(LCD_LINE1); lcd_printf((far rom char*)" PAS DE BUZZER \0"); beepon = 0; TempoS(3); }" A hozzászólás módosítva: Jan 28, 2020
Hát ez egyáltalán nem biztos hogy nem fog működni. A C nyelvhez nem értek, de ha megvan a hardver amin ki tudod próbálni akkor fordítsd le párat és próbáld ki élőben.
Tulajdonképpen tök hülye vagyok a lefordításhoz is. Úgy php-ban meg html szerkesztésben elküszködök, de ez kínai nekem, persze olvasgatok utánna, de alapvető hiányosságaim vannak. Légyszives mint jó anya a hülye gyerekéhez úgy válaszolj már A mellékelt képen vannak a forráskód fájljai. Ezt, hogy kell lefordítani? Köszönöm a segtséget!
A hozzászólás módosítva: Jan 28, 2020
A feltelepitett mplab ide program sugoja megmondja ... avagy keresgelj olyat hogy build avagy complie menuk .
Ez egy projektkent van kezelve az IDE programban. Ami a c nyelvu forraskodokbol, a forrasban hivatkozott fugvenyek reszben a pices C nyelv alapepito elemei , de van amit kulon megirtak egy kulon fajlba tarolva . Ezek lesznek a kulso periferiakhoz tartozo LIB fajlok pl lcd egyedi driver fuggvenyei. Az adott tipusu uC sajat belso regisztereinek a leiro fajla. + meg 2 3 fele egyeb fajl. A forditas soran ebbol a sok fajlbol gyurja ossze a compiler a letoltendo HEX fajlt. Ezeknek a fajl komponenseknek is meg kell lennie ,, lehet az eleresi utjaikat is be kell allitani az IDEben a projekt forditasi tulajdonsagai kozott. Tehat nem olyan egyszeru ez. Ami weboldon talaltad a forrast ott nezzel korul meg tobb fajl utan mert lehet vannak meg ott egyebb librari fajlok. Mert lehet egyedi driver fajlokat is irhattak hozza . Jobb esetben a forras "fejleceben" benne vannak a megjegyzesekben azok a tovabbi komponens fajlok amikbol epitkezik a fejlesztes.Persze ez a kodirojanak az alapossagan mulik.
Mi is az a MPLAB ?
alig 100 oldal MPLAB IDE v810 használatáról lépésről lépésre Persze az újabb verziók részben ettől eltérhetnek , de a fő lépések irányok és elvek nem sokat változnak.
Valószínűleg azt az LCD.h és LCD.c fájlt kellene látnunk, hogy tudjuk mit takar az lcdprintf() utasítás. Abból kiderülne fog-e működni rendesen vagy sem.
A kódra ránézve 0 zárt stringeket használ, a hosszt tehát "kitalálja" a függvény. Működni fog, ha más hosszúságúra átírod.
De nem biztos, mert nem látjuk mit csinál a lcd_printf, de gyanítható, hogy így működik. Még az is lehet, hogyha hosszabra írod, akkor túlcsordul a képernyufferben, és azért lesz hiba. De ez ellen ha rendesen meg van csinálva, akkor megint csak véd a lcd_printf függvény. Rövidebb string esetén nagyon valószínűtlen ilyen jellegű hiba. Még az is gondot okozhat, hogy ha több dolog is van egy sorban, akkor a többi eltolódik. Ha nem ír a program több dolgot egy sorba, akkor viszont nagyjából biztos lehetsz benne, hogy ha a stringbe nem írsz több betűt, mint amennyi egy sorba befér, akkor nem lesz túlcsordulás. Kipróbálni tudod a programot, vagy vakon csinálsz valamit, és aztán lesz ami lesz?
A szövegek \0 karakterrel vannak lezárva, tehát elvileg nem jelent gondot, ha hosszabb a szöveg (feltéve hogy ráfér a kijelzőre). Viszont arra figyelni kell, ha egy hosszabb szövegre ráírsz egy rövidebbet, ott maradhat az előző szöveg vége (ezért lehet hogy érdemes azonos hosszúságúra megalkotni őket, esetleg szóközökkel kitöltve). Az ékezetes karakterek helyes megjelenítése már nagyobb falat, ennek megoldása attól is függ, hogy grafikus vagy karakteres kijelzőről van-e szó.
Köszönöm szépen mindenkinek a segítséget! Elég bonyolult számomra ez a fordítgatás, ami hozzánemértéssel párosulva, nem sok sikerrel kecsegtet ezért megelégszem a szerző lefordított hex fájlával. Azzal működik a cucc. Üdv
Sziasztok!
Egy kis segítséget kérek. A mellékelt program nem működik és képtelen vagyok megfejteni, hogy miért. Az áramkört már 3 változatban is megépítettem és több 74HC595-öt is próbáltam. Nyomógombokkal is teszteltem, úgy működik, tehát ez a része jó, csak a programban lehet valami hiba. Általában az összes LED folyamatosan világít, néha pedig egy sem, de sohasem vált oda-vissza, ahogyan kellene. Egyébként erről az oldalról származik a program és a rajz. Még mielőtt kérdezitek: szeretném megérteni a 74HC595 vezérlését programból, ezért örültem meg ennek az egyszerű demónak. Sajnos, így sem boldogulok vele. Minden segítséget köszönök!
A kishifttelés nekem úgy tűnik, hogy nincsen benne várakozás. Tehát a data vonal beállítása és a clock él között egyetlen órajel telik el. Milyen órajelre van állítva a PIC?
Hogy néz ki az áramkör? Lehetséges, hogy túl nagy az összeköttetések kapacitása, és nem áll be a jel megbízhatóan. Breadboard? NYÁK? Min van összerakva és hogyan? Ránéznék szkóppal, hogy mennyire szögletes/egyértelmű a jelforma. Illetve teleraknám NOP-okkal, vagy méginkább még hosszabb várakozásokkal a jelek között. A hozzászólás módosítva: Jan 30, 2020
A 74hc595.inc fájlba lévő nop sorok számát kéne növelni 10el mindenütt.
Akkor nem fog annyira kapkodni a port lába 1-0 és 0-1 között.
Igen, de a BSF CLOCK elé még jöhetne pluszba egy marék NOP, mert a data vonalnak illik adni egy kis időt stabilizálódni, mielőtt kiadjuk a clockot. (jpocoknak: lásd adatlap!)
Breadboardon összerakva simán lehet, hogy véletlenül több lesz az indukció meg a kapacitás a data vonalon, és ezért "lekési" a később induló clockot.
ciklussal elengásabb lenne a NOP helyett avagy a goto $+1 a ciklus magjában A hozzászólás módosítva: Jan 30, 2020
Köszönöm a válaszokat mindkettőtöknek!
ash Az áramköröket nem breadboard-ra építettem, hanem rendes maratott panelre. Az eredeti PIC-es áramkörről nem tudok most képet küldeni, de készítettem új panelt is, hogy 628-as PIC-kel is tesztelhessem. Ennek megfelelően módosítottam a programot is (képeket és programokat mellékeltem). Az órajel beállítása az eredeti programban _XT_OSC, a 628-as változatban pedig belső oszcillátor. Természetesen a 84A processzoron van egy 4 MHz-es kristály 27 pF-os kondenzátorokkal. Nincs szkópom, nem tudom azzal megnézni a jelet. A panelen látható egy zöld LED is, de az nem kapcsolódik semmire sem. Biztonság kedvéért kivágtam az előtét-ellenállást, így az az ág szakadt. Eredetileg a a 74HC595 9-es lábának állapotát jelezte volna. Kera_Will Tettem GOTO $+1 utasításokat oda, ahol jelölted (lásd a mellékelt INC fájlt). Sajnos, ezek után sem működik. Illetve ugyanaz a helyzet, mint korábban: ha bekapcsolom, akkor vagy az összes LED világít, vagy egy sem, de sohasem vált. A hozzászólás módosítva: Jan 31, 2020
Ez csak egy tipp volt, hogy esetleg a jel túl gyors. Én már jártam hasonlóan, azért volt ez az első gondolatom. Azért kérdeztem a breadboardot, mert ott már a nagyon gyors jelek már nem teljesen szögletesek, kell nekik egy kis idő mire megtörténik egy 0->1 1->0 váltás. Mennél rövidebbek a vezetékek, annál kevésbé jön ez elő - egyszerűen fogalmazva -, de mindig észben kell tartani, hogy amit digitálisan elképzelünk, az csak közelítéssel lesz olyan a valódi analóg világban.
4MHz-es órajellel és ilyen pici NYÁK-kal tippem szerint - pláne NOP-pal lelassítva - már nem lesz jelforma probléma, úgyhogy másfelé kell keresgélni. Amit megnéznék: * Nincs-e szarvashiba a kódban? Lehet még benne benézés. Lábak jól vannak felkonfolva? * Csak kellene egy szkóp ránézni a jelekre. A debuggolás legjobb módja a szkóp. Ha analóg probléma van, az is látszik, ha digitális az is. Ha időzítés, az is. Szkóp nélkül debuggolni ezekkel a módszerekkel lehet: ** debug LED kigyújtása - ezzel nagyon nehézkes, de pl egy LED kigyújtást a kódba írva egy nem használt lábon lehet trace-elni, hogy valami egyáltalán lefutott-e. Illetve ha nagyon lelassítod a futást, akkor esetleg nyomon lehet vele követni folyamatokat is. ** UART lábak +USB Serial UART - lehet trace üzeneteket tenni a kódba - vigyázni kell, hogy ne lassítsa le a programot, ha real-time dolgot fejlesztünk. ** igazi debugger: Még sosem debuggoltam mikrovezérlő programot debuggerrel, de állítólag lehetséges ** Ha már működni fog a shift regiszteres kimenet, az pont jó lesz nyomkövetőnek, 8 biten már sokmindent ki lehet fejezni * Hiba az áramkörben? Áramkör terv van? Pl a shift regiszter output enable jele be van kötve? Latch be van kötve? Nincsenek összecserélve jelek?
Még egy lehetőség:
Az MpLab -ban a Szimulátor kiválasztása nyomkövetőként. A logikai analizátor ablak beállítása (kimenetek felvétele). Újrafordítás után lépésenként lehet végrehajtani a kósot és meg lehet vizsgálni a változók (PORT -ok, WREG, stb.) értékét. Sőt a legfontosabbak felvehetők a Watch listába. Töréspont is elhelyezhető a kódban. Futtatható úgy is, hogy a törésponton megálljon. A logikai analizátor ablakban a felvett jelek idődiagramja látható, két kurzor segítségével időzítés mérhető, de ehhez be kell állítani az órajel frekvenciáját is.
asch
Többszörösen ellenőriztem a panelek terveit (rajzok mellékelve), illetve szakadásvizsgálóval a kész paneleket is. Szerintem minden úgy kapcsolódik, ahogyan kell. A zölddel jelölt forrszemek a GND-t jelentik, tehát közvetlenül a telefóliához kapcsolódnak (rajzon és a valóságban egyaránt). A valós panelek hibátlanok, mert ha a PIC panel kimenetére kötök 8 ledet és például egy futófénnyel próbálom, akkor tökéletes. Vagy mondjuk 4 nyomógomb lekérdezésével az A porton vezérlek 8 ledet a B porton, az is hibátlanul működik. Ugyanaz a 4 MHz-es külső, vagy belső oszcillátor a 84A, illetve a 628A esetében. Ha a 74HC595-ös panelt nem a PIC-panellel vezérlem, hanem 3 db nyomógombbal, akkor az is jól működik. Ehhez ezen az oldalon találtam segítséget. Csak éppen a két panel nem működik együtt. A demó programot is ezerszer átnéztem már, de én nem látok benne hibát. Persze lehet, hogy a nagy igyekezetben mindig átsiklom fölötte. Hp41C Köszönöm az ötletet, majd kipróbálom. Bár az MPLAB-ot egyáltalán nem használom, de majd csak eligazodom benne valahogy. A forráskódot egyszerűen Jegyzettömbbel szerkesztem, utána pedig rádobom az MpasmWin programra, ami generálja a HEX-et. A PICkit2-höz pedig saját programját használom. Eddig szépen működött így, de most itt ez a makacs hiba, amivel nem tudok mit kezdeni.
MpLab leírás magyarul.
Pedig érdemes elmélyedni Mplab rejtelmeiben. Egy hibakeresésében sokat tud segíteni. Én is volt már, hogy órákat szívtam egy mellé ütött betű miatt a forrásban.
Köszönöm a magyar nyelvű dokumentumot! Könnyebb így ismerkedni vele, mint angolul .
Pali79 Igazad van (akárcsak Hp41C-nek), megpróbálom MPLAB-bal megkeresni a hibát.
Sziasztok!
Megtaláltam a hibát! Mégis a PIC-panelek okozták a bajt! Azt még nem tudom, hogyan. Viszont sikerült előkeresni egy régebbi panelt, amit szintén kísérleti célokra építettem és azzal már hibátlanul működik az EREDETI program, az eredeti leírás szerint. Nem kell hozzá semmiféle NOP utasítás, semmiféle egyéb módosítás. Köszönöm szépen a segítő hozzászólásokat!
Üdvözlet!
Sikerült valakinek beüzemelni pickit2 -t a pickit programerrel win10 alá? Nekem nem akar települni. A hozzászólás módosítva: Feb 4, 2020
Szia!
Nekem jól ment win8.1 x64 alatt. Aztán egyszercsak megmakkant. Azóta hiába telepítem újra, feltelepül, de nem indul el. Lehet a visual studio 2012? lefrissült és attól halt el, próbáltam többféle vs2012-t felrakni, de nem sikerült megjavítani...
Nekem telepítéskor a .NET et akarja, de valami régebbi verziót hiányol. Új már van a régit meg a win nem hagyja telepíteni.
|
Bejelentkezés
Hirdetés |