Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Természetesen van más tokozásban is, ezekkel csak arra utaltam, hogy profi felhasználókra (is) gondoltak. 9x9mm/128pin azért nem semmi
Sziasztok!
Segítségeteket szeretném kérni a problémám megoldásához. A piccolo alapján, PIC14K50-nel csináltam egy relépanelt áram és fesz méréssel. A pic minden lábhoz van funkció rendelve. B6 B7 C4 C5 digit kimenetek a relék ki be kapcsolásához. A többi AN4-AN11 analóg bemenet az áram és fesz méréshez. A ref fesz. 1,024V így az átszámítással nem kell foglalkozni (1024/1023). A relék 14V-ot kapcsolgatnak ezért 1:15 feszosztót tettem a bemenetre. 4-es eltolással szeretném megkapni a mért feszt. A digitális kimenetekkel nincs gondom a reléket tudom kapcsolgatni de az analóg nem úgy működik ahogy én szeretném. Valamiért ha kikapcsolok egy relét akkor 0 értéket kapok, ez jó is, de eközben megváltozik egy másik csatornán mért érték amit a pc fele küld, amin nem is változtattam. Amit még tapasztaltam, az a kisebb értékek 0-nak jelennek meg. Ha a küldés előtt megnövelem a konverzió eredményét, szorzással vagy eltolással, akkor valamit átküld. Csatoltan a main. A decimális átváltás nem egészen világos. Esetleg ha ezt valaki elmagyarázná nagyon megköszönném. Ebben a függvényben van definiálva. A tömb és a modulo művelet amit szeretnék érteni, hogy hogyan hajtódik végre. void outdec(long data, unsigned int ndigits) { static char sign, s[12]; unsigned int i; i=0; sign='+'; if(data<0) { sign='-'; data = -data;} do { s[i]=data%10 + '0'; data=data/10; i++; if(i==ndigits) {s[i]='.'; i++;} } while(data>0); _user_putc(sign); do{ _user_putc(s[--i]); } while(i); } Idézet: Az outdec() függvény feltételezi, hogy valamilyen kisebb egységben tárolod az eredményt. Például feszültségmérésnél mV-okban, hőmérésnél tizedfokokban. Ez teszi lehetővé, hogy egész típusú változóban (előjeles, 32 bites!) tárolhassunk minden értékes jegyet.„A decimális átváltás nem egészen világos.” A kiíratásnál pedig megmondjuk, hogy hány tizedesjegyet "vágjunk le", hogy a nagyobb eygséget kapjunk. Pl. mV -> V esetén 3-at, tizedfok -> fok esetén 1-et. Ha nem sürget az idő, én felszorzás helyett megfelelő számú mérés összeadását javaslom. Így végeredményben sok mérés átlagát küldöd ki, ami stabilabb eredményt ad.
Én már alig várom. A baj az, hogy ha normál feladat van, arra jó a 18F, a következő lépcső a TFT RGB grafika 800x480, vagy a High Speed USB, vagy a normális Ethernet, amire nincs jó megoldás PIC vonalon, az MZ lenne az...
HighSpeed USB pl. De egy TFT-t se lehet vele kényelmesen meghajtani, ami 800x480-as... A 330MIPS talán jobban elég.
Arról nem is beszélve, hogy a flash cell endurance 10k és nem 1000!
Így van. Én is benevezek egyre az új RGB V3 propeller clock fejlesztésnél.
Egyébként elég jól megszivattak mert a régi MX340F512H-val véletlenül egyik fajta sem lábkompatibilis,cserébe kaptam remap-ot (kár hogy a táplábakat nem lehet) Köszönöm Microchip én is szeretlek.......... A hozzászólás módosítva: Feb 22, 2014
Írtam (írok) egy programot. Ha debuggolom a PICkit3-mal akkor működik az áramkör gyönyörűen. Viszont ha átváltok az MPLAB-ban programozási módba majd beleégetem a szoftvert akkor nem csinál semmit sem a PIC. Még egy egyszerű LED-et sem tudok így bekapcsolni míg ugyan ez debuggerben viszont megy. Mi lehet a gond? (MPLAB IDE 8.89, PICkit3, PIC18F4685)
MCLR hogyan van bekötve? (De megint valami olyasmi lesz, amire mi az életbe nem jövünk rá ennyi infóból...)
Így van bekötve:
A hozzászólás módosítva: Feb 23, 2014
A projektet újrafordítottad Release módban?
A rajz szerint az MCRL láb (RE3) nincs felhúzva!
Igen, de semelyik eddigi mikrovezérlős áramkörömnél sem volt és azok mégis mentek.
Most nézem, ez esetleg gond lehet? "config MCLRE = ON"
Igen, gond .
Ha OFF-ra teszed akkor meg ha visszamész Debug módba panaszkodni fog és felajánlja, hogy kikapcsolja. A hozzászólás módosítva: Feb 23, 2014
Idézet: „Igen, de semelyik eddigi mikrovezérlős áramkörömnél sem volt ...” Mibe telik berakni egy 10 kOhmos ellenállást az MCLR és a VDD közé?
Rengeteg helyet foglal! (Ne nevess! ) De tényleg, sokszor annyira kevés hely van a nyákon hogy az ilyenekkel is spórolni kell. Na meg a végleges áramkörben úgy sem kell mert letiltom az MCLR-t és kész.
Idézet: „Na meg a végleges áramkörben úgy sem kell mert letiltom az MCLR-t és kész.” És azt megnézted már, hogy az mclr lábon van-e belül felhúzó, vagy majd néhány hét múlva jön a következő kérdés, hogy miért resetel az áramkör véletlenszerűen, amikor elmész az asztal mellett?
Konkrétan a most használt mikrovezérlőben (PIC18F4685) nincs belső felhúzó ellenállás az MCLR lábon. A nálam általánosságban használt PIC18F25K80-ban viszont van.
Nem olvastam a korábiakat az oldalváltás miatt, akkor még sem volt letiltva programból...
De mindenféleképpen kell oda a 10k, ez alapvető dolog, ha csak nincs belső... A hozzászólás módosítva: Feb 23, 2014
Azt hol látod, hogy a 18F25K80-ban van belső felhúzó az MCLR lábon?
Azt bekapcsolhatod, de ahhoz először el kell indulnia a kódnak! Ha valami szivárgóáram elhúzza felfelé a lábat kívülről, és programozás módban tartja a kontrollert, akkor el sem indul a kód benne, így be sem tudja kapcsolni a felhúzást a lábon, hogy aztán már stabilan tartsa a potenciálját.
Köszönöm a gyors választ!
Megpróbálom összehozni a pillanatnyi és az átlag kijelzést is. Még érdekelne a decimális átváltás és mitől függ, hogy hány elemű a tömb. (Gory CDC cikkében is van hasonló átalakítás (binár-decimál) de ott sem találtam konkrét leírást az átalakítás folyamatáról. for(i=4;i>0;i--) { tempString[i] = (((char)(temp._word % 10)) & 0x0F) | 0x30; temp._word /= 10; }//end for) Átírtam egyszer az outdec-et unsigned int-re mert 0-16 voltnál nem kell többet kiírni, ez pedig millivoltba és binárisan sem nagyobb mint 11 bit. Próbáltam visszaírni, de azóta a fordító nem engedi vissza long-ra. void outdec(unsigned int data, unsigned int ndigits) -> void outdec(long data, unsigned int ndigits) Error [1109] type mismatch in redeclaration of 'outdec' Nekem kell egyáltalán long? Volt márt majdnem pontos is a mérés de addig javítottam míg jelen pillanatban csak a reléket tudom kapcsolni, a küldött értékek helyett csak +0 jelenik meg. Idézet: Ha egynél több helyen deklaráltad, akkor csak szinkronban változtathatsz rajta, erre figyelmeztet a fordító. „Error [1109] type mismatch in redeclaration of 'outdec'”
Sziasztok
Erre :
Miért kapom ezt: Idézet: „main.c:106:21: warning: integer overflow in expression” Egyébként kiszámolja az értéket és hibátlanul beírja a FLASH-be de nem értem miért reklamál.
Ez inkább a C topikba illene.
Mindegyik mátrix elembe tegyél legalább egy tényezőhöz Unsigned jelzőt. pl: ((40U*256)+96). A hozzászólás módosítva: Feb 25, 2014
|
Bejelentkezés
Hirdetés |