Fórum témák
» Több friss téma |
CCS C 2015 október:
Idézet: „ unsigned - Data is always positive. This is the default data type if not specified.”
Nincs ezzel baj, csak ez nem C fordító, hanem valami más, ami hasonlít a C nyelvre... Elég sok ponton szegi meg a szabványt.
Sziasztok!
Hivatkozni szeretnék PORT lábakra valahogy így PORTxbits.Rxy, de inkább mutatok kódot(ami persze nem jó csak ilyesmi lenne az elképzelésem):
Nem int kell a fv.-hez csak, hogy ne legyen üres. A stackoverflow-on találtam egy hasonlót, de ez nem annyira tetszik:
Létezik lehetőség C/C++-ban ilyen hivatkozást létrehozni és a gyári névvel szeretném használni nem enum-al vagy #define-vel.?
Szia!
Az adott PIC header fájlában minden dekralálva van, légyszives csatoljad. pl .: #include "p18f2520.h"
Igazság szerint nem adott PIC-re készülne, régebben csináltam egy soros lcd vezérlőt és ahhoz szeretném használni, hogy a kezelő pic lcd libary-ben megadott inicializáló függvényben mikor meghívom csak beírom, hogy LATx/PORTxbitsXY és azon küldené az adatokat (soft uart).
Most épp PIC32-hez készülne, de úgy szeretném megcsinálni, hogy ha nem is minden családhoz, de PIC32-hez csak átmásolom a forrásfájlokat és kész.
Ez más célt szolgál és semmi értelme nem lenne, de érthetőbb, hogy hogyan akarom megcsinálni, de az is lehet, hogy ezt már nem lehet. A hozzászólás módosítva: Márc 31, 2016
Nem egyszerűbb egy headerben megadni a funkcióláb(pl. LCD_E) neve mellett, hogy melyik porthoz tartozik, majd csak a h fájlt kicserélni?
De egyszerübb
![]() Maga az alapötlet a számomra kicsit elitélt Arduino-tól származik, de ott csak 3-4 panelra kell működjön.
Nekem is pont erre lenne szükségem. Esetleg szájbarágósabban is megtudnád mondani?
Pl példával?
A hozzászólás módosítva: Ápr 28, 2016
Köszi
Meglehet... Jobb lett volna, ha elactrofan jön rá...
Idézet: Ezt lehet, hogy nem értem. „Jobb lett volna, ha elactrofan jön rá...”
Sziasztok!
Az MPLAB C18-as fordítóját használom,PIC18F4550 procival. Az adatmemória kezelésében akadt egy kis problémám. Egyszerűen nem tudom a fordítót rávenni, hogy ne csak az access területet használja. Sok adatot kell kezelnem és nem férek bele. A segítséget előre is köszönöm!
C18 user's guide: Idézet: „Locating Data Data can be placed in either data or program memory with the MPLAB C18 compiler. Data that is placed in on-chip program memory can be read but not written without additional user-supplied code. Data placed in external program memory can generally be either read or written without additional user-supplied code. For example, the following declares a section for statically allocated uninitialized data (udata) at absolute address 0x120: #pragma udata my_new_data_section=0x120 The rom keyword tells the compiler that a variable should be placed in program memory. The compiler will allocate this variable into the current romdata type section. For example: #pragma romdata const_table const rom char my_const_array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; /* Resume allocation of romdata into the default section */ #pragma romdata The linker will enforce that romdata sections be placed in program memory regions and that udata and idata sections be placed in data memory regions however, a data section can also be located in a specified memory region. The SECTION directive of the linker script is used to assign a section to a specific memory region. The following assigns udata section my_data to memory region gpr1: SECTION NAME=my_data RAM=gpr1” A hozzászólás módosítva: Máj 8, 2016
Köszönöm a segítséget! Sikerült megoldani a problémát.
![]()
Sziasztok!
Egy készülő projekt miatt egy egyszerű kódot írok egy PIC-re. A kiválasztott mikrokontoller 16F887-es. Elég kezdő vagyok, de folyamatosan olvasgatok. Készítés alatt van egy fa, és gáztüzelésű kazán, amire egy napkollektor rásegít. A fizikai kialakítása másodlagos, így csak a PIC-es részről írok. A kiválasztott hőmérsékletszenzor: LM135 Úgy gondoltam a kalibrálást, hogy egy edénybe vizet teszek, alágyújtok, majd egy hitelesített hőmérővel figyelve a hőfokot felírom, hogy például 50C°-on mennyi a feszültség, majd 60-on, ill. 70-en. Ezeket "IF"-be helyezem.
Régebben írták, hogy az 5V-ot érdemes átváltani mV-ba a pontosabb értékek miatt. Ezt valahogy nem értem. Innentől már matek. Vagyis ha előzőleg a lábosba az 50C° mondjuk 3.17V-ot jelent (példa), akkor a 10 bites számunk 649.216 lesz. Már csak az a kérdés, hogy az int képes -e lebegőpontos számokkal dolgozni...? Jó a gondolatmenetem, vagy valamit nagyon elszámoltam? A hozzászólás módosítva: Máj 18, 2016
Jól gondoltam, az int egész számoknak való. Ellenben a float, az már 6 tizedesjegyig.
Azért javasolták a mV átváltást, mert az egy 1000 -el való szorzást testesít meg, és megment a lebegőpontos számításoktól egy egyszerű szorzás. Hozzáteszem erőst laikus vagyok a témában.
Igen az ADC mérésénél az 5v referenciát mV-ba ad meg, a float-nál nagyon kell figyelni a típusokra.
Nincs véletlen annak a hőszenzornak egy táblázata, hogy milyen hőmérsékleteknél milyen adatot kell mérnie? Ez a hőszenzor már megvan vagy még csak most keresed? Hova fogod elhelyezni? Figyelembe kell venni a hőtartományt is amibe mér. Közben gyorsan megnéztem a tartományt: -55°C to +150°C Amúgy a vizes teszt jó, ha nincs kész hőtábla. A legpontosabb amit meg tudsz mérni az a 100fok, mert ahhoz csak forralnod kell ![]() De ha van valami spec hitelesített hőmérőd, akkor azzal 10fokos lépésenként tudsz táblát készíteni közben figyelni, hogy a mért adat mennyire lineáris. Mert ha nem nagyon ugrál a kapott adat, akkor a köztes mondjuk 5fokonkénti adat megkaphatod, ha mindegyik vett adatot felezed. Ezt érdemes egy táblázatba rendezni és onnan kiszedni egy egyszerű >= vagy <= feltétellel.
-273C = 0K -- 0V
+125C = 398K -- 3.890V ---- Maximális működési hőmérséklet az adatlap szerint. Számoljunk 4.000V -tal és az 5.000V referenciával: Ekkor a +125C 4/5*1024 = 819.2 Az A/D -ből kiolvasott érték 819 lesz. Lebegőpontos számokat használva 0,4884004884 -val kellene osztani, hogy 400K -t kapjunk. Ha 32 (vagy 24) bites egész változóban helyezed el a kiolvasott érték 488 szorosát, a Kelvin -ben mért hőmérsékelt ezerszeresét kapod. 819*488 = 399672. Ha kiíratod, elég a tizedesvesssző helyét figyelembe venni. Ha Celsius fokban kellene, akkor 273 -at le kell vonni.
Amúgy még az is eszembe jutott, hogy neked tökéletesen elég lenne egy termosztát is.
ds1621 Ez I2C-vel kommunikál és be tudod állítani hogy mikor kapcsoljon be illetve ki. A hiszterézise pedig mindig a két beállított érték közt lesz, szóval még csak vacakolni sem kell programmal, mert hardveresen elitezi a kapcsolgatást. Nemrég foglalkoztam vele és írtam meg rá a programot, elég jól működik.
2600Ft-ból 5-10db komplett áramkört össze lehet dobni erre a feladatra...
" Ezt érdemes egy táblázatba rendezni és onnan kiszedni egy egyszerű >= vagy <= feltétellel. " - ez elég sok feltételt jelentene, lehetne órákig gépelni.
Lineáris a kapott feszültség, és adatlapban megtalálható a pontos átszámítás is, Hp41C szépen leírta. Kalibrálni sem kell, mert egy megadott tűrésen belül pontos ez a szenzor is. Egyébként meg a felforralt víz sem 100fokC-os, légnyomástól függően változik több fokot fel vagy le a forráspont! Ehhez hozzájön a hőmérőd hibája is. Idézet: „Egyébként meg a felforralt víz sem 100fokC-os, légnyomástól függően változik több fokot fel vagy le a forráspont!” Meg a benne oldott anyagoktól. Még az ioncserélt vízben is van oldott anyag.
Köszönöm mindenki hozzászólását, este nyugalomba kitalálom, hogy végül hogyan oldom meg. Kijelzés nem lesz, felesleges.
A hozzászólás módosítva: Máj 19, 2016
Sziasztok!
Találtam egy hasznos linket kezdőknek MikroC -hez. Ezt most megosztanám,hátha valakinek... Led villogtatástól PWM -en át LCD kezelésig sok minden. Bővebben: Link
Sziasztok!
Találkozott már valaki ilyen problával? A forráskód:
A soros porton az alábbi szöveg olvasható: ez a szam:114, 10496 Használt pic: 18f26k22, XC8 1.37
Csak tipp: lehet, hogy a konstans számokat ROM területre teszi, de a kód meg RAM-ból olvas. Változóba tett számokkal jól működik amúgy?
|
Bejelentkezés
Hirdetés |