Fórum témák
» Több friss téma |
Fórum Idézet: „a legfurcsább az, hogy ha nem megyek vissza bank 0-ba, akkor jóval bonyolutabb programok is helyesen működnek. De miért?” Vagy összekevered a bank0-t az 1-essel, vagy a TRISIO regiszterrel váltogatod a portlábak irányát(ugyanazon a címen vannak, csak más bankban)! Mikor bemenet nem folyik rajta áram, mikor kimenet akkor folyhat(áramkörtől függően). Hogy állítod be a bankokat? Mit kapcsolnak a lábak? Hogy állítod be a TRISIO-t?
Bocsanat ez a bankolasosdi teljesen elkerulte a figyelmem - ez egy masik problema lesz akkor, de amit elozoleg irtam azt se hagyd figyelmen kivul.
Szoval a PIC nem kepes az egesz memoriat megcimezni, kisse talan furmanyosan van megoldva, maskepp is lehetett volna stb, de igy van. 629-nak ha megnezed az adatlapjat ket bankja van. Az elsot kivalasztva (bank 0) 0-7F, a masodikat (bank 1) kivalasztva pedig 80-FF -ig lehet cimezni. Ha megnezed a memoria terkepet, latszik, hogy a bank 0-n van a GPIO, mig a bank 1-en a TRSIO. Namost az inicializalaskor helyesen 0-s banknal kinullazod a GPIO-t es utana 1-es bankba kapcsolva a TRISIO-val atkapcsolod outputra, ez eddig jo. Ha most ezekutan bank1-ben maradva a movlw 0xFF + movwf GPIO-t vegrehajtod, akkor valojaban a TRISIO-ba teszel FF-et, azaz vissza kapcsolod a portokat inputra. Ha be van kapcsolva a belso felhuzo ellenallas, akkor kb 20k-nak megfelelo ellenallassal a Vdd-t tudod merni a portlabakon - azaz magasnak "latod" a portot. Kitorlod a TRISIO egyik bitjet, erre az ugye atkapcsol outputra, es mivel az ki volt nullazva ezert az 0-s szintet fog neked mukodni - azaz latszolag jol mukodik a port, mintha vegig out lenne... Szoval ha jol ertem, akkor a kodod most valahogy igy nez ki: (inicializalas maradt a regi)
?
Sajnos hiába tűzdelem tele nop-okkal a programot, akkor sem akar jó lenni. Gondolom 60 nop-nak elégnek kéne lennie :S
Persze megfelel az árnyék regiszter használata, de zavar, hogy simán nem jó. Na meg hogy ha 1-es bank-ban vagyok, akkor jó. :S
Köszönöm, erre nem mostanában jöttem volna rá.
Már csak az a kérdés maradt bennem, hogy ha 1-es bank-ban maradok, akkor miért működik helyesen a program? Mondjuk a bank-okat sem értem teljes egészében, ha valaki el tudná magyarázni, hogy miben korlátoz engem, hogy melyik bank-ban vagyok, vagy egy linket tudna adni, ahol részletesen le van írva, akkor boldogságom beteljesülne.
Már régóta foglalkozok PIC-ekkel, de ez a probléma most kifogott rajtam.
A program véleményem szerint hibásan fut ale a PIC-en. PIC12F629-el próbálkozom, de hasonló hiba van a 16F676-on is. Szóval a jelenség a következő: ha ezt a programot lefuttatom, az az eredmény, hogy a GPIO4-es láb magas szintre kerül. Tapasztalatok: -a legfurcsább az, hogy ha nem megyek vissza bank 0-ba, akkor jóval bonyolutabb programok is helyesen működnek. De miért? :S -ha egyszerre módosítom a három bitet, akkor helyes eredményt kapok -általában, de nem mindíg, ha lenulllázok egy bitet, akkor az előtte állítottat 1-re állítja (nem néztem, hogy a bit értéke is egy-e vagy csak lábat emeli fel, de hamarosan megnézem.) Valaki el tudná mondani, hogy miért van ez? (Felteszem, hogy a PIC-ek jók, Potyo féle USB-s ICD2-t használok, mint égető)
Help gomb nyomkodasa ad nemi magyarazatot erre:
Idézet: „Green Production tested. For assemblers/compilers, numbers for the first supported production version are shown also. Yellow not production tested (Beta support available). Red No support currently available” Azaz a sarga nem lett meg letesztelve altaluk, elmeletileg mukodik...
AQLMGabor, Windows szamologep, Nezetban (View) Tudomanyos modba kapcsolsz (Scientific). F5-tel atkapcsolsz hex modba, es ballitod, hogy byte merettel dolgozol. Beirod 9B, utana rakattintasz a not-ra (negalod) majd +1, es kijon a 65h, megnyomod az F6-ot, latod a szamot decimalisan... (abszolut erteke a -101-nek.)
Vissza ellenorzes egyszerubb: beirod neki -101 (decimalis modban) es megnyomod az F5-ot hogy lasd mi jott ki hex-ben... je, 9B ![]() Gondolj bele, hogy milyen egyszeru a computereknek ebben a szamabrazolasban szamolniuk, levonsz a 0-bol egyet, es a byte atcsordul FF-be... azaz -1 -be...
Ugyanerre való a PIC Timer2-nél a Period register, csak nem kezdőértéket kell megadni, hanem végértéket. Az AT89S52-ben is csak a Timer2 rendelkezik automatikus feltöltéssel...
Bocs a hiányos dolgokért...
Szoval szeretném a 18F2550-et USB-n keresztul PC-vel használni pl.: CDC(virtual serial port via USB) vagy mint HID eszköz.A CCS fordítónak vannak példái erre. A soros portot 'Debug' céllal használnám,addig amig az USB-t fölélesztem. Próbáltam a példaprogramot de nem müködött rendesen. Ugygondoltam soros porton keresztül debugolom,de akkor estem pofára,mert az sem müködik. Idáig soha nem volt a soros porttal problémám és a fordító is normálisan működött kisebb bugoktol eltekintve. Most ezekkel a 2550/4550-es PIC-ekkel került elő a probléma. Utána néztem a beállításoknak nekem is hasonló beállítások vannak.
Engem ez a beállítás is aggaszt: setup_oscillator(); Ha nem állítom be akkor: //Setup_Oscillator parameter not selected from Intr Oscillotar Config tab Mondjuk ha beállítom: setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_31250|OSC_PLL_OFF); De a soros port egyik beállítással sem müxik..... Mit csinálhatok rosszul? Mi lehet elrontva? :no: Nincs ötletem.... :no:
A problémát alaposan megkomplikálja a váltókapcsoló. A csatolt képben vázoltam a legegyszerűbb de egyben legdrágább megoldást, a váltókapcsolók átkötése néklül pedig ez az egyetlen lehetséges út új vezeték nélkül. A hálózat feszültség megszűnte utána a 6000µF-os kondi még tárol cirka 1,3C töltést, amivel 4-5 másodpercig bírja egy 60W-os izzó (de csak hagyományos izzóval működik, a kompakt fénycsövek fényerejét nem tudod szabályozni és nem csak ezzel nem).
A probléma a 6000µF/400V= kondenzátor beszerzése. Ilyet egyben valószínűleg nem kapsz, többől kell összeállítani a megfelelő feszültségre, kapacitásra. Ráadásul nem kis pénzért (10-20 eFt) A PTC azért kell, mert bekapcsoláskor nagyot "rúg" vissza. Minden más módszerhez kell egy plussz ér és vezérlő elektronika. Kobold által mellékelt kapcsolás elképzelehtő h. működik, de engem zavar a "do not build this circuit" felirat, (a teljes kavarc érdekében pedig felé van írva h. verified és pipa), és vedd figyelembe h. minden pontján ott lebeg a hálózati potenciál! Úgyhogy nem is kérdeztél olyan egyszerűt!
Meg driver, windows, java, stb.
De érdekes teszt volt. Na, mint kezdő, elkezdtem tanulmányozni jobban a dolgot Itt ez akód: sub procedure interrupt cnt = cnt + 1 ' increment value of cnt on every interrupt TMR0L = 96 INTCON = $20 ' set T0IE, claer T0IF end sub main: T0CON = $C4 ' assign prescaler to TMR0 TRISB = 0 ' designate PORTB as output PORTB = $FF ' initialize PORTB cnt = 0 ' initialize cnt TMR0L = 96 INTCON = $A0 ' enable TMRO interrupt do if cnt = 400 then ' if cnt is 400, then toggle PORTB leds and reset cnt PORTB = not(PORTB) cnt = 0 end if loop until 0 = 1 end. Erre azt írja, hogy minden másodpercben váltja a ledet. 8Mhz osc van megadva. De számolgattam. T0CON nekem 0:32-re jött ki. Namost 8mhz/4/32 az 62500 HZ azaz 16us TMR0L-el van gondom. Ott a 96 azt jelenti, hogy96-ig számol? Mert ugye 8 bitesre van állítva, azt megnéztem. Ha igen, akkor 1 túlcsordulásig 1,536ms telik el. A countert meg 400-ig nézi, de az 0,6144ms, h jólszámolom. Vagy elrontottam vmit? Köszi!
Megjöttek a válaszok a MAXIM-tól:
1.) 0x08 byte írása / olvasása Kérdés: According to the docs the bytes 00..07 are registers, 08-3F are memory (non volatile). However if I try to write to byte 08, no error is indicated, but the value is not changed. Is this a bug or a feature? Writing to bytes 09-3F is OK. Válasz: The RAM locations are written the same as the clock registers, if you can read and write to the clock registers then the RAM locations should be accessible. Megjegyzésem: Pedig az a memória byte akkor sem írható. 2. Másodperc írásakor a másodpercek számolásának módja Kérdés: When setting the seconds, are the fractional seconds set to 0? I.e. when setting the seconds, will the next seconds increase be done after 1 sec? Válasz: The seconds register will increment from the value entered after 1 seconds if the oscillator is running when set. If the seconds value is set then the oscillator is turned on then there can be up to a seconds delay. The delay is due to the oscillator startup time, take up to a second to start. Megjegyzésem: Itt nincs arra válasz, mi van, ha az oszcillátort egyszerre indítom a másodpercek beírásával.
Végül is találtam egy könyvtárban egy a chip-emnek megfelő linker filet, amitől a helyzet jobb lett sok uga megszűnt de most meg ez jött:
c:\program files\microchip\mplab c30\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified Link step failed. BUILD FAILED: Sat Feb 02 23:53:48 2008 Aztán a project build configban megtaláltam a heap méret beállítást, úgyhogy megoldódott.
Hali.
Gondoltam kicsit kipróbálom ezt a c-t egy kicsit, elvégre a diplomamunkámat abban írtam anno. Mivel ez egy pic24fj64g002-es ezért a microchip oldalról ezt szedtem le: MPLAB_C30_v3_02-StudentEdition.exe fel is ment, kérdezte módosítsa e a path-okat mondtam persze, baromi bonyeszos hello.c examlet betöltöttem, kiválasztottam a configure-ban a fenti chipet, megmondtam, a project/select language-ban kiválasztottam a c30-at csináltam egy tök üres linker scriptet, mert ezt írta: Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24FJ64GA002 -c -x c "hello.c" -o"hello.o" -g -Wall Skipping link step. The project contains no linker script. BUILD FAILED: Sat Feb 02 23:45:00 2008 Ezek után ujra build egymilló sor kijött egyik sor error: c:\program files\microchip\mplab c30\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified végeredmény: Link step failed. BUILD FAILED: Sat Feb 02 23:47:46 2008 mi a fenét kell írni a linker file-ba?
Hali!
Nos kipróbáltam, összeraktam próbapanelen egy kis 3V-os tápot, ezt a tápfeszt adtam a 18F87J10 panelra és úgynéz ki, hogy minden működik, a beállításoknál nem is kellet kivennem, hogy ne az ICD2 táplálja az áramkört, mert nem is engedte az eszköz kiválasztása után ezt a lehetőséget. Íme az eredmény: Auto-connect not enabled - not connecting (Try enabling auto-connect on the ICD2 settings pages.) Connecting to MPLAB ICD 2 ...Connected Setting Vdd source to target Target Device PIC18F87J10 found, revision = Rev 0x3 ...Reading ICD Product ID Running ICD Self Test ...Passed MPLAB ICD 2 Ready Mostmár csak okosodni kell, az adott eszközzel kapcsolatban. Köszi a tippet!
Srácok!
Az mplab8.0 felrak egy css compilert, amit ki lehet választani a project-nél, a cssc.exe is megvan, működik. Mégis ez a hibaüzenet fordításkor: Executing: "C:\Program Files\Microchip\Third Party\PICC\Ccsc.exe" "elso.c" +FM +DF +LN +T -A +M +Z +Y=9 +EA Error: The selected compiler: "PCM" is not installed on this PC Mit csinálok rosszul?
Szia Peppe,
Nem tudom igazandibol mekkora a max meret amit ide felrakhatok csatolmanynak? Megprobalom csatolni a PDF-et (200k). Amugy meg itt egy szoveges leiras is - remelem ezuttal megbocsajthato, hogy csak angol nyelven van meg ez a leiras: 1) RESISTORS R35 AND R36 ADDED. ------------------------------ These are 4.7k Ohm pulldown resistors to GND on PGC and PGD (ICSPCLK/ICSPDAT). These resistors are necessary for proper operation during debugging with PICkit 2; it was previously required that they be added to the target board. Prior versions did not have the pulldowns as the PICkit 2 was originally designed with only programming in mind. 2) RESISTOR R34 ADDED. --------------------- R34 is a 2.7k Ohm resistor between +5V_USB and GND. This prevents the "unrecognized device" USB error by bleeding voltage from the C5 capacitor (among others) when the unit is unplugged, ensuring a proper POR the next time it is plugged in. Brown-out detect is not used as it interferes with target VDD error detection. 3) RESISTOR R21 VALUE CHANGED. ----------------------------- R21 was changed to a 1k Ohm value from a 10k Ohm value. The lower value increases the amount of current that can be sourced form the VPP charge pump. This helps programming robustness and ensures compatibility with future products that may require more VPP current.
Megkérdeztem a gyátrótól is. Neki tudnia kell... Itt a levelezés:
---------------------------------------------------- Dear Maxim, the ds1307 description writes: "note that the initial power-on state of all registers is not defined. Therefore, it is important to enable the oscillator (CH bit = 0) during initial configuration.". Does this mean that the state of the oscillator (CH bit) is also undefined during the first bootup? Generally: is there a well defined way to tell after a bootup whether this was a first bootup (undefined values) or a later bootup with defined values? ------------------------------------------------------- Greetings, As stated in the data sheet the data is undefined and there is no way of determining if the part has been power up before. -------------------------------------------------------
Sziasztok!
PIC órát építek, és DS1307-et használok hozzá. Minden szépen működik, de a teljesség kedvéért nem hagy nyugodni, hogy hogyan kezeljem le az első bekapcsolásnál a DS1307 inicializálását. Az adatlapjában a következők állnak: 1.) "note that the initial power-on state of all registers is not defined. Therefore, it is important to enable the oscillator (CH bit = 0) during initial configuration." 2.) "Illogical time and date entries result in undefined operation. Bit 7 of register 0 is the clock halt (CH) bit. When this bit is set to 1, the oscillator is disabled. When cleared to 0, the oscillator is enabled. Vagyis, lehet, hogy szemét fog a csipben állni bekapcsoláskor, és ha csak a CH bitet állítom 0-ba, akkor is mindent nullára kell állítanom inicializálnom. De az is lehet, hogy a CH bit már nulla az első bekapcsoláskor (hisz ez is belefér a nem definiált fogalmába). Ilyenkor viszont, ha nincs szerencsém akár 29:87-t is állhat az óráknál (hiszen nem definiált) ami viszont hibás működéshez vezethet. Szóval nekem úgy tünik, hogy a CH bit vizsgálata sem elégséges ahhoz, hogy tudjam, hogy első bekapcsolás történik, vagy már be lett az óra állítva, és minden OK. Sokat keresgéltem a neten, és sok progit átrágtam, de erre a kérdésemre nem kaptam választ. Szóvala kérdéss röviden: mi a helyes módja a DS1307 üzembevételének, és hogyan tudom, hogy már allítottam be helyes időt (vagyis korrekt a tartalma) illetve, hogy még nem lett beállítva semmi, és lehet hogy a chip tartalma hibás és csak szemét. Segítségeteket előre is köszönöm!
Sziasztok!
Lenne egy kérdésem. 18F87J10-es MCU-val szerelt próbapanelt szeretnék csatlakoztatni a megépített ICD2-höz, csak ICSP csatlakozón keresztül tudom megtenni, mert csak ezzel a csatlakozóval van ellátva. Programmer állásban a következőt tapasztalom: Auto-connect not enabled - not connecting (Try enabling auto-connect on the ICD2 settings pages.) Connecting to MPLAB ICD 2 ...Connected Setting Vdd source to target ICDWarn0020: Invalid target device id (expected=0xBB, read=0x0) ...Reading ICD Product ID Running ICD Self Test ... Failed Self Test. See ICD2 Settings (status tab) for details. MPLAB ICD 2 Ready Downloading Operating System Connecting to MPLAB ICD 2 ...Connected Setting Vdd source to target ICDWarn0020: Invalid target device id (expected=0xBB, read=0x0) ...Reading ICD Product ID Running ICD Self Test ... Failed Self Test. See ICD2 Settings (status tab) for details. ...Download Operating System Succeeded MPLAB ICD 2 Ready Továbbá Programmer -->Settings: Target Vdd: Pass Module Vpp: Low MCLR Gnd: Pass MCLR Vdd: Low MCLR Vpp: Low Továbbá Power fül: Target Vdd: 2.11 V Target Vpp: 1.28 V MPLAB ICD 2 Vpp: 10,7 V Power target circuit from MPLAB ICD2 ----> nem lehet bejelölni Valamit rosszul csinálok???
Pontosabban az INTCON mindkét bank ből elérhető az adatlap szerint.
Én úgy látom az INTCON és a GPIO is a bank0 ban van. És úgy is kezeltem, az "INI" utolsó sorában visszatérek bank0 ba bank1 ből és ez után állítgatom a GPIO t. Mi akkor a gond? Miért nem fut le a megszakítás?
Rendben, köszi. Átgondolom és finomítok rajta (van mit...
) A bank problémát még nem vettem még észre, jelenleg beérkezik az interrupt (leáll a főprogram futása) csak éppen nem fut le a megszakítás program...hát ezért. Köszönöm
Meg valami:
INTCON es GPIO nincs egy bankon! Az isr-ben teljesen megfeledkeztel a bank kezelesrol. Az intbol sleep visszetres miert nem jo: 1. Sleep tan mikor interrupttal felebred meg egy utasitast vegrehajt mire megszakad... 2. A stacked betelik mivel mindig rapakol minden interruptnal. Neked eppen ez nem okoz fejfajast, csak ronda ![]() 3. Ha nem hajtasz vegre RETFIE-t akkor nem lesz tobb megszakitasod... A GIE ugyanis atmenetileg letiltodik, RETFIE pedig ezt vissza allitja. A fo kulonseg, hogy kezzel piszkalod ezt, hogy ekozben tudja regisztralni az ujabb megszakitas kerelmeket, es mikor RETFIE-vel vissza tersz akkor tudni fogja, hogy hoppa, volt meg egy megszakitas... amugy meg az elveszett neked. Azt pedig jol gondold at, hogy az interrupt rutinod gyorsabb-e, mint ami megszakitasok johetnek, kulonben eleg vacakul fog mukodni a programod.
Megint nem tiszta valami.
BCF STATUS,RP1 BSF STATUS,RP0 Ez beállítja bank1-re, hogy el tudja érni az Adcon1-et ezt írja ki: Message[302] C:\PROJECT\877LED1\877LED1.ASM 17 : register in operand not in bank 0. Ensure that bank bits are correct. Mit rontok el? (Pic mikrovezérlők cikk I.rész, ledvillogtató)
No, asszem kiderült, hogy hogyan dolgozik az MPLAB. Gyártottam egy 2.10.01 verziójú fw-t, aminek a hex fileját az MPLAB megfelelő könyvtárába másoltam (a másik két hex mellé) PK2V021001.HEX néven. A klónban a 2.10.00 fw volt, amikor kiválasztottam programozónak az MPLAB-ban a PICkit2-t:
Initializing PICkit 2 version 0.0.3.10 Found PICkit 2 - Operating System Version 2.10.0 PKWarn0001: There is a newer version of the PICkit 2 Operating Sytem available, would you like download it? Downloading PICkit 2 OS : 2.10.1 PICkit 2 Unit ID = 5V only! Target power not detected - Powering from PICkit 2 PKWarn0003: Unexpected device ID: Please verify that a PIC18F2550 is correctly installed in the application. (Expected ID = 0x1240, ID Read = 0x0) PICkit 2 Ready Úgy néz ki, ilyen úton át lehet verni. Szerk: A fordított hex nyílván sokkal rövidebb, mint az eredeti (46k körüli), mert az eredetiben a bootloadertől kezdve minden benne van, teli van üres, FF-es területekkel. Lehet, hogy az egy elkészült eszköz teljes memóriáját tartalmazza kiolvasva.
Igen, nálam a Vdd feedback a 4k7-en keresztül be van kötve.
PICkit2-t programozóként vagy debuggerként kiválasztva (nincs rajta board, azért panaszkodik): Initializing PICkit 2 version 0.0.3.10 Found PICkit 2 - Operating System Version 2.10.0 PICkit 2 Unit ID = 5V only! Target power not detected - Powering from PICkit 2 PKWarn0003: Unexpected device ID: Please verify that a PIC18F2321 is correctly installed in the application. (Expected ID = 0x2120, ID Read = 0x0) PICkit 2 Ready
Köszönöm. Most akkor hogy is van ez? A felkijáltójel a not akkor mi a giliszta? Invertája a bytot? :vigyor5:
Szia,
Gondolom PWM jel erdekelne (Pulse Width Modulation - vagy magyarul asszem Impulzus Szelesseg Modulacio). A PWM magyarazatat megtalalod itt. Ha RGB-t szeretnel vezerelni akkor egy olyan PIC-et kell valasztani ahol 3 fuggetlen PWM modul van, es nyilvan a 3 szint igy kulon-kulon tudod beallitani - talan van is valami Microchip-es App note ezugyben: LED Lighting Solutions AN1074 Software PWM Generation for LED Dimming and RGB Color Applications Sok Sikert, Tamas |
Bejelentkezés
Hirdetés |


