Fórum témák
» Több friss téma |
A szimulációt ne vedd tutira soha! Ha megjelent mindkét sorban, akkor még mindig rossz az init.
Nekem igy néz ki a 4bit-es (alsó 4bit) módú 2soros:
Ezt sem mondom 100%-ra, mivel nem találtam számomra megfelelőt, így elkezdtem írni magamnak egy LCD library-t és ez abból van. Élesben ezt nem teszteltem azt hiszem, csak az elődjét. Ha kell, akkor összedobom a kapcsolást holnap és letesztelem.
Köszönöm! Úgy tudom, hogy a PIC16F628 -en nincsenek LAT regiszterek. Bármilyen típusú LCD kijelzőhöz ezt használod? Gyakorlatilag mindet ugyanúgy kellene inicializalni? Vagy az adatlapok alapján kell módosítani?
Igen az F628-nak nincs LAT regisztere, de a program szempontjából az nem lényeges. PORT regisztert is ugyan így kell használni.
Igen elvileg minden HD44780 kompatibilisnek nevezett LCD kijelzőt így kell inicializálni.
Közben sikerült letesztelnem a saját programom. Szépen működik. Ha ez alapján írsz egy új init()-et magadnak, akkor nálad is kell működjön, ha minden jól van bekötve.
Köszönöm szépen a segítséget! Ki fogom próbálni!
Sziasztok!
Tudnátok segíteni, hogy ez a hibaüzenet mit jelent, mi nem tetszik neki? Köszönöm!! CLEAN SUCCESSFUL (total time: 5ms) make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf make[1]: Entering directory 'F:/OneDrive - Korm�nyzati Informatikai Fejleszt�si �gyn�ks�g/C�ges mappa/Elektronika/Elektronika/MPLABXProjects/ujhoki.X' make -f nbproject/Makefile-default.mk dist/default/production/ujhoki.X.production.hex make[2]: Entering directory 'F:/OneDrive - Korm�nyzati Informatikai Fejleszt�si �gyn�ks�g/C�ges mappa/Elektronika/Elektronika/MPLABXProjects/ujhoki.X' "C:\Program Files\Microchip\xc8\v2.32\bin\xc8-cc.exe" -mcpu=16F628A -c -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -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/ujhoki.p1 ujhoki.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 ujhoki.c:446:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((ora/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:451:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((min/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:456:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((sec/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:548:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((ora/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:553:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((min/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:558:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((sec/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:600:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((ora/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:627:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((min/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ ujhoki.c:653:38: warning: implicit conversion changes signedness: 'int' to 'char' [-Wsign-conversion] LCD_PutC((sec/10)+0x30); ~~~~~~~~ ~~~~~~~~^~~~~ 9 warnings generated. "C:\Program Files\Microchip\xc8\v2.32\bin\xc8-cc.exe" -mcpu=16F628A -Wl,-Map=dist/default/production/ujhoki.X.production.map -DXPRJ_default=default -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -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 -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/ujhoki.X.production.elf build/default/production/ujhoki.p1 ::: 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 :0:: error: (1347) can't find 0x26 words (0x26 withtotal) for psect "text5" in class "CODE" (largest unused contiguous range 0x1E) Non line specific message::: advisory: (1493) updated 32-bit floating-point routines might trigger "can't find space" messages appearing after updating to this release; consider using the smaller 24-bit floating-point types :0:: error: (1347) can't find 0x25 words (0x25 withtotal) for psect "text11" in class "CODE" (largest unused contiguous range 0x1E) :0:: error: (1347) can't find 0x11 words (0x11 withtotal) for psect "text9" in class "CODE" (largest unused contiguous range 0xD) (908) exit status = 1 nbproject/Makefile-default.mk:138: recipe for target 'dist/default/production/ujhoki.X.production.hex' failed make[2]: Leaving directory 'F:/OneDrive - Korm�nyzati Informatikai Fejleszt�si �gyn�ks�g/C�ges mappa/Elektronika/Elektronika/MPLABXProjects/ujhoki.X' nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed make[1]: Leaving directory 'F:/OneDrive - Korm�nyzati Informatikai Fejleszt�si �gyn�ks�g/C�ges mappa/Elektronika/Elektronika/MPLABXProjects/ujhoki.X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed make[2]: *** [dist/default/production/ujhoki.X.production.hex] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 4s)
Mármint ezekre gondolsz: can't find xxx words? Kinőtted a pic-et, elfogyott a memória.
Az MpLab jobban szereti a rövid és ékezetes karakterek nélküli mappa és állomány neveket.
16F648A -ban a program memória 4k szó. A hozzászólás módosítva: Feb 9, 2022
Sziasztok, van egy fura jelenség, PIC16 mcu, MPASM. Találkozott-e már valaki ezzel: digi lábon néznék egy potit, szög egyszerûen:
Idézet: ●elôször lehúzom a kimenetre állított lábat 0-ra, várok (sokat)„ VDD|───[2K]───[47K_POT]─┐ ▲─────┘ │ RA1|───[200R]────┴─────|100n|────|GND” ●majd bemenetre állítom és számolok felfelé (1 byte-on), és figyelek: ●amikor láb szintet vált, kiugrok számolásból (vagy ha számláló túlcsordul) Indításkori "setup" lenne, nem hajszálpontos értéket akarok, csak hogy legyen némi hangolási mozgástér (ott is ahol nincs beépített A/D). Namármost Proteus szimulációban ugrálást mutat a mért érték, nem korrelál a poti állásával. Gondoltam a szimuláció hibája. De valóságban is ugyanaz van, tehát elôször nôl az érték, de némely állásban visszaesik akár töredék értékére, majd továbbfordítva (helipot) az érték az elôzô nagyobb értéktôl következetesen nagyobbat (jót) mutat. Tehát vannak állások ahol felborul a logika. Próbáltam más lábra, másik portra is (TTL vagy ST bemenet), nincs eltérés. Leginkább a miértje érdekel.
Érdekes plussz, hogy ha fordítva csinálom, tehát a PIC tölti, majd a feltöltött kondit húzza nullára a poti, akkor teljesen jó. Program szintjén alig van eltérés, a figyelésben BTFSS helyett BTFSC van, meg a kisütés helyett töltés van.
Estét!
PIC18F16Q40. A jelzett megszakítás tulajdonképpen mikor jelentkezik? Semmit nem találtam róla az adatlapban, csak az összesítő táblázatokban szerepel. Más kontrollerek adalapjában is ennyi van róla.
151. oldalon van a lenyeg, a 137. oldalon a PIE4 reg csak az engedelyezes-letiltas:
A hozzászólás módosítva: Feb 16, 2022
Nem lesz igazan pontos, mert nem linearis a jeled ha csak ellenallason keresztul toltod. Viszont ha aramgeneratorrol toltod, akkor linaris lesz.
Valóban, megvan. UxUIR regiszter gyűjtője.
Mas, mivel TTL es ST bemeneten probaltad ami nem szigoruan szintrogzitett, valoban tortenhet "barmi", hasznalj komparator bemenetet ahol meghatarozott(meghatarozhato) a valtasi szint.
Sziasztok,
Valaki meg tudja mondani mit jelent a (hova lép ezután??) goto $+1 utasítás 16F84 esetén. Provtmr btfss INTCON, T0IF goto Paus movlw 0xFF bcf STATUS, Z ; TimerH=0xFF subwf TimerH, W btfss STATUS, Z goto No incf TimerHH, F clrf TimerH bcf INTCON, T0IF goto Ret No incf TimerH, F bcf INTCON, T0IF nop goto Ret Paus nop goto $+1 goto $+1 goto $+1 goto $+1 Ret return Egy frekvenciamérőben van, nem jövök rá hova lép? Kösz: Attila A hozzászólás módosítva: Feb 20, 2022
Szia!
Rövid válasz: Igen. Hosszabb válasz: A $ jel a fordítónak azt a címet jelenti, ahova az adott utasítás kerül. A 10F, 12F, 16F -eken egy utasítás mindig 1 szó, így a következő utasítás címe $+1. 16F: GOTO $+1 A GOTO $+1 egyszerűen a következő utasítással folytatja a programot. De akkor mi az értelme? A GOTO végrehajtása két utasítás ciklus alatt történik meg, de csak egy szó a tárigénye. A 18F -eken vannak egyszavas (2 byte-os), kétszavas (4 byte-os) és háromszavas (6 byte-os) utasítások. Egy egyszavas utasítást követő utasítás címe $+2, egy kétszavas utasítást követő utasítás címe $+4, egy háromszavas utasítást követő utasítás címe $+6, 18F Példák: BR $+2 GOTO $+4
Köszönöm,
Valami ilyesmire gobdoltam. Tehát csak "időhúzás". Annyiban jobb a NOP-tól, hogy 2 ciklusig tart, és egy helyet foglal, ugyan ennyi időhúzást 2 NOP-al tudok elérni ami 2 helyet foglal. Köszönöm.
Szia!
Nem időhúzás, hanem ugrási címke megspórolása . A $ jel relatív ugrást jelent, lehet előre ,de hátra is lehet ugrani fordító függő általában +/- 127 byte-ot. Semmi köze NOP -hoz, vagy időhöz, viszont tudni kell hogy ahol használod, mekkora helyet foglal el az adott utasítás ,és hogy hova szeretnél ugrani , hogy a $ jel utáni szám jó legyen. Ezért nem nagyon szokás használni, mert körülményes. A hozzászólás módosítva: Feb 21, 2022
Félreérted. Az "időhúzás" kifejezés alatt rövid késleltetést. Ilyesmire sokszor szükség van, az általános milliszekundum nagységrendű késleltetések nem elég pontosak, hiszen gyakran csak mikroszekundomokra van szükség.
Ok hogy relatív ugrás, de szerintem konkértan a +1 re gondolt.
Sziasztok
Esetleg tudna nekem valaki segíteni? Terveztem egy külső belső hőmérőt meg is építettem de sajnos a picbe való programot nem tudom megírni.16f684 pic van benne és 2dbMCP9700 hőérzékelő ami analóg jelet ad ki tehát 2 ad konverterre megy a kijelzés 4digites nixie cső multiplexelve.
Melyik részen akadtál el? Milyen fejlesztőkörnyezetben írod a programot?
Sajnos el sem kezdtem.
Mikor elkészült a panel akkor szembesültem vele hogy még sosem irtam progit és fogalmam sincs hogyan kezdjek hozzá.Eddig csak kész hex-eket égettem a pic be.
Nagyon bátor ember vagy
Ha elküldöd nekem a kapcsolási rajzot és a kívánalmakat (mérési tartomány / elvárt pontosság, stb), talán tudok segíteni. Sokat dolgoztam 16F684 procival, szeretem is
Sziasztok!
Készítettem egy stoppert. Abban tudnátok segíteni, hogy az óra miért siet? 1 óra alatt 11 másodpercet siet. Ha a PR2-t 249-ről 250-re állítom, akkor meg késik, óránként 7 másodpercet. PIC16F628A. Belső 4 Mhz órával. Én így állítottam be: (Részlet a programból) void __interrupt() megszak (void) { if(PIR1bits.TMR2IF) { if(mpcount==100){mpcount=0;mpflag = 1;} // lejárt az 1 sec PIR1bits.TMR2IF=0; } } void main (void) { PCONbits.OSCF=1; // a bels? oszc. 4 Mhz OPTION_REG = 0x55; // Set TMR0 configuration and enable PORTB pullups INTCON = 0b11000000; // ' Enable global interrupts, Disables all peripheral interrupts, disable timer0 interrupt CMCON = 0x07 ; // analóg komparátorok kikapcsolva, RA0-1 digitális port! PORTB = 0b00000111; PORTA = 0; TRISA = 0b00100000; // RA0, RA7 port bemenet, relé vagy LED TRISB = 0b00001111; // RB2 és RB3 bemenet, a többi kimenet // timer2 beállítása PR2=249; //timer2 250órajel után ujrakezdi a számolást T2CON= 0b01001101 ; //4 el?osztó modul on 10 utóosztó PIE1bits.TMR2IE=1; // tmr2 irq enable Köszönöm szépen!
A kérdésben benne van a válasz is. Azért nem elég pontos, mert a belső órajelet használod. Vagy kompenzálod időnként a tapasztalati értékkel vgay használsz külső, pontosabb órajelet, pl. kvarcot.
Sziasztok! Szeretném mérni egy PIC16F627A betápjáért felelős elem feszültségét és ha egy bizonyos szint alá csökken, akkor egy LED jelzi, hogy elemcsere szükséges. Mivel nincs analóg bemeneti lehetőség, arra gondoltam, hogy a komparátor referenciafeszültségéhez mérem a tápot. Csak elbizonytalanodtam, mert a referenciafeszültséget egy függvénnyel lehet megadni, amiben szerepel a VDD is. Tehát, ha a betáp csökken, akkor a VDD is változik és a referenciafeszültség is csökken? Ha ez így van, akkor ez nem alkalmas erre a feladatra. Igaz, vagy valamit rosszul gondolok?
Köszönöm! |
Bejelentkezés
Hirdetés |