Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Akkor már csak egy közeli embert kéne találnod, biztosan segít...
Szia!
Nagyon köszönöm a részletes magyarázatod. 99%-ban megértettem amit mondtál.Ebben sokat segített ez a honlap is ez Küzdöttem az mp labba és rájöttem a lényegre. Viszont had kérdezzek még valamit Nekem csak akkor működött ha a mért időtartam nem haladta meg a timer méréstartományát. Hogy kell túlcsordulást számolni? Még egy kérdésem had legyen! Én a mért időtartamot nem kijelezni akarom pl 7 szegmenses kijelzővel, hanem értékekhez rendelni. Összehasonlítás kéne végezni. pl ha a mért szám megegyezik 1.543 el akkor az egyik kimeneten jelenjen meg egy 1 sec es jel. Ha meg pl 4.765 el egyezik meg akkor meg egy 3 sec es jelet adjon, 2000 db értéket szeretnék hozzárendelni 3 művelethez Tehát ha ez vagy ez vagy az akkor 1 es művelet, ha amaz meg emez meg amaz akkor 2 es művelet stb Magyrul ha az 1 es halmaz számai egyikével egyezik meg a mért eredmény akkor 1 es utasítás stb Így nagyon bonyolultnak tűnik, de annyira nem az, csakhát én nem vagyok jártas és nem tudom miként a legegyszerűbbstb Kérlek hogyha tudsz adj irányvonalat a kezdéshez. Előre is nagyon köszi Idézet: „Nekem csak akkor működött ha a mért időtartam nem haladta meg a timer méréstartományát.” Timer eloosztojaval lehet jatszani, amivel 2x-esere, 4x-esere stb ki lehet tolni a tartomanyt -- ennek fejeben a meresi pontossag is csokken felere, negyedere stb... Masik modszer lehet pl kulso, lassabb orajel alkalmazasa a timer modul fele... szinten a pontossag rovasara. Idézet: „Hogy kell túlcsordulást számolni?” Timer interruptbol lehet egy valtozo erteket novelgetni pl... Idézet: „2000 db értéket szeretnék hozzárendelni 3 művelethez Tehát ha ez vagy ez vagy az akkor 1 es művelet, ha amaz meg emez meg amaz akkor 2 es művelet stb Magyrul ha az 1 es halmaz számai egyikével egyezik meg a mért eredmény akkor 1 es utasítás stb” Sokfelekeppen meg lehet ezt is oldani, pl ha sok egymas melletti szam van amire ugyanazt a muveletet kell elvegezni, akkor lehet az if..else parosok jelenthetik a legkisebb kodmeretet. Un ugro tablat epitesz fel, magyaran egy tablaban muveleti cimek vannak 2000 hosszan, es az erteknek megfeleloen elugrasz a a tabla elemere (megcimzed a tablat) es az majd a megfelelo rutinra fog ugrani (gyors, mert megsporolsz egy csomo osszehasonlitast). Vagy lehet switch-case-t csinalni ha C-zel, amibol ha jo a compiler optimalizacioja akkor ugro tablat general tehat gyors kod es megis konnyen attekintheto a programozo szamara.
Ez a ketezer ertek - gondolom - valami szabalyszeruseg altal all elo, szoval logikus rendet kovet az ertek-funkcio parositas. Ha nem titokzatoskodnal, akkor talan jobban tudnank segiteni.
Egyebkent szerintem a ket modszer kombinacioja a nyero, az elejen par osszehasonlitassal nagyjabol elosztani a dolgokat, aztan azon belul kisebb tablakbol mehet a meghatarozas. Ha csak 3fele lehetoseg van, akkor elvileg ketbites tablaba rendezheted az erteket - sot, igy meg marad egy 11 is a tiltott ertekeknek. Igy siman belefer egy 512-es EEPROMba. De meg az is sokkal tobb, mint amit par komparalas elfoglal a memoriabol es a PIC-ek programmemoriaja joval nagyobb, mint a RAM vagy data eeprom. Idézet: Ha jól emlékszem, mondtam, hogy számlálgatni kell a timer túlcsordulásait. Csatoltam a hasonló feladatot végző programom megszakításkezelő részét, abban minden benne van. Utasításciklusokban számolja az időt (1:1-es előosztó van beállítva), tehát FCY (=FOSC/4) -vel osztva kapnám mikroszekundumokban az időt.„Nekem csak akkor működött ha a mért időtartam nem haladta meg a timer méréstartományát.” Idézet: - Nyilván nem szekundumban, hanem olyan egységben célszerű számolni, amiben még egészként kezelhetők a számok (pl. ms). „pl ha a mért szám megegyezik 1.543 el akkor az egyik kimeneten jelenjen meg egy 1 sec es jel.” - Nyilván nem abszolút pontos a mérés, hanem intervallumokat célszerű megadni. Például:
Szavakban: ha az időtartam pl. 1500 és 1600 közé esik, akkor kiadjuk az 1 s hosszú impulzust. (Kérdés: közben ráérünk várakozni? Milyen időközönként kell mérni?) Ha sok intervallumot kell felsorolni, akkor tömböt (vagy assemblyben táblázatot) kell használni az alsó és felső határértékek tárolására és egy ciklusban célszerű vizsgálni hogy melyikbe esünk. Ha 4-5 intervallumnál nincs több, akkor nem biztos, hogy érdemesebbe belemenni, annyi feltételt még ki lehet írni egymás után...
Uj tagjai lesznek a 10F csaladnak - 10F3xx. Ezuttal nem baseline, hanem midrange magra epitik fel a chipet, igy megszakitas is lesz benne, megnovekedett stack melyseg, 16MHz-es belso orajel, alacsonyabb fogyasztas es 8 bites ADC. Emellett olyan kulonlegessegeket is tartalmaz, mint az FPGA funkcionalitasat surolo Configurable Logic Cell (CLC), a Direct Digital Synthesis (DDS) modul, amivel pl hullamforma generatorokat epithetunk, valamint integralt hoszenzor is helyet kap a chipen belul ami lehetove tesz olcso homerseklet merro aramkorok tervezeset.
PIC10F(L)F320/322
Szép, nekem már van is hozzá alkalmazásom :yes: Csak kérdés, mikor lesz belőle megvehető példány?
En csak abbol tudok kiindulni, ami az enhanced core-ral tortent: Kb 1 ev telt el onnantol, hogy eloszor lehetett errol hallani es, hogy az elso darabok lejottek a szalagrol.
Addig epits egy proba aramkort amivel hasonlo dolgokat muvelhetsz es megirhatod a programodat, majd ha kijon a Tied lesz a legeslegelso alkalmazas ra
Sziasztok.
Megírtam a Nulláról a robotokig - PIC Mikrovezérlők I rész-ből a HI-TECH C (19. oldal) programrészt MPLAB-ban, persze feltettem a Hi-Tech C -t is, beimportáltam az MPLAB-ba is de mikor lefuttatom ez a hibaüzenetet kapom: Executing: "C:\Program Files\HI-TECH Software\PICC\std\9.60\bin\picc.exe" -C -E"delay.cce" "hitech\delay.c" -O"delay.obj" -Zg9 -O -ASMLIST -Q -MPLAB -16F877 Halting build on first failure as requested. BUILD FAILED: Thu Feb 24 21:03:08 2011 Mit rontottam el? (még kezdő vagyok a pic-ek terén, a C nyelvet vágom ) Előre is köszönöm válaszaitokat
Nincs a beidézett szövegben hibaok megnevezve, ezért innen nem lehet eldönteni, hogy mi a hiba.
Próbáld ki, hogy cmd (DOS) ablakban parancssorból működik-e a Hitech C fordító! (vagy nézd meg, hogy az elérési útban benne van-e). A Hitech C MPLAB-ból történő használatához az MPLAB-ba integrálni kell, tehát a fordítón kívül valami bővítményt is telepíteni kellett. Projekt készítésnél (MPLAB IDE Project menü, Project Wizard) megjelent a Hitech fordító (picc.exe) útvonala? (Ha jól emlékszem, ehhez a verzióhoz rendszergazda joggal kell futtatni az MPLAB IDE-t)
Sziasztok!
Egy 16F628A-t programozok ASM-ben, és a gondom a következő: A konfigurációban a belső oszcillátort szeretném használni, ennek értelmében a konfig sor így néz ki:
Ennek ellenére mégsem fut a program, ha viszont átállítom az oszcillátort külső kvarcra, és bedugaszolom a breadboard-ba, akkor meg minden ok. Mit hibázok el?
Úgy tűnik rossz verzióju Hi-Tech-et kerestem, találtam egy másik verziót ezzel működik tökéletesen.
Bár az előző verzióban is be volt állítva az elérési út is, meg a bővítmény is meg minden de nem ment, de ez most megy Köszönöm a segítséget
Bár még én is kezdő vagyok, de szerintem az INTOSC helyett INTRC kell ha nem tévedek
Idézet: „1. __CONFIG _CP_OFF & _INTOSC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF” 1. __CONFIG _CP_OFF & _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF
Így most működik, de akkor miért van az, hogyha nem szavakkal, hanem hexa értékkel állítom be a konfigurációt az adatlapnak megfelelően úgy, hogy ugyanezt a beállítást adja:
Az kvarcoszcillátorhoz tartozó konfig sor ez:
A belsőhöz pedig az adatlap alapján: FOSC<2:0>: Oscillator Selection bits(4) 111 = RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN 110 = RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN 101 = INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN 100 = INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN 011 = EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN 010 = HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN 001 = XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN 000 = LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN ez tartozik:
Ilyenkor vajon mi van?
Egyébként ez a két beállítás a P16F628A.INC fájl alapján totál ugyanaz:
_INTOSC_OSC_NOCLKOUT EQU H'3FFC' ; INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN _INTRC_OSC_NOCLKOUT EQU H'3FFC' ; INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
Hát ezt már nem tudom én még csak kezdő vagyok a PIC-ek terén, az előbbit csak azért írtam, mert több helyen is így láttam
De én közben rájöttem:
Jól benéztem az adatlapon a konfigregiszter bitjeinek sorrendjét, és rosszul számoltam ki a hexa értéket, átnéztem, javítottam, és már jó is lett. Azért köszi, hisz rávezettél, hogy nézzem át jobban. Na jó éjt!
Értem, örülök, hogy rájöttél és működik
Neked is jó éjt!
Miért Te számolod ki a konfigurációs szavakat értékét?
Ez megnehezíti a program átírását más kontrollerekre...
Jó kérdés, nekem így volt kézenfekvő. De lehet hogy áttérek a szavas módszerre.
C18 fordítóval szeretnék ékezetes betűket varázsolni egy karakteres LCD-re.
Tények: Az összes LCD függvényem unsigned char-al dolgozik. Az LCD karakterkészletben benne vannak az ékezetes betűk, kipróbáltam. kiküldök 129-et és ott az ü betű. A problémám az, hogy hogyan tudom a romban megfelelően eltárolni ezeket.
Nem jó. Próbáltam még:
így is de így sem jó. Az LCD kiíró függvényem így néz ki:
A kiíratásnál a kiírni kívánt karakter helyett két karakter jelenik meg. Tehát valamit a fordító csesz el.
Hello egyenlőre csak 1 kérdés..
lehet törölni 1 pic mikrovezérlőt? újraprogramozás céljából? PIC16C57
Szervusz!
A fordítóra kenni a dolgokat zsákutca... Te egy karaktertömböt deklaráltál, de kiírásnál sztenderd C stream-ként kezeled, feltételezve hogy egy lezáró nulla van a végén. Vagy "Főmen\129:\0" formában add meg a kiírandót, vagy kezeld fix nagyságú tömbként. Egyébként az LCD kiírásnál nem szerencsés a nulla lezáró karakter, mert akkor a 0-7 közötti felhasználó által definiálható karakterek közül a 0 karakterkód nem írható ki. Én pl. a 255-öt használom erre a célra. István
Szia!
A 16C57 -et nem (hacsak nem kvarcablakos kerámia tokban van, akkor UV fénnyel mint az EPromokat), a 16F57 -et igen...
Köszönöm a jótanácsokat!
UTF-8 kódolással voltak mentve a források, ez volt a baj. Átmentettem ISO-8859-2-re, így már csak meg kellett írnom az LCD kiíró fvbe az ISO-8859-2->ascii konverziót, és így már megy az ékezetes betűk ASCII része.
Végeredmény akkor ezt a típust (nem ablakos)
lehet törölni ugye jol értem...? ezt hányszor lehet eljátszani vele? JA és akkor az ablakosok mid törölhetőek ? Aztán rátenni 1 matricát amin nem megy át a fény? (még nem foglalkoztam ilyennel.)
Ha plasztik tokos a 16C57, akkor nem lehet törölni.
Ha kvarcablakos kerámia tokban van (a típusszám vége JW), akkor úgy kell eljárni, mint a 27Cxx EPromokkal: UV fénnyel megvilágítani 15 percig, ezután újra programozható. Az ablakját le szokták ragasztani. A PICKit2, PICKit3 fejlesztőkkel nem programozható. JW tokozás Olcsóbb a 16F57-re áttérni, többször újraprogramozható, olcsóbb is jóval, a mai fejlesztőkkel (PICKit2, PICKit3, ICD2, ICD3) programozható.
Köszi a válasz és hogy nem két szóban oldottad meg.
Sziasztok!
Vettem egy PIC24HJ128GP502-t, és az a problémám, hogy a PICKIT2 nem akarja debuggolni. Pedig az MPLAB-ban az említett PIC debuggerei között zöld bogyó van a picki2 mellett, tehát tudnia kéne. Jó EMUC/EMUD protra van kötve. Van valakinek ötlete / tapasztalata ezzel kapcsolatban? Köszi! Idézet: „C18 fordítóval szeretnék ékezetes betűket varázsolni egy karakteres LCD-re.” ITT mutatok rá példát. |
Bejelentkezés
Hirdetés |