Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1083 / 1210
(#) superuser válasza eSDi hozzászólására (») Ápr 27, 2019 / 1
 
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
(#) lastewer válasza eSDi hozzászólására (») Á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
(#) eSDi válasza lastewer hozzászólására (») Ápr 27, 2019 / 1
 
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.
(#) lastewer válasza eSDi hozzászólására (») Ápr 27, 2019 /
 
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
(#) pipi válasza lastewer hozzászólására (») Ápr 28, 2019 /
 
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
(#) silent15 hozzászólása Ápr 28, 2019 /
 
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
(#) Tasznka válasza silent15 hozzászólására (») Á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.
(#) eSDi válasza silent15 hozzászólására (») Ápr 28, 2019 /
 
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.
(#) Tasznka válasza eSDi hozzászólására (») Ápr 28, 2019 /
 
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.
(#) silent15 válasza Tasznka hozzászólására (») Ápr 28, 2019 /
 
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
(#) pipi válasza silent15 hozzászólására (») Ápr 28, 2019 / 1
 
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
(#) Tasznka válasza silent15 hozzászólására (») Ápr 28, 2019 / 1
 
csatolom,hogy én kb hogyan is csinálom .
Bocsi,ha valamit elnéztem.

C-prog.jpg
    
(#) silent15 válasza Tasznka hozzászólására (») Ápr 28, 2019 /
 
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
(#) AZoli válasza silent15 hozzászólására (») Ápr 28, 2019 / 1
 
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..
(#) silent15 válasza AZoli hozzászólására (») Ápr 28, 2019 /
 
Nem gond, ugyanis a globális változókat nem akartam kirakni, de ötletet adtál és ezt is megtettem!

Köszönöm!
(#) Tasznka válasza AZoli hozzászólására (») Ápr 28, 2019 /
 
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
(#) silent15 válasza Tasznka hozzászólására (») Ápr 28, 2019 /
 
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.
(#) Tasznka válasza silent15 hozzászólására (») Ápr 28, 2019 /
 
Igen,a sok próbálkozás végén,úgy is lesz majd 1 saját rutinod .Sok sikert hozzá.
(#) apromax hozzászólása Ápr 28, 2019 /
 
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
(#) Tasznka válasza apromax hozzászólására (») Á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.
(#) apromax válasza Tasznka hozzászólására (») Ápr 28, 2019 /
 
És a proc headert csak a main vagy az összes .c modulba beleteszed?
A hozzászólás módosítva: Ápr 28, 2019
(#) Tasznka válasza apromax hozzászólására (») Ápr 29, 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.
  1. Main.c
  2. #include "Main.h"//itt fontos a sorrend
  3. #include "Config.h"//itt fontos a sorrend
  4.  
  5. Main.h
  6. #ifndef _MAIN_H_
  7. #define _MAIN_H_
  8. #include<prockóSpec.h>
  9. //és ide hívom be az összes többi headert
  10. #endif
(#) silent15 hozzászólása Máj 1, 2019 /
 
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!
(#) Tasznka válasza silent15 hozzászólására (») Máj 1, 2019 /
 
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 .
(#) silent15 válasza Tasznka hozzászólására (») Máj 1, 2019 /
 
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?
(#) eSDi válasza silent15 hozzászólására (») Máj 1, 2019 /
 
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.
(#) silent15 válasza eSDi hozzászólására (») Máj 1, 2019 /
 
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)

  1. if(PIR1bits.BCL1IF)
  2. {
  3.         SSP1CON2bits.RSEN = 1;
  4.         while (SSP1CON2bits.RSEN == 1)
  5.         {
  6.             asm("nop");
  7.         }  
  8.         PIR1bits.BCL1IF = 0;
  9. }
A hozzászólás módosítva: Máj 1, 2019
(#) eSDi válasza silent15 hozzászólására (») 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.”
(#) silent15 válasza eSDi hozzászólására (») Máj 1, 2019 /
 
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
(#) eSDi válasza silent15 hozzászólására (») Máj 1, 2019 /
 
Szerintem kutya kötelessége a START-ra helyre állni egy ilyen IC-nek.
Következő: »»   1083 / 1210
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