Fórum témák
- • Audiofil, High End Audio
- • Dióda helyettesítés
- • Kapcsolási rajzot keresek
- • Vezetéknélküli termosztát
- • Eredményjelző
- • Mosógép vezérlők és általános problémáik
- • Induktivitásban tárolt energia
- • Gáz fogyasztás monitorozása
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Kapcsolóüzemű táp 230V-ról
- • Rádióamatőrök topikja
- • Vicces - mókás történetek
- • Villanyszerelés
- • Hűtőgép probléma
- • Analóg oszcilloszkóp javítása
- • Elfogadnám, ha ingyen elvihető
- • A műhely (bemutató topik, ahol az alkotások készülnek)
- • Opel Astra elektromos hibák
- • Számítógép hiba, de mi a probléma?
- • Arduino
- • Felajánlás, azaz ingyen elvihető
- • Rádió áthangolása, OIRT - CCIR konverter
- • Kazettás magnó (deck) javítása
- • Hűtőgép kompresszor
- • Kombikazán működési hiba
- • Klíma szervizelés, javítás
- • Klíma beszerelése, fűtés-hűtés házilag
- • Tápegységgel kapcsolatos kérdések
- • Fejhallgató erősítő
- • Labortáp javítás
- • MOSFET-ek
- • Sprint-Layout NYÁK-tervező
- • Tápegység
- • Androidos okos telefonok
- • Tervezzünk nyákot EasyEDA-val
- • Hegesztő inverter javítás
- • Videomagnó problémák
- • Ellenállás
- • Szobatermosztát bekötése
- • HESTORE.hu
- • Multiméter - miért, milyet?
- • Érdekességek
- • Villanymotor bekötése
- • Transzformátor készítés, méretezés
- • Menetszámolós tekercselőgép házilag
- • Leválasztó transzformátor
- • Szigetelésvizsgáló
- • USB 3.2 HUB modul
- • Kamerás megfigyelőrendszer
- • Tranzisztorok helyettesítése
- • Borhűtő vezérlő panel
- • CNC építése házi alkatrészekből az alapoktól
- • Sütő javítás
- • Kondenzátor
- • Eberspacher állófűtés 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.
Sziasztok, olyanra lennek kíváncsi, hogy egy adott impulzusra (mely kb 2mp és 12v) lehet-e csinalni, hogy masik kimeneten megjelenik ugyan az az impulzus es 10mp utan egy kovetkező lábon egy másik szintén 12v os jel, viszont az nem megy csak 3mp et (vagy amíg egy negyedik labra nem érkezik egy jel ami viszont folyamatos es valtozó) , viszont az első folyamat tart a kovetkező 12v os impulzusig.
Itt egész pontosan autó távindításról lenne szó, hogy a 4. jel ami a fordulatszammérőtől érkezik és az letiltja utána az önindítót. 1 jel a gyújtás es a 10mp amíg a mptor készen áll az indításra, ott akár a check engie lámpa elalvására is lehetne kötni. Ha valaki segítene véghezvinni a projektet azt megköszönném.
A sima C forrást első körben object-re (.o) fordítja a compiler, és abból a linker gyárt egy futtatható firmware-t (.bin). Kérés esetén lista file gyanánt (.lst) a linker dob assembly dumpot is. A firmware külön programmal átkódolható hex-re (.hex), ami a pickit bemeneti állománya, azt tudod feltölteni a pic-re. Mplab akár egy lépésben csinálja az egészet, ott lehet, hogy pár dolog el van rejtve a szemed elől, de a folyamat ugyan az.
A feladat könnyedén megoldható, itt inkább az autó biztonságos indítása a kérdéses: sebességbe van, kézifék, esetlegesen túl hideg motor, mi történjen, ha elsőre nem indul el, meddig köszörüljön egy próbálkozás alatt és még egy csomó dolog, ami nem jut eszembe. A hozzászólás módosítva: Jan 15, 2017
Köszönöm a válaszokat!
Idáig csak Arduino-t programoztam, a C alapok mennek, de még PIC-re nem fordítottam programot.
Ma összekötöttem az LCD-t a programozóval és felprogramoztam rá a gyári HEX fájlt, az LCD müködik.
Csak annyival szerettem volna kiegészíteni, hogy ha a 12-es láb fel van huzva 5V-ra, akkor az eepromot töltse meg FF-el és írja ki, hogy RESETED.
Ez a videó alapján megprobálom feltelepíteni majd lefordítani a forráskódot. Ha valamiben elakadod, akkor még írok.
Az object file-okat meg lehet nézni valamivel ( pl. milyen függvények, milyen paraméterekkel vannak benne, vagy ez már itt nem kinyerhető ?! ) ?!
Egy HxD, vagy hasonló bináris fájlnézegetővel valószínűleg megtalálhatók a külső hivatkozások, publikus definícók, szöveges formában. Meg kell próbálni.
A második videó alapján mindent ugy csináltam, ahogyan ott mutatta, de amikor rákattintok a Build-ra egy csomó hibát ír ki. A hozzászólás módosítva: Jan 15, 2017
Ilyen hosszú szöveget nem illik egy fórumba írni. Mellékletként, vagy a kód gombbal légy szíves!
Goooooogle -be " pic16F88 c compiler #pragma ramdef" beírva egyből megadja a fordítót: CC5X
Elnézést kérek, de egy csomó szöveggel együtt lemaradt a [/code] parancs. A moderátort megkérem, hogy törölje ki a hozzászolásból.
Hp41C: Kiprobálom a CC5X-et. A hozzászólás módosítva: Jan 15, 2017
Feltelepítttem ez a leírás szerint, de fordításkor ezt a hibaüzenet kaptam:
CLEAN SUCCESSFUL (total time: 914ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/David/MPLABXProjects/SPlcd.X'
make -f nbproject/Makefile-default.mk dist/default/production/SPlcd.X.production.Hex
make[2]: Entering directory 'C:/Users/David/MPLABXProjects/SPlcd.X'
"C:\Users\David\Desktop\cc5x\CC5X.EXE" ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c
CC5X Version 3.5G, Copyright (c) B Knudsen Data, Norway 1992-2016
--> FREE edition, 8-16 bit int, 24 bit float, 32k code, reduced optim.
../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c:
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 844: Condition (or parts of it) is always false
(This is superfluous code that can be removed - check for application bugs)
Chip = 16F88
RAM : -------- -------- -------- -------- ======== =7...... ........ ........
40h: ........ ........ ........ ........ ......** ******** =******* ********
80h: -------- -------- -------- -------- ........ ........ ........ ........
C0h: ........ ........ ........ ........ ........ ........ -------- --------
100h: -------- -------- ******** ******** ******** ******** ******** ********
140h: ******** ******** ******** ******** ******** ******** -------- --------
180h: -------- -------- ******** ******** ******** ******** ******** ********
1C0h: ******** ******** ******** ******** ******** ******** -------- --------
RAM usage: 151 bytes (10 local), 217 bytes free
Optimizing - removed 19 instructions (-1 %)
File 'serlcd-v2_7_2line_10MHz.occ'
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 775: Read-modify-write sequence on the same PORT may fail
(Two consecutive instructions modifying the same PORT may fail depending on
execution speed and load (fall/rise times) on the port pins. Option -wf will
remove this warning)
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 782: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 783: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 788: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 793: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 799: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 977: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 987: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 1006: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 1010: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 1014: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 1032: Read-modify-write sequence on the same PORT may fail
Warning ../../Desktop/serlcd/serlcd-v2_7_2line_10MHz.c 1037: Read-modify-write sequence on the same PORT may fail
File 'serlcd-v2_7_2line_10MHz.hex'
Codepage 0 has 1463 word(s) : 71 %
Codepage 1 has 0 word(s) : 0 %
Total of 1463 code words (35 %)
* Estimated CODE SIZE of full optimization: 1170 code words (-20 %)
"C:\Program Files (x86)\Microchip\MPLABX\v3.50\mpasmx\mplink.exe"
make[2]: *** [dist/default/production/SPlcd.X.production.Hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
MPLINK 5.08, LINKER
Device Database Version 1.34
Copyright (c) 1998-2011 Microchip Technology Inc.
Syntax: mplink { cmdfile | [objfile] | [libfile] | [option] } ...
'cmdfile' is the name of a linker command file.
All linker command files must have the extension '.lkr'
'objfile' is the name of an assembler or compiler generated object file.
All object files must have the extension '.o'.
'libfile' is the name of a librarian created library file.
All library files must have the extension '.lib'.
'option' is a linker command line option described below.
Linker command line options:
/o <filename> : specify output file 'filename', default is 'a.out'
/m <filename> : create map file 'filename'
/l <pathlist> : list of directories to search for library/object files
/k <pathlist> : list of directories to search for linker command files
/n <length> : number of lines per listing page (0 = no pagination)
/h, /? : show this help screen
/a <hexformat> : specify format of hex programming file
: valid formats are INHX8M, INHX8S, INHX32
/d : do not create listing file
/w : do not invoke MP2COD (no .COD or .LST file)
/x : do not invoke MP2HEX (no .HEX, .HXL, or .HXH file)
/q : quiet mode operation (display no warnings or errors)
/v : verbose mode operation (display all warnings and errors)
/u <sym[=value]> : define linker script symbol and optionally assign value to it
/g : generate the report file for stack analysis
/i : generate the .LST file and no .COD file
/r <memoryrange> : reserve the specified program or data memory region
For reserving program memory :
/r ROM@<startaddress>:<endaddress>
For reserving data memory :
/r RAM@<qualifier>:<startaddress>:<endaddress>
Where, qualifier is either ACCESS, SHARE or GPR
Start/end addresses are specified in hex with 0x prefix
nbproject/Makefile-default.mk:119: recipe for target 'dist/default/production/SPlcd.X.production.Hex' failed
make[2]: Leaving directory 'C:/Users/David/MPLABXProjects/SPlcd.X'
nbproject/Makefile-default.mk:84: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/David/MPLABXProjects/SPlcd.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 3s)
Sziasztok!
Néhány információra lenne szükségem.Azt szeretném,hogy amikor megszakítás jön,akkor belép a rutinba,majd ott kikapcsolja a megszakítást,és kiírja a kijelzőre a 0x45-öt,de csak 0xFD jön másodpercenként a második adattól,mert az első jött adat a 0xFF.Ha a GIE megszakítást nullázom a rutinban,akkor meg semmilyen adat nem jön,pedig előtte az is be volt kapcsolva.
void main()
{
TRISC=TRISA=0;
ANSEL=0;
ANSELH=0;
SPBRG = 25; //9600 baud,PIC16F690,4MHz belső órajel
RCSTA = 0x90;
TXEN = 1;
BRGH = 1;
PIE1bits.RCIE = 1;
INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;
}
void interrupt gps()
{
if(PIR1bits.RCIF)
{
while(!RCIF);
ch=RCREG;
if (OERR || FERR)
{
SPEN = 0;
SPEN = 1;
}
INTCONbits.PEIE = 0;
//INTCONbits.GIE = 0;
while(!TXIF);
__delay_ms(1000);
TXREG=0x45;
}
}
(#) |
Moderátor hozzászólása david10 hozzászólására (») |
Jan 15, 2017 |
|
Máskor figyelj jobban oda, mit csinálsz!
void main()
{
TRISC=TRISA=0;
ANSEL=0;
ANSELH=0;
SPBRG = 25; //9600 baud,PIC16F690,4MHz belső órajel
TXEN = 1;
BRGH = 1;
RCSTA = 0x90;
PIE1bits.RCIE = 1;
INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;
while (1);
}
void interrupt gps()
{
if(PIR1bits.RCIF)
{
while(!RCIF);
ch=RCREG;
if (OERR || FERR)
{
SPEN = 0;
SPEN = 1;
}
PIE1bits.RCIE = 0;
while(!TXIF);
TXREG=0x45;
}
}
A hozzászólás módosítva: Jan 15, 2017
Szuper!És ha csak a 13. vett adatot akarom kiíratni,mert a GPS elég sok adatot küld?
1. A GPS által küldött NMEA0183 sorok elején $ karakter van. Kell egy számláló, amit a $ érkezésekor 12 -ra állítunk. Minden karakter vételekor csökkentjük a számláló értékét, ha 0 lett, a vett karattert elküldjük. Ha megint $ jön, kezdjük előlről.
2. Veszünk két buffert. Minden sikeresen vett karaktert beírunk ebbe a vételi bufferbe és jelezzük a főprogramnak, hogy új karakter jött. Az adási megszakítás megvizsgálja az adási buffert. Ha van benne elköldendő adat, elküldjük, csökkentjük a tárolt karakteret számát. Ha nincs köldendő, letiltjuk az adási megszakítást.
A főprogram kiszedi a vételi bufferből a karaktereket, kibogarássza a számára értékes adatokat a vett NMEA táviatból, feldolgozza, az elküldendő adatokat az adási buffer-be írja. Minden karakter beírásakor engedélyezi az adási megszakítást.
Azt próbáltam,hogy a megszakítás előtt várok egy kicsit,majd azután akartam kiíratni a vett jelet,de semmi reakció.
unsigned char ch;
void main()
{
TRISC=TRISA=0;
ANSEL=0;
ANSELH=0;
TXEN = 1;
BRGH = 1;
RCSTA = 0x90;
PIE1bits.RCIE = 1;
INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;
__delay_ms(1); //ido a megszakitashoz
PIE1bits.RCIE = 0;
__delay_ms(1000); //ido a kiiratashoz
while(!TXIF);
TXREG=ch;
while(1);
}
void interrupt gps()
{
if(PIR1bits.RCIF)
{
while(!RCIF);
ch=RCREG;
if (OERR || FERR)
{
SPEN = 0;
SPEN = 1;
}
}
}
A hozzászólás módosítva: Jan 15, 2017
Fogalmam sincs, mire lenne az jó neked. Egy object file temérdek sok szimbolum hivatkozassal van tele, mert meg nincsenek beleirva a vegleges cimek. Például van egy fuggvenyed, azt becsomagolja indexelve, es ha mashonnet van oda hivatkozas, oda a jump-hoz berakja a szimbolum hivatkozast - es nem a tenyleges cimet. A cimeket a linker pakolja bele, amikor eldonti, milyen sorrendben masolja bele a vegleges allomanyba a fuggvenyeket egymas utan. A sorrend például olyasmire is jo lehet, hogy egy adott program részen belül nagyon sűrűn hívott függvény call far ptr helyett call near ptr-t is kaphasson, mert az gyorsabb, és a függvények adott sorrendje mellett kapni tud olyan helyet is a memóriában, hogy éppen elérhető legyen mindenhonnét. Na olyasmi és hasonlók miatt az object még nem kész program, hanem temérdek sok "bedobozolt" erőforrás. Hogy éppen valamelyik 8 bites pic esetében nincsenek külön call címke típusok, attól az object egy ősrégi megörökölt szerkezet, és a toolchain még ugyan úgy épül fel, maximum az adott sdk-ban átdrótoznak pár használaton kívüli részt.
Ami neked inkább kellhet, dobj a linkerből egy assembly dumpot. Ott már a kész címeken nézhetsz meg mindent. A linker helpje írni fogja, hogyan paraméterezheted fel arra is. Linkerje válogatja.
Köszi Neked és nedudgi kollégának is a segítő sorokat, majd nézegetem ![](/pic/smile/smile.gif) !
Most találtam:
DS51288H a Microchip dokumentum neve. Ez tartalmazza a COFF fájl leírását. (Appendix A) A hozzászólás módosítva: Jan 15, 2017
Szia!
Köszi, de ha jól látom, akkor ez már az 'o' fájlok felhasználását írja le...( ha jól tudom, akkor a linker eredményeként ) ! A hozzászólás módosítva: Jan 15, 2017
Ezt már nem tudhatom, mert nem használok C-t.
Szia!
SPI is van közte: Példák
Üdv.
Köszi, közben meglett, hogy miért nem működött.
Csak Mplab hiba volt..
Látom, nem sok válaszod érkezett. Én C-ben nem vagyok otthon, de gyanítom, hogy ki kell egészíteni a programodat - legalábbis az én érzékelőm is egy kis csavarral adja vissza a hőfokot, bár az adatlap alapján először én is így kezdtem...
Ami frankón működik, azt a kommentek alapján már meg tudod írni.
Tiszteletem a PIC szakértőknek!
Egy outsider kérdez...
Ha valaki szakít időt erre a kérdésre, akkor csak igennel/nemmel válaszoljon a többit nem nagyon fogom érteni. Modellvasutazáshoz szervóvezérlőkhöz (váltóállítás) vannak egyszerű PIC-es kapcsolások a neten. Ehhez a PIC-hez vettem kínából pic programmert.
Annyit jelezett felém egy fórumtárs a hobbivasúton, hogyha feltöltöm a hex filét a pic-be akkor figyeljek, hogy az eredeti órajel maradjon benn a pic-ben (Oscal?).
A pic író ezt a két kérdést tette fel nekem írás előtt. Mind a kettőre NEM-el válaszoltam. Aztán megírta. A pic-et kipróbáltam működik.
Kérdésem: így a pic eredeti órajelét (kalibrációs értékét) használja, jól csináltam az egészet? Vagy csak mázlim volt, hogy működik?
Köszönöm előre is a váalszt!
Newl A hozzászólás módosítva: Jan 18, 2017
Jól csináltad.
Ha rosszul is csináltad volna, kárt nem okoztál volna vele, újra próbálhatnád akárhányszor.
Szia!
Jól csináltad ![](/pic/smile/smile.gif) !
Köszönöm Mindkettőtöknek a választ!!!
Új 12F629, 12F676 stb. a programtár legutolsó szavában tárolja a belső oszcillátor kalibrációs adatát és a konfigurációs szóban a band gap kalibrációt (bit 13 és bit 12).
A korrekt eljárás:
Csatlakoztatás a programozóhoz.
Kiolvasás, az említett két adat felírása, mentése.
Program betöltése a programozó memóriájába.
A programtár utolsó utasítását át kell írni a kiolvasott értékre. Az utasításnak egy retlw xx utasításnak kell lennie (0x34xx). Ugyanis azok a programok, amelyek felhasználják a kalibrációs adatot, egy call utasítással segítségével veszik elő az értéket és beírják az OSCCAL regiszterbe. Ha nem retlw utasítás programtár utolsó utasítása, a program tovább lép és újra a 0x0000 címre kerül.
A konfigurációs szóban az 13. és 12. bit átállítása a kiolvasottra.
Programozás.
|
|