Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nem értek egyet én sem(természetesen). De ne vedd a szívedre! Én is 16F-el kezdtem(akkor még nem volt programozó a 18F-ekre), és mekkora felüdülés volt utána a 18F-es sorozat(miután megépítettem és megírtam a WPB_18F-et.)
Az asm pedig alap követelmény, utána jöhet a C, meg a többi "hatékony", néha az idegeknek kártékony csodanyelvek(gondolj arra, ha nem működik, pedig működni kéne, mert mindent a leírások alapján csináltál.) Szóval ne szörnyülködj, hidd el, 18F-el kell kezdeni(asm), majd a 16F-ekkel folytatni(most is 16F627A-t programozok!), és utána jöhet akármi, nem foghat ki rajtad.
Próbálkozom a megszakításokkal. A nyolc darab hétszegmenses kijelzőt kezelő programomat most átírtam úgy hogy megszakításból, a TMR0 túlcsordulásakor vezérelje a digiteket. (Mert eddig a kijelzők fényereje függött a programom hosszúságától...) Amikor túlcsordul, akkor bekapcsolja a következő digitet majd visszalép a megszakításból a főprogramba. Ha megint túlcsordul a TMR0 (eltelik egy kis idő), akkor kijelzi a következő digitet és így tovább.
Sajnos nem működik a dolog. A probléma az, hogy a megszakításból miután kitalálta hogy most épp melyik kijelzőt kell vezérelnie, elküldöm őt a TABLA1 táblába ahonnan az épp aktuális kijelzésképhez szükséges bitsorozattal tér vissza. A gond az, hogy nem oda tér vissza a TABLA1-ből ahonnan meghívtam! Miért? Amíg nem megszakításból kezeltem a kijelzőket, addig tök jól működött. Nem értem... talán megszakításból nem lehet szubrutint hívni? Biztos hogy de.
Ebben nem fogunk megeggyezni akkor, de ez nem baj. Szerintem ha valaki iskolában programozást tanul az sem asm -el kezd. Ezek meg sztereotipiák, hogy nem tudod mit csinál majd a c program, meg hogy 1 printf betölti a memot. Nem kötelező printf-et használni, és ha nem azt csinálja a program amit szeretnél akkor 100% hogy te rontottad el, nem a pic vagy a fordító hibázik. Hanem egyszerűen nem írtad meg jól a programot. És ezt ugyanúgy elkövetheted C ben is meg asm ben is. Egy előnye van ha valaki nagyobb piccel kezd: megspórol 500 Ft-ot, amit nem adott ki a kisebbekre. Persze ez sem feltétlen igaz, mert később majd úgyis talál valamit, amit a kicsikkel érdemes megcsinálni. Uff, beszéltem.
En valahol a ket tabor kozott vagyok Ertem az assembly erveket is, sot, mivel en is igy tanultam meg, no persze meg, hogy amiota az eszemet tudom assemblyzem kulonbozo rendszerekben, jol tudom, hogy miert is jo az assembly.
Nade ez egy hobby site. Nem is biztos, hogy a "Jozsi" vagy a "Julcsa" meg szeretne tanulni, hogy miert ugy mukodik. Nekik csak annyi kell, hogy a kijelzon a szam legyen, a LED villogjon be, a gombra reagaljon a cucc... Na de egy olyan aki ebbol szeretne megelni, es assembly tudas hianyaban nem kepes olvasni az adatlapot, vagy assembky tudas hianyaban nem kepes kod optimalizalasokat elvegezni, az mar igenis baj! 16F, 18F, 24H 32 64 128 ... nem mindegy? Hobby-ra hogy egy IC 500Ft vagy 1500, ugyis 1 vagy max 2 peldany lesz belole. Hasznalhat valaki orok eleteben 18F-eket is, sot, 24H-t is lehet LED dimmelesre hasznalni, miert is ne? En nem tennem, de ez az O penztarcaja es ha O igy akarja? Viszont ugyancsak, ha profi, es en lennek a fonoke, nem engednem, hogy csak ugy bele szorjon draga alkatreszeket, mert nem kepes hatekonyan programozni. Es nekem mindegy hogyan kezdte, 18F-en vagy 24H-n, ha egy LED-et kell csak villogtatni igenis 10F-et hasznaljon...
Szia!
A 18Fxx felépítése más mint a 16Fyy: - Az utasítások szavasak, esetleg két szó hosszúak, de a címzésük byte-os. GOTO két szó - azaz 4 byte, de van relatív ugrás BRA, ami csak egy szó - 2 byte. TALBA2 -nét az ugrások hossza nem egyeznek meg a sorszám kiszámításánál használt mérettel. - A byte-os címszámítás miatt hamar betelik egy 256 byte-os lap, a PCL írása előtt a PCLATH és PCLATU regiszetreket fel kell tölteni - szerencsére a PCL olvasása (nem mindegyik sajnos - addwf PCL,f például nem) feltölti. Használd az MPLab szimulátorát, a lépésenkénti végrehajtásnál az ilyen hibák kijönnek. - A megszakítás kétszintű és nem a 0x04 címen, hanem a 0x008 ill. 0x018 címen kezdődnek. - A megszakítási rutinban nem kell a GIE-t törölni, beállítani. Azonos szintű megszakításat nem fogad el a processzor a megszakítás kiszolgálása alatt. Szia
Új erőteljes számítógépet vettem. De sajnos a WinPIC800 programozó nem működik "Nem sikerült a telepítése -> WP800IO.SYS" üzenetet küld, hol ott telepítve lett. A System32\Drrivers mapába a fenti driver meg is található. A régi PII-300 MHz-es gépemen tökéletesen működik.
Az új gépem: AMD duál core 3,1GHz-e proci, 2GB RAM stb. XP SP3 - Op rendszer. Kérem aki tud segíteni értesítsen. Előre is köszönöm. VGY.
Mondta valaki, hogy az iskolában jó a koncepció?
Itt nem pénz kérdése, mert a 16 és 18F-ek között nincs árbeli eltérés azonos teljesítmény esetén, úgy hogy ezt hagyjuk. Az meg, hogy a C(vagy egyéb nyelv) jól fordít, kijelenthetem, hogy vannak alkalmazások, amikor csak asm betéttel tudtam megoldani, mert pl. az USART könyvtára nem támogatta amit én szerettem volna(9bites adás, 8bites vétel. pl.) Számtalan egyéb példát is fel tudnék, és biztosan mások is feltudnak hozni. Tehát többen vagyunk itt, akik az asm-t és a 18F-et támogatják, fogadd el és ne keverd meg szegény kezdőket! Köszi!
Ja és még egy, az iskolában nem PIC-et(azaz egy elektonikai alkatrészt) tanítanak programozni, ha még is, akkor rosszul teszik, ha nem az asm-al kezdik! Szégyen ha így lenne!
Az érdekes azért, hogy usart-ot csak asm ben tudod programozni, na neee. Szerintem ha nem értesz a C hez, akkor ne akarj másokat is lebeszélni róla. (ez persze igaz rám is asm ügyben) Ugyan úgy tudsz regiszter szinten mindent módosítani mint asm ben. Az usart beállítása meg ugye erről szól. Csak még annyiban egyszerűbb dolgod van hogy nem kell lekódolni hogy először tegye be a W be, majd onnan egy regiszterbe.
Azt meg külön sajnálom hogy beszabadul ide egy kezdő, és asm bitbuherátorok kezébe kerül, más lehetőséget nem is hagytok neki. Pedig jól el lehet boldogulni C ben még 12F -en is. (írtam benne dcc dekódert.... és nem kellett egy sor asm betét sem)
A regiszter állítgatáshoz még: meg persze bankokkal se kell szenvedni semelyik picen.
Szerintem hagyjuk. (megjegyzem, ép most is C-ben programozok... )
Idézet: „Az utasítások szavasak, esetleg két szó hosszúak, de a címzésük byte-os. GOTO két szó - azaz 4 byte” De a TABLA1-nél nem GOTO-k vannak hanem RETLW-k, amik szintén két szavasak. És a TABLA1 működik, a TABLA2 meg nem. Idézet: „a PCL írása előtt a PCLATH és PCLATU regiszetreket fel kell tölteni” De mivel? Innen és innen próbálok okosodni de nem sikerült rájönnöm. Talán ez lenne az? Idézet: „Megszakításelfogadás után a PC értéke a verembe kerül majd utána a 0004h cím töltődik be, vagyis a programfutás innen folytatódik. A megszakításkezelő programrésznek így a 0004h címen kell kezdődnie. A 0004h cím PC-be töltődésekor a PCLATH regiszter nem nullázódik le (és nem is követi a PCH értékét). Ezért a megszakításkezelő programnak a PCLATH regisztert a kívánt értékre kell állítania még mielőtt az felhasználásra kerülne (CALL, GOTO, számított GOTO).” Tehát a programszámláló regiszter legfelső két bájtját kellene átírni a PCLATH-on keresztül? Vagyis a nulladik lapot kellene kiválasztanom, jól gondolom? Idézet: „A megszakítás kétszintű és nem a 0x04 címen, hanem a 0x008 ill. 0x018 címen kezdődnek.” Mindenhol 0x04-es címet írnak! Idézet: „A megszakítási rutinban nem kell a GIE-t törölni, beállítani.” Igen tényleg, ezt olvastam is már valahol... Idézet: „Mindenhol 0x04-es címet írnak!” Ez kizárt dolog! Nézd meg az adatlapot és ne máshol keress ilyen fontos infót(csatoltam a kérdéses részről képet) A többit is nézegetem majd, de most nem nagyon érek rá, csak néha nézek be egy szóra...
Szia!
- Tabla1: retlw két bájtos, a goto 4 bájtos!!! Ezért a tabla1 működik, a tábla2 nem azt csinálja, amit leírtál. - PCLATCH: A legmagasabb és magas bájtjainak feltöltésére több ötlet is van - 16F -en bevett gyakorlat szerint
De a hozzászólásomban ott a 18F-en működő megoldás is... ld. kép... Használd az MpLab szimulátorát! Állj rá a TABLA2 -nél levő
Szia
Szia!
Nem értem... A TABLA2 működik:
Itt oda ugrik ahová szeretném, ezzel nincs is gond. A probléma a TABLA1-el van, mikor a megszakításból hívom a TABLA1-et:
Mert nem a call TABLA1 utáni sorra ugrik vissza a retlw után, hanem teljesen máshova.
Ez igy biztosan nem jo! A TABLA2-nel lenyeges hiba, hogy a GOTO 2 szavas! Azaz 4-el kellene szorozni. A RETLW 1 szavas, ott csak 2-vel kell szorozni. BRA is 1 szavas, azt hasznalhatod a GOTO helyett ha nincs page valtas, vagy a "movf aktualis_digit, W" helyett irj "movf aktualis_digit, F"-et...
Masik hiba, hogy egyaltalan nem torodsz a page-ekkel! Igy nyilvan valo, hogy szerencse kerdese, hogy ez az egesz tabla epp olyan helyen van-e ahol mukodik avagy sem. Masik, hogy mondod interruptan van. En nem lattam meg az interrupt kezelodet, de lehet, hogy nem mented el a kontexust megfelelokeppen es nem inicializalod az ISR-ednek megleloen. Azaz valahol a fo programban masik page van beallitva, az interrupt kivaltodik es akkor az "addwf PCL,F" jo nagy butasagot fog csinalni...
Szia!
Tényleg állítsd be a szimulációt. Nálam már azt csinálja, amit szerettél volna. Debugger / Select tool / MPLAB SIM. Ezután újra le kell fordítani... Megtudtam a következőket: - Az interrupt tényleg a 0x008 címre ugrik. - A TABLA2 tényleg látszólag jól viselkedik, ugrik, de nem jó helyre, nem az aktuális_digit által megadott helyre. A kétszavas utasítások kódolása olyan, hogy a második szóra való ugrás egy nop végrehajtásával egyenértékű (a btfss, btfsc, incfsz, decfsz és a feltételes relatív ugrés utasítások miatt). - A TABLA1 nem jó helyre ugrik az ADDWF PCL,f utasításra, hiszen a PC érték nagyobb, mint 0x00FF. Megjavítottam: - A TABLA2 -ben a goto -kat bra -ekra cseréltem, - A TABLA2 cimke után a PCL-t átmásoltam egy nem használt változóba, - Mivel a digiteket 1-től számolod, a movf aktualis_digit, W helyett decf aktualis_digit, W kell. - A TABLA1 cimke után a PCL-t átmásoltam egy nem használt változóba, - A megszakítást áttetem a 0x018 címre. Mivel nem néztem át teljesen a megszakítás beállítását a 0x008 ra egy ugrást tettem a 0x018-ra. Töréspontokat ezekután a 0x008, 0x018, TABLA1 és TABLA2 utáni sorokra tettem .... és máris működött. Ezeket írtam jó néhány órával ezelőtt is.... - Ha ennyit akarsz számolni, a PLATH, PCLATU és a többi máshol is használt regisztereket is mentenie, visszaállítania kell a megszakítási rutinnak. - Miért nem a kijelzendő mintázatot teszed be egy 8 elemű tömbbe, akkor a megszakítási rutinnak nem kellene ennyit számolnia, hamen indirekt eléréssel közvetlenül a mintát tudná a portra másolni. Szia
Kedves Urak!
Mivel tanácsot kaptam bőven, elkezdtem nézelődni, olvasgatni, és arra gondoltam, kezdésnek kellene ugyebár fejlesztő áramkör. Nos úgy gondolom, hogy magam készíteném, ezzel is gyakorlom legalább az amúgy sem túl gyakori építgetést. Viszont további kérdéseim lennének, éspedig: WPB illetve PICkit2 ... szóval melyik mire használatos, és melyiket építsem? Talán mindkettőt? Itt az oldalon bőven van infó mindegyikről ahogy néztem, tehát csak szorgalom kérdése. Nos?
WPB -t nem ismerem, de ha magad szeretnéd megépíteni a PK2 -det, akkor szükséged lesz valami programozóra. Erre jó pl a Watt féle égető, vagy az Oshon félét. Nem akarom elvenni a kedved az építéstől, de kezdetnek én azt ajánlanám hogy vegyél egy gyári pickit2 -t, mert akkor abban legalább biztos lehetsz hogy a programozó jó. De ha elég magabiztosnak érzed magad vágj bele a klón megépítésébe, tényleg jó kis gyakorló feladat.
Szép estét! Csatoltam egy képet egy GPS modulról. A modul TX-lábát a PIC RX-lábára gondolják ők? Ezt tartom normálisnak de egyelőre nem működik.
...még egy kérdés: Miért van szükség az ellenállásokra?
Kik azok az "ok"? Es amugy milyen gsm modul ez? Adatlapja mit ir? Ja, es milyen jeleket latsz a scope-odon?
Amugy ellenallas: Mive nem tudom milyen a keszulek, egyenlore csak arra tippelnek, hogy a szokasos latch-up elkerulese vegett tettek be az ellenallasokat.
Szia! Adom a GPS modul adatlapjához vezetőLINK-et. Scope helyett LCD-t használok és még LED-sort is, hogy binárisan is lássam az adatot.
A kommunikáció különben működik már, csak valamiért nem a megszokott olvasható karakterek jönnek, hanem az ASCII tábla magas értékű karakterei. Ilyet kellene kapnom, talán még akkor is, ha nem fixált be a GPS jel: $GPRMC,064951.000,A,2307.1256,N,12016.4438,E,0.03,165.48,260406,,,A*55
Szia!
Az eltésés abból eredhet, hogy a modul 7 bites formátumot ad, a vevő meg 8 biteset vár, igy a vevő az első stopbitet adat bitnek (helyiérték szerinti legmagasabbnak, érték szerint 1-nek) tekinti... Szia
Sziasztok.
Az lenne a kérdésem, hogy PicKit2-vel lehet-e soros ISP-n keresztül programozni? Egy PC alaplap firmware hub újraprogramozás lenne, nincs lehetőség a chip kiemelésére, viszont van rajta ISP csatlakozó (Asus P5B Deluxe) Vagy, milyen programozó kábellel tudnám megoldani?
ICSP-nek hivjak (In Circuit Serial Programming), de amugy lehet. Sot! Fokent ilyesmire talaltak ki, nincs a pk2-n (az eredetin) foglalat amibe bele lehetne dugni IC-t...
Na, ez igen, este megküzdök vele akkor Köszi!
Hmm, most, hogy felebredtem, latom, hogy PC alaplap firmware upgrade-jet akarod megcsinalni, nem PIC-et Akkor a valasz, nem! A PICkit2 ahogy a neveben is benne van PIC-ek programozasat tudja (nehany EEPROM-t is, de az nagyon limitalt)...
Na de az adatlapban ez van: 8 data bits, no parity, 1 stop bit Ez a standard nem?
Sajnos neked erre a célra esgy SPI buszon kommunikáló programozó kéne, mondjuk a szlovák ELNEC cég SEEProg klónja
igaz ugyan, hogy az sem tud ICSP-ben programozni, de ha le tudod forrasztani az IC-t, én fel tudom programozni, van készülékem. De ha inkább megépítenéd a SeeProg-ot, akkor írj privátot és elküldöm a doksiját. Különben itt nézz szét: Bővebben: Link Sorry hogy reklámozok, de ez esetben magamat.... |
Bejelentkezés
Hirdetés |