Fórum témák
- • Léptetőmotorok (vezérlése)
- • Audiofil, High End Audio
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Kombikazán működési hiba
- • Felajánlás, azaz ingyen elvihető
- • WLAN router
- • IMI villanymotor
- • Elfogadnám, ha ingyen elvihető
- • Erősítő mindig és mindig
- • Muzeális készülékek-alkatrészek restaurálása
- • Multiméter - miért, milyet?
- • MyElecParts alkatrész kereső és készlet nyilvántartó
- • Vicces - mókás történetek
- • DSC riasztó
- • Érdekességek
- • Villanymotor bekötése
- • Hegesztő inverter javítás
- • Klíma beszerelése, fűtés-hűtés házilag
- • Erősítő építése elejétől a végéig
- • Próbapanel (dugaszolós)
- • Kapcsolási rajzot keresek
- • Telefon és LAN hálózat kialakítása
- • Fejhallgató erősítő
- • Leválasztó transzformátor
- • Garázskapu mozgató
- • PIC - Miértek, hogyanok haladóknak
- • Gázkazán vezérlő hibák
- • Fényorgona
- • Ki hol gyártatja a NYÁK-ot ?
- • Napelem alkalmazása a lakás energia ellátásában
- • Labortápegység készítése
- • HDMI bekötés
- • Indukciós főzőlap javítása
- • Vásárlás, hol kapható?
- • Háromfázisú aggregátor
- • Villanyszerelés
- • Riasztószerelés tapasztalatok, ötletek (kizárólag haladóknak)
- • Codefon kaputelefon
- • Kávéfőzőgép hiba
- • Házilag építhető fémkereső
- • Skoda Octavia elektromos probléma
- • LCD TV probléma
- • TV hiba, mi a megoldás?
- • Radiosonde
- • Oszcilloszkóp vétel, mit gondoltok?
- • Rádióamatőrök topikja
- • Bojler javítása, kérdések
- • Folyamatábrás mikrokontroller programozás Flowcode-dal
- • Westen 240 Fi gázkazán hiba
- • Szünetmentes táp javítása, élesztése
- • Klíma szervizelés, javítás
- • Nyomtató probléma
- • Szobatermosztát bekötése
- • Tina
- • Lemezjátszó beállítása, javítása
» 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.
Ebben a dokumentumban írják le a programozására vonatkozó tudnivalókat. Ennél azért nincs külön PGM láb, mert ez már MCLR-rel vezérelt alacsonyfeszültségű programozásra készült (lásd a fenti leírás 2.6 fejezetét!). Az Oshon programozóval ezt szerintem nem fogod tudni programozni.
Én PIC18F25K22-őt vettem, de bootloaderrel előre programozva, hogy kipróbáljam vele az erre a típusra ingyenes Amcus18 (PROTON BASIC) fejlesztői környezetet. Így csak egy USB-UART (TTL jelkimenetettel!) átalakító kell a programletöltéshez. A hozzászólás módosítva: Okt 13, 2012
#include <p18f25k80.h>
#pragma config XINST = OFF, FOSC=INTIO2, IESO= ON, PWRTEN=ON, WDTEN=OFF, MCLRE=OFF
void con(void);
void delay (void);
void lo_isr(void);
void hi_isr(void);
volatile unsigned int cv =0;
volatile int time=1;
volatile int c=1;
void main (void)
{
con();
T0CONbits.TMR0ON=1; //timer0 indtasa
while (1)
{
while(cv==1)
{
LATAbits.LATA1=1; //RA1-en levő LED villogtatás
delay();
LATAbits.LATA1=0;
delay();
}
while(cv==0)
{
LATAbits.LATA0=1; //RA0-on levő LED villogtatás
delay();
LATAbits.LATA0=0;
delay();
}
}
}
void con(void)
{
TRISA=0xFC; //RA0 és RA1 legyen digitális kimenet
TRISB=0x20; //RB5 legyen digitális bemenet
IOCB=0x20; //Ha RB5 változik legyen interrup
RCONbits.IPEN=1; //Kétszintű interrupt mód beállítása
INTCON2=0x04; //RBPU=0 RBIP=0 TMRIP=1
PMD1bits. TMR0MD= 1; //timer0 registerek resetje
PMD1bits. TMR0MD= 0; //timer0 bekapcs
T0CON=0X01; //16-bit timer, 1:4-es osztas
INTCON=0xE8; //High pri. interrupt disabled, Low pri. interrupt enabled, timer0 int. enabled, változásjelző interrupt engedélyezése
}
void delay (void)
{
while(c==time)
{
}
c*=-1;
}
#pragma code high_vector_addr=0x08
void high_vector(void) {
_asm GOTO hi_isr _endasm
}
#pragma code low_vector_addr=0x18
void low_vector(void) {
_asm GOTO lo_isr _endasm
}
#pragma code
#pragma interrupt hi_isr
void hi_isr (void)
{
time*=-1;
INTCONbits.TMR0IF=0;
}
#pragma interruptlow lo_isr
void lo_isr (void)
{
int a = PORTB; //PORTB olvasása törli a korábbi beállást
if(PORTBbits.RB5==1) //RB5 állapotának olvasása
{
cv=1;
}else
{
cv=0;
}
INTCONbits.RBIF=0; //az IOCB interrupt jelzőbit törlése
}
Ez lett a végső program, azért másoltam be, hogy mások is megtalálhassák, meg hátha van hozzáfűznivalótok.
Ha U(S)ART-ot szeretnék csinálni azt ide vagy a haladó változatba írjam? A hozzászólás módosítva: Okt 13, 2012
#include <p18f25k80.h>
#pragma config XINST = OFF, FOSC=INTIO2, IESO= ON, PWRTEN=ON, WDTEN=OFF, MCLRE=OFF
#define A LATAbits.LATA0
#define B LATAbits.LATA1
#define C LATAbits.LATA2
#define D LATAbits.LATA3
void con(void);
void delay (void);
void lo_isr(void);
void hi_isr(void);
volatile int time=1;
volatile int t=1;
void main (void)
{
con();
int led[] = {A,B,C,D};
int i;
T0CONbits.TMR0ON=1; //timer0 indtasa
while (1)
{
for(i = 0; i < 4;i++)
{
led[i]=1;
delay();
led[i]=0;
delay();
}
}
}
A 18. sort nem fordítja a fordító, mert szintaktikai hibás, mi a hiba? A hozzászólás módosítva: Okt 14, 2012
Jóestét! Ha A/D konverziónál referenciának Vss-t és Vref+ (azaz külső refet szeretnék) akkor lehet a Vdd-ből egy ellenállással bevezetni a Vref+ lábhoz a feszt? És mi alapján számoljak ellenálást? nem ismerem az áramot :O (18F4550)
Szia!
Bár elvileg nem muszáj elemszámot megadni, de ha megadsz, akkor is kiabál a fordító?
Nem vagyok ugyan profi, de szerintem a picek bemeneti ellenállása végtelennek tekinthető, tehát nem kell ellenállás.
Néz utána a FET-eknek, a piced bemenete tulajdonképp egy FET gate-je.
szia!
Igen, azért másoltam be a program fő részét, mert ha a hibás sort törlöm, kúszik egyet a szintaktikai hiba is.
És ha az előtte lévő sort veszed ki "con();" ? A hozzászólás módosítva: Okt 14, 2012
Idézet: „int led[] = {A,B,C,D};” He egy tömbnek értéket akarsz adni, akkor olyan konstans adható meg, ami az adott típusban ábrázolható.
LATAbits.LATA0 és ehhez hasonlók nem ilyenek, sőt, egy értékadás jobboldalán sem szerepelhetnek.
Akkor jó, de nekem meg kell hívnom azt a függvényt
Akkor, hogyan tudom "átnevezni" a lábakat (HI-TECH C-ben simán OK volt)? A hozzászólás módosítva: Okt 14, 2012
Szia! Akkor adnál egy tippet, hogy miként lehet 5V-ból pl 3V-ot csinálni, hogy azt be tudjam vezetni a Vref+ ba?
Kék led+előtét ellenállás. A közös ponton a led nyitófeszültsége mérhető. Hidegítheted egy 100nF-dal.
Köszönöm!
feszültség osztóval pl. 2kohm-3kohm
Az osztás értékén nem fog változtatni a bemenet, mivel arra nem fog áram folyni.
Na ez jó lesz, 2 trimmerrel gyors beállítom az értékeket Köszi!
Ja ja!!!
A lényeg a 2:3-hoz arány A hozzászólás módosítva: Okt 14, 2012
Nem jo a sima feszultsegoszto Vrefnek, mert a konverzio alatt kb 150 uA bemenoaram folyik, maskor pedig kb 5 uA. Inkabb egy TL431 plusz egy ellenallas es egy poti kellene. Igy meg a Vref stabilitasa jobb.
Még így is bőven jó a feszültség osztó, ha kisebb ellenállásokat használ.
pl. 20-30 ohm; 150uA Igs -> 2.998 V
20-30 ohm; 5uA Igs -> 2.999 V
Bőven a mérési egységen belül van az ingadozás A hozzászólás módosítva: Okt 14, 2012
Idézet: „Akkor, hogyan tudom "átnevezni" a lábakat?”
Az attól függ, hogy mire/hogyan akarod használni az "átnevezéseket".
Baloldalon például állhat a LATAbits.LATA0, vagy a hasonmás név.
Más lehetőség:
#define LEDPORT LATA
#define LED1 BIT0
LEDPORT |= LED1 + LED3; //LED1 és LED3 belakcsolása
LEDPORT &= ~LED1; //LED1 kikapcsolása
Természetesen BIT0, BIT1, BIT2, BIT3 stb. is definiálandó 1, 2, 4, 8 stb. értékkel!
int led[] = {A,B,C,D}; helyett esetleg így írhatod (bár sok értelme nincs):
int led[] = {LED1, LED2. LED3, LED4};
Nem tudom mi az a 20-30 ohm. Mert az mar egy 100 mA osztonak felel meg. Amit altalaban nem illik egy PIC melle tenni ami 5 V, 4 MHz eseten eszik 2-3 mA-t. Az oszto meg 100 mA. A TL431 plusz a jarulekos elemek erteke kb 50 kiralyi forint. A stabilitasa nagyon jo. Ugyhogy felesleges az ilyen takarekoskodas, mert utana mikor bekapcsolodik a szivato akkor sokkal tobbe kerul. Idobe es bosszusagba.
Igen abszolút igazad van, de magamból kiindulva, mikor a debuggolásnál tarok, nem igen érdekel, hogy menyit fogyaszt a rendszer, az viszont igen, hogy ne kelljen elrohanni a város másik végébe venni egy IC-t, csak azért, hogy pár milliamperrel kevesebb áramot fogyasszak.
Persze, ha már megvan az áramkör akkor úgy kell áttervezni, hogy minél kevesebbet fogyasszon.
Szia!
Akkor a próba nem "éles" környezetben megy ?! Ha utána gond van, akkor mit nézel meg először ? Nem lenne jobb mégis átrohanni a város másik végébe ( ha csak ezen múlik )?!
Steve A hozzászólás módosítva: Okt 15, 2012
Szia!
Idézet: „LATAbits.LATA0 és ehhez hasonlók nem ilyenek, sőt, egy értékadás jobboldalán sem szerepelhetnek.”
Már hogyne szerepelhetnének:
LATAbits.LATA0 = !LATAbits.LATA0;
LATAbits.LATA0 = LATAbits.LATA1 & LATAbits.LATA2;
LATAbits.LATA0 = PORTAbits.RA1 | LATAbits.LATA2;
stb.
Ebben igazad van, az értékadást kár volt belekevernem.
Sziasztok!
Az Itt: találhato vevöt szeretném egy programba integrálni. Az lenne a problémám hogy C-ben van és asm-be szeretném illeszteni. Fordito ezt dobta, de sehogy nem tudom beilleszteni. Tudna valaki segiteni benne hogy lehetne megoldani? Még a konfig, sem kellene. _interrupt:
;vevo.c,42 :: void interrupt (){
;vevo.c,43 :: if (INTCON.TMR0IF){ // időtúllépés-figyelés
BTFSS INTCON+0, 2
GOTO L_interrupt0
;vevo.c,44 :: key_cnt = 0;
CLRF _key_cnt+0
;vevo.c,45 :: INTCON.TMR0IF = 0;
BCF INTCON+0, 2
;vevo.c,46 :: }
L_interrupt0:
;vevo.c,47 :: if (PIR1.RCIF){
BTFSS PIR1+0, 5
GOTO L_interrupt1
;vevo.c,48 :: uart_buffer = RCREG; // törli az RCIF-et, nem kell PIR1.RCIF=0
MOVF RCREG+0, 0
MOVWF _uart_buffer+0
;vevo.c,49 :: rx_flag = 1;
MOVLW 1
MOVWF _rx_flag+0
;vevo.c,50 :: }
L_interrupt1:
;vevo.c,51 :: }
L_end_interrupt:
L__interrupt11:
RETFIE 1
; end of _interrupt
_main:
;vevo.c,53 :: void main (){
;vevo.c,54 :: OSCCON = 0x72; // pdf 32.
MOVLW 114
MOVWF OSCCON+0
;vevo.c,55 :: ADCON1 = 0x0F; // pdf 226.
MOVLW 15
MOVWF ADCON1+0
;vevo.c,56 :: CMCON = 0x07; // pdf 235.
MOVLW 7
MOVWF CMCON+0
;vevo.c,57 :: TRISA = 0;
CLRF TRISA+0
;vevo.c,58 :: LATA = 0;
CLRF LATA+0
;vevo.c,59 :: TRISB = 0;
CLRF TRISB+0
;vevo.c,60 :: LATB = 0;
CLRF LATB+0
;vevo.c,61 :: TRISC = 0b10000000; // Rx-Tx
MOVLW 128
MOVWF TRISC+0
;vevo.c,62 :: LATC = 0;
CLRF LATC+0
;vevo.c,63 :: PIE1.RCIE = 1; // pdf 100.
BSF PIE1+0, 5
;vevo.c,64 :: INTCON = 0b11100000; // pdf 95.
MOVLW 224
MOVWF INTCON+0
;vevo.c,65 :: T0CON = 0b10001000; // pdf 125.
MOVLW 136
MOVWF T0CON+0
;vevo.c,67 :: UART1_Init(2400);
BSF BAUDCON+0, 3, 0
MOVLW 3
MOVWF SPBRGH+0
MOVLW 64
MOVWF SPBRG+0
BSF TXSTA+0, 2, 0
CALL _UART1_Init+0, 0
;vevo.c,68 :: delay_ms(100);
MOVLW 2
MOVWF R11, 0
MOVLW 4
MOVWF R12, 0
MOVLW 186
MOVWF R13, 0
L_main2:
DECFSZ R13, 1, 1
BRA L_main2
DECFSZ R12, 1, 1
BRA L_main2
DECFSZ R11, 1, 1
BRA L_main2
NOP
;vevo.c,70 :: while (1){
L_main3:
;vevo.c,71 :: if (rx_flag == 1){
MOVF _rx_flag+0, 0
XORLW 1
BTFSS STATUS+0, 2
GOTO L_main5
;vevo.c,72 :: rx_flag = 0;
CLRF _rx_flag+0
;vevo.c,73 :: if (key[key_cnt] == uart_buffer){
MOVLW _key+0
ADDWF _key_cnt+0, 0
MOVWF TBLPTRL
MOVLW hi_addr(_key+0)
MOVWF TBLPTRH
MOVLW 0
ADDWFC TBLPTRH, 1
MOVLW higher_addr(_key+0)
MOVWF TBLPTRU
MOVLW 0
ADDWFC TBLPTRU, 1
TBLRD*+
MOVFF TABLAT+0, R1
MOVF R1, 0
XORWF _uart_buffer+0, 0
BTFSS STATUS+0, 2
GOTO L_main6
;vevo.c,74 :: TMR0H = 0xDE; // 65535-8535=57000 (egy bájt plussz az időtúllépése, kb. 90us)
MOVLW 222
MOVWF TMR0H+0
;vevo.c,75 :: TMR0L = 0xA8;
MOVLW 168
MOVWF TMR0L+0
;vevo.c,76 :: key_cnt++;
INCF _key_cnt+0, 1
;vevo.c,77 :: }
GOTO L_main7
L_main6:
;vevo.c,78 :: else {key_cnt == 0;}
L_main7:
;vevo.c,79 :: if (key_cnt == sizeof(key)-1){ // nyitás
MOVF _key_cnt+0, 0
XORLW 14
BTFSS STATUS+0, 2
GOTO L_main8
;vevo.c,80 :: LATB.B0 = 1;
BSF LATB+0, 0
;vevo.c,81 :: delay_ms(1000);
MOVLW 11
MOVWF R11, 0
MOVLW 38
MOVWF R12, 0
MOVLW 93
MOVWF R13, 0
L_main9:
DECFSZ R13, 1, 1
BRA L_main9
DECFSZ R12, 1, 1
BRA L_main9
DECFSZ R11, 1, 1
BRA L_main9
NOP
NOP
;vevo.c,82 :: LATB.B0 = 0;
BCF LATB+0, 0
;vevo.c,83 :: key_cnt = 0;
CLRF _key_cnt+0
;vevo.c,84 :: }
L_main8:
;vevo.c,85 :: }
L_main5:
;vevo.c,92 :: }
GOTO L_main3
;vevo.c,93 :: }
L_end_main:
GOTO $+0
; end of _main
Hello! Köszi a segítséget! Megnézem a boltban, hogy van-e náluk ilyen.
Kis kapcsolouzemu tapokban az opto kisfesz oldalan szokott lenni.
|
|