Fórum témák
» Több friss téma |
Akkor erről ennyit
Egyébként van belső precíziós 4MHz oszcillátora ennek a típusnak. Ha átkapcsolod arra, akkor 4MHz-en fog menni. A hozzászólás módosítva: Ápr 27, 2019
Van igen , köszi Beállítottam 8 MHz -re , de így proteusban jelez rossz baudratet, de miért?
A hozzászólás módosítva: Ápr 27, 2019
Proteus-ban is be lehet állítani az órajelet a PIC tulajdonságainál. De amúgy is, ez egy szimulátor, nem kell elhinni neki mindent.
Beállítottam neki a picnél is , illetve a virtual serial ablaknak is. Átraktam 5000 - re és így jó lett. Köszönöm szépen
A programodban ez van:
UART1_Init(9600); // Initialize USART module // (8 bit, 19200 baud rate, no parity bit...) Szóval a fordítód a komment sorát hajtja végre az uart init helyett )) -- Na jó csak viccelek
Sziasztok, nem teljesen PIC, de MpLabX környezet, ezért kérdezném itt.
Kész vagyok egy projektemmel, 1 fájlba dolgoztam és ~800 sor lett, ami sok és kicsit átláthatatlanná teszi a dolgot. Mi a korrekt módja, hogy ezeket szétbontsam. Gondolok arra, hogy csak a kontroller beállításának 80 sorát, ami jelenleg is egy külön metódusban van ki szeretném tenni egy külön fájlba. Ha csak kimásolom egy másik fájlba és includeolom, az ugye nem jó, ha írok hozzá headert, akkor jó lenne elviekben, de mivel használok a beállító metódusban a main fájlban deklarált globális változót, ezért ez sem tetszik neki. Mi lenne ennek a korrekt menete? Köszönöm! A hozzászólás módosítva: Ápr 28, 2019
Én mindenhez külön c forrás+headert használok,van vagy 15/db,a feladattól függően .
pl. proci-beállítások,i2c,spi,uart,eeprom,flash,oled,stb. Mind úgy van megírva,hogy a főprogiban,csak meg kell hívogatni őket. A mainben deklarált változó,az nem globális ,a main előtt deklaráld,akkor az lesz. De ha kell dobok fel példát.
Nem tudom mennyire szabályos. Én azoknak a változóknak, amiket több helyről is el kell érni, csináltam egy header-t és ahol kell, ott berakom include-ba.
El lehet térni a szokásostól ..Bár ,ha csak 1-2 filet-t vinnél át másik projektbe,akkor nem igazán jó. Ezért kell a saját helyén létrehozni,és a header-jében meghívni.és akkor csak a fő headerbe kell meghívni.Én legalábbis így csinálom,és nincs gond.
A maint úgy értem, hogy a main fájlban, nem a main metódusban
Elfogadnám azt a példát. Csatolok egy képet, hogy konkrétan mit hogyan szeretnék elérni. (Mármint példaszinten persze). Tehát a fő fájlomban (main.c) deklarálok egy globális változót, példa kedvéért sysState. Majd a main metódusomban meg szeretném hívni a chipInitialization() metódust. Ezzel eddig nem is lenne gondom, ahogy írtam erre írok egy headert, azt includeolom és akkor megy is a dolog. Ahol a tudományom megáll, az az, hogy a chipInitialization metódusban miképpen férek hozzá a main.c -ben deklarált változóhoz? Köszönöm! A hozzászólás módosítva: Ápr 28, 2019
Hali!
A header fájlban ismét deklarálod a mainban megadott globális változót extern előtaggal(de itt kezdeti értéket nem adhatsz). A header fájl lehet közös, vagyis ha beinklúdolod a main.c-be is akkor ez nem okoz hibát
csatolom,hogy én kb hogyan is csinálom .
Bocsi,ha valamit elnéztem.
Köszönöm mindkettőtöknek, sikerült megcsinálnom. Most amíg el nem alszok elkezdem akkor kipakolni a függvényeket külön fájlokba
Nekem van egy külön GlobalVar.c (itt kezdőértéket kap) és GlobalVar.h (extern előtaggal szerepel) csak a globális változóknak. A GlobalVar.h-t include-olom a .c fájlokba, ahol el szeretném érni.
Közben látom, már megoldottad..
Nem gond, ugyanis a globális változókat nem akartam kirakni, de ötletet adtál és ezt is megtettem!
Köszönöm!
Igen,ez is megoldás,de eléggé macera utána átvinni más munkákba 1-2 dolgot.
Jobban tetszik,a mindegyiknek saját globálisa van,mert csak beviszem a headerjét,és már használhatom máshol is. De ki-ki másképpen csinálja
Ezeket nekem majd úgyis ki kell tapasztalnom és jobban utánatanulnom. A C nyelv "scope"-ját nem mindig értem, pedig több magasrendű nyelvet nagyon jól ismerek ilyen szemszögből, de ez azért más.
Igen,a sok próbálkozás végén,úgy is lesz majd 1 saját rutinod .Sok sikert hozzá.
Van egy config.c modulom, melynek függvényeit a main.c -ből hívom.
Elegendő lesz ha a konfigurációs bitjek beállítását tartalmazó cfg.h -t csak a config.c ba includolom? A hozzászólás módosítva: Ápr 28, 2019
Én a config beállításokat headerbe tettem,és csak a main.c -ből hívom meg.Csak a sorrendre vigyázni kell,vagyis előtte a proc-headerjét kell meghívni.
És a proc headert csak a main vagy az összes .c modulba beleteszed?
A hozzászólás módosítva: Ápr 28, 2019
A proc header,csak a main.h-ban van,a main.h-t hívja meg a többi .c
Itt van,hogy mi-mi,csak a config.h -t nem tettem bele a main.c -be,az #include main.h után.
Sziasztok!
Új dolgot kérdeznék tőletek. I2C-nél, ha a PIC a master és kommunikáció közben a salve olvasása félbeszakad, beakad az I2C. Ti milyen módszert használtok a busz vissza "resetelésére"? Az Analog Devicesnek találtam egy dokumentumát, ott az ajánlás az az, hogy: 1. A mester logikai 1-et próbál a SDA vonalra írni 2. A mester még mindi logikai 0-át lát a SDA vonalon, ekkor órajelet generál (1-0-1 átmenet) 3. SDA vonalat megvizsgálva; Ha SDA = 0, akkor vissza a 2. pontra, ha SDA = 1, akkor folytatás a 4. pontal 4. STOP feltétel generálása Ez szerintetek mennyire helytálló? Ilyenkor PMDx regiszterben tiltsam az MSSP modult, végezzem el a fentieket, majd engedélyezzem vissza és mehet minden tovább? Köszönöm!
Szia!
Elméletileg a Restart kiadásával minden slave-nek vissza kellene állnia vételre. Az igaz,hogy én még ezzel nem nagyon foglalkoztam,nálam 3-4 hiba után kiáll hibára,és akkor keresem a gond forrását .
Restart alatt a repeated start conditiont érted? Elég, ha kiadom azt, és visszaáll minden? Ha kiadtam azt, kell stop feltételt is küldenem, vagy folytathatom a kódom később egy startal valahol?
Ilyen esetben lesz Bus Collision megszakításod, használd azt a detektálásra! PMD-t nem kell bántani és elvileg elég az EN-t ki-be kapcsolni. Még én sem próbáltam, eddig én is úgy csináltam, hogy kiáll hibára és villogtat egy LED-et, egy hibakód alapján és jöhet a hibakeresés.
Ilyesmire gondoltok? (Ezt a megszakítás rutinba tettem, igaz nem szép dolog, ott várakoztatni a kódot, de amíg ez meg nem oldódik, addig mást úgyse tud csinálni a kontroller)
A hozzászólás módosítva: Máj 1, 2019
Én az SSPEN ki-be kapcsolására gondoltam. De ahogy nézem még az sem kell.
Idézet: „If a Start, Repeated Start, Stop or Acknowledge condition was in progress when the bus collision occurred, the condition is aborted, the SDA and SCL lines are deasserted and the respective control bits in the SSP1CON2 register are cleared. When the user services the bus collision Interrupt Service Routine and if the I2C bus is free, the user can resume communication by asserting a Start condition.”
De ilyen helyzetben, ha jelzi számomra a kontroller, hogy ez volt és újra nekifutok a dolognak, akkor a slave eszköz visszaáll addig alaphelyzetbe, vagy azért kell csinálnom valamit vele?
UI: Egy DS3231-ről van szó, tehát nem saját eszköz. A hozzászólás módosítva: Máj 1, 2019
Szerintem kutya kötelessége a START-ra helyre állni egy ilyen IC-nek.
|
Bejelentkezés
Hirdetés |