Fórum témák

» Több friss téma
Fórum » PIC programozás mikroC fejlesztőkörnyezetben
Lapozás: OK   7 / 10
(#) Elektro.on válasza scooby_ hozzászólására (») Márc 15, 2018 /
 
Véleményem szerint ez hibás. Miért nem használod a MikroC saját pergésmentesítő függvényét?
(#) scooby_ válasza Elektro.on hozzászólására (») Márc 15, 2018 /
 
Most néztem meg éppen, az ha jól látom ugyan ezt csinálja?
Szintén felvesz egy változót, és a gomb lenyomásával azt irkálja át, és figyeli az IF-en belül.
Működni az enyém is működik, nem pereg, gombnyomásra nem hajtja végre ugyan azt az utasítást többször addig, amíg a gombot nyomva tartom.
(#) Lamprologus válasza scooby_ hozzászólására (») Márc 15, 2018 /
 
Ez hogyan pergésmentesít?
hirtelen nem látom hogyan tudná megkülönböztetni hogy é nyomtam meg anyomógombot 5 perc alatt 10-szer, vagy egy gombnyomáskor pattognak az érintkezők egymásom 10-szer 0.1s alatt.

Mondjuk ha a POWER változó tényleg csak egyel nő minden gombnyomáskor akkor ok ...
(#) scooby_ válasza Lamprologus hozzászólására (») Márc 15, 2018 /
 
Csak eggyel nő, bit típusú változó, csak 0 és 1 lehet az értéke.
(#) Lamprologus válasza scooby_ hozzászólására (») Márc 15, 2018 /
 
Akkor próbaképp állítsd át olyanra hogy számolni tudja a gombnyomásokat ... hátha meglepő eredmény lesz!
(#) Lamprologus válasza scooby_ hozzászólására (») Márc 15, 2018 / 1
 
A pergésmentesítés nem azt jelenti hogy többször végrehajtja-e az adott utasítást amíg a nyomógomb nyomva van!

A nyomógomb érintkezői nem mindig kapcsolnak azonnal stabilan ... néha előfordul hogy"pattognak" egymáson, ezt a PIC érzékelheti úgy hogy többször nyomták meg a gombot!

Nézd meg itt a nyomógomb kezelés részt!
A hozzászólás módosítva: Márc 15, 2018
(#) Elektro.on válasza scooby_ hozzászólására (») Márc 16, 2018 / 1
 
Én úgy látom, hogy amikor pereg a nyomógomb mindig végrehajtja a Power++ utasítást.
A hozzászólás módosítva: Márc 16, 2018
(#) scooby_ válasza Lamprologus hozzászólására (») Márc 16, 2018 /
 
Így már világos, hogy mire gondoltok!
Pergésmentesítéshez használjam a Delay_ függvényt, vagy inkább erre is a Timer0-t érdemes?
(#) benjami válasza scooby_ hozzászólására (») Márc 16, 2018 / 1
 
Nyomógomb lekérdezést szerintem Timer interruptban (vagy legalábbis az által időzítve), másodpercenként 30 mintavétel körül érdemes megcsinálni. Így simán megoldható, hogy úgy működjön, mint egy normál PC billentyűzet, tehát meg lehessen különböztetni a rövid lenyomást, a hosszú lenyomástól, sőt folyamatos nyomvatartás mellett beállítható sebességgel ismételjen.
(#) scooby_ válasza benjami hozzászólására (») Márc 16, 2018 /
 
Mintavételezés alatt mit értesz? Az OprionReg-ben lévő osztót?
Azthiszem az 1:32-höz jelenleg.
(#) benjami válasza scooby_ hozzászólására (») Márc 16, 2018 / 1
 
Mintavétel alatt azt értem, hogy másodpercenként 30 alkalommal olvasod be a gombok állapotát. Ha a gomb le van nyomva, de az előző beolvasás alkalmával még nem volt, akkor most lett lenyomva, tehát el lehet végezni az ehhez tartozó tevékenységet. Ha már előzőleg is lenyomott állapotban volt, akkor már nem kell csinálni semmit. Ehhez persze mindig el kell tárolni a gombok állapotát, hogy a következő beolvasáskor legyen mivel hasonlítani.
(#) scooby_ válasza benjami hozzászólására (») Márc 17, 2018 /
 
Ez pont azt csinálja amit mondasz. Akkor ezek szerint ki csak ki kell egészítenem azzal, hogy ezt másodpercenként 30x nézze meg a program. Gondolom erre meg külön szubrutint érdemes létrehozni? Szerk.: Sőt, még talán a belinkelt sorokat is külön érdemes lehet szubrutinba beírni.
A hozzászólás módosítva: Márc 17, 2018
(#) scooby_ válasza scooby_ hozzászólására (») Márc 17, 2018 /
 
Nos, gyerekek, megoldódott a probléma. Igazából semmit nem adtam hozzá a programhoz, csupán az interrupt szubrutint legutoljára töltetem be a programmal, illetve ezeket a kezdeti némító és szövegvillogtató sallangokat mindet a while ciklus végére tettem. Így most megfelelően működnek a gombok is. Természetesen a pergésmentesítést a leírás alapján beleírtam minden nyomógomb figyeléshez, így a gomb lenyomása után 20ms-mal később végzi el a hozzá rendelt teendőt.
Mondjuk erre igazán gondolhattam volna előbb is, mielőtt Titeket kezdelek el túráztatni, hiszen valahol olvastam, hogy a programozó olyan sorrendben égeti be a programot a mikrovezérlőbe,
ahogyan az a fejlesztő környezetben fel van tüntetve, és Ő azt úgy is fogja lefuttatni.


Következő amivel feltehetően szívni fogok, az ezen négy nyomógomb távirányíthatósága. Erről még olvasok, keresgélek... Ha nem értek valamit, engedelmetekkel itt kérdeznék.

Addig is köszönöm mindenkinek az eddigi türelmét és készséges segítségét. A kezdőkkel sose könnyű.
A hozzászólás módosítva: Márc 17, 2018
(#) scooby_ hozzászólása Ápr 1, 2018 /
 
Sziasztok, újra itt, és egy kis segítség kéne. Túlhaladtam az erősítő vezérlésén, most épp BLDC motorvezérlést készítek PIC16F887-tel. Az alap kész, most tartok ott, hogy be kéne írnom az áramkorlátot. Ez úgy működik, hogy a FET-ek source ágában van egy Shönt ellenállás, és azon figyeli a PIC a feszültséget ami a PIC AN1-es portjára van visszakötve. A PIC AN0-án potméter van, Ő szabályozza a PWM jelet. Valahogy úgy kéne a programot megírnom, hogy az áramgenerátor a PWM jellel szabályozza az áramot. Esetleg tud valaki ebben segíteni? Előre is köszönöm! Kellemes húsvéti ünnepeket Mindenkinek!
(#) glaci hozzászólása Dec 18, 2018 /
 
Sziasztok!
PIC18F46k80-t programozok. EEPROM-ból olvasok ki adatokat. A 0x0000 címről 0x07-et a 0x0001 címről 0xE2-tőt.Ez igazából ez egy dátum 2 byte-on, 2018. Ha ezt visszaolvasom a beépített EEPROM_Read(0x0000) rutinnal a megadott címről egy short változóba, akkor ez helyesen íródik be 00000111. Ezt átírom egy int változóba, az még mindig helyes eredményt ad, vagyis 00000000 00000111. Ha ezt balra tolom 8 bittel, az az 00000000 00000111 << 8, akkor ezt kéne kapnom 00000111 00000000. Ehelyett kapom 00000100 01000100 számot, ami 1092 az 1792 helyett. Mi a megoldás.
A hozzászólás módosítva: Dec 18, 2018
(#) Hp41C válasza glaci hozzászólására (») Dec 18, 2018 /
 
Lehet, hogy ez működik a mikro C -ben is.
(#) glaci válasza Hp41C hozzászólására (») Dec 18, 2018 /
 
Kipróbálom holnap, mert amit eddig csináltam nem jó. Igaz vannak homályos dolgok amit adtál, de a mikroc még homályosabb, mert annak a belsejét nem is látom.
Mindenesetre köszi hogy utánam nyúltál.
(#) glaci válasza glaci hozzászólására (») Dec 19, 2018 /
 
Szia!
Beírtam, de le se tudott fordulni, hibajelzéssel leállt. Sajnos.
(#) Hp41C válasza glaci hozzászólására (») Dec 19, 2018 /
 
Másold be ide a hibajelzést.
(#) Hp41C válasza Hp41C hozzászólására (») Dec 19, 2018 /
 
Nem ismeri a BYTE típust: typedef unsigned char BYTE;
Nem ismeri fel a year.LB -t: cserléld le year.byte.LB -re.
Nem ismeri fel a EECON1bits.RD: cserléld le EECON1.RD
(#) glaci válasza Hp41C hozzászólására (») Dec 19, 2018 /
 
Az a helyzet, hogy eléggé el nem ítélhető módon figyelmetlen és felületes vagyok.
Működik a mikroc beépített eeprom írója és olvasója. Ott követtem el a hibát, hogy a
// for PIC18
void EEPROM_Write(unsigned int address, unsigned short data);

// for PIC18
unsigned short EEPROM_Read(unsigned int address);

változók deklarálásánál nem vettem figyelembe a típusmódosítók használatának szükségességét.
Kijavítva a hibát szuperűl működik.
Még egyszer köszönöm a törődést.
(#) glaci válasza Hp41C hozzászólására (») Dec 19, 2018 /
 
A hozzászólás módosítva: Dec 19, 2018
(#) Hp41C válasza glaci hozzászólására (») Dec 19, 2018 /
 
Nálam így lefordul. Az a kérdés inkább, hogy miért nem olvassa ki rendesen az EEProm tartalmát debug módban annak ellenére, hogy az EEProm Editorral beírtam az évszámot a 0x12-0x13 címre.
(#) mark.budai hozzászólása Feb 28, 2019 /
 
Sziasztok! Bocs, ha volt már.. Meg lehet oldani valahogy MikroC-ben a PicKit3-mal való debuggolást? Külföldi oldalakon mindenhol azt írják, hogy a MikroC nem szereti a PicKitet, amit jómagam is észrevettem, még égetni sem tudok vele, mindig MPLAB IPE-vel égetem be a MikroC által lefordított hex fájlt. Illetve, bárhogy is keresem, arra sem találok megoldást, hogy valahogyan MPLAB X alá betegyem a MikroC compilert. Létezik erre valamiféle megoldás, vagy felejtsem el? Nagyon szeretek MikroC-ben programozni, de ha már megvettem a Mikrochip gyári hardverét, nem szeretnék ezért mást venni. Tudom, programozzak XC8 alatt, de több éve dolgozom MikroC-ben, voltak előtte próbálkozásaim XC8-ban, de az idegenebb számomra. Persze, ha az lenne az egyetlen megoldás, nem tudok mit tenni, át kell térnem rá. De bízom benn, hogy van valakinek megoldása a problémámra!
A hozzászólás módosítva: Feb 28, 2019
(#) Junkie hozzászólása Jún 5, 2019 /
 
Sziasztok, szükségem lenne egy kis segítségre, még kezdő szinten probálgatok programozni, és elakadtam egy picitt, épp az SPI protokolt tanulmányozom, probálgatom.Szeretnék két 16f628a közt adatot átvinni, a küldő rész megy is , egy digitalis potmétert szépen vezérel, viszont második 16f628 al ami a slave lenne ebben az esetben szeretnék adatokat kiirni lcdre, amit az első pic küldene . A problémám az hogy ugyebár nincs hardveres SPI a 628ban ezért a szoftveres libraryval probálkozom, de sok google keresgélés után sem jöttem rá hogyan tudnám a második PIC et slave modba kapcsolni, mindenképp vezérelni akarja a CLK lábat ezért ütközik Proteus alatt a slave és a master CLK lába. Valaki felvilágosítana mit rontok el ? Csatoltam a slave programját..
Előre is köszönöm a segítséget..

// DAC module connections
sbit Chip_Select at RA0_bit;
sbit SoftSpi_CLK at RA1_bit;
sbit SoftSpi_SDI at RA2_bit;
sbit SoftSpi_SDO at RA3_bit;


sbit Chip_Select_Direction at TRISA0_bit;
sbit SoftSpi_CLK_Direction at TRISA1_bit;
sbit SoftSpi_SDI_Direction at TRISA2_bit;
sbit SoftSpi_SDO_Direction at TRISA3_bit;
// End DAC module connections

unsigned short data_read;
char data_send;


void main() {
INTCON = 0xA0;
OPTION_REG=0x80;
CMCON = 0x07;
Soft_SPI_Init();
do{
data_read = Soft_SPI_Read(data_send);
}
while(1);

}
A hozzászólás módosítva: Jún 5, 2019
(#) Hp41C válasza Junkie hozzászólására (») Jún 5, 2019 /
 
MicroC Software SPI Library dokumentációból:
Idézet:
„Software SPI Library

The mikroC PRO for PIC provides routines for implementing Software SPI communication. These routines are hardware independent and can be used with any MCU. The Software SPI Library provides easy communication with other devices via SPI: A/D converters, D/A converters, MAX7219, LTC1290, etc.
Library configuration:

SPI to Master mode
Clock value = 20 kHz.
Data sampled at the middle of interval.
Clock idle state low.
Data sampled at the middle of interval.
Data transmitted at low to high edge.

The library configures SPI to the master mode, clock = 20kHz, data sampled at the middle of interval, clock idle state low and data transmitted at low to high edge.”

Meg lehet írni a software SPI save részét vagy olyan kontrollert választani, amiben van (M)SSI modul és a SSP könyvtárat használni.
A hozzászólás módosítva: Jún 5, 2019
(#) Junkie válasza Hp41C hozzászólására (») Jún 5, 2019 /
 
Igen ezt már átolvastam, viszont a lényeget nem vettem észre vagyis a két utolsó sort.
Tehát akkor ez nem épp olyan egyszerű mint a kűldés része, azaz a library nem tud slavet alapból... csak ha megirom hozzá a rutint. De akkor azt nem értem mi értelme a "Soft_SPI_Read" parancsnak az SPI Library dokumentációban.. Mindenesetre akkor 16f690 el probálkozom , abban van SPI hardveresen, úgy egyszerübb lessz gondolom.

Köszi a segítséget.
Üdv: Szabi
(#) Bakman válasza Junkie hozzászólására (») Jún 5, 2019 /
 
A kontroller a Master és mint Master, adatot kér a Slave-től, olvassa a Slave által szolgáltatott adatfolyamot.
(#) Junkie válasza Bakman hozzászólására (») Jún 5, 2019 /
 
Igen így már értem..
Köszi
(#) haffre hozzászólása Máj 29, 2020 /
 
Most kezdtem az ismerkedést a mikroc-vel, máris két problémám van:
1.) Adott a tomb jelű, 1,2,3,4 elemű tömb és az alábbi program:
tmp = 0;
for (i = 0; i <= 3; i++) {
tmp += tomb[i]; //4 elem összege
}
Az ember azt várná, hogy a tmp értéke a ciklus végén 10 lesz, de nem, 26 lesz.
Lépésenként az összegek: 1, 4, 11, 26; vagyis a tmp duplázódik (önmagához adja önmagát) és hozzáadódik a tomb aktuális értéke.
2.) Gyorsbillentyűk probléma: szeretném a "|" karaktert beadni az altgr+w (ctrl+alt+w) gombokkal, de nem az jön be, hanem új fülként a "start page" nyílik meg. A gépkönyvben ilyen gyorsbillentyű nincs (vagy csak én nem találom), ezért megváltoztatni sem tudom.
Egy másik gyorsbillentyű probléma, hogy az altgr+g -re a "]" karakternek kellene beíródni, de semmi nem történik.
A problémák Win10 alatt futtatott mikroc-vel vannak, a hardver jó, Linux alatt minden gyorsbillentyű működik.
Tudna valaki segíteni?
Következő: »»   7 / 10
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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