Fórum témák
» Több friss téma |
Fórum
Sziasztok!
Hogy lehet mikropascalban balra shiftelést végezni egy byte-on? Próbálkoztam az SHL függvénnyel de azt írja hibának hogy SHL was not declared Pedig még autómatikusan kiemeli kék színnel :nemtudom: Előre is köszi!
megoldódott
nem soft spi out hanem soft spi write Csak azt nem értem hogy ez miért nem megy atiny45-el? át állítom Atmega8ra és lefordul simán de ha Atiny45ön van akkor sok kódot mintha nem ismerne
Sziasztok!
Az volna a kérdésem hogy az alábbi hibákat miért kapom mikor próbálom lefordítani? Még nem teszt jelleggel fordítom, csak szintaktika miatt. Csináltam új projektet, beállítottam 8MHz-vel ATiny45-öt.
Sziasztok.
Adott egy 18F452 és egy 16F876A. I2C-n szeretném működésre bírni. A 16F felé tudok adatot küldeni, ellenkező irányba nem akar menni a dolog. 18F452 kódrészlete:
16F kódjai:
És maga a főprogramrész: [code"=c] If TestBit(PIR1, SSPIF) = 1 then begin //Nekünk címeztek valamit I := SSPBUF; //Get rid of Address ClearBit(PIR1, SSPIF); CommandByte := ReceiveByteI2C; If CommandByte = CMD_GETSTATUS then begin SetBit(SSPCON, CKP); //Release clock WaitForPIR1SSPIFset; //Wait for RepeatStart I := SSPBUF; //Get rid of Address ClearBit(PIR1, SSPIF); SendByteI2C(10); //OK ![]() ClearBit(PIR1, SSPIF); //Clear interrupt flag SetBit(SSPCON, CKP); end; [/code] Hol szúrom el a dolgot? Segítségeteket előre is köszönöm! Idézet: „Nem ez szerepel a man_synchro utasításnál.” Nekem igen Lehet, hogy az eltérő verziószám miatt van ez, vagy nem tudom Idézet: „Jobb lenne megírni saját rutinban, megszakításból kezelve az egészet.” Az előző hsz.-emben pont ezt írtam Idézet: „Használtál "Function"-t MikroPascalban?” Mikropascalban nem, PC-s pascalban és delphiben igen. Idézet: „ Az, hogy visszaad egy értéket, az nem jelenti azt, hogy azon kívül más utasítást nem tud végrehajtani.” Ez igaz, de nem említi sehol a leírás, hogy csinál mást is azon kívül, hogy visszaadja a fél bitidő hosszát. Ennek ellenére csinálhat mást is, de akkor meg a hozzá írt használati utasítás a hibás/hiányos. Innen kezdve pedig igencsak elgondolkodtató, hogy érdemes-e haználni valamit, amihez a leírás nem fedi azt, amit csinál. Jobb lenne megírni saját rutinban, megszakításból kezelve az egészet. CCP modul Capture módjával könnyen mérhető a két élváltás között eltelt idő, és az alapján dekódolható az adat. Idézet: „To use this function, you must first prepare the PIC for receiving.” Nem ez szerepel a man_synchro utasításnál. Kép:
Ami még a saját kódolás megírása mellett szól, hogy akkor meg lehet oldani interruptolva, és nem kell megálnia a proginak 10-20 mSec-re.
Eszemben sincs hülyeséget terjeszteni!
Használtál "Function"-t MikroPascalban? Az, hogy visszaad egy értéket, az nem jelenti azt, hogy azon kívül más utasítást nem tud végrehajtani. A visszaadott érték csak tájékoztató jellegű ez esetben. Idézet: „To use this function, you must first prepare the PIC for receiving.” Tehát a vevő modul használja. Idéznéd, melyik rész volt hülyeség?
Te megnézted egyáltalán, hogy mit mond a használati utasítás erről az utasításról? Jobb lenne, ha nem terjesztenél hülyeségeket!
Mint már írtam, a Man_syncro utasítás az adatátviteli sebesség szinkronizálására való, a vevő modul használja! Arra jó, hogy ha az adón pl 8MHz-es kvarcot használsz, a vevőn meg pl 10MHz-est, akkor szinkronba hozza az adatátviteli sebességet.
Amit írtam, az csak "elvileg" van így, mivel nekem a gyakorlatban nem működött ez a library, (mint ahogy írtam) bugos (vagyis hibás) ez a része a pascalnak. Szerintem előbb végeznél, ha írnál egy saját manchastar kódolást. (Ugyan az, mint az RC5, csak hosszabb időzitésekkel.)
Ahogy nézem, a man_synchro igazából nem való semmire. Csak visszaadja, hogy milyen hosszú egy fél bitidő, tehát nélküle is működnie kell mindennek.
Az utasításban szereplő példaprogramokat próbáltad? Az oszcillátorfrekvencia azonos mindkét chipnél? (szerintem nem lényeges a 8MHz, hanem csak az, hogy azonos legyen). Azt is próbáld ki, hogy a két picet közvetlenül összekötöd, hogy kizárd azt, hogy az RF modulok okozzák a galibát. Ha így sikerül összehozni stabilra a kommunikációt, csak azután tedd be az RF modulokat. Az mondjuk nem szimpatikus, hogy a fogadó utasítások blokkolják a kontroller működését. Persze oké, hogy ezzel biztosítható a pontos vétel anélkül, hogy az előre elkészített rutinba belenyúlnánk, de ha 500bps az átvitel sebessége, akkor egy bájt fogadása 16ms időre megfogja a chipet. És 16ms hosszú idő is tud lenni! Persze ha a kontroller nem csinál mást, akkor működnie kell a dolognak.
Hát átnéztem a használati utasítást, de nemnagyon értem, mire lehet használni a man_synchro-t. De gondolom igazad lesz benne, biztos a szinkronizálásban van szerepe. Belinkelem neked a mikropascal manualját, a manchester library-nél megnézheted az utasításokat, de sajnos nincs sok írva erről a parancsról. Lehet te észreveszel valamit
Bővebben: Link Üdv.
Nem ismerem a micropascalt, így konkrét dologgal nem tudok szolgálni. Én a program felépítésére értettem, amit írtam.
A man_synchro parancsot úgy érzem, az adónak kell kiadnia, mielőtt adatot akar küldeni azért, hogy a vevő rá tudjon szinkronizálni. De lehet, hogy rosszul gondolom. Használati utasítás?
Hello
Tudnál valami egyszerű mintát mutatni nekem adóra és vevőre? Most már sehogysem akar szinkronizálni az adó és a vevő. Biggyesztettem a vevőre 2x16 lcd-t, ami kiírja mindig azt a bájtot, amit vesz a vevő, de legtöbbször 247-es érték jön ki. Ha bekapcsolom az adót, akkor néha mutat más értéket is, de egyszer se azt, amit sugároz az adó. Szóval kiváncsi lennék, te hogyan csinálnál ilyen egyszerű adó-vevőt, ahol az adó csak egy bizonyos bájtot ad, és ezt SIKERESEN veszi a vevő. Ebben te hol használnád a man_synchro parancsot? Üdv.
A vevőnek folyamatosan figyelnie kell és fel kell ismernie, ha adat érkezik. Mint ahogyan a soros port a startbit lefutó éléből tudja, hogy most kezdődik valami.
Szóval az adó oldalon ha én állandóan csak egy bizonyos bájtot akarok kiküldeni, akkor elég írni egy végtelen ciklust, ami állandóan küldi a bájtot? És hogy lehet összeeggyesztetni, hogy pont amikor küld az adó, akkor vegyen a vevő is?
Üdv.
Elvileg sehol sem kell várni. Ha kiment az adat, akkor mehet a következő. Vevő oldalon meg azt kell nézni, hogy jött-e be adat.
Hello
Megpróbálom, egyébként az adó pic programjában két küldés között mennyit érdemes várni - delay_ms(?) ? És ugyanígy a vevő oldalon is két vétel között mennyit célszerű várni? Még mindig nem világos, hogy pontosan is mire jó használni a man_synchro utasítást. Azt értem hogy visszaadja a bájtnak a felét(vagy nem is tudom hogy pontosan mit ad vissza), de azt aztán mire lehet használni, miben segít? Üdv.
Nem biztos, hogy a te programoddal van a baj. Próbáld ki, hogy az adó PIC kimenetére az RF modul helyett csak egy LEDet teszel, hogy egyáltalán küld-e ki valamit. Mint említettem, ezek a manchaster_* rutinok nekem sem mentek, valószínűleg bugos a pascal ezen része.
Esetleg tudná valaki, hogy kell nagyjából kinéznie az adó és a vevő programjának, hogy biztos legyen a kapcsolat - mostanában akárhogy kapcsolgatom, nem jön létre a kapcsolat, pedig a modulok jók. A mikropascal manchester példaprogramja se jó, legalábbis nekem nem ment.
Üdv.
Sziasztok!
Belemerültem a Mikropascal a Manchester könyvtár részébe, vettem RF modulokat, készítettem egy egyszerű adó-vevőt. A lényege, hogy amíg az adónál nyomva tartom az A gombot, addig az adó kisugároz 1x egy bizonyos bájtot, ha a B gombot nyomom akkor ezt a bájtot állandóan sugározza, két sugárzás között vár pár ms-t. A vevő rész olyan, hogy a PIC bekapcsol egy LED-et, ha veszi ezt a bájtot. Itt egyébként egy végtelen ciklus van, ami veszi a "vételt", majd ha az az a bájt, amire be van programozva, akkor villantja a LED-et, majd vár pár ms-t, ezután újra veszi a vételt... Nos nem értek itt valamit. Először áram alá helyezem mindkét áramkört. Ha nyomva tartom pár másodpercig a B gombot, akkor egyszercsak villogni kezd a vevőnél a LED. Ezután már elég, ha csak egyszer megnyomom az A gombot, rögtön villanik a vevőnél a LED. Viszont ha újraindítom mindkét áramkört, akkor hiába nyomogatom az A gombot, nem villanik fel a LED. Ez miért van? Nem tudom, hogy érthető-e, hogy mire akarok kilyukadni Szóval gondolom ezekben a manchester parancsokban nem csak a kódolás/dekódolás meg a küldés/vétel van benne, hanem más is, hiszen olyan, mintha az első sikeres vétel után bármikor ha megnyomom az A gombot, akkor a vevő pic "pont abban a pillanatban" hajtja végre a Man_Receive utasítást. Persze előfordul az is, hogy indulás után hiába tartom nyomva a B-t, még percekkel később se kezd villogni a LED. Üdv.
Ez van meg nekem is, meg van MikroPascalom DsPIC-hez is.
Amugy persze, ha megvan a hex, azt akármilyen progival be tudod égetni, ami támogatja az AVR Dopert.
khmm.... nekem avr-es mikropascalom vanBővebben: Link
A MikroPascal PIC fejlesztőkörnyezet, nem AVR fejlesztőkörnyezet. Ebből kifolyólag nemis tudod beégetni a kapott hex fájlt, mert az a PIC kontroller belső felépítéséhez való, nem az AVR belső felépítéséhez.
Köszi!
De ha megcsinálom mikropascalban a hex fájlt akkor azt már egy másik, az avr doperrel kompatibilis programmal feltudom égetni? üdv
Üdv!
A Man_syncro utasítás az adatátviteli sebességet szinkronizálja. Olyan, mint UART-nál a baud rate megkeresése. Amúgy a helyedben inkább írnék egy saját manchaster kódolást, nekem a mikropascalos nem ment. A kivezetésre direktben ráraktam egy LEDet, és nem küldött ki semmit. Ez a része bugos a pascalban sajnos.
Üdv!
Úgy tudom, hogy csak a "mikro"-s programozókkal kompatibilis. Pl.: MikroICD
Sziasztok!
A Mikropascal kompatibilis a Topi féle AVR Doper-el? Üdv
Sziasztok
Tudja valaki, hogy pontosan mire is jó a Man_Synchro utasítás a Mikropascalban? Közületek használta már valaki a Manchester könyvtárat? Üdv. |
Bejelentkezés
Hirdetés |


nem soft spi out hanem soft spi write




