Fórum témák
» Több friss téma |
Azt ugye tudod, hogy ha nem static-nak definiálod a last_ ... akármi változódat, akkor az két függvényhívás között elvész ? Nem tudom milyen piccel dolgozol, de az ADCON1 be miért kell a portc től függő értéket tölteni ?
Aztán lehet még gubanc ott is, hogy az adresh -t szorozd. Inkább kéne definiálni egy int tipusu valtozót, abba beletenni az adresh-t, majd azt szorozni 50 -el. Ugyanos abban legalább elfér a 255x50 is. Másrészt ha jó felbontást akarsz, akkor nem 8 bitden a/d -zel.
Ezt a forrást a HiTech a2demo-jából szedtem ki. Azt próbálom a saját programomba átalakítani kevesebb sikerrel. Nem régen kezdtem el PIC-ezni de ez számomra most igen összekavart bennem 1-2 dolgot. Kivettem a PORTC-s dolgot a forrásból (Azért volt benne mert azon volt egy nyomógomb az eredeti kapcsolásban, de ugye itt nincs figyelmetlen voltam).
De még sajnos így sem működik . Nem tudsz esetleg egy egyszerű példát rá mondani? HiTech fordítóhoz nemigazán találtam használható AD átalakításról példát pedig egész éjszaka keresgéltem..
Milyen PIC re készül a progid ?
Ja, és még azt sem értem mi ez a kavarás a decivolttal ? Ha tizedes törtet akarsz miért nem használod a float típusú változót ? Ha nem akarsz megszakítást, akkor ne kapcsold be, és akkor nem kell nulláznod az ADIF flaget sem. Csatorna kiválasztás is mit keres ott ? CHANNEL az egy globális változó ? Vagy ha nem változik, minek mindig beállítani ? Vicces az egyenkénti CHS bit beállítás is. Jó nagy katyvasz ez az egész. Szerintem töröld, és írd ujra. Válaszd külön a funkciókat. Irj egy függvényt az ADC beállítására, egy másikat az digitalizálásra, és a főprogramba meg mehet ezeknek a hivogatása + lcd re eredmény kiírás. pl:
Bemásoltam így 1 az 1-ben a forrásomba. Most a fordító az ANSEL és az ANSELH-t nem ismeri.
Nem válaszoltál arra a kérdésre, hogy milyen PIC-en próbálod. Ez nem mindegy, mert kis mértékben eltérnek a regiszternevek és az A/D-k használata is. Mindenképpen meg kell nézned a konkrét PIC adatlapját, hogy annál hogyan kell ezt csinálni.
A kódodban én sem látom az A/D modul előkészítését. Ebben ki kell választani, hogy mely lábak lesznek analóg bemenetek, az A/D konverzió milyen órajelről, milyen referenciákkal történjen, és persze azt is, hogy melyik csatornát lássa. Ezekből egyedül a csatornakiválasztást látom a kódodban, bár az sem biztos, hogy pont így jó, mert nem ismert a PIC típusa.
A PIC tipusa PIC18F4550-es. Hi-Tech Compilert használok a fordításra és MPLab-ban írom a kódot. LCD kezeléssel még boldogultam és az sikerült is néhány problémát leszámítva. Ha nem gond ezen felül még kérdeznék mert sok dolog van ami még nem tiszta.
Megszakítást csak Timer-el és a RB0,RB1,RB2-es lábakra kötött eszközökkel lehet kiváltani? Vagy bármely bemenethez lehet rendelni jelszintváltozásra esemény kezelő megszakítást? A mérésre használt Tranzisztor a LM35DZ és jelenleg az RA0/AN0-ra van kötve, de később szeretnék még 2 szenzort betenni de egyenlőre ezzel is meggyűlik a bajom. LCD-re szeretném kiiratni a hőfokot és persze majd utána a hőfok adatokkal szeretnék szabályozást is Relé-vel. Szerintem ez lesz az egyszerűbb dolog. Egyenlőre csak a szívás. A Hi-Tech C compilert nem lehet valahogy a VisualStudio 2008-al összekapcsolni hogy abban tudjak fejleszteni? Már annyira megszoktam azt a felületet. Az MPLab-ban mindig kutakodok dolgok után . Kérlek nézzétek el hogy egyenlőre hülye vagyok a dologhoz. Próbálom felfogni de sajnos kb 3 könyvet rágtam át és még érthetetlen néhány rész a PIC-ek körében.
Ne könyvet rágj, hanem adatlapot, az finomabb.
Igaz ott általában asm példák vannak, de azt átültetni C be, nem nagy cucc. Visual studioban miket alkottál már ? Mert én úgy látom magával a C nyelvvel se vagy még nagy barátságban. Nem akarlak megbántani ezzel, de fura.
Sajnos az a gond hogy ASM-ből 0-a vagyok . Minden más programozási nyelvben képben vagyok de az valahogy nekem nagyon távoli.
Le szokták írni a folyamatokat pontokba szedve is. Most ha erre azt mondod, hogy de az angol nemmegy, hát... akkor nehéz dolgod lesz. ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf 257 es oldal az adatlapban.
Megszakítás jöhet még perifériáktól is , pl uart, adc, stb. Idézet: Külső megszakítás fogadása csak ott, igen.„Megszakítást csak Timer-el és a RB0,RB1,RB2-es lábakra kötött eszközökkel lehet kiváltani?” Ezenkívül RB4, RB5, RB6, RB7-en a bemenet megváltozása okozhat megszakítást (az nem ugyanaz, mint az INTx jelek fogadása). Idézet: Ennek mi értelme van, amikor az összes mintaprogram, támogatói könyvtár, USB keretrendszer meg C18-ban van hozzá? Direkt ki akarsz tolni magaddal? „A PIC tipusa PIC18F4550-es. Hi-Tech Compilert használok”
Mondjuk ha nem szeretnék USB -t, akkor a Hi-Tech nekem is szimpatikusabb. Mondjuk én egyelőre hanyagolom méég a 18F eket.
Idézet: Ezért kell tisztázni a kérdésfelvetésnél, hogy milyen mikrovezérlőről van szó. PIC18F4550 esetény tényleg nincs ANSEL, csak ADCON0, ASCON1, ADCON2. „Most a fordító az ANSEL és az ANSELH-t nem ismeri.”
Nem tudom, milyen könyveket olvastál, a PIC18F4550 adatlapja köztük volt? Ebben majdnem minden kérdésedre meg kellene találnod a választ.
1. A/D: a 267. oldalon kezdődő fejezet leírja az A/D modul részletes működését. Rögtön azzal kezdi, hogy 5 regiszter tartozik hozzá: ADRESH, ADRESL, valamint ADCON0, 1 és 2. Rögtön az ADCON0-nál láthatod, hogy ott választod ki a mérni kívánt csatornát, valamint az egész A/D modul engedélyezését is. Egy oldallal lejjebb, az ADCON1 regiszter tárgyalásánál van egy táblázat, hogy hogyan kell kiválasztani az analóg bemenetnek szánt lábakat. Ergo nincs ANSEL és ANSELH regiszter. Továbblépve, az ADCON2-nél láthatod, hogy a méréshez használt időzítéseket lehet vele beállítani. Összegezve: ezt a három regisztert kell végigzongoráznod és beállítanod a használni kívánt mód szerint bennük a biteket. A legtöbbet csak az elején, egyszer kell beállítani, utána a sorozatos mérésekkor már csak a mérést kell indítani és megvárni, hogy elkészüljön, esetleg a mérés előtt csatornát váltani, ha több csatornán is akarsz mérni. 2. Megszakítások: nézd meg az adatlap 101. oldalán kezdődő fejezetet, tanulmányozd át a regiszterleírásokat! Rengeteg féle megszakításforrás van ebben a PIC-ben, ezekben a regiszterekben vannak az aktuális interruptot kiváltó állapotot jelző és az interruptot engedélyező bitek. Olvasd el ezeket, hogy átlásd, mik tudnak megszakítást kiváltani ebben a PIC-ben! Figyelmedbe ajánlom az RBIF bitet, ha már külső láb állapotváltozására szeretnél megszakítást. 3. Nem hiszem, hogy a Microchip fordítóját be bírnád gyógyítani a VS2008 alá, de ha sikerül is a programot lefordítani, a többi funkció hiányozni fog. Próbáld meg megszokni az MPLAB-ot, hasznos keretprogram nagyon a PIC-es fejlesztésekhez. Végül annyit jegyeznék meg, hogy ne keseredj el, ne bosszankodj, mert nem konkrét példákat kapsz. Ha nekiállsz és átrágod magad egy-két dolgon, aminek eredményeképp születik valami, amit már meg tudsz mutatni, bizonyosan kapsz a továbblépéshez segítséget, illetve a felmerült problémákhoz megoldást. De sajnos (vagy éppen szerencsére, mert egy nagyon jó érzés tud az emberben kialakulni a folyamat végén) a tudást magadnak kell megszerezned, ha ilyesmivel akarsz foglalkozni. Amin így végigszenveded magad, arra emlékezni is fogsz a későbbiekben is, használható tudásod lesz.
Akkor ajánlod hogy csak a Microchip fordítót használjam? Őszintén megvallva anno az LCD miatt keveredtem bele a Hi-Tech Compilerbe mert abban volt példaprogramom ami eddig működött. De elgondolkodtam rajta hogy érdemes lenne-e visszatérni a C18-ra mert a Hi-Tech-nek nincs akkora support háttere a neten .
Idézet: Lehet, hogy én is Hitech C-ből írtam át a mellékelt programot (a PICCOLO projekt szoftver segédlete kell hozzá), de azonkívül, hogy a késleltető eljárást másképp hívják, nem sok különbség lehet a kettő között. Ennek a könyvnek a mintapéldái (Book C-code examples) pedig állítólag Hi Tech C és Microchip C18 fordítóval egyaránt lefordíthatók. „Őszintén megvallva anno az LCD miatt keveredtem bele a Hi-Tech Compilerbe mert abban volt példaprogramom ami eddig működött.”
Nem, én nem a Hi-Tech C-ről beszéltem, hanem az VS2008 vs MPLAB keret használatáról. Mivel az MPLAB egy keret, és megvan a módszer arra, hogy különböző fordítókat tudjon használni, alatta is használhatod a Hi-Tech fordítóit (én is szoktam). De a VS egy PC-s fejlesztőkörnyezet, nem mikrovezérlőkre van kitalálva, nem is vagyok benne biztos, hogy más fordítót alá lehetne konfigurálni. Ilyen munkákra az MPLAB elég jó környezet, aztán hogy milyen fordító van mögötte, az már ízlés dolga.
Mellesleg a Hi-Tech egy ideje már úgymond Microchip, szerintem a fizetős verziókhoz tisztességes support is van.
Hali, nem rég megépítettem ezt: http://www.instructables.com/id/Magic-POV-Wand-yet-another-POV-toy/ és egyszerűen nem tudom a .c file -t átalakítani .hex file- á, vki tudna segíteni?? (hozzácsatoltam a file -t)
Utánanéztél, hogy ez melyik C fordítóhoz készült?
A #pragma data _config sorból ítélve valószínűleg a SouceBoost C fordító tudja megemészteni a programodat. A projekt leírásában szerintem kellene lenni valami halvány utalásnak erre vonatkozóan.
A leírásban nincs erre utaló írás, a sourceboost -tal meg próbálkoztam de nem sikerült , te nem tudnád átkonvertálni, és elküldeni nekem???(Email)
Próbáltam visszatérni a PICCOLO projekthez és abba beletenni az LCD kezelést de a következő hibát adja a fordítóm ami lövésem sincs mi lehet..
Error - Configuration settings have been specified for address 0x00300000 in more than one object module. Found in 'Objects\4550\lcd4bit.o', previously found in 'Objects\4550\cdc-demo.o' Errors : 1
A hibajelzésből ítélve te két programot (cdc-demo és lcd4bits) programot összekutyultál, s mindkettő becsatolja a piccolo_all állományt, így két konfigurációs beállítás, két reset és kétszer két interrupt vektorod lesz.
Újabb hülye kérdés .
CDC PICOLLO projectben a Potméter helyére bekötöttem az LM35DZ-t. Működik is a mérése csak valahogy köze nincs a valós adathoz :S. 005F 0038 Ilyen adatokat ad vissza. Ha ezt átváltom 10-es számrendszerre akkor sem kapom meg a mV értéket. Idézet: Nem csodálom, mert amit az ADC-ből kiolvasol, az tulajdonképpen egy viszonyszám. A 0000 felel meg 0 V-nak, 3FF pedig 5V-nak (ha annyi a VDD). A kiolvasott adat tehát„Ha ezt átváltom 10-es számrendszerre akkor sem kapom meg a mV értéket.” Umért = VDD * adat/1024 voltnak felel meg. Így stimmelnek az értékek?
próbálkoztam a sourceboost -al de mindig ezt írta ki:
Idézet: „Building... BoostC Optimizing C Compiler Version 6.35 (for PIC16 architecture) http://www.sourceboost.com Copyright(C) 2004-2006 Pavel Baranov Copyright(C) 2004-2006 David Hobday Single user Lite License (Unregistered) for 0 node(s) Limitations: PIC12,PIC16 max code size:2048 words, max RAM banks:2, Non commercial use only Magic POV.c success BoostLink Optimizing Linker Version 6.35 http://www.sourceboost.com Copyright(C) 2004-2006 Pavel Baranov Copyright(C) 2004-2006 David Hobday Failure Error: Unresolved external function:'eeprom_read(unsigned char)' Error: Unresolved external symbol, function:eeprom_read Error: Unresolved external function:'eeprom_write(unsigned char,unsigned char)' Error: Unresolved external symbol, function:eeprom_write Error: Unresolved external function:'eeprom_read(unsigned char)' Error: Unresolved external symbol, function:eeprom_read Error: Unresolved external function:'eeprom_read(unsigned char)' Error: Unresolved external symbol, function:eeprom_read Exit code was -2. Removing target: Magic POV.hex Failed to locate output file 'Magic POV.hex' Done Failed”
Ha jól értelmezem a válaszod akkor nem lehet fixálni a méréseket? Ezt úgy értem hogy elméletileg minden VDD-n más és más értékeket fog adni a mérés? Mert így nem lehet beállítani rendesen.
Átváltottam de még így se nagyon stimmel.. 260 mV - HEX: 038 DEC: 56 Átszámolva: 273,43 mV Sajnos még így sem jó :S. |
Bejelentkezés
Hirdetés |