Fórum témák
- • Porszívó javítás
- • Eredményjelző
- • Audiofil, High End Audio
- • Számítógép hiba, de mi a probléma?
- • Szintetizátor javítás
- • Orsós magnók
- • Nextion érintőképernyős HMI, UART kommunikációval
- • Vásárlás, hol kapható?
- • GPS GSM modulok programozása
- • Dobozolási technikák, műszerdobozok
- • USB bekötése
- • Digitális kapcsoló
- • Elfogadnám, ha ingyen elvihető
- • Időzítő
- • Biciklilámpa / bringalámpa
- • Kemencevezérlés
- • Mosógép vezérlők és általános problémáik
- • Erősítő mindig és mindig
- • 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
- • Suzuki Swift elektronika
- • Kombikazán működési hiba
- • Arduino
- • Villanypásztor
- • LED-es lámpa, meghajtó áramkör
- • Próbapanel (dugaszolós)
- • Codefon kaputelefon
- • CPLD, FPGA - Miértek, hogyanok
- • Analóg oszcilloszkóp javítása
- • Teljesítmény -LED, powerLED (pl. Cree, Luxeon) vezérlése
- • Tranzisztorok helyettesítése
- • Sprint-Layout NYÁK-tervező
- • Autórádió (fejegység) problémák, kérdések, válaszok
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Transzformátor készítés, méretezés
- • Hibrid erősítő
- • Napelem alkalmazása a lakás energia ellátásában
- • Gázkazán vezérlő hibák
- • Nagy áramú pwm vezérlő építése
- • Műhelyünk felszerelése, szerszámai
- • Elektronyika orosz digitális órák
- • Leválasztó transzformátor
- • ESR mérő
- • Ultrahangos párásító
- • Mosogatógép hiba
- • DSP - Miértek, hogyanok
- • Frekvenciaváltó
- • LCD TV probléma
- • Villanyszerelés
- • Opel Astra elektromos hibák
- • LCD monitor probléma
» 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.
No, lemaradtak a fájlok. Most pótolom. Sajnos csatolni csak jpg -t lehet, tehát az eredeti kép ugyanez, csak egy 565-ös BMP. Így ti is össze tudjátok vetni a csatolt hex-képpel (a kép valós mérete nálam 17x17 pixel!)
Az a baj , hogy nem a hexeditor számol rosszul, egész egyszerűen nem stimmel az adat. A hozzászólás módosítva: Aug 9, 2014
A hexában bejelöltem két fehér (FF) kocka közötti adatsort. Ez 32 (32x00) bájt, tehát 16 fekete kocka. A képen viszont 17 van, és ahhoz, hogy ezt bájtról bájtra kiküldhessem a pickel az sd-ről, a hexának is 17pixel adatát, tehát 34 Bájtot kellene két FFFF között tartalmazia.. Ezt nem értem... A hozzászólás módosítva: Aug 9, 2014
Helosztok.
Nem tudom életrekelteni 12f683 ban az ADC t. Egy programozható gyújtás lenne. Régóta szenvedek vele, nem akar jó lenni. (tudom hogy sok hülyeség van benne dehát kezdő vagyok na Még majd gyomlálva, finomítva lesz. ) Amúgy megy szépen ha a terhelésjelet nem AD ről akarom beolvasni. A furcsa az, hogy ha nem is használom az AD által beolvasott értéket és 5V ot kötök GP4/AN3 ra, megzavarodik az egész. Strobi ledje elkezd erősen világítani, sokkal több jel érkezik mint kéne. unsigned short rto,lto,lrto,a=0,eesv;
unsigned int times=0, time=0;
unsigned long rpmp, rpmpt, loadp, loadpu, loadpt;
unsigned int rpms, engine_rpm = 0;
unsigned short rpmsize,rpmsizefix,loadsize,loadsizefix;
unsigned int io,it;
unsigned short loada, engine_load = 0, engine_loada = 0;
unsigned int dell = 0;
unsigned short i=0;
void main() {
CMCON0=0x07;
TRISIO = 0b00010100;
ANSEL=0b01011000;
ADCON0 = 0b10001101;
GPIObits.GP0 = 0;
INTCONbits.GPIF = 0;
OPTION_REG = 0b11000000; //LtoH GPPU off;
TMR1H = 0;
TMR1L = 0;
PIR1bits.TMR1IF = 0;
PIE1 = 0b00000001;
INTCON = 0b11010000; //GEIE,PEIE,GPIE=1;
T1CON = 0b00100001; //B0 TMR1ON=1 | B4/B5 T1CKPS12 1:4 - 2uS per tick;
PIR1bits.ADIF=0;
PIE1bits.ADIE=1;
EEADR = 0;
EECON1bits.RD = 1;
rpmsizefix = EEDAT;
EEADR = 1;
EECON1bits.RD = 1;
loadsizefix = EEDAT;
while (1==1) {
rpms = engine_rpm;
loada = engine_load; //=(unsigned short)engine_load;
loadsize = loadsizefix;
rpmsize = rpmsizefix;
while (rpmsize > 1) {
rpmsize--;
EEADR = (rpmsize + 1);
EECON1bits.RD = 1;
io = (EEDAT * 50);
if (rpms >= io) {
EEADR++;
EECON1bits.RD = 1;
it = ((unsigned int)EEDAT) * 50;
rpmp = ((((long)rpms * 100) - ((long)io * 100)) / (((long)it - (long)io)));
break ; //exit while
}
//endif
}
//endwhile
/////////////////ENDRPMLOOP/////////////////////////////////////////////////////////////
while (loadsize > 1) {
//%/%/%/
loadsize--;
EEADR = rpmsizefix + loadsize + 1;
EECON1bits.RD = 1;
io = EEDAT;
////////
if (loada >= io) {
EEADR++;
EECON1bits.RD = 1;
//it=EEDAT;
loadp = ((((long)loada * 10000) - ((long)io * 10000)) / ((long)EEDAT - (long)io));
/// lsf, rsf+lsf +1
EEADR = ((loadsize + ((rpmsize - 1) * loadsizefix)) + rpmsizefix + loadsizefix + 1);
//¤-----O
EECON1bits.RD = 1; //I-----I LRTO OK!
lrto = EEDAT; //O-----O
EEADR = EEADR + loadsizefix; //O-----O
EECON1bits.RD = 1; //I-----I LTO OK!
lto = EEDAT; //¤-----O
EEADR++; //O-----O
EECON1bits.RD = 1; //I-----I EESV OK!
eesv = EEDAT; //O-----¤
EEADR = EEADR - loadsizefix; //O-----¤
EECON1bits.RD = 1; //I-----I RTO OK!
rto = EEDAT; //O-----O
////////////////////////////////////////////////////////////////////////////////////////////////////
if (lrto > rto) {
//loadpmax=10000 --> 100% //O-¤---O
loadpt = loadp * ((long)lrto - (long)rto) ; //I-----I ¤: loadpt
loadpt = loadpt + ((long)rto * 10000); //O-----O
}
else {
loadpt = loadp * ((long)rto - (long)lrto) ;
loadpt = loadpt + ((long)lrto * 10000);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
if (lto > eesv) { //O-----O
loadpu = loadp * ((long)lto - (long)eesv); //I-----I ¤: loadpu
loadpu = loadpu + ((long)eesv * 10000); //O---¤-O
}
else {
loadpu = loadp * ((long)eesv - (long)lto);
loadpu = loadpu + ((long)lto * 10000);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/// rpmpmax=100 --> 100%
// L O A D
if (loadpu > loadpt) { //O-----O R. #: final rpmpt
rpmpt = rpmp * (loadpu - loadpt); //I--#--I P.
rpmpt = rpmpt + (loadpt * 100); //O-----O M.
}
else {
rpmpt = rpmp * (loadpt - loadpu);
rpmpt = rpmpt + (loadpu * 100);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//125000 2:1
dell = (unsigned int)(((long)rpmpt * 25) / ((long)engine_rpm * 300));
break;
}
///////////////////////ENDLOADLOOP///////////////////////////////////
if (a > 20){
ADCON0bits.GO_nDONE=1;
}
else a++;
}
///////////END^2LESSLOOP/////////////////////////////////////////////////////////////////
}
///////////ENDMAIN////////////////////////////////////////////////////////////////////////
}
static void interrupt ISR (void) {
//////////////////////////GP2INT///////////////////////////////////////
if (INTCONbits.INTF == 1) {
//ENGINE ALREADY RUNNING
if (T1CONbits.TMR1ON==1) {
T1CONbits.TMR1ON = 0; //STOP timer
time = TMR1H;
time = time << 8;
time = time + TMR1L ;
T1CONbits.TMR1ON=1;
TMR1L=0;
TMR1H=0;
do {
times = TMR1H;
times = times << 8;
times = times + TMR1L;
}
while (times < dell);
GPIObits.GP0 = 0;
GPIObits.GP0 = 0;
GPIObits.GP0 = 1;
GPIObits.GP0 = 0;
engine_rpm = ((unsigned int)(15000000 / (unsigned long)time));
//engine_load++;
//if (engine_load > 100) engine_load = 0;
INTCONbits.INTF = 0;
//ALREADY R.
}
//not run at b.
else {
GPIObits.GP0 = 1;
T1CONbits.TMR1ON = 1;
//engine_run=1;
INTCONbits.INTF = 0; ///RETFIE
}
//NOT RUN AT B.
INTCONbits.INTF = 0; ///RETFIE
}
/////////////////////////////////////GP2INT//////////////////////
//////////////////TMR1INT/////////////////////
else if (PIR1bits.TMR1IF == 1) {
///TMR1 OVERFLOw
i++;
if (i > 25) {
engine_rpm = 1;
T1CONbits.TMR1ON = 0;
GPIObits.GP0 = 0;
i=0;
}
TMR1H = 0;
TMR1L = 0;
PIR1bits.TMR1IF = 0; ///RETFIE
}
/////////////////TMR1INT/////////////////////
if (PIR1bits.ADIF == 1) {
ADCON0bits.ADFM = 1;
engine_loada = ADRESH;
engine_loada = engine_loada << 8;
engine_loada = engine_loada + ADRESL;
engine_load = ((engine_loada + engine_load) / 2);
if (engine_load < 1000){
engine_load = engine_load / 10;
}
else engine_load = 100;
a=0;
PIR1bits.ADIF = 0;
}
////////////////ADINT///////////////////////
}
A hozzászólás módosítva: Aug 9, 2014
A go_ndone bit pollingjával szépen működik az adc. Megszakítással lesz valami gond.
Sziasztok!
Meg építettem az LCM3 kis műszert, és az a problémám hogy a PIC16F690-es be ami volt program sikerült ki törölnöm. A cikkekben az LCM3 hex fájljait amiket le lehet tölteni,valahogyan át kellene alakítani bin formátumba, hogy tudom ezt meg csinálni?, mondjuk nekem csak a lcm3_v1.2.hex //alap verzió kellene persze bin formátumban. Előre is köszönöm a segítséget! A hozzászólás módosítva: Aug 10, 2014
Tévedtem. Egyszer sikerült összehozni, hogy nagyjából jó legyen, mostmár pollinggal se jó. ADFM bitre egyáltalán nem realgál. GP4 tápra és megint kétszáz lapátja van a motor szimulálására használt ventillátornak a strobifény alatt. Úgyérzem hogy félreteszem a projektet egy időre. Esetleg megpróbálok írni egy adc tesztprogramot, és kikísérletezni a dolgokat.
Szia,
Nem tudom, mit értesz "bin formátum" alatt, de ha a lefordított programot, akkor szerintem nincs semmi más dolgod a hex fájlokkal, mint egy alkalmas eszközzel (PICkit2 és társai) beírni a PIC-be. Vagy valamit félreértettem...
Sziasztok!
Hitachi LCD kijelzőre szeretnék macrot írni, amivel kiírathatok egy szöveget.
Pl.: LCD_TEXT "szevasz!"
Ezt lehet simán így, :
LCD_TEXT macro text
local TABLE
.
.
.
TABLE
ADDWF PCL,F
DT text
DT 0X00
ENDM
, vagy valahogy máshogy kell implementálni?
Csak a PCLATH regiszter feltöltésére és a 256 byte -os határokra kell még vigyázni. A hozzászólás módosítva: Aug 12, 2014
Most még csak simán 8 ledet próbálok így meghajtani a C portról, de valamiért nem működik.
Az összes led világít, nem történik semmi más ezzel a macroval.
LED_FLASH macro table
LOCAL FLASH
LOCAL TABLE
BANKSEL PORTC
CLRF STATE ;kívül deklarált változó
FLASH:
CALL TABLE
XORLW 0X00
BTFSC STATUS,Z
EXITM
MOVWF PORTC
DECFSZ DELAY1
GOTO $-1
DECFSZ DELAY2
GOTO $-3
INCF STATE,F
GOTO FLASH
TABLE:
MOVFW STATE
ADDWF PCL,F
DT table,0x00
ENDM
Viszont ha a macro helyett a kódot írom a főprogramba, akkor meg működik:
BANKSEL PORTC
CLRF STATE
FLASH:
CALL TABLE
XORLW 0X00
BTFSC STATUS,Z
GOTO $+13 ;makro utáni sor
MOVWF PORTC
DECFSZ DELAY1
GOTO $-1
DECFSZ DELAY2
GOTO $-3
INCF STATE,F
GOTO FLASH
TABLE:
MOVFW STATE
ADDWF PCL,F
DT "ASD",0x00
A hozzászólás módosítva: Aug 12, 2014
Pic konfigurációs bit absztrakt értékeknek próbálok utána nézni. Telepítve van egy mplab c for pic32 v 2.02-es, és keresném a pic32mx795f512l config bitjeinek előre definiált értékeit.
Amit a config bit nevekhez eddig találtam, az "C:\Program Files (x86)\Microchip\mplabc32\v2.02\ pic32-libs\include\proc\p32mx795f512l.h" file-ból került elő. A config regiszter bitek nevei ott vannak a 14133-tól 14210-ig sorokban.
Beleakadtam egy olyan projectbe, ami valami nagyon varázslatosan használja a config opciókat a hozzá mellékelt kommentekhez és az elektronikához képest, és a mélyére ásnék, mi is van ott igazából.
Így csináld:
table macro text
MOVFW STATE
ADDWF PCL,F
DT text,0x00
ENDM
LED_FLASH table "hello"
BANKSEL PORTC
CLRF STATE ;kívül deklarált változó
FLASH:
CALL LED_FLASH
XORLW 0X00
BTFSC STATUS,Z
goto EXIT
MOVWF PORTC
DECFSZ DELAY1,f
GOTO $-1
DECFSZ DELAY2,f
GOTO $-3
INCF STATE,F
GOTO FLASH
EXIT: goto $
De azt szeretném hogy a főprogramban csak ennyi legyen:
Vagy a próbálkozás idejére gondoltad hogy így csináljam? Mert arra tényleg jó. A hozzászólás módosítva: Aug 12, 2014
LEDFLASH macro text
local table
local FLASH
local LEDFLASHEXIT
BANKSEL PORTC
CLRF STATE ;kívül deklarált változó
FLASH:
CALL table
XORLW 0X00
BTFSC STATUS,Z
goto LEDFLASHEXIT
MOVWF PORTC
DECFSZ DELAY1,f
GOTO $-1
DECFSZ DELAY2,f
GOTO $-3
INCF STATE,F
GOTO FLASH
table:
MOVFW STATE
ADDWF PCL,F
DT text,0x00
LEDFLASHEXIT:
ENDM
LEDFLASH "hello"
LEDFLASH "word"
De miért is jó, hogy a kijelzés vezérlés annyiszor fog szerepelni a kódban, ahányszor a macro -t leírod?
Először örülök, ha működik. Miután sikerül, majd akkor szedem csak szét két részre. Külön egy lookup table készítésre és külön a vezérlésre.
És köszönöm a segítséget! A hozzászólás módosítva: Aug 12, 2014
Sziasztok,
Egy LED-et szeretnék bekapcsolni PIC16F877A-val. A LED egyik lábát GND-re, másikat 330ohmos ellenálláson keresztül a PIC 2-es lábára (RA0) kötöttem. (Jó polaritással!)
Az alábbi programmal próbálom a LED-et bekapcsolni, de semmi nem történik.
#include <..\inc\p16f877a.inc>
__config ( _WDT_OFF & _PWRTE_OFF & _CP_OFF & _WRT_OFF & _DEBUG_OFF)
ORG 0x0000
bsf STATUS, RP0
bcf STATUS, RP1 ; Bank1
movlw 0x06
movwf ADCON1
clrf TRISA
bcf STATUS, RP0 ;
bcf STATUS, RP1 ; Bank0
movlw 0xFF
movwf PORTA
goto $
end
MPLAB IDE 8.90-et használok.
A fordítás, letöltés alatt minden rendben lévőnek látszik. Nincs hibaüzenet.
Bár, ha a 'Verify the contents the target device' ikonra kattintok, akkor az alábbi üzenetet kapom:
Verifying Target
PIC16F877A found (Rev 0x8)
Verifying Program Memory (0x0 - 0x1FFF)
PK2Error0027: Failed verify (Address = 0x0 - Expected Value 0x1683 - Value Read 0x0)
PICkit 2 Ready
Ennek mi lehet az oka?
Fura az is, hogy ha 'Read target device memories' ikonra nyomok, majd a menüből a View/Program memory pontot választom, akkor a megjelenő ablakban csupa nullát látok, Itt nem az általam imént betöltött kódot kéne ekkor látnom?
Kösz a segítséget.
L.
A config-ból hiányzik az órajel beállítása, lehet egy port inicializálás sem ártana (ahogy az adatlap írja).
Programozónak válaszd ki a PICkit2 -t, ne debugger -nek. A hozzászólás módosítva: Aug 13, 2014
Kösz. A port inicializálását beírtam most így néz ki a kód. Sajnos a LED most sem világít
#include <..\inc\p16f877a.inc>
__config ( _WDT_OFF & _PWRTE_OFF & _CP_OFF & _WRT_OFF & _DEBUG_OFF)
ORG 0x0000
ORG 0x0000
bsf STATUS, RP0
bcf STATUS, RP1 ; Bank1
clrf PORTA
bsf STATUS, RP0
bcf STATUS, RP1 ; Bank1
movlw 0x06
movwf ADCON1
clrf TRISA
bcf STATUS, RP0 ;
bcf STATUS, RP1 ; Bank0
movlw 0xFF
movwf PORTA
goto $
end
Az órajel beállítását nem tudom, hogyan kell csinálni. Korábban 16F690-et, 12f675-öt programoztam teljesen sikeresen, azokon nem kellett az órajelet beállítani. Ezen kellene?
Kösz, de természetesen programmernek van a PICKIT2 kiválasztva a menüben, különben nem is tudom a programot áttölteni, hibaüzenetet kapok.
Már hogyne kellett volna! Milyen kaviccsal hajtod?
Az .inc állományban megnézheted milyen opciók vannak. Látszik, hogy többféleképpen is lehet beírni, de ugyan azt az eredményt adja ( _FOSC_HS vagy _HS_OSC is 3FFE-t ad). ;----- CONFIG Options --------------------------------------------------
_FOSC_LP EQU H'3FFC' ; LP oscillator
_LP_OSC EQU H'3FFC' ; LP oscillator
_FOSC_XT EQU H'3FFD' ; XT oscillator
_XT_OSC EQU H'3FFD' ; XT oscillator
_FOSC_HS EQU H'3FFE' ; HS oscillator
_HS_OSC EQU H'3FFE' ; HS oscillator
_FOSC_EXTRC EQU H'3FFF' ; RC oscillator
_RC_OSC EQU H'3FFF' ; RC oscillator
A PORTA a 0 bankban van, a bcf,bsf helyett használd a banksel PORTA parancsot, sokkal áttekinthetőbb.
Idézet: „__config ( _WDT_OFF & _PWRTE_OFF & _CP_OFF & _WRT_OFF & _DEBUG_OFF)”
A DEBUG konfigurációs bitet az MpLab kezeli. Vedd ki a sorból. Az oszcillátor beállítást tedd hozzá a sorhoz. 4MHz alatt _XT_OSC, felette _HS_OSC kell.
__config ( _HS_OSC & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _WRT_OFF)
A programot Release módban fordítsd. Az ablakban felül közepen a Debug -ot állítsd át release -re.
Módosítottam a __config beállítást. Alaphelyzetben gondolom _HS_OSC kell.
Annyit változott a helyzet, hogy a 'Verify the contents the target device' már nem ad hibaüzenetet.
Sajnos a LED továbbra sem világít
A Release mód megint csak nem tudom mi. Én nem látok Az ablakon felül (máshol sem) olyat ahol Debug-ot Release-re tudnám állítani. De gondolom abban lehet, mert fordításkor ezt írja ki:
Release build of project `C:\PIC\asm_\test_1.disposable_mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.49, mplink.exe v4.47, mplib.exe v4.47
Wed Aug 13 22:10:23 2014
----------------------------------------------------------------------
BUILD SUCCEEDED
Tápszűrő kondenzátorok (min. 2 db 100nF kerámia), quartz + 2 db 22pF és a MCLR láb és a Vdd közötti 10k ellenállás be van kötve? A két - két Vdd és Vss láb páronként össze van kötve?
Nekem az a Combo box szűrke és nincsen semmi benne ?!?! Az meg hogy lehet, hogy Neked igen??
Létre van hozva egy project, és hozzá van adva ez az asm file?
Hát azt hiszem igen. Ezek megvannak. És még azt is kipróbáltam, ha a kék vezetéket a PIC 2-es lábáról átdugom a +5 voltba, akkor kigyúl a led, szóval jó a led és nem kötöttem be fordítva.
Hát most már tényleg nem tudom, hogyan tovább....
Nem, nincsen project.
A Project menüben a Quick build parancsra nyomok. Ennyi. Korrábban is mindent így fordítottam. Még egyszer sem csináltam projectet.
|
|