Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   17 / 153
(#) lidi válasza atideath hozzászólására (») Jún 17, 2010 /
 
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.
(#) atideath válasza lidi hozzászólására (») Jún 17, 2010 /
 
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..
(#) lidi válasza atideath hozzászólására (») Jún 17, 2010 /
 
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:

  1. void init_adc()
  2. {
  3.         //ADCON0 ADCS1  ADCS0   CHS3    CHS2    CHS1    CHS0    GO/DONE ADON
  4.         ADCON0  =0b10000001;
  5.        
  6.         //ADCON1 ADFM   —             VCFG1   VCFG0   -               -               -               -
  7.        
  8.         //                      76543210
  9.         ADCON1  = 0b10110000;
  10.  
  11.  
  12.         ANSEL   = 0b11111111;
  13.        
  14.         //                        1111
  15.         //                        321098       
  16.         ANSELH  = 0b00010001;
  17.        
  18.        
  19. }
  20.  
  21.  
  22. unsigned int adc_read_10(unsigned char channel)
  23. {
  24.  
  25.                
  26.                
  27.         ADCON0 = ADCON0 &~ (4+8+16+32); // null chanel select bits
  28.        
  29.         channel&=15;    // truncate channel to 4 bits
  30.                
  31.         ADCON0|=(channel<<2);   // apply the new channel select
  32.        
  33.         DelayUs(50);
  34.        
  35.                
  36.  
  37.                 GODONE=1;       // initiate conversion on the selected channel
  38.                 while(GODONE)continue;
  39.                 return (ADRESH*256+ADRESL);
  40.        
  41.          
  42. }
(#) atideath válasza lidi hozzászólására (») Jún 17, 2010 /
 
Bemásoltam így 1 az 1-ben a forrásomba. Most a fordító az ANSEL és az ANSELH-t nem ismeri.
(#) szilva válasza atideath hozzászólására (») Jún 17, 2010 /
 
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.
(#) atideath válasza szilva hozzászólására (») Jún 17, 2010 /
 
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.
(#) lidi válasza atideath hozzászólására (») Jún 17, 2010 /
 
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.
(#) atideath válasza lidi hozzászólására (») Jún 17, 2010 /
 
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.
(#) lidi válasza atideath hozzászólására (») Jún 17, 2010 /
 
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.
(#) icserny válasza atideath hozzászólására (») Jún 17, 2010 / 1
 
Idézet:
„Megszakítást csak Timer-el és a RB0,RB1,RB2-es lábakra kötött eszközökkel lehet kiváltani?”
Külső megszakítás fogadása csak ott, igen.

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).
(#) icserny válasza atideath hozzászólására (») Jún 17, 2010 /
 
Idézet:
„A PIC tipusa PIC18F4550-es. Hi-Tech Compilert használok”
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?
(#) lidi válasza icserny hozzászólására (») Jún 17, 2010 /
 
Mondjuk ha nem szeretnék USB -t, akkor a Hi-Tech nekem is szimpatikusabb. Mondjuk én egyelőre hanyagolom méég a 18F eket.
(#) icserny válasza atideath hozzászólására (») Jún 17, 2010 /
 
Idézet:
„Most a fordító az ANSEL és az ANSELH-t nem ismeri.”
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.
(#) szilva válasza atideath hozzászólására (») Jún 17, 2010 / 1
 
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.
(#) atideath válasza icserny hozzászólására (») Jún 17, 2010 /
 
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 .
(#) icserny válasza atideath hozzászólására (») Jún 17, 2010 /
 
Idézet:
„Őszintén megvallva anno az LCD miatt keveredtem bele a Hi-Tech Compilerbe mert abban volt példaprogramom ami eddig működött.”
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.

lcd4bit.c
    
(#) szilva válasza atideath hozzászólására (») Jún 17, 2010 /
 
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.
(#) laciubul hozzászólása Jún 18, 2010 /
 
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)
(#) icserny válasza laciubul hozzászólására (») Jún 18, 2010 /
 
Utánanéztél, hogy ez melyik C fordítóhoz készült?
(#) laciubul válasza icserny hozzászólására (») Jún 18, 2010 /
 
Nem....
(#) laciubul válasza icserny hozzászólására (») Jún 18, 2010 /
 
elég kezdő vagyok még
(#) icserny válasza laciubul hozzászólására (») Jún 18, 2010 /
 
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.
(#) laciubul válasza icserny hozzászólására (») Jún 18, 2010 /
 
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???()
(#) atideath hozzászólása Jún 18, 2010 /
 
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
(#) icserny válasza atideath hozzászólására (») Jún 18, 2010 /
 
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.
(#) icserny válasza laciubul hozzászólására (») Jún 18, 2010 /
 
Idézet:
„te nem tudnád átkonvertálni, és elküldeni nekem?”
Nem tudnám. Sohasem használtam még a SourceBoost fordítóit. PIC18 illetve PIC24 fejlesztésekre vagyok csak felszerelkezve.
(#) atideath hozzászólása Jún 18, 2010 /
 
Ú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.
(#) icserny válasza atideath hozzászólására (») Jún 18, 2010 /
 
Idézet:
„Ha ezt átváltom 10-es számrendszerre akkor sem kapom meg a mV értéket.”
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

Umért = VDD * adat/1024 voltnak felel meg. Így stimmelnek az értékek?
(#) laciubul válasza icserny hozzászólására (») Jún 18, 2010 /
 
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”
(#) atideath válasza icserny hozzászólására (») Jún 18, 2010 /
 
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.
Következő: »»   17 / 153
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem