Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Ezzel a módszerrel akkor 1 ciklusnyi magas kimenetet, ill. X ciklusnyi alacsony kimenetet lehet elérni? (Vagyis az alacsony idő a magas idő egész számú többszöröse?)
Szia!
A növekmény értékének megfelelő darabszámú 1-es lesz egy 256-os egységben. Ez azt jelenti, hogy a növekmény értékével tudod az impulzus szélességét állítani 0-255-ig, de az impulzus az nem "egybefüggő" ( a mellékletben ki tudod próbálni, a "Van-e átvitel oszlopban láthatod, hogy mikor lesz '1' a kimenet, az '1'-esek száma oszlopban pedig, hogy hány darab impulzusból áll össze a tényleges magas szint a kimeneten )! Steve
Szia!
Na ná hogy! Ellenőrzöm hogy az LCD kijelző rá van-e kötve a PIC-re vagy sem és aszerint fut tovább a program.
Sziasztok !
Segítséget szeretnék kérni nem tudom hogy jó e ez az áramkör a PIC-hez nem e zárlatos vagy valami ilyesmi nem szeretném tönkre tenni a gépemet. Köszi a segítséget. Üdv: CRoSS
Szia!
A PIC kezdőknek topik fejécéből: Idézet: „- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.”
Igen igen szeretném ha pickit 2 lenne mert azzal nem tehetem tönkre a gépet, de sajnos nincs rá pénz így ezért döntöttem a házi barkácsolás mellet, de mondjuk még a hestorban van az avr usb programozó de nem tudom PIC meg AVR között mi a különbség. Szóval erét döntöttem ez az áramkör mellet de ahogy nézegetem egy két dologot nem értek
Ne vegyél te még egyelőre semmit, úgyse mennél sokra vele, ez látszik a hozzászólásodból. Inkább olvasgass még 1-2-3 hónapig, pénzedet meg gyűjtsd és majd ráérsz akkor venni vagy építeni egy Pickit2-t.
Szia!
Keress egy jó régi PC -t. Azzal talán fel tudod ezzel az áramkörrel programozni a PCIKit2 -be való 18F2550 -et a firmware -vel. Aztán indíthatod a PICKit2 klón építését...
Sziasztok!
PIC24 Output compare modullal szenvedek. 3 különböző frekvenciát kellene előállítani, ezért arra gondoltam, hogy ezt a modult használom, toggle módban. A probléma, hogy a megszakítás után újra beugrik a megszakításba(legalábbis szimulátorban). Valaki találkozott már ezzel a problémával? Az OC1 modul inicializálása a "Section 13. Output Compare" doksi szerint van.
A dissassembly szerint a megszakítás végén a "pop.w 0x0034" hatására a flag visszabillen. 003EC 781F80 mov.w 0x0000,[0x001e++] 003EE F80034 push.w 0x0034 003F0 200000 mov.w #0x0,0x0000 003F2 8801A0 mov.w 0x0000,0x0034 003F4 FA0000 lnk #0x0 199: IFS0bits.OC1IF = 0; 003F6 A94084 bclr.b 0x0084,#2 200: OC1R +=200; 003F8 800C10 mov.w 0x0182,0x0000 003FA B00C80 add.w #0xc8,0x0000 003FC 880C10 mov.w 0x0000,0x0182 219: } 003FE FA8000 ulnk 00400 F90034 pop.w 0x0034 00402 78004F mov.w [--0x001e],0x0000 00404 064000 retfie
Próbáld ki fordítva: előbb változtatni az OC1R-t, aztán törölni az interrupt flaget (plusz még közéjük berakni egy valami másik utasítást is, esetleg egy nop-ot).
Próbáltam azt is, eredetileg a végén is volt flagtörlés, hosszabb volt a rutin, a megszakítást is próbáltam tiltani és visszaengedélyezni a végén, de mindig újragenerálja a flaget...:S
Idézet: A szimulátorért én nem tenném tűzbe a kezem, tehát azt ne tekintsük mérvadónak.„A probléma, hogy a megszakítás után újra beugrik a megszakításba(legalábbis szimulátorban).” Azt érdemes inkább ellenőrizni, hogy amikor újra belép a megszakításba, jogosan lép-e be, azaz eltelt-e (a szimulátor szerint) az az idő, amit beállítottál? A honlapomon az általam átvett és felerészben lefordított/átdolgozott tankönyvi mintaprogramok között találsz output compare mintapéldákat is (bár én még nem jutottam odáig hogy behatóbban foglalkozzam velük).
Nem jogosan ugrik be, gyakorlatilag annyira rövid a megszakítás, hogy a még a timer értéke se nő a rutin alatt... még az is lehet, hogy ezért szimulál baromságot. Amúgy az MPLABX szimulátorral is kipróbáltam, ott ha tiltottam a megszakítást OCnR írásának idejére, akkor nem ugrott újra bele, viszont ott meg OC2R compare match esetén az OC1 megszakításra ugrott
Vicc az egész:S
Várjál, szimulátorban látod csak a dolgot, vagy elésben is? A szimulátornak nem kell mindig hinni...
Élesben még nem próbáltam, majd lecsekkolom.
Szia!
Nézd meg az alkalmazott MpSim verzió release note -jét. Vannak 24F OC hibák benne.
Már vagy 4-5 órája próbálok rájönni, hogy a programom miért nem veszi a vref állítást...
Hőmérsékletet szeretnék mérni dióda nyitófeszültséggel, amit ugye elég nagy pontossággal kellene mérni, ezért nem a teljes tápfeszt szeretném használni, mert úgy 4,88mV-onként tudok mérni, hanem elvileg a VREF_LOW|4-et, amivel elvileg 0,8V/1024=0,78mV-okat tudnék mérni 5V-os tápfesznél... set_tris_a(0b00000100); setup_adc(ADC_CLOCK_INTERNAL); setup_vref(VREF_LOW|4); setup_adc_ports(sAN2|VSS_VREF); set_adc_channel(2); delay_us(10); valueADC=read_adc(); Teljesen mindegy mit adok meg setup_vref()-nek, ugyan úgy VDD-t használja Így most az adc 139-et olvas, azaz 0,678V-ot. 16F690-esen próbálnék tanulgatni...
Ez nem CCS véletlenül? Mert arra van külön topik...
Viszont nekem a 690-es úgy tűnik, hogy össz-vissz két választást kínál fel a Vref+ számára: vagy Vdd, vagy RA1/AN1/Vref bemenet. Ez a VREF_LOW|4 nem tudom, hogy mit szeretne csinálni, de ebben a PIC-ben nincs belső fix referencia a A/D számára.
Köszi a választ! Igen, ez az a program lesz! Lehet igazad van, de akkor nem értem, hogy a program 16f690.h headerjében miért van ez a rész:
// Constants used in setup_vref() are: // #define VREF_LOW 0x20 #define VREF_HIGH 0x00 // Or (with |) the above with a number 0-15 #define VREF_6th 0x10 // Turn on .6V ref #define VREF_COMP1 0x80 #define VREF_COMP2 0x40 plusz ez: // Constants used in SETUP_ADC_PORTS() are: #define sAN0 1 //| A0 \\!"K50" #define sAN1 2 //| A1 \\!"K50" #define sAN2 4 //| A2 \\!"K50" #define sAN3 8 //| A4 #define sAN4 16 //| C0 #define sAN5 32 //| C1 #define sAN6 64 //| C2 #define sAN7 128 //| C3 #define sAN8 0x10000 //| C6 #define sAN9 0x20000 //| C7 #define sAN10 0x40000 //| B4 #define sAN11 0x80000 //| B5 #define NO_ANALOGS 0 // None #define ALL_ANALOG 0xF00FF // A0 A1 A2 A4 C0 C1 C2 C3 C6 C7 B4 B5 // One of the following may be OR'ed in with the above using | #define VSS_VDD 0x0000 //| Range 0-Vdd #define VSS_VREF 0x4000 //| Range 0-Vref A VREF_LOW|4 pedig azt csinálná, hogy így számolja a referencia feszültséget (most 4 a value): VREF_LOW for VDD*VALUE/24 VREF_HIGH for VDD*VALUE/32 + VDD/4
Szerintem a dokumentációt kéne inkább olvasgatni...
A gyártó oldalán a CPU data sheet leírja, hogy mit tud a chip. A CCS-hez is - gondolom - van dokumentáció arról, hogy melyik függvényük melyik paraméterrel mit fog csinálni. A chipben van komparátor is, annak másfajta Vref állítási opciói vannak, mint az A/D-nek.
Olvastam én dokumentációt is, CCS helpet is, googliztam is, de nem tudtam belőle rájönni, ezért kérdeztem meg. Lehet hogy ADC-hez nem állítható a vref
Köszi a tippeket mindenkinek, a kontrolleren tökéletesen fut a dolog. A readme tesz említést bizonyos típusokon a OC modul hibás működéséről, de erről nem találtam megjegyzést.
"A Michrochip szimulátorától ments meg Uram minket"
Szia! Ha nem vagy biztos a fordító függvényeinek működésében, akkor állítsd be direktben a regisztereket, sok bosszúságtól mented meg magad néhány sor plussz munkáért cserében.
Jelen esetben az ADCON0,VCFG bitet kell beállítanod az adatlap szerint, hogy a Vdd, vagy a Vref legyen a referencia. Negatív referencia nincs kivezetve, az csak a Vss lehet. CCS kérdések ügyében van egy topic itt: CCS topic
Köszi a segítséget, lehet megpróbálkozom az assemblyvel, meg átmegyek abba a topikba! Bár most áramot akarok mérni söntön eső feszültséggel, 50mV-ra lövöm be, meg műveleti erősítővel erősítem 0-5V közé, és így nem lesz gond
Nem kimondottan az assemblyre gondoltam, C-ben is meg lehet adni simán egy regiszter, vagy egy bit értékét... (ADCON0=??;, vagy ADCONbits.VCFG=1 (ez C18 szintaktika, biztosan tudod CCS-ben mi a megfelelője))
Hi-Tech C-ben, amit jobban ajánlhatok, mint a CCS-t, annyi lenne, hogy VCFG=1;
Sziasztok!
Olyan problémám lenne, hogy van egy radarom, aminek rs-422 kommunikációs portja van csak, és szerintem én vagyok a tudatlan, mert végignéztem az sok oldalt, ahol PIC-ek portjait írják, és sehol sem találtam olyat ami rendelkezne. Az radar rövid kábellel kapcsolódna a vezérléshez, valamint megnéztem alaposan a két szabványt, és arra gondoltam, hogy meglehetne oldani hogy csak a kimeneteit kötöm rá egy rs-232-es mikrovezérlőre? Mondjuk kellene átvitelvezérlés is mert a radar sebességértéket ad át folyamatosan BCD kódolásban. Ha valamit nem jól írtam, vagy kihagytam szóljatok majd próbálom kiegészíteni Köszi a segítséget előre is!
Szia!
Hát .. le kellene írni a kérdést ! Amit én ki tudtam hámozni: van egy radarod, ami RS232-n kommunikál, de nem vagy biztos a protokollban és nem találtál PIC-et, amiben RS232 van !? Válasz: a radar kommunikációját át kell nézned, mert lehet, hogy csak "löki" az adatokat folyamatosan pl. 0,1 másodpercenként 4 karakter (ABC,D km/h, a vesszőre és a mértékegységre nincs szükség, ha az alapértelmezett! ), de lehet ( sőt szerintem valószínű!), hogy bizonyos adatokat a mérés előtt be kell állítanod: átviteli sebesség, paritás, a mérés pontossága, mértékegysége, azaz inicializálni kell a radart ( ez a leírásból derül ki!). A PIC-el kapcsolatban: USART-ot keres és annak az RX-TX lábait ( ez nagyon sok PIC-ben van ). Az RS232 fizikai jelszintjeit viszont külön kell biztosítanod, mert a PIC maximum TTL jelszinttel kommunikál alapból! Jó munkát! Steve
De egy sorban van az rs422 (nem rs232) a radar szóval...
A kérdést valóban nem tettem fel: Milyen mikrovezérlőre kössem rá, illetve ha rs232 szabvánnyal tud csak kommunikálni a mikrovezérlő, akkor milyen átakalító áramkör megépítése szükséges az RS422 kimenettel rendelkező Radarhoz? Vagy csak lehet hogy én gondolom úgy, hogy rs422-t nem lehet összekötni egy mikrovezérlővel? Köszönöm a válaszokat előre is!
Szia!
Bocs, nem figyeltem eléggé ... Az RS422 szintén soros átvitel, csak differenciális jelátvitelt használ, ezáltal sokkal nagyobb távolságokat tud áthidalni. Az adás és vétel során átalakítókat használnak pl.: Bővebben: Link, ami az asszimetrikus/szimmetrikus jelátalakítást csinálja. A kérdés, mint az előző válaszomban írtam a protokoll és a sebesség! Ha protokollként a Start-Stop elven működő ( vagy más, a mikrovezérlőben hardveresen rendelkezésre álló ), 8/9 bites átvitelt használják nem túl nagy sebességgel, akkor használható a USART, ha nem akkor is megoldható mikrovezérlővel, legfeljebb meg kell írni a bejövő adatok lekezelését! Steve
Szia
Értem,majd a gyártótól még meg kell egy két dolgot kérdeznem ez ügyben, mert papíron csak annyi van (ami a radarra vonatkozik), hogy Baud Rate: 115200; Data bits: 8 Parity: None Stop bits: 1 Flow control: none A fentieket értem, a radaron van négy kivezetés, Rx+, Rx-, Tx+, Tx- Kijelölök a mikrovezérlőn ennek megfelelően 4 db lábat és úgy kötöm hozzá, vagy kell akkor valamilyen átalakítás amit belinkeltél az előző válaszodban. Bocsánat ha értetlen vagyok Vagy ha az UARTot használom (TX RX port) akkor melyiket kell rákötni az +-t mindkettőből vagy a - -t? 18F452 mikrovezérlőt néztem, hogy az UART max sebessége pont annyi (115kbs) Köszönöm! Zoli |
Bejelentkezés
Hirdetés |