Fórum témák
» Több friss téma |
Ha program forrást teszel fel, használd a [Kód] gombot!
Ha a késleltetést a fő programciklusból egy szubrutinba helyezed át, egyből érthetőbb lesz a program. Egy újabb változót használhatva számolod, hányszor hívtad meg a késleltetést, akkor kevesebbet kell írni.
Köszönöm a segítséget nagyjából világos minden csak ez a szubrutinba helyezéses téma hogy zajlik az nem egészen, valamint mit kell átírnom , hogy tudjam megfelelőre állítani a sebességet?!?!
Sziasztok, a kérdésem a következő lenne: van két 16f886-os PIC amiket egy adó/vevő modul párossal szeretnék össze kötni. Első körben még csak ez lenne a későbbiekben viszont több vevő-PIC is lenne ugyan ahhoz az adóhoz. Ha jól szűrtem le akkor itt az aszinkron adatátvitel jöhet szóba. Ha az átvinni kívánt adat 2x8 bit lenne (8 bit azonosító hogy melyik vevőnek szól az adat / 8 bit "hasznos" adat.) Manchester kódolással ez már 32 bit. Van e erre valami portja/akármije a 886-osnak, vagy nekem kell lekezelnem programból? Illetve a maximális adatátviteli sebességet nézve tulajdonképpen a bittek "hosszára" kell figyelnem? Azaz ha adott egy 9600 bps maximális bit ráta akkor egy bit ideje nem lehet rövidebb mint 1/9600 másodperc, de e legjobb ha ez alatt maradok (~felénél) hogy minél kevesebb hibás adat legyen? Előre is köszönöm.
Szia!
Ha ajánlhatnám az rfm12B adó/vevő modulpárt ez kielégít minden igényt. Egyébként tényleg aszinkron adatátvitellel megy át az adat, nem kell Manchester kódolás sem. átviteli sebesség állítható, adó és vevő egyben,eleve van egy kódszám, ami beérkezése után kezdi feltölteni az adatpufferét, ezért nem érzékeny a zavarjelekre sem. Ha rászánod magad akkor segítek az RFM12BS topicban, inkább odatartozó probléma.
Nem kínlódnék Manchester kódolással és előbb alacsonyabb sebességgel, pl. 300-1200bd -al próbálkoznék. De van róla infó (Bővebben: Link)
Szia!
Az egyszerű modulokban nincs kódolás, így neked kell csinálnod (pl. Bővebben: Link és adópárja). De amiken már kommunikációs interfész van (SPI, UART ..stb), azok már komolyabb modulok, raknak bele kódolást, tehát neked azzal nem kell foglalkoznod. Csak küldöd neki az adatot és kész (illetve ezeket lehet konfigurálni is, amit be lehet állítani pl. egy jumperral).
A lényeg lemaradt. Az RC6 a TX, RC7 az RX láb. Ezeket értelemszerűen ki-, illetve bementetként kell konfigurálni.
Ha összekötöd a TX kimenetet az RX bemenettel, vissza is tudod olvasni a kiküldött byte-ot.
Köszönöm mindenkinek a hozzászólást. Itthon jelenleg HM-T868 /HM-R868 adó/vevő párosom van, ezekkel szeretném megoldani a kérdést.
Egyrészről hogy megértsem a működését, ha nekem kell megcsinálnom a kódolást akkor azzal tanulom meg a legjobban. Másrészt így csak 1 lábát köti le a PIC-nek. Későbbiekben lehet hogy rfm12B modul párt is kipróbálom, akkor mindenképpen benézek a RFM12BS topicba. ![]() PIC-ezni azért kezdtem hogy tanuljak, megértsem a dolgokat. Ha megépítek valami, 99% próba panelon teszem, ha működik ahogy elképzeltem, szétszedem és bele vágok valami másba. Jól értettem amúgy hogy a bittek "hossza" tulajdonképpen amire figyelnem kell az adó maximum sebességénél? A hozzászólás módosítva: Júl 21, 2013
Az EUSART sebessége (baud) kisebb legyen, mint a modul átviteli sebessége.
Ismételten köszönöm, USART leírás akad esetleg magyarul vagy marad az angol?
Ha a PIC EUSART modulját használom, kell-e a küldendő biteket kódolnom, vagy csak küldöm, fogadom és örülök hogy megjött? (értem ezalatt hogy mondjuk 00000000 -at vagy 11111111 -et szeretnék küldeni azt is átküldi így?) Ha 8 bit azonosító + 8 bit adat kombinációt szeretnék használni, akkor EUSART al küldöm byte-onként, majd a fogadó oldalon programból lekezelem hogy mit szeretnék kezdeni vele, jól értem? Hp41C a linket nagyon köszönöm!
Sziasztok! tudna valaki segíteni? van egy futófényes (rotate) programom aminek a gyorsaságán tudtam állítani nedudgi segítségének köszönhetően a call paranccsal... Hogy lehetne azt megoldani , hogy ne kelljen ennyiszer leírni a call parancsot ???? valamint van négy led a probapanelen és mindegyik ledet különböző ideig szeretném kivilágítani pl 1 led kapcsol 10 -15 másodpercig világít ezután kikapcsol bekapcsol a második led 20-25 másodpercig világít majd kikapcsol következik a harmadik led 30-35 másodpercig világít majd kikapcsol aztán a negyedik 40-45 másodperc aztán kikapcsol...
Nem tudom van e valami szabvány megoldás erre, én a következő képen csinálnám:
Elején deklarálsz 3 változót az időzítéshez. Megírod az időzítő rész, majd ezt meghívod különböző paraméterekkel attól függően mennyi késleltetést szeretnél.
A fenti kód 15 másodperces késleltetés 8MHz sebességen. Bizonyos késleltetési idő felett szükség van t4 re is. t1, t2, t3, t4 értéke határozza meg a késleltetés idejét, és függ a PIC órajelétől. Felhasználás a te esetedben pl.: led 1 be call Delay (15 mp) led 1 ki led 2 be ......
Szia! nehéz elmagyarázni, ezért összeütötten neked egy progit.
A főprogramban van egy 0,1sec és egy 1sec időnközönként ismétlődő rész, oda tedd be a kódodat. A portok (a b c ) nincsenek beállítva.
A hozzászólás módosítva: Júl 22, 2013
Sziasztok! Segítséget szeretnék kérni PIC16F628A-20 program beégetésre. A program HEX-ban meg van de nincs programozóm.
![]() Tudna nekem valaki segíteni? Budapesten belül szívesen elmegyek a kollégához. Igazán fontos volna! ![]() Köszönöm előre is! ![]() ![]() Üdv!
Én a 0.2s késleltetés rutinja után betennék egy következő változót csökkentő utasítást. Ha a változó nem 0 akkor vissza a késleltetés elejére.
Amikor a késleltető rutint meghívom, ebbe a változóba eltárolnám hányszor kell a 0.2 s. Így egy egyszerű szám módosítással tudsz állítani 50s ig 0.2s felbontással. Ha a programodnak más dolga is akad akkor tényleg a timmerek felprogramozása marad.(mellékesen pontosabb, és szebb is.)
Sziasztok, PIC16f886-os EUSART-al kapcsolatban lenne kérdésem.
Első nekifutásra egy tesztet szerettem volna csak szimulátorral. Adatlapja szerint mindent beállítottam amit kell, de mégsem látok kimeneti jelet a szimulátoron. MPLAB SIM en a "Logic Analyser" ablakocska nem mutat semmi aktivitást a kimenő lábon. Ha jól tudom alap állapotban logikai 1-en kéne állnia, nekem végig logikai nullát mutat. Mit rontottam el/hagytam ki? Előre is köszönök minden választ!
Logikai analizátor helyett: Debugger / Settings / Uart1 I/0: "Enable Uart1 IO" és az "Output to file" kipipálása. Újrafordítás, szimuláció indítása.
Helosztok.
Ha használom egy 12f683 nál a megszakítás bemenetet, akkor trisiot gp2 re bemenetnek kell állítani? Vagy akkor már a láb nem is gpio?
Amikor be akartam égetni a processzorba a programot, akkor ezt a hibaüzenetet kaptam:
"PKWarn0003: Unexpected device ID: Please verify that a PIC16F884 is correctly installed in the application." - PICkit 2-vel égetnék PIC16F884-et, MPlab verzióm: v8.84 nem tudom, hogy mi okozhatja a hibát. Mellékletben küldök egy képet a bekötésről, lehet, hogy azzal van a gond.
Próbáld meg a PICKit2 saját szoftverével felismertetni. Ha nem ismeri fel automatikusan, akkor a "Device family" menüből válaszd a "Midrange, Standard"-ot és akkor fel kell ismernie.
Ha úgy sem, akkor kézzel add meg a tipusát. Nem tudom, van-e ebben a vezérlőben DeviceID... Gyári Pickit2-ed van, vagy klón?
Sziasztok! Olyan kérdésem lenne, hogy egy asm-ben megírt projektbe be lehet-e szúrni c kódot? Akár egy include fájlként.
Ha lefordítasz valamit C-ről asm-re, ismered az eredmény ki/be címeit, adatait, az adatok és program szerkezetét, a működés minden részletét, illeszteni tudod a meglévő programodhoz, akkor igen.
Ezek nélkül egy olyan előadáshoz hasonlítana, ahol a fontos részeknél az előadó átvált kínaira.
C nyelvű programba beszúrni asm-et sokkal egyszerűbb. A fordító doksijában vannak részletek.
A programot ismerem, én írtam, csak kellene egy olyan bonyolult számolást végrehajtani, amit asm-ben nem tudok megcsinálni, c-ben viszont már van erre példaprogram. A BMP085 szenzor szamítása lenne az. 4 bájt hosszú változókkal dolgozik, ami nekem még kicsit nehéz.
Amit írtál, az egyértelmű. A C program fordításakor kapsz egy másik programot, azt kell értelmezned és átírni, a saját programodhoz illeszteni.
Szerintem egyszerűbb megtanulni a C-t.
A kollégák eggyel továbbgondolták már a választ
![]() Asm-be közvetlenül c-t nem szúrhatsz be, csak egy asm-re lefordított c kódot, de az meg ugye a c környezet beállításait is használja. Szóval, ha nem akarsz c-t tanulni, akkor kénytelen leszel a 4 bájtos változókat te magad kezelni (viszont erre biztos vannak a neten példák).
Próbaképpen annyit megtehetsz, hogy a C program Main részébe, (tehát az inicializálás után) beteszel egy ugrást az assembly programra, és onnan már meg tudod hívni a C szubrutint. Biztos módszer nincs, de így van némi esély a probléma megoldására.
Így már értem, hogy miért nem lehet beszúrni. Körülnézek neten megoldás után. Köszi mindenkinek.
|
Bejelentkezés
Hirdetés |