Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Idézet: „mi a szabályos módja ha egy integer felső bájtjába akarok irni? (az alsó bájthoz ne nyúljon)” Erre létezik több módszer is. 1. úniót hozunk létre, és így külön tudjuk írni a bájtokat, és egyben az egész int-et is.
2. castolással
Idézet: „Tudtok megoldást?” Ha más nem, akkor ez működik:
Amúgy az minden fordítóban úgy van, hogyha két 16 bites számot szorzol össze, akkor az eredményt is 16 biten szolgáltatja. Egyiket castolnod kell 32 bitesre, hogy 32 biten adjon eredményt. Én sem értem, hogy miért kell ilyennek lennie, de nem csak a C18-ban van így.
Pont az uniós megoldás helyett kerestem valamit. A castos megoldásod teljesen jó lesz, köszönöm.
Jaaa, hogy szorzas? Hat nem mindegy az neked?
Valoban 16x16 szorzast csinal, ehhez meg az inicializalason tul magat a szorzas fuggvenyt is meghivja. Pl igy irhatsz a felso byte-ba: *((unsigned char *)&ci+1) = 8; Csinalhatsz hozza termeszetesen egy makrot is: #define high(a) (*((unsigned char *)&a+1)) es utana egyszeruen csak: high(ai) = 8; De ahogy nezem ez az mc18 mindent movff-el akar elerni, nem tudom miert igy csinaltak meg de emiatt az egesz kod hosszadalmas kisse... Lehet ha teljes verziom lenne akkor az optimalizalas csinalna valami varazslatot ezzel kapcsolatban?
Nincs ma jó napom. Ezzel mi baja lehet?
#pragma udata access my_access near unsigned char Valtozo; Reakció: Error [1013] error in pragma directive. Próbáltam cim megadással is: #pragma udata access my_access = 0x00 Ugyanaz. Megintcsak a Guidebol szedtem. Kezdek kételkedni benne.
Üdv!
Ez egy egyszerű kis masina, gombnyomásra be és ki lehetett kapcsolni, a dobozba 2 relé és 2 tranzisztor van még, mindegyik egy egy kimenetet. A program ezen része nem probléma, csak a távirányítóval van gond. A modul jó, azt, hogy mi jön ki belőle még nem tudtam megnézni (led világít és jobban megnézve sűrűn villog). A fő probléma ennek a jelnek az értelmezése a pic el. Művelődtem egy kicsit és olvastam olyat, hogy a belső órajellel kell összehasonlíttatni de azt nem részletezték :S
Érdemes lenne a vevőről lejövő jelre írni egy kis szkóp-progit. Tulajdonképpen azt kellene csinálni, hogy a jelváltások közti időket megmérni, és ezeket az időket pl. soros vonalon keresztül beküldeni egy PC-re.
A PC-n egy terminálprogiból lelogolod a vett adatokat, majd utána vagy írsz hozzá egy megjelenítőt, vagy az értékeket nézegetve rájössz valami szabályszerűségre. Én infra távirányítók jeleit boncoltam így, aztán ha már a szabályszerűségre rájössz, könnyű írni dekóder rutint az impulzusszélességekre.
Movff? Nézd meg akkor hogyan ad át paramétert
Az lehet a mottója: 18Fben végre 3 FSR van, gyorsan használjunk el kettőt hogy a user ismét PIC16F-en érezhesse magát, jó kényelmetlenül...
Linker scripted hogy nez ki?
Ami a valtozo atadasokat illeti: C-t mem mikrokontrollerekre talaltak ki, de sajnos manapsag mindenhol es mindenhova C-t es azok leszarmazottait eroltetik. Biztosan vannak egeszen turheto implementaciok is, de ezek koze az MC18 nem tartozik
Ahogy volt, Accessram 0tól 5Fig. Ezt a részét nem piszkáltam. (Illetve azóta már becsaptam de engem a szabályos eljárás érdekel. Ami le van irva egy gyári ismertetőben az működjön !!! )
Én anno egy másik kontrollercsaládon dolgoztam olyan C forditóval, ahol nem sz*roztak. Pl semmi unió, semmi struktúra a biteknek. Bevezették nyelvi szintena 'BIT' tipust és kész. Paraméterátadás se mindig a stack-el ment pedig volt push és pop utasitása a processzornak. Sztem igazuk van. Mit kell ragaszkodni annyira az ANSI C-hez, mikor ahogy mondtad, nem kontrollerekre készült.
Közben rájöttem, a szorzásos kérdésnél a forditási kapcsoló nem -Oi ahogy irták hanem -Oi+ de mindegy mert igy is 16x16ost szoroz. Marad a jól bevált _asm ..._endasm...
Sziasztok!
Szeretném megoldani, hogy a készülékemben, hogy ha elmegy az áram, akkor egy 9v-s elemről menjen tovább... Tudnátok benne segíteni? Mondjuk az LCD-t le szeretném ilyenkor kapcsolni, de a pic és a ledek működnének tovább... Köszi
Az a baj a 9V-os elemmel, hogy azután kell egy 5V-os szabályzó, ami valószínűleg 78L05 lesz. A 78L05 pedig terhelés nélkül is felvehet 6-7mA áramot, a pic meg önmagában lehet, hogy 1mA-el is elvan. Épp a minap kérdeztem, hogy van-e a 78L05-től alacsonyabb üresjárási áramú szabályzó, és létezik, érdemes szétnézni valami modernebb után.
Amúgy sorbakötsz 1-1 diódát az elemmel és az áramforrásoddal is, és azután teszed a 78L05-öt, ügyelve arra, hogy az áramforrásod feszültsége valamivel az elem feszültsége felett legyen. Lehetséges két 78L05-öt is beépíteni, és utána diódázni, de akkor az elem felőli szabályzó folyamatosan fogyaszt. Az LCD nagyon keveset fogyaszt, ha a háttérvilágítása ki van kapcsolva, szerintem az LCD-n nem érdemes spórolni.
Töröltem az endeket, jobb, mert nagyobb a hex fájl mérete, de nem működik
Törölted, de most meg a legvégén sincs, a "goto HUROK" sor után azzal kell lezárnod az egészet...
Hali!
Valahogy így gondoltad? A 9v nem veszik össze a 12-vel?
Hát, akkor nem egyet nézünk... A CBLOCK-nak megvan az ENDC, azt látom, de a kód legvégén nem látom a csatolt file-ban. Sőt, változtatás nélkül elmentettem, megnyitottam MPLAB-bal, fordításkor pedig azonnal kaptam is miatta egy hibát. A csatolt file-ban a 70. sor a HUROK-ra való visszaugrás, azután semmi sincs, akárhány tabot keresnék...
END nincs, nem a goto!
Egyébként meg szerintem túl keveset vársz, így nem villog a LED, pontosabban villog az, csak olyan gyorsan, hogy fél fénynek látszik.
Elolvasod te, hogy mit írok? A képen nyíllal is jelölt sor után kell még egy END, mert attól, hogy te visszaugrasztod a végrehajtást valahová, a fordító még nem tudja, hogy ott a feldolgozandó kód vége!
Egyáltalán hogy fordítottad le enélkül?
Leszimuláltam 8MHz-el a programodat(nem írtad milyen a frekid, pótold kérlek!) és a LED-ed mindössze 770uSec időtartamig világít, majd 5mSec időtartamig sötét marad. Ezt az életben nem látod villogásnak, ha csak nem vagy földönkívüli!
A másik hiba a programban a következő:
Pont azt a bitet állítod bemenetnek, amin a LED van, a többit meg kimenetnek.
Hát nem tudom, ez a program igazából egy régi RT újságból van. Abba is benne voltak a BEGIN, END.
Nem lehet, hogy ez egy "másik" assembly nyelven van? Nem tudom már, nekem ezt is lefordítota az MPLAB, bár abba most nem bízok...
Közben látom, hogy 31KHz a freki(kiütötte a szemem!) Így már jó lesz(200mSec ég, 1,3sec alszik).
Érdemes körülnézni a Microchip háza táján, van nekik MCP1702 jelzéssel low-drop stabilizátoruk mindenféle feszültségre, 5V-ra és 3.3V-ra általában kapható is raktárról a Chipcadnél. Saját üresjárási fogyasztása 2uA körüli, ha jól emlékszem, a bemeneti maximum feszültsége 13V körüli. Kifejezetten 9V-os elemről való tápellátásra is javasolják.
sziasztok!
olvastam a nulláról a robotokigos cikket és szeretném megépíteni a nyomtatóportos égetőt, ehez kérnék segítséget , egy működő kapcsolást
oshon PIC programmer
Aztán nézz fel az oldalamra is.
MPLAB az csak egy fejlesztoi felulet. Milyen forditot hasznalsz, az MPASM-et? ("Project" menu, "Select language toolset").
Feltetelezem MPASM, szoval: Ha nincs a vegen "END" akkor valami ilyesmi hibauzenetet kell kapj: Error[129] C:\PICDEV\TEST\VILLOGO_683\VILLOGO-2.ASM 72 : Expected (END) Ha pedig az eredeti felallas van, akkor: (valoban lefordul, nade kapsz egy ilyen figyelmeztetest) Warning[205] C:\PICDEV\TEST\VILLOGO_683\VILLOGO-2.ASM 35 : Found directive in column 1. (END) Ez csak annyit arul el, hogy az END direktiva a sor legeslegelejen kezdodik ami nem szerencses, viszont tovabb vizsgalva a dolgot belenezunk a "View" menuben a "Disassembly listing"-be, es meglepo (vagy megsem annyira meglepo...) modon az elso END -nel meg is szakad a program, nincs tobbe leforditott utasitas... Kerlek higyj mar az oregeknek, ha azt munkjuk az a BEGIN..END egy oltari nagy baromsag akkor az az. Es ha azt mondjuk kell a lezaro END, akkor kell. Amugy Topi cikket atolvastad? Az ottani peldak nem voltak megfeleloek? |
Bejelentkezés
Hirdetés |