Fórum témák
- • Erősítő mindig és mindig
- • Muzeális készülékek-alkatrészek restaurálása
- • Érdekességek
- • Fejhallgató erősítő
- • CNC építése házi alkatrészekből az alapoktól
- • Ki hol gyártatja a NYÁK-ot ?
- • Felajánlás, azaz ingyen elvihető
- • SMD forrasztás profin
- • Kazettás magnó (deck) javítása
- • Toroid transzformátor
- • HESTORE.hu
- • Kutya macska (vad) riasztó
- • FET vezérlése
- • LCD TV probléma
- • Szobatermosztát bekötése
- • Hibrid erősítő
- • Borhűtő vezérlő panel
- • Karácsonyi fényfüzérek
- • Mosogatógép hiba
- • PC táp átalakítás
- • LED-es világítás
- • Kombikazán működési hiba
- • Áramlökés határoló lágyindító
- • Rádió adó építése
- • Akkus lámpa javítás
- • Elektromos távirányítós kapunyitó
- • Hűtőgép probléma
- • Villanyszerelés
- • Elektromos tolókapu
- • Villanypásztor
- • Li-Po - Li-ion akkumulátor és töltője
- • Gondolkodó ház avagy házautomatizálás
- • Transzformátor készítés, méretezés
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Kapcsolási rajzot keresek
- • Klíma beszerelése, fűtés-hűtés házilag
- • Műhelyünk felszerelése, szerszámai
- • Rádióamatőrök topikja
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Villanymotor mi a hiba?
- • Napelem alkalmazása a lakás energia ellátásában
- • Eredményjelző
- • Számítógép tápegység
- • Porszívó javítás
- • Videomagnó problémák
- • ARM CPU assembler programozás
- • Autórádió (fejegység) problémák, kérdések, válaszok
- • Számítógép hiba, de mi a probléma?
- • 433 MHz adóvevő modul tapasztalatok
- • Labortápegység készítése
- • Zajos transzformátor
- • Klíma szervizelés, javítás
- • Arduino
- • Audiofil, High End Audio
- • Opto kapu és triak
» Több friss téma
|
- 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.
Szia!
Amikor elindul a számlálás(felfutó él) utána állítsd át lefutó élre amikor beérkezik a lefutó él, elmentődik a számláló értéke,az igaz, hogy a timer elölről kezdi a számolást, de a pontos érték már el van mentve.
Ezt ajánlom mindenkinek:
A keresőbe beírod:
microchip compiled tips and tricks
egy pdf-et kell találnia, ebben sok egyéb ötlet mellett van LED vezérlés és periódus idő mérés is (több mint 4Mb ezért nem tudom feltölteni).
simpi: Igen van sok olyan kapcsolás, de ilyet és is építettem, nem is egyet és bár biztosan specifikáción kívül van de működik (habár a portok dinamikus terheléséről az adatlap nem igazán bőbeszédű).
Hűha, ez nagyon értékes dokumentum  Köszönöm!
Hahó.
Van egy programom ami eddig 16F877-ben volt, most átkerült egy 16F887-be és az interrupton kívül működik is minden, viszont a forgóenkóderre nem reagál. Hardveres hiba kizárva a program át lett írva 887-hez, de az interrupt nem működik. Mi a különbség a két PIC között ami miatt nem megy az interrupt?
Nem használom a 887-et, de nézd meg az adatlapot: az encoderhez használt lábon nincs véletlenül AD átalakító ?!
De van, AN11-13. Én arra gondoltam, hogy amiatt szivatja, de hiába tiltok minden A/D-t akkor sem működik.
Így néz ki a kód.
void RB_isr(void)
{
new=input_b();
value=new^old;
//'value', now has the bit set, which has changed
if (value & 0b00010000) {
//Here the low bit has changed
if (new & 0b00010000) {
//Here a rising edge on A
if (new & 0b00100000) {if(matek>0) {--current_position; matek=matek-1; data=1; } ; }
else ++current_position;
}
else {
//Here a falling edge on A
if (new & 0b00100000) {if(matek<255) {++current_position; matek=matek+1; data=1; }; }
else --current_position;
}
}
else {
//Here the high bit (B) must have changed
if (new & 0b00100000) {
//Here a rising edge on B
if (new & 0b00010000) {++current_position;}
else --current_position;
}
else {
//Here a falling edge on B
if (new & 0b00010000) {--current_position;}
else ++current_position;
}
}
old=new;
}
A hozzászólás módosítva: Nov 19, 2013
ANSEL = 0; ANSELH = 0; kell a 16F88x -nek. Ilyen regiszterei a 16F87x -nek nem voltak.
Az ANSELH-t nulláztad? A felhúzás lábanként kell: WPUB+RBPU, az RBIF csak akkor működik, ha az IOCB-ben is kijelölöd, hol jön a jel.
És ezt hogyan, merre, mert a CCS nem tud ezzel mit kezdeni.
Prendick.
Ne káromkodj, ez a kezdő topik.  A rotary kódját netről nyúltam és igazítottam az enyémhez. 877-ben működik, mindennapi használatban van, én ennyit tudok csak róla. az ADC-ket peróbáltam kikapcsolni, de nem segített. A hozzászólás módosítva: Nov 19, 2013
ANSEL a Bank 3 0x08 -as címen (0x188), ANSELH a Bank 3 0x09 címen (0x189) van. CCS -t nem ismerem.. Ld. adatlap Figure 2-4 a 23. oldalon.
Pedig igazat ír Prendick... Adatlap 3.3 fejezet. A hozzászólás módosítva: Nov 19, 2013
 Ezek regiszterek, amiknek értéket kell adni. Olyanok, mint mondjuk a PORTB. Gondolom a CCS-ben is be lehet állítani a pic típusát és akkor tudja értelmezni. Ha 877-nek van beállítva, akkor a konfigurációs bitek sem lesznek jók.
Sajnos a programodban pont nem látszik az inicializáló rész (ahol ugye a többi regiszternek adod az értékeket). Az se világos, hogy használsz-e külső felhúzó ellenállásokat.
Ha mondjuk az RB1-en jön az encodered, akkor az IOCB értéke 0b00000010
Úgy kell beállítani, mint a TRISB-t, csak itt az az 1, amelyik lábon interruptot akarsz. A WPUB hasonló. A 877-nél elég volt az RBPU bitet beállítani a belső felhúzó ellenálláshoz, de a 887-nél már van plusz regiszter erre.
Az ANSELH-nak meg muszáj 0-át adni, mert alapértelmezett állapotban mindent analógnak állít be.
Elhiszem, hogy iagazat ír, de egy szavát nem értem és neked sem.
így néz ki az egész program CCS-ben. Hogy mit milyen regiszterre kell álítani azt elképzelni sem tudom.
Földre húzó ellenállások vannak, és az ekóder közös lába van tápon. Így működik stabilan.
#include<16F887.H> //Using the PIC 16F877
//Set ADC to 10 bit
#fuses HS,NOWDT,NOPROTECT,BROWNOUT,NOPUT //Configuration Fuses
#use delay(clock=20000000) //20Mhz Clock
#define egy (0b10011111);
#define ketto (0b00100101);
#define harom (0b00001101);
#define negy (0b10011001);
#define ot (0b01001001);
#define hat (0b01000001);
#define het (0b00011111);
#define nyoc (0b00000001);
#define kilenc (0b00001001);
#define null (0b00000011);
#define egyt (0b10011110);
#define kettot (0b00100100);
#define haromt (0b00001100);
#define negyt (0b10011000);
#define ott (0b01001000);
#define hatt (0b01000000);
#define hett (0b00011110);
#define nyoct (0b00000000);
#define kilenct (0b00001000);
#define nullt (0b00000010);
signed int16 current_position;
static int old;
static int new;
static int value;
int mate,matekk,data;
int16 seg,egyes,tizes,szazas,ezres;
float outlcd,szam;
#include <math.h>
#int_RB
void RB_isr(void)
{
new=input_b();
value=new^old;
//'value', now has the bit set, which has changed
if (value & 0b00010000) {
//Here the low bit has changed
if (new & 0b00010000) {
//Here a rising edge on A
if (new & 0b00100000) {if(mate>0) {--current_position; mate=mate-1; data=1; } ; }
else ++current_position;
}
else {
//Here a falling edge on A
if (new & 0b00100000) {if(mate<255) {++current_position; mate=mate+1; data=1; }; }
else --current_position;
}
}
else {
//Here the high bit (B) must have changed
if (new & 0b00100000) {
//Here a rising edge on B
if (new & 0b00010000) {++current_position;}
else --current_position;
}
else {
//Here a falling edge on B
if (new & 0b00010000) {--current_position;}
else ++current_position;
}
}
old=new;
}
void main()
{
ADC_OFF;
PORT_B_PULLUPS(false);
enable_interrupts(int_rb);
enable_interrupts(global);
old=input_b();
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_64);
output_low(PIN_c0);
spi_write(00000000);
spi_write(00000000);
output_high(PIN_c0);
output_low(PIN_a0);
output_low(PIN_c4);
output_low(PIN_c6);
output_low(PIN_c2);
output_d (0b11111101);
delay_ms(1000);
output_high(PIN_a0);
delay_ms(500);
mate=107;
data=1;
for(;;)
{
matekk=255-mate;
outlcd=matekk/2.0;
outlcd=outlcd-31.5;
szam=fabs(outlcd);
seg=szam*10.0;
ezres=seg/1000;
szazas=(seg-(1000*ezres))/100;
tizes=((seg-(1000*ezres))-((szazas*100)))/10;
egyes=seg%10;
output_low(PIN_c7);
if (mate==0)
{
output_low(PIN_a0);
output_low(PIN_c7);
output_d (0b11111111);
delay_us(500);
output_high(PIN_c7);
output_d(0b11111111);
output_low(PIN_c4);
output_d (0b11111101);
delay_us(500);
output_high(PIN_c4);
output_d(0b11111111);
output_low(PIN_c6);
output_d (0b11111100);
delay_us(500);
output_high(PIN_c6);
output_d(0b11111111);
output_low(PIN_c2);
output_d (0b11111101);
delay_us(500);
output_high(PIN_c2);
output_d(0b11111111);
}
else
{
output_high(PIN_a0);
if (mate<192)
{
output_d (0b11111101);
}
if (mate>191)
{
output_d (0b11111111);
}
delay_us(500);
output_high(PIN_c7);
output_d(0b11111111);
output_low(PIN_c4);
if (szazas==0)
{
output_d null
}
if (szazas==1)
{
output_d egy
}
if (szazas==2)
{
output_d ketto
}
if (szazas==3)
{
output_d harom
}
if (szazas==4)
{
output_d negy
}
if (szazas==5)
{
output_d ot
}
if (szazas==6)
{
output_d hat
}
if (szazas==7)
{
output_d het
}
if (szazas==8)
{
output_d nyoc
}
if (szazas==9)
{
output_d kilenc
}
delay_us(500);
output_high(PIN_c4);
output_d(0b11111111);
output_low(PIN_c6);
if (tizes==0)
{
output_d nullt
}
if (tizes==1)
{
output_d egyt
}
if (tizes==2)
{
output_d kettot
}
if (tizes==3)
{
output_d haromt
}
if (tizes==4)
{
output_d negyt
}
if (tizes==5)
{
output_d ott
}
if (tizes==6)
{
output_d hatt
}
if (tizes==7)
{
output_d hett
}
if (tizes==8)
{
output_d nyoct
}
if (tizes==9)
{
output_d kilenct
}
delay_us(500);
output_high(PIN_c6);
output_d(0b11111111);
output_low(PIN_c2);
if (egyes==0)
{
output_d null
}
if (egyes==1)
{
output_d egy
}
if (egyes==2)
{
output_d ketto
}
if (egyes==3)
{
output_d harom
}
if (egyes==4)
{
output_d negy
}
if (egyes==5)
{
output_d ot
}
if (egyes==6)
{
output_d hat
}
if (egyes==7)
{
output_d het
}
if (egyes==8)
{
output_d nyoc
}
if (egyes==9)
{
output_d kilenc
}
delay_us(500);
output_high(PIN_c2);
output_d(0b11111111);
/*
mate=mate+1;
if (mate==255)
{
mate=1;
}
data=1;
*/
}
while(data==1)
{
disable_interrupts(int_rb);
output_low(PIN_c0);
spi_write(mate);
spi_write(mate);
output_high(PIN_c0);
enable_interrupts(int_rb);
data=0;
}
}
}
A hozzászólás módosítva: Nov 19, 2013
Az adatlap leírja, hogy az analóg bemenetek letiltása hogyan történik. El kell olvasni!
A regiszterek definiálása CCS C-ben:
#byte ANSEL = 0xF7E
#byte ANSELH = 0xF7F
A regiszterek törlése:
Ezzel megintcsak nem tudok mit kezdeni, az ansel-t megkapta, de továbbra sem működik.
Aha, értem a problémát. Szóval a CCS nem szereti, ha a regiszterekbe irkálunk, ellátja magát.
Ez esetben mindössze két sort kell beszúrni a 82. sor után (a hozzászólásban lévő sorszámozás alapján) a main() függvénybe:
PORT_B_PULLUPS(false);
enable_interrupts( INT_RB4 );
enable_interrupts( INT_RB5 );
enable_interrupts(int_rb);
enable_interrupts(global);
Ha minden igaz, ez a háttérben elintézi az ANSEL-eket, egyéb regisztereket. Kissé szokatlan logikája van a fordítónak. De biztos van akinek tetszik. A hozzászólás módosítva: Nov 19, 2013
Be...ás és mukodik.  Köszönöm mindenkinek a segítséget.
No igen, így külön az ansel sem kell neki, gondolom ez a fordító a pistikéknek van, mint én. A hozzászólás módosítva: Nov 19, 2013
Sziasztok!
5V-os tápegységről megy a PIC-em, és szeretnék rákötni egy bluetooth modult (RN-42). Hogyan lehetne megoldani a bluetooth tápellátását? Valamint a logikai jelszintek illesztését a PIC-hez? UART-on keresztül kommunikálna.
Egy külön topik foglalkozik vele.
Üdvözlet mindenkinek.
Lenne egy kis problémám egy LTP portra épített kapcsolással amit most fejeztem be és a táp ráadása után a zöld és melette a piros LED világít folyamatosan miközben a C1 kondenzátor és a 7805 IC eléggé melegszik.A tápom üresen 20 v ot ad le az lehet esetleg gond?
Köszönet előre is!
Üdv!
Ha C1 melegszik, akkor azt bizony fordítva ültetted be! A stabilizátor ekkora bemenő fesz miatt természetesen melegedni fog, de túlzottan nem szabad neki. Meleg, de nem égeti oda az ember ujját. A zöld az világítani is fog, mert az a táp meglétét jelzi, a piros pedig az égetőfesz bekapcsolását jelzi és valószínűleg azért világít, mert nem indítottad el és nem állítottad be az égetőprogramot. Először a programot indítsd el, majd állítsd be és csak ezután adj rá tápfeszt. Ha megvan, akkor multiméterrel teszteld le a program segítségével, hogy jól kapcsol e. Csak ezek után próbáld ki élesben, mert ha valami nem jó, akkor könnyen tönkre is mehet a PIC.
Tehát először a programot nyissam meg állítsam be a lábak bemeneteit és ha ez megvan akkor adjam rá a táp feszt a panelra?De a panelt összedughatom a géppel nem? Melyik program jó kezdésnek? Most ismerkedem az égetéssel és mivel hobbi szinten foglalkozom gyengeárammal ezért van mikor megakadok sajna. A kondit néztem jól van beültetve hacsak nem azért melegedhet mert 25 v-os a kondi és 20 v megy be.
Lehet h butaságot mondok de nem lehet az a probléma,hogy a 7805 melegszik ,hogy 12v megy rá a bemenetére?Én kicsit sokallom és jelentősen melegszik lehet h máshogy kéne a táprészt megoldani esetleg LM317?
12V-től nem melegszik egy 7805-ös, épp most barkácsoltam és is ilyen stabkockával, valamivel több mint 28V megy rá és semmi baja. Valami túlterheli, alkatrész polaritás vagy zárlat lesz szerintem.
Sziasztok!
Van egy Pic projekt amit megszeretnék csinálni.
Pic16c54-vel lett megcsinálva.
Pickit2-m van. Azzal fel tudnám programozni?
(Ez lenne az első, tehát még nem értek hozzá. Ezért kérdezem.)
Köszike
Idézet: „Azzal fel tudnám programozni?” Erre már válaszoltam: nem. Nincs benne a támogatott eszközök listájában.
Igen, rá kell dugni a gépre. A 25V-os kondi nem melegedhet 20V-ról, de még 25V-ról sem. Milyen tápegységet kötötél rá? Amúgy szerintem ez egy feleslegesen túlbonyolított kapcsolás. Én inkább erre szavaznék, ez biztos, hogy működik: Bővebben: Link, megépítettem.
Én ezt a programot ajánlanám hozzá: Bővebben: Link az "PIC égető program letöltése" résznél találod.
Használhatsz helyette 16F54-et. Viszont ha csak hex-ed van, a Pickit programjában kapcsold ki a Code protect-et. (Tools menü legfelső sora, vagy a konfigurációs biteknél az utolsó három kivételével mindent állíts 1-re, a maradékot hagyd úgy, ahogy van).
Ugye az a 18VAC a kapcsolási rajzon csak elírás?
|
|