Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   923 / 1319
(#) watt válasza foman hozzászólására (») Feb 24, 2011 /
 
Akkor már csak egy közeli embert kéne találnod, biztosan segít...
(#) Balli válasza icserny hozzászólására (») Feb 25, 2011 /
 
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
(#) trudnai válasza Balli hozzászólására (») Feb 25, 2011 / 2
 
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.
(#) bbalazs_ válasza Balli hozzászólására (») Feb 25, 2011 /
 
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.
(#) icserny válasza Balli hozzászólására (») Feb 25, 2011 / 1
 
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.”
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.

Idézet:
„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 szekundumban, hanem olyan egységben célszerű számolni, amiben még egészként kezelhetők a számok (pl. ms).
- Nyilván nem abszolút pontos a mérés, hanem intervallumokat célszerű megadni. Például:
  1. if(delta>1500 && delta<1600) {
  2.    pulse_out(1000);
  3. }

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...

interrupt.c
    
(#) trudnai hozzászólása Feb 25, 2011 /
 
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
(#) potyo válasza trudnai hozzászólására (») Feb 25, 2011 /
 
Szép, nekem már van is hozzá alkalmazásom :yes: Csak kérdés, mikor lesz belőle megvehető példány?
(#) trudnai válasza potyo hozzászólására (») Feb 25, 2011 /
 
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
(#) matheattila hozzászólása Feb 25, 2011 1 /
 
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
(#) icserny válasza matheattila hozzászólására (») Feb 25, 2011 /
 
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)
(#) sucuka hozzászólása Feb 25, 2011 /
 
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:
  1. __CONFIG       _CP_OFF & _INTOSC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF


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?
(#) matheattila válasza icserny hozzászólására (») Feb 25, 2011 /
 
Ú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
(#) matheattila válasza sucuka hozzászólására (») Feb 25, 2011 /
 
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
(#) sucuka válasza matheattila hozzászólására (») Feb 25, 2011 /
 
Í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:
  1. __CONFIG        0x332A

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:
  1. __CONFIG        0x332C


Ilyenkor vajon mi van?
(#) sucuka válasza sucuka hozzászólására (») Feb 25, 2011 /
 
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
(#) matheattila válasza sucuka hozzászólására (») Feb 25, 2011 /
 
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
(#) sucuka válasza matheattila hozzászólására (») Feb 25, 2011 /
 
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!
(#) matheattila válasza sucuka hozzászólására (») Feb 25, 2011 /
 
Értem, örülök, hogy rájöttél és működik
Neked is jó éjt!
(#) nedudgi válasza sucuka hozzászólására (») Feb 26, 2011 /
 
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...
(#) sucuka válasza nedudgi hozzászólására (») Feb 26, 2011 /
 
Jó kérdés, nekem így volt kézenfekvő. De lehet hogy áttérek a szavas módszerre.
(#) Lucifer hozzászólása Feb 26, 2011 /
 
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.

  1. const rom unsigned char mainMenuStr[] = "Főmenü:";

Nem jó.

Próbáltam még:
  1. const rom unsigned char mainMenuStr[] = "Főmen\129:";

így is de így sem jó.

Az LCD kiíró függvényem így néz ki:
  1. void LCDstringROM(static unsigned char rom *data)       //Outputs string to LCD
  2. {
  3.     unsigned char i = 0;
  4.     while (data[i] != '\0') {
  5.         LCDsendChar(data[i]);
  6.         i++;
  7.     }
  8. }


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.
(#) Tys23 hozzászólása Feb 26, 2011 /
 
Hello egyenlőre csak 1 kérdés..
lehet törölni 1 pic mikrovezérlőt?
újraprogramozás céljából?
PIC16C57
(#) p_istvan válasza Lucifer hozzászólására (») Feb 26, 2011 /
 
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
(#) Hp41C válasza Tys23 hozzászólására (») Feb 26, 2011 /
 
Szia!

A 16C57 -et nem (hacsak nem kvarcablakos kerámia tokban van, akkor UV fénnyel mint az EPromokat), a 16F57 -et igen...
(#) Lucifer válasza p_istvan hozzászólására (») Feb 26, 2011 /
 
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.
(#) Tys23 válasza Hp41C hozzászólására (») Feb 26, 2011 /
 
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.)
(#) Hp41C válasza Tys23 hozzászólására (») Feb 26, 2011 /
 
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ó.
(#) Tys23 válasza Hp41C hozzászólására (») Feb 26, 2011 /
 
Köszi a válasz és hogy nem két szóban oldottad meg.
(#) dawe hozzászólása Feb 26, 2011 /
 
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!
(#) icserny válasza Lucifer hozzászólására (») Feb 26, 2011 /
 
Idézet:
„C18 fordítóval szeretnék ékezetes betűket varázsolni egy karakteres LCD-re.”

ITT mutatok rá példát.
Következő: »»   923 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem