Fórum témák
» Több friss téma |
Továbbra is hiba. A változatosság kedvéért:
make[2]: *** [build/default/production/16F716.p1] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2
Nem tudom mit csinálsz, nálam minden hiba nélkül lefordult amit Hp41C csinált neked!
Nagyon rendesek vagytok, hogy így segítetek!! De sajnos nekem erre is ugyanazt a hibát írja ki. Ezek szerint valami az MPLAB X IDE általános beállításainál lehet elrontva. Talány.....
Azért nem hiszem, hogy akkora kihívás feltelepíteni a MPLAB X IDE-t, meg az XC8 fordítót! Tele van a youtube videóval hogyan kell! Például: Download and Install MPLAB X IDE
Egy előző hibából kiindulva: van a fájl(ok) elérési útjában szóköz és/vagy speciális karakter?
Azt hiszem javasolták már, nem tudom megcsináltad-e, hogy létrehozol egy tök új projekt-et, és ebbe bemásolod a forrásfájlokat, utána hozzáadod a másoltakat az új projekt-be.
Volt szóköz, de máshova athelyeztem. De nem javult meg. Aztán az egész MPLAB-t letöröltem és újra telepítettem.. De nincs változás.
Megcsináltam, nincs változás. Átnézem még az MPLAB beallitasait.
Az egész fordítási üzenetet írd ide ne csak azt ahol a hibát írja.
CLEAN SUCCESSFUL (total time: 2ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf make[1]: Entering directory 'F:/Elektronika/Microchip/Ajto.X' make -f nbproject/Makefile-default.mk dist/default/production/Ajto.X.production.hex make[2]: Entering directory 'F:/Elektronika/Microchip/Ajto.X' "F:\Elektronika\Microchip\xc8\v2.32\bin\xc8-cc.exe" -mcpu=16F716 -c -mdfp="F:/Elektronika/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8" -fno-short-double -fno-short-float -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../xc8/v2.32/pic/include" -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/Ajtok.p1 Ajtok.c ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries Ajtok.c:30:9: error: unknown type name 'u_n_i_o_n' typedef u_n_i_o_n _BYTE_VAL ^ Ajtok.c:30:28: error: expected ';' after top level declarator typedef u_n_i_o_n _BYTE_VAL ^ ; Ajtok.c:47:1: error: unknown type name 'BYTE_VAL' BYTE_VAL porta = 0; ^ Ajtok.c:48:1: error: unknown type name 'BYTE_VAL' BYTE_VAL portb = 0; ^ 4 errors generated. (908) exit status = 1 nbproject/Makefile-default.mk:107: recipe for target 'build/default/production/Ajtok.p1' failed make[2]: Leaving directory 'F:/Elektronika/Microchip/Ajto.X' nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed make[1]: Leaving directory 'F:/Elektronika/Microchip/Ajto.X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed make[2]: *** [build/default/production/Ajtok.p1] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 856ms)
Írja hogy az „Ajtok.c:30:9: error: unknown type name 'u_n_i_o_n'” vagyis a 9. sorba nem vetted ki az alsó aláhúzásokat az u_n_i_o_n betűk közül pedig Hp41C még fel is hívta rá a figyelmed!
Egyébként meg csatolt neked egy 16F716.c fájlt annak a tartalmát egy az egybe másold be main fájlodba, de más ne legyen benne.
Bocs, nem a végleges hibaüzenetet küldtem. Azóta minden verziót kipróbáltam...
Mellékelem a "jó" hibaüzenetet. A hozzászólás módosítva: Ápr 17, 2021
Az XC8 a 2. verziótól már nem a C90 szabványt használja, hanem a C99-est! A megoldás: File - Project Properties ablaknál XC8 Global Options és ott a C Standard részt változtasd meg C99-ről C90-re majd Apply és OK. És utána fordítsd le újra.
Sikerült!! Köszönöm!
Csak a Proteus szimuláció szerint egyáltalán nincs kimenet, hiába kapcsolgatom a bemeneteket.
Ha jól értelmezem az első kérdésedet, akkor minden ajtóhoz tartozik egy reed relé ami nyitásra magas jelet ad, és ennek hatására kellene egy hozzá tartozó reteszelő relének magas jelet adni? A bemeneteket lehúznám GND-re egy egy 10K ellenállással és egy lehetséges megoldás:
Persze még lehetne esetleg pergésmentesítést is tenni bele.
Tökéletesen működik! Egy kicsit más a feladat, mert egy-egy ajtó nyitásérzékelője, nem csak egy ajtóra, hanem egy csoport másik ajtó mágnesére hat. De ezt sikerült megoldani. Szerintem pergetésmentesítésre sincs szükség. Még egy kérdés: miért gondolod, hogy a bemeneteket le kellene húzni a földre? Anélkül nem működne? A szimulátor szerint anélkül is jó.
A bemenetet nem szoktuk lebegni hagyni, hanem egy 10K ellenállással vagy földhöz vagy a táphoz kötjük, így mindig biztos az állapota vagy 0 vagy 1.
Azt meg tudjátok mondani, hogy milyen parancsot kell beírni, ha azt szeretnénk, hogy később ne olvashassák ki a programot a PIC-ből?
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
helyett #pragma config CP = ON // Flash Program Memory Code Protection bit (Code protection on) Ha PICkit2/3/4 -gyel programozol, az írás közbeni ellenőrzés sikerül, de a továbbiakban külön indított ellenőrzések hibára futnak.
Sziasztok!
Az volna a kérdésem, hogy hogyan lehet azt programozni, hogy egy nyomógomb hatására a PIC egyik kimenete 20 sec-ig aktív legyen és ugyanakkor egy másik kimenete ez alatt a 20 sec alatt 10 sec legyen aktív. Volt egy ötletem, de az nem működik. Sajnos addig, amíg az egyik kimenet ideje nem jár le, addig a másik kimenet vár.
Mennyire kell pontosnak lennie a 10 ill. 20 sec -nek?
Fel kell programozni egy timer -t periodikus megszakításkérésre. Minden kimenethez egy számlálót kell felvenni. Ha bekapcsolsz egy kimenetet, a hozzá tartozó számlálót a bekapcsolási időhöz tartozó értékre kell beállítani. A timer megszakítási rutinja figyeli a számlálókat, ha nem 0 az rétékük, csökkenti eggyel, ha így elérte a 0 -t, kikapcsolja a hozzá tartozó kimenetet.
Ha teljesül a feltétel:
A és B kimenetet bekapcsolod. Vársz tíz másodpercet. B kimenetet kikapcsolod. Vársz tíz másodpercet. A kimenetet kikapcsolod. Szerencsésebb lenne Timer-rel megoldani, ahogy Hp41C írta, de úgy érzem, egyelőre ennyi is elég lesz a tanuláshoz. Ismertetett móddal az a baj, hogy a várakozás időtartama alatt nem csinál semmit a kontroller. Ha ez nem probléma, akkor hajrá!
Nem kell pontosnak lennie.
Csináltam egy Timer próbát, hogy működik-e. De valami nem teszik neki. Most ez csak annyit csinálna, hogy pár másodpercig aktív a kimenet. De nem akarja az igazságot.
Nem ártana engedélyezni a megszakításokat (a while(1) ciklus előtt).
Továbbá ha regiszterek bitjeire hivatkozol, akkor ne felejtsd el odaírni azt hogy 'bits', mint ahogy az a fenti példában is látható. A hozzászólás módosítva: Ápr 20, 2021
Idézet: „Nem ártana engedélyezni a megszakításokat (a while(1) ciklus előtt).” Akkor meg kellene írni a megszakítás koszolgáló rutint is... Én inkább a TMR1 bekapcsolását vinnén a while -on kívülre.
Ez így működhet, hiszen a főprogram gyakran lekérdezi a TMR1IF állapot bitet. A hozzászólás módosítva: Ápr 21, 2021
A hozzászólás módosítva: Ápr 21, 2021
A Te megoldásod nem működik nálam, de a tőletek kapott segítségekből összeraktam a saját elképzelésemet és ez így tökéletes. Most még csak annyit tud, hogy az egyik kimenet a nyomógombra azonnal magas lesz, egy másik csak később. A többi szükséges verziót már össze tudom hozni. Köszönöm!
Csak még az nem világos, ha a számlálót úgy töltöm fel, hogy 1 sec alatt csorduljon túl, akkor a k értéke miért nem másodperceket jelent. Beállítások: 2 MHz, Fosc=2/4=0,5 MHz. Prescaler:1:8. Így egy sec alatt 62500 művelet van. Tehát 3035-re töltöttem fel. Így 1 sec alatt túlcsordul, így ha k=10-nél akarok kapcsolni, akkor a szimulátor szerint az nem 10 sec múlva kapcsol, hanem kb. 14 sec múlva. K=30-nál pedig kb. 38 sec-nál. Nem értem miért.
|
Bejelentkezés
Hirdetés |