Fórum témák
- • Audiofil, High End Audio
- • Elektronikai témájú könyvek újságok
- • Biciklilámpa / bringalámpa
- • Retro számítógépek
- • Eredményjelző
- • RC távirányítás modellekhez
- • Távirányító javítás
- • VF3 - 6 végerősítő
- • Lemezjátszó beállítása, javítása
- • Tranzisztorok helyettesítése
- • LCD TV probléma
- • Vezeték nélküli hangátvitel
- • Sütő javítás
- • Arduino
- • Elektromos kerékpár akkumulátorának helyettesítése
- • Házilag építhető fémkereső
- • Padlófűtés vezérlés
- • Tranzisztor teszter
- • Számítógépes áramkörszimuláló programok
- • Akkumulátoros fúró
- • Videoton EA-7386-s erösítő
- • Mosogatógép hiba
- • Kombikazán működési hiba
- • Felajánlás, azaz ingyen elvihető
- • Suzuki Swift elektronika
- • Páraérzékelő szenzor
- • VIDEOTON RT (RA) 6380S
- • Muzeális készülékek-alkatrészek restaurálása
- • Vásárlás, hol kapható?
- • Számítógép hiba, de mi a probléma?
- • Nextion érintőképernyős HMI, UART kommunikációval
- • Ultrahangos párásító
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Alternativ HE találkozó(k)
- • Erősítő mindig és mindig
- • GPS GSM modulok programozása
- • Digitális kapcsoló
- • Porszívó javítás
- • Szintetizátor javítás
- • Orsós magnók
- • Dobozolási technikák, műszerdobozok
- • USB bekötése
- • Elfogadnám, ha ingyen elvihető
- • Időzítő
- • Kemencevezérlés
- • Mosógép vezérlők és általános problémáik
- • LED-es világítás
- • Keverőpult építése, javítása
- • Kondenzátor
- • Tekercsek
- • STK erősítők javítások
- • Hűtőborda
- • Villanypásztor
- • LED-es lámpa, meghajtó áramkör
- • Próbapanel (dugaszolós)
» 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.
(#) |
Hilo hozzászólása |
Júl 16, 2013 |
|
/ |
|
|
Sziasztok, Olyan kérdésem lenni hogy mi a különbség a 16F876/16F886 között illetve 16F877/16F887 között? A 16F886 nagyjából ugyan azt tudja mint a 16F887, csak lábszámban különböznek?
A PIC16F87x és a PIC16F88x között a leglényegesebb különbség, hogy a 88x család már tartalmaz belső oszcillátort.
Az adatlap elején van egy táblázat, ahol feltünteti a család (882..887) eltéréseit memória, lábszám stb.
Köszönöm, én is ezt szűrtem le, de kellett a megerősítés. Köszönöm az infót!
Sziasztok,
Hogyan lehet c18-ban egy függvényen belül változót definiálni?
Deklarálni kell, nem definiálni.
Például így:
#include "piccolo_all.h"
#include "delays.h"
void delay_ms(unsigned int d) {
unsigned int i; // <------------ Voilà!
for(i=0; i<d; i++) {
Delay1KTCYx(12); //12 000 TCY késleltetés (~ 1ms)
}
}
//-- A főprogram -------------------------------------------
void main(void) {
mInitAllLEDs(); //LED-ek inicializálása
mInitSwitch1(); //SW1 inicializálása
while (1) {
while(SW1==1); //lenyomásra vár
delay_ms(20); //pergésmentesítő késleltetés
while(SW1==0); //felengedésre vár
delay_ms(20); //pergésmentesítő késleltetés
mLED_1_Toggle(); //LED1 állapotváltás
}
}
Különbslgek: A 16F88x rugalmasabb az analóg bemenetek kezelésében (a 16F87x(A) csa a RA0 tól kezdve tudja analógra állítani). Enhanced USART és egy Anhanced CCP modul van benne. Timer1 kapuzási lehetőséggel bír. stb.
Hát igen, így kéne mennie de nem. A következő primitív függvényeket írtam és a fordító az mondja, hogy a 15. sorban szintaktikai hiba van de ha kiszedem az i deklarálását és kiteszem a függvényen kívülre akkor jó.
#include <p18f25k80.h>
#include <math.h>
#define transiver_reg TXREG2
unsigned long gotT;
char gotTarray[4];
void UART_transmission(char b[],long long ii);
unsigned long getT();
void UART_receive(char captured_byte)
{
if(captured_byte==0x20)
{
gotT=getT();
unsigned int i;
for(i=0;i<4;i++)
{
gotTarray[i]=gotT%256;
gotT/=256;
}
UART_transmission(gotTarray,sizeof(gotTarray));
}
}
void UART_transmission(char input[],long long a)
{
int i;
for(i=a-1;i>-1;i--)
{
while(~PIR3bits.TX2IF);
transiver_reg=input[i];
}
}
Ebben a C nyelvjárásban a függvénben a deklarációknak meg kell előzniük az utasításokat.
Volna még egy kérdésem, eredetileg azt szerettem volna, hogy az UART_transmission bemeneti paramétere csupán csak egy char tömb legyen, viszont az UART_transmission függvényben a sizeof(input) mindig 2-t ad. Ez mért van?
javított változat:
#include <p18f25k80.h>
#include <math.h>
#define transiver_reg TXREG2
void UART_transmission(char input[],long long a);
unsigned long getT();
void UART_receive(char captured_byte)
{
if(captured_byte==0x20)
{
int i;
char gotTarray[4];
unsigned long gotT=getT();
for(i=0;i<4;i++)
{
gotTarray[i]=gotT%256;
gotT/=256;
}
UART_transmission(gotTarray,sizeof(gotTarray));
}
}
void UART_transmission(char input[],long long a)
{
int i;
for(i=a-1;i>-1;i--)
{
while(~PIR3bits.TX2IF);
transiver_reg=input[i];
}
}
A hozzászólás módosítva: Júl 16, 2013
Szia!
Szerintem tömböt nem lehet átadni függvénynek, csak tömbre mutató pointert, vagy egy tömbnek egy adott elemére mutató mutatót.Hiszen az átadott "char input[] " ról magad sem tudod,hogy melyik elemével kellene foglalkozni...
A függvény dekralációja: void UART_transmission(char *pointer,long long a);
a függvényben: transiver_reg=pointer[i];
meghíváskor: UART_transmission(&input[0] ,3256789);//ekkor adódik át a mutató A hozzászólás módosítva: Júl 16, 2013
Idézet: „UART_transmission(&input[0] ,3256789);//ekkor adódik át a mutató”
Alternatív módon elhagyható a & és [0], ebből is látszik, hogy a C-ben a pointer és a tömb lényegében ugyanaz:
UART_transmission(input ,3256789);
Ezután persze a függvényen belül továbbra is lehet tömbként kezelni. A hozzászólás módosítva: Júl 17, 2013
(#) |
Hilo hozzászólása |
Júl 18, 2013 |
|
/ |
|
|
Sziasztok, abban kérném a segítségeteket, hogy írtam egy programot egy PIC-es szúnyogriasztóhoz, ami a visszajelzések szerint ~4 perc után elkezd sípolni. (személyesen nem tudtam tesztelni) A program a whalaky által készített kapcsoláshoz készült.
A sípolást a frekvencia ~ 20 kHz alá csúszása okozhatja? Előre is köszönök minden választ!
LIST P=12f683
#include <p12f683.inc>
__CONFIG H'3FD4'
CBLOCK 0x20 ;Szabad memória hely
T1 ;Delay-hez kell
T2 ;Delay-hez kell
T3 ;Delay-hez kell
TOL
IG
FREKI
ENDC
org 0
START ;Alap beállítások
clrf GPIO ;GPIO mind 0 rá
movlw b'111' ;Comparator OFF bitkódja
movwf CMCON0 ;Comparator OFF (Bank0)
banksel ANSEL ;Bank 1
clrf ANSEL ;minden port digitálisra
movlw b'111001' ;4, 5-ős láb kimenetre PWM+led (0 ki, 1 be)
movwf TRISIO ;ki/be menet beállítása;
movlw b'01110000' ;8 Mhz bitkódja
movwf OSCCON ;Belső oszcillátor beállítása
banksel CCP1CON ;Bank 0
movlw b'00001100' ;PWM mód bittek
movwf CCP1CON ;PWM mód aktiválás
clrf TMR2 ;TMR2 nullázás
;változók alap érték adása
movlw d'32' ;60606 kHz
movwf TOL
movlw d'99' ;20000 kHz
movwf IG
;jumperek vizsgálata (GP0,3,4,5)
movf GPIO,1 ;jumperek beolvasás
movlw b'110' ;Timer2 is on, előosztó 16
btfsc GPIO,0 ;teszt jumper vizsgálata (hallható tartományba)
movwf T2CON ;Timer2 16-os előosztóra állítása
clrf FREKI
movlw d'7' ;freki tiltás mérték beállítása
btfsc GPIO,3 ;jumper 1
addwf FREKI,1 ;+7
btfsc GPIO,4 ;jumper 2
addwf FREKI,1 ;+7
btfsc GPIO,4 ;jumper 2
addwf FREKI,1 ;+7
btfsc GPIO,5 ;jumper 3
addwf FREKI,1 ;+7
btfsc GPIO,5 ;jumper 3
addwf FREKI,1 ;+7
btfsc GPIO,5 ;jumper 3
addwf FREKI,1 ;+7
btfsc GPIO,5 ;jumper 3
addwf FREKI,1 ;+7
movf FREKI,0 ;FREKI W-be
subwf IG,1 ;frekvenia alsó határ beállítása
PWM
banksel PR2 ;Bank1
movlw d'32' ;fervencia beállítása 60606 kHz (8Mhz mellett)
movwf PR2 ;ferki szabályozás
;50%-os kitöltési tényező beállítása PR2-höz (számolja magától frekiből)
banksel CCPR1L ;Bank0
movwf CCPR1L
bcf CCP1CON,5
btfsc CCPR1L,0
bsf CCP1CON,5
rrf CCPR1L,1
bcf CCPR1L,7
bsf T2CON,2 ;Timer2 on
MOD1
call Delay2
movf IG,0 ;IG betölrése W-be
banksel PR2 ;Bank 1
xorwf PR2,0 ;PR2 összehasonlítása IG-el
btfsc STATUS,Z ;ha elérte IG-et akkor kihagyja a köv sort.
goto NOVEL ;frekvencia nő -> PR2 csökken
goto CSOKKENT ;frekvencia csökken -> PR2 nő
MOD2
call Delay2
movf TOL,0 ;TOL betölrése W-be
banksel PR2 ;Bank 1
xorwf PR2,0 ;PR2 összehasonlítása TOL-al
btfsc STATUS,Z ;ha elérte TOL-t akkor kihagyja a köv sort.
goto CSOKKENT ;frekvencia csökken -> PR2 nő
goto NOVEL ;frekvencia nő -> PR2 csökken
CSOKKENT ;freki csokken PR2 nő
banksel PIR1 ;Bank 0
bcf PIR1,1 ;Timer2 tulcsorudló jelző nullázása
btfss PIR1,1 ;Ha van tulcsorulás továb megy
goto $-1 ;Ha nincs vár
banksel PR2 ;Bank 1
incf PR2,1 ;PR2 1-el növelése
movf PR2,0 ;PR2 W-be
;50%-os kitöltési tényező beállítása PR2-höz (számolja magától frekiből)
banksel CCPR1L ;Bank0
movwf CCPR1L
bcf CCP1CON,5
btfsc CCPR1L,0
bsf CCP1CON,5
rrf CCPR1L,1
bcf CCPR1L,7
goto MOD1
NOVEL ;freki nő PR2 csökken
banksel PIR1 ;Bank 0
bcf PIR1,1 ;Timer2 tulcsorudló jelző nullázása
btfss PIR1,1 ;Ha van tulcsorulás továb megy
goto $-1 ;Ha nincs vár
banksel PR2 ;Bank 1
decf PR2,1 ;PR2 1-el csökkentése
movf PR2,0 ;PR2 W-be
;50%-os kitöltési tényező beállítása PR2-höz (számolja magától frekiből)
banksel CCPR1L ;Bank0
movwf CCPR1L
bcf CCP1CON,5
btfsc CCPR1L,0
bsf CCP1CON,5
rrf CCPR1L,1
bcf CCPR1L,7
goto MOD2
;időzitések
Delay ;8Mhz 0,3 sec
movlw 0xD1
movwf T1
movlw 0x4F
movwf T2
movlw 0x02
movwf T3
Delay_0
decfsz T1, f
goto $+2
decfsz T2, f
goto $+2
decfsz T3, f
goto Delay_0
return
Delay2 ;8Mhz 1,7 sec
banksel GPIO ;Bank 0
bsf GPIO,1 ;led be
call Delay
bcf GPIO,1 ;led ki
movlw 0x51
movwf T1
movlw 0x6A
movwf T2
movlw 0x08
movwf T3
Delay_02
decfsz T1, f
goto $+2
decfsz T2, f
goto $+2
decfsz T3, f
goto Delay_02
return
end; Teljes program lezáró
sziasztok van egy pic18lf2620 le van zárva de nekem fontos ami benne van van valaki aki ki tudja olvasni vagy ismer valakit
köszi
Sanya!
1. Nem lehet normális keretek közt kiolvasni. Pont ez a kódvédelem lényege. Fogadd el.
2. Tiszteld meg a többi fórumozót azzal, hogy a mondataidat nagy kezdőbetűkkel kezded és használsz írásjeleket.
A 49. és 50. soroknál látok valami bizonytalanságot, de az nem okozhatja a frekvencia elmászását.
Az addwf FREKI,1 helyett használd inkább az addwf FREKI,f
a movf IG,0 helyett használd inkább a movf IG,w formákat - olvashatóbbak.
A goto $-1 megoldás helyett célszerűbb címkéket használni. A hozzászólás módosítva: Júl 19, 2013
Köszönöm, ennek megfelelően átírtam, saját tesztelés alapján nem sípolt. Van ölteled lehetett a gond?
Sziasztok!
Írtam egy programot, ami a 8 bites C portot inkrementálja vagy dekrementálja, az értéket egy ledsor mutatja, attól függően, hogy melyikhez tartozó gombot nyomjuk meg. Működik is rendesen, csak az a baj, hogy ha egyszer megnyomom valamelyik gombot, akkor csak nagy ritkán változik a kívánt eggyel való csökkentés/növeléssel az értéke, általában 2-vel vagy 3-mal változik.
Gondolom hogy ezt elektromos zavarok okozhatják, de nem vagyok benne teljesen biztos. Szóval ezt hogyan lehetne megoldani? A/D konverter?
Sajnos prellez (prelleg) a nyomógombod. Kell írni egy kis rutint ami lekezeli az érintkezők pattogását.
Brutális de járható módszer, hogy a gomb lenyomása után beiktatsz 100-200ms-nyi szünetet, amíg lecseng a pattogás.
Én inkább csak a lenyomás v. felengedés után bizonyos ideig figyelmen kívül hagynám ugyanennek a gombnak az újbóli megváltozását. Tehát más feladatot ill. gombnyomást nem várakoztatnék így meg.
Ja, és ha már magyarok vagyunk; a gomb nem prellez hanem pereg (mint a dob). A hozzászólás módosítva: Júl 20, 2013
A szép megoldás a többszöri figyelés, adott időn belül. Írtam is, hogy brutális módszer a hosszú várakoztatás, de sokszor pont jó ez is, ha nincs más lekezelni való.
De bizony, ez a szakkifejezés. Az öreg szakik még véletlenül sem mondanának pergést, csakis prellezést. A hozzászólás módosítva: Júl 20, 2013
Szia! Elvileg, ha párhuzamosan kötsz a nyomógombbal egy 100n es kondit, nem fog prelllegni.
Én néhány milliszekundumonként ismétlődő, - nyomógombtól függően - 6-20 egymást követő azonos értéket fogadok el stabil állapotnak.
Ez is olyan mint a karika. Sok megoldás van, de vége ugyanaz. Van olyan szitu, hogy elég átbillenteni egy flag-et és a lekezelés végén visszabillenteni. Mindig az adott szituáció határozza meg a legegyszerűbb megoldást.
Így van. Az adott szitu az volt, hogy ugyanaz a programrész értékelje ki a nyomógomb mindkét állapotát.
Sziasztok!
nagyon kezdő vagyok tehát remélem jó helyen járok...
arról lenne szó , hogy az alap futófényes programban mivel tudom szabályozni a gyorsaságot? nem potméterre gondolok hanem a programon belül hogy pl kigyullad az első led vár tegyük fel 10-15 másodpercet aztán kigyullad a második led ismét vár 10-15 másodpercet aztán a harmadik és így tovább vagy hogy tudnék ilyen sorrendes témát csinálni???
vagy a közlekedési lámpához hasonlóan...
ilyen sorrend szerű beállítást szeretnék idő beállítással nagyjából ahogy leírtam 10-15 másodperc vagy esetleg több kihagyással világítanak a ledek
Hol lehet utána nézni annak a programnak, amit említettél? Milyen típusú PIC-et akarsz programozni, milyen programozód van hozzá?
PICkit 2 starter kit-em van 16F690-es PIC-el
a Program egy sima futófényes mondhatni alap program és azt szeretném, hogy futófényhez hasonlóan csak lassan a panelon 4 led található és balról jobbra mondjuk kivillan az első led vár valamennyi időt ezután kialszik az első led aztán másidok led villanna fel vár ez is valamennyi időt ezután alszik csak ki jön a harmadik led vár valamennyit kialszik negyedik led
és így folyamatosan folytatódna a ciklus....
Ez a program...
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay1 ; Assign an address to label Delay1
Delay2
Display ; define a variable to hold the diplay
endc
org 0
Start:
bsf STATUS,RP0 ; select Register Page 1
clrf TRISC ; make IO PortC all output
bcf STATUS,RP0 ; back to Register Page 0
movlw 0x08
movwf Display
MainLoop:
movf Display,w ; Copy the display to the LEDs
movwf PORTC
OndelayLoop:
decfsz Delay1,f ; Waste time.
goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops
goto OndelayLoop ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
; call it a two-tenths of a second.
bcf STATUS,C ; ensure the carry bit is clear
rrf Display,f
btfsc STATUS,C ; Did the bit rotate into the carry?
bsf Display,3 ; yes, put it into bit 3.
goto MainLoop
end
A hozzászólás módosítva: Júl 21, 2013
|
|