Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   637 / 1210
(#) DJozso válasza zenetom hozzászólására (») Márc 1, 2015 /
 
Szerintem ez a parancs állítja be a A/D csatorna számát az ADCON0 regiszterben:
  1. adc_rd  = ADC_read(2);                 // get ADC value from 2nd channel

Értelemszerűen a (2) a csatorna szám (AN2); Ja azt nem mondtam, de a TRISA érkéke 0xFF, vagyis minden Aport bemenet. Ez benne van. Mondjuk a referencia pontot állító regisztert én csak a komparátorhoz találtam, de lehet, nem voltam elég szemfüles.
(#) DJozso válasza sonajkniz hozzászólására (») Márc 1, 2015 /
 
Meg tudnád mondani melyik regiszter ez? Vagy az ADCON1 regiszter ezen beállításaira gondolsz?
Idézet:

bit 5 VCFG0: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS
bit 4 VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD

Ez nem csak a komparátorra vonatkozik?
(#) zenetom válasza DJozso hozzászólására (») Márc 1, 2015 / 1
 
Ez a rész az, ez az AD-re vonatkozik. Ez az "ADCON1"-ben van, de nálad jól van beállítva.
(#) DJozso válasza zenetom hozzászólására (») Márc 1, 2015 /
 
Rendben. Köszönöm a segítséget, akkor jobban körbenézek hardver ügyileg. Hátha valamit benéztem.
(#) sonajkniz válasza DJozso hozzászólására (») Márc 1, 2015 /
 
Igen, én erre gondoltam, illetve még arra, hogy konkrét AD konverterből álltalában csak egy van, csupán váltogatni lehet a bemeneteket. Assemblerben például előre ki kell jelölni az összes használni kívánt analóg bemenetet, majd az éppen beolvasni kívántat meg kell hívni.
(#) DJozso válasza sonajkniz hozzászólására (») Márc 1, 2015 /
 
Nem tudom a mikroC fordító mit hogyan fordít, de bizonyos, hogy valami hardver hibám van, mivel 2 PIC-et is raktam az áramkörbe, az eredmény ugyanaz, egyikkel sem működik. Megépítettem egy alapkapcsolást egy próba panelon, a fenti 2 PICCel nem (nyilván valami bajuk lett), de egy 3-adik PIC-el tökéletesen müködött. Tehát maradt az eredeti hardver összeállítási hiba. Köszönöm mégegyszer.
(#) icserny válasza DJozso hozzászólására (») Márc 1, 2015 / 1
 
Idézet:
„Egy kis segítségre lenne szükségem. Adott egy 18f4550-es PIC. Ennek a picnek a AN0, AN1, AN2, analóg bemeneteket szeretném használni analóg jel olvasásra.”

A honlapomon találsz részletes leírást a PIC18F4550 ADC beállításáról (PICCOLO projekt).
(#) Hp41C válasza DJozso hozzászólására (») Márc 1, 2015 /
 
  1. TRISA |= 7;
(#) sonajkniz válasza icserny hozzászólására (») Márc 1, 2015 /
 
Üdvözletem!
Köszönet a honlapodért! Jelenlegi assembly programozói tudásom kb 40%-át onnan mazsoláztam össze! Kár, hogy a PWM fejezet még nincs kész. Komoly kutatómunkát megspórolt volna nekem. Remélem, fogod még bővíteni. Nagyon várom.
(#) DJozso válasza icserny hozzászólására (») Márc 1, 2015 /
 
Köszönöm a segítséget. Tényleg elég részletesen le van írva minden, lehet tanulni... Bár első olvasásra kicsit magas (nekem), de átrágva magamat rajta, gyakorolgatva, biztos nagy segítség lesz. Ritka a magyar nyelvű precíz leírás. Azt gondolom mindenki nevében mondhatom, hogy köszönjük szépen.
Kedves Hp41C! Igazad van a bemenetekkel kapcsolatosan. Ez is lehetne hiba forrása. Nem szabad üresen hagyni bemenetet (zavar forrás), de mondjuk azt nem mondtam, hogy a teljes A PORT csoport bemenetnek van használva, ebből az első 3 analóg, a többi digitális, és mind természetesen ellenállással a gnd-re van alapból húzva.
(#) leglacika hozzászólása Márc 2, 2015 /
 
Sziasztok !

PIC24 szériához szükségem lenne egy 32bit/16bit -> 16bit,
vagy egy 32bit/32bit -> 16bit osztó rutinra
A netet áttúrtam magyar és angol nyelven, de csak szorzáshoz találtam.
Valami olyasmi kellene, hogy pl.:

osztandó -> REG1 és REG2
osztó -> REG3
kód végrehajtása
eredmény -> REG4

A maradék most nem érdekes számomra.
Ha valakinek volna egy működő megoldása, megköszönném !

Üdv.: Laci.
(#) Hp41C válasza leglacika hozzászólására (») Márc 2, 2015 /
 
Van utasítása a 32bit/16bit -> 16bit osztásra. Ld. adatlap Instruction set summary DIV.
(#) leglacika válasza Hp41C hozzászólására (») Márc 2, 2015 /
 
Igazad van ! Nem néztem át figyelmesen az adatlapot.
Köszönöm a választ ! Laci.
(#) _ampervadasz_ válasza Hp41C hozzászólására (») Márc 2, 2015 /
 
Sziasztok. Érdekes a jelenség. Egyszerűen a programozóm nem képes felismerni a 16LF628A és egy bontott 16F627A -val sem bír el.
Egy DIP tokozású 16F627 -es 18f4520 -as kontrollerekkel, vagy 24lc EEPROM -okat vígan megeszi. Körülbelül már 6 éves Szilva féle programozóm van, sosem volt vele gondom és most is jól működik, még a GS ellenállásokat sem forrasztottam be (ezutóbbi értéke mekkora legyen, mert nnem szeretném, hogy ennyin múljon egyszer.)
A hozzászólás módosítva: Márc 2, 2015
(#) Hp41C válasza _ampervadasz_ hozzászólására (») Márc 3, 2015 /
 
A panelen az oszcillátor ki van építve vagy belső oszcillátor van kiválasztva, az MCLR funkció le van tiltva és / vagy a PGD ill. PGC lábak kimenetnek, T1 oszcillátornak vannak beállítva rögtön a program elején.
Programmer / Manual device select
Device family / Midrange / Standard / PIC16LF628A
Tools / Use Vpp First Programing entry
Read
Így mennie kell.
A hozzászólás módosítva: Márc 3, 2015
(#) aroxol hozzászólása Márc 3, 2015 /
 
Sziasztok!

Mplab 8-ban hol lehet beállítani hogy ne az forráskód mappába tegye a hulladékot (hex, err, cof, lst, map)?
(#) Hp41C válasza aroxol hozzászólására (») Márc 3, 2015 /
 
Project / Build Options / Project
(#) jonatani01 hozzászólása Márc 3, 2015 /
 
Sziasztok!
Fordult már elő veletek olyan, hogy tönkrement egy külső kvarc oszcillátorotok?
Nekem nagyon max 2-3 óra használat után egyszerűen nem adott több órajelet, de nem működés közben szállt el, hanem egyszer táp bekapcsolása után egyszerűen nem szólalt meg. Szóval meglepődtem hogy miért nem csinál semmit az áramkör, így elég sokáig tartott kibogarászni hogy végülis ez a probléma. Kicseréltem másikra és ezzel már minden oké.
(#) cross51 hozzászólása Márc 3, 2015 /
 
Sziasztok!

Assemblyben, hogyan lehet azt megtenni, hogy DE-vel eltárolok egy stringet a program memóriában és hogy két sort egy DE-vel (esztétika miatt) tudjak tárolni, hogy érthetőbb legyen:
elgondolás
  1. DE      "<== 2x16 LCD ==>\n
  2.            Now in 8bit mode",0

ahogyan működik
  1. DE      "<== 2x16 LCD ==>\nNow in 8bit mode",0


De ez nem tetszik és C-hez hasonlóan úgy szeretném figyelni, hogy mikor 0x0 értékkel tér vissza akkor "tudja", hogy kiírta a szövöget de ez csak akkor működik, ha két darab DE-t használok és páros számú a karakterek száma ha páratlan befordít egy 0x00 ahova nem kéne.
Erre van megoldás assemblyben a C ben ismert sortörő karakterrel (\) is próbálkoztam de úgy se jó vagy esetleg más fordítás vezérlő utasítással lehet megoldani?

Köszönöm!
(#) csiberaptor hozzászólása Márc 3, 2015 /
 
Sziasztok!
Ilyet lehetne pic-cel vezérelni?
3w power led

700mA áramot vesz fel, szóval nem direktben gondoltam.

Az megoldás lehet, hogy keresek egy tranzisztort, ami elbírja az áramot méghozzá kb stabilan, és azzal kapcsolgatom?
(#) kameleon2 hozzászólása Márc 3, 2015 /
 
Sziasztok! Eddig nem igazán kedveltem a PIC-et (ezután sem fogom nagyon) , azonban egy egyszerű feladatot meg kellene valósítanom egy tokban. Vagy atmel, vagy pic, vagy texas. Gyakorlatilag egy bemenetválasztó. Mi kellene nekem ha (majdnem) nulláról szeretnék megvalósítani egy ilyet? (kép). Mennyi hardverre, mennyi szoftverre van szükségem (Windows XP)? Mekkora tárterületet kell beáldoznom? PAL-GAL megoldás is érdekes lehet, de ahhoz még kevésbé értek. Egy VS4000 Stager RAM/ROM/EEPROM/UV EPROM/GAL programozóm van, ami elvileg írja a PIC-et, de gyanítom, hogy maximum hex-et enged. Hányféle nyelv áll rendelkezésre ingyen?
(#) mark.budai hozzászólása Márc 3, 2015 /
 
Sziasztok!
Ide írok, mert PIC programozással kapcsolatos, és ez a téma legalább nem merül el a süllyesztőben, mint a sajátja, és talán több hozzáértő jár erre.
Van nekem egy pár RFM73-as modulom, amiket szeretnék életre kelteni. Miután a gyártója (HopeRF) által közölt forráskód szinte használhatatlan, kénytelen voltam mást keresni. Meg is találtam Áron blogját, de a siker nem felhőtlen, mert Ő AVR-el foglalkozik. Gondoltam ezt a forráskódot átírom PIC-re, konkrétan 16F1705-re, be is vásároltam a cuccokat hozzá.
Sajnos a program nem működik, Áronnal már vagy 50 üzenet váltás után arra jutottunk, hogy ketten kevesek vagyunk megoldani a problémámat.
A vevő nem vesz tudomást az adó által küldött adatokról. Mindkét modulnál (az adónál és a vevőnél is), az SPI kommunikációt tesztelő programot beégetve jelzi, hogy működik, szóval a PIC és a modul közt nincs probléma a kommunikációban. A vevő oldal odáig sem jut el, hogy a modul vegye a jeleket, mert vételkor az IRQ lábon alacsony szintnek kéne lennie, ez állandóan magasan van.
Tudtok segíteni? Mi lehet a baja? Fontos lenne, hogy összehozzam ezeket a modulokat, de én itt már tehetetlen vagyok.

rfm.c
    
(#) Beles hozzászólása Márc 3, 2015 /
 
Sziasztok!
SPI-nél több eszközt használok egy adatvonalon. Hogyan lehet megoldani a chip select-et? Ugyanis hamarabb váltok eszközt, mint ahogy gondolom az SPI buffer kiürül. Így az adatok egy részét nem a cél eszköz veszi.
(#) Pali79 válasza csiberaptor hozzászólására (») Márc 3, 2015 / 1
 
Persze, simán!
(#) icserny válasza csiberaptor hozzászólására (») Márc 3, 2015 /
 
Idézet:
„Ilyet lehetne pic-cel vezérelni? 3w power led”

Hát persze! Watt fórumtársunk oldalán találsz egy mintaprojekt leírást is hozzá: RGB_LLED_627A
(#) sonajkniz válasza cross51 hozzászólására (») Márc 3, 2015 /
 
Szia!
Használd a DT utasítást!
Igaz, hogy a kód elé beír egy RETWL utasítást, de ennek nincs jelentőssége, mert nem az olvasható adatmezőbe teszi. Lényeg, hogy mindig 16 karakter legyen az idézőjelek között és két szövegrész közé tegyél vesszőt.
Èn készítettem magamnak assembly-ben egy alapprogramot, ami lekezeli a kijelzőt, és a sorszámozott 2x16 karakteres szövegeket a program bármely részéről egy egyszerű utasítással lehet meghívni. Az alapprogram önálló egység. A Main rutin helyére bármi beírható. Összesen 255 szöveg tárolható le benne.
Ha van rá érdeklődes egy cikkben leírom a működését és feltöltöm a szoftvert.
(#) spgabor hozzászólása Márc 4, 2015 /
 
Sziasztok!

Még mindig az időzítőmmel szívok, amivel közben azért kicsit sikerült előre lépnem. Ezért köszönöm a tanácsokat mindenkinek, de legfőképp don_peter-nek a rengeteg segítségért.

Közben csináltam paneltervet és nyákot is az időzítőmhöz, ezt mellékeltem is. Első sprintout-os munkám, így a szakavatottak biztos találnak benne hibákat. Ddiódákat nem tettem bele, de láttam olyan példakapcsolásokat, ahol szerepelnek, ezért a helye felkerült a panelra. Ennek még utána kell néznem. Valamint a csipogónak, mert alíg hallani a hangját. Szóval az elektronika nagyjából elkészült, közben a kijelzővel is sikerült dűlőre jutnom, valamint minden funkció működik.

a kódom a következő:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <htc.h>
  4.  
  5. __CONFIG(WDTE_OFF & FOSC_XT & CP_OFF & LVP_OFF & BOREN_OFF & MCLRE_ON & PWRTE_ON);
  6.  
  7. #define _XTAL_FREQ 4000000
  8. //gombok
  9. #define PERC RA1
  10. #define MASODPERC RA0
  11. #define TOROL RA2
  12. #define START RA3
  13. #define STOP RA4
  14. //kijelzo
  15. #define BLANK RB0
  16. #define DATA RB1
  17. #define CLK RB2
  18. #define ENABLE RB3
  19. //rele, beep
  20. #define RELE RB4
  21. #define BEEP RB5
  22.  
  23. volatile unsigned int szamlalo = 0;
  24. volatile unsigned int perc = 0;
  25. volatile unsigned int masodperc = 30;
  26. volatile unsigned int karakter_1 = 0;
  27. volatile unsigned int karakter_2 = 0;
  28. volatile unsigned int karakter_3 = 0;
  29. volatile unsigned int karakter_4 = 0;
  30. volatile unsigned int dispword = 0;
  31.  
  32. unsigned char DigitBal[10] = {0x77, 0x41, 0x6E, 0x6B, 0x59, 0x3B, 0x3F, 0x61, 0x7F, 0x7B};
  33. unsigned char DigitJobb[10] = {0x77, 0x44, 0x3E, 0x5E, 0x4D, 0xDB, 0xFB, 0x46, 0xFF, 0xDF};
  34.  
  35. unsigned int BalDigit = 0x100;
  36. unsigned int JobbDigit = 0x80;
  37.  
  38. void display_drive(int kijelzo_bal, int kijelzo_jobb, int oldal){
  39.     BLANK = 0;
  40.     dispword = (DigitBal[kijelzo_bal] | (DigitJobb[kijelzo_jobb] << 9)) | oldal;
  41.     CLK = 0;
  42.     ENABLE = 1;
  43.     for(int i = 0; i < 16; i++){
  44.         CLK = 1;
  45.         DATA = (dispword & 0x01);
  46.         dispword >>= 1;
  47.         __delay_us(1);
  48.         CLK = 0;
  49.         __delay_us(1);
  50.     }
  51.     __delay_us(1);
  52.     ENABLE = 0;
  53.     BLANK = 1;
  54. }
  55.  
  56. void interrupt isr(void){
  57.     szamlalo++;
  58.     if(!STOP){ //PAUSE
  59.         while(!STOP){
  60.             display_drive(perc / 10, masodperc / 10, BalDigit);
  61.             __delay_ms(5);
  62.             display_drive(perc % 10, masodperc % 10, JobbDigit);
  63.             __delay_ms(5);
  64.         }
  65.         RELE = 0;
  66.         TMR2IE = 0;
  67.     }
  68.     if(szamlalo == 1000){
  69.         if(masodperc == 0 && perc != 0){
  70.             perc--;
  71.             masodperc=60;
  72.         }else if(masodperc == 0 && perc == 0){
  73.             RELE = 0;
  74.             BEEP = 1;
  75.             __delay_ms(200);
  76.             BEEP = 0;
  77.             TMR2IE = 0;
  78.         }else{
  79.             masodperc--;
  80.         }
  81.         szamlalo = 0;
  82.     }
  83. }
  84.  
  85. int main() {
  86.     TRISA = 0xFF;  //A lábai bemenet lettek állítva
  87.     PORTA = 0; // PortA alacsony szinten
  88.     PORTB = 0x00; //PortB alacsony szinten
  89.     TRISB = 0x00; // B lábai kimenetek
  90.     CMCON = 7; // Comparator kikapcsolva
  91.     CCP1CON = 0; // Capt/Comp/PWM kikapcsolva
  92.     INTCON = 0;   // Összes interrupt láb kikapcsolva
  93.     PR2 = 249; // Timer2 PR2 8bites periódus regiszter
  94.     T2CON = 5; // T2CON regiszter
  95.     TMR2IE = 0; // TMR2IE megszakítást engedélyez? bit (leállítva a Timer2)
  96.     PEIE = 1; // Peripheral interrupt engedélyezése
  97.     GIE = 1; // Globális interrupt engedélyezése
  98.     DATA = 1;
  99.     ENABLE = 0;
  100.  
  101.     while(1){
  102.         display_drive(perc / 10, masodperc / 10, BalDigit);
  103.         __delay_ms(5);
  104.         display_drive(perc % 10, masodperc % 10, JobbDigit);
  105.         __delay_ms(5);
  106.         if(!PERC){
  107.             while(!PERC){
  108.                 display_drive(perc / 10, masodperc / 10, BalDigit);
  109.                 __delay_ms(5);
  110.                 display_drive(perc % 10, masodperc % 10, JobbDigit);
  111.                 __delay_ms(5);
  112.             }
  113.             perc++;
  114.             if(perc > 99){
  115.                 perc = 0;
  116.             }
  117.         }
  118.         if(!MASODPERC){
  119.             while(!MASODPERC){
  120.                 display_drive(perc / 10, masodperc / 10, BalDigit);
  121.                 __delay_ms(5);
  122.                 display_drive(perc % 10, masodperc % 10, JobbDigit);
  123.                 __delay_ms(5);
  124.             }
  125.             masodperc++;
  126.             if(masodperc > 60){
  127.                 masodperc = 0;
  128.             }
  129.         }
  130.         if(!TOROL){
  131.             while(!TOROL){
  132.                 display_drive(perc / 10, masodperc / 10, BalDigit);
  133.                 __delay_ms(5);
  134.                 display_drive(perc % 10, masodperc % 10, JobbDigit);
  135.                 __delay_ms(5);
  136.             }
  137.             perc = 0;
  138.             masodperc = 0;
  139.         }
  140.         if(!START){
  141.             while(!START){
  142.                 display_drive(perc / 10, masodperc / 10, BalDigit);
  143.                 __delay_ms(5);
  144.                 display_drive(perc % 10, masodperc % 10, JobbDigit);
  145.                 __delay_ms(5);
  146.             }
  147.             RELE =  1;
  148.             TMR2IE = 1;
  149.         }
  150.     }
  151. }


Viszont a problémám az, hogy ha az időzítőt is szeretném használni, akkor az túl gyorsan fut le, tehát perceket másodpercek alatt számol. Pedig amikor az elején ledet villogtattam csak, akkor a beállított időnek megfelelő volt a villogás is.
Valamint az időzítéssel párhuzamosan nem fut a végtelen ciklus tartalma, így az időzítés idejére a kijelző sem működik rendesen. Amikor a másodperc és perc pedig nullára ér, akkor pedig a TMR2IE nem áll le, hanem bennragad az időzítés azon if ágában, ahol a hangszóró csippanna és leállna a folyamat. Viszont ez nem egyet, hanem folyamatosan csipog.
Tudnátok segíteni, hogy mit javítsak a kódomon, a szabályos működés érdekében?

Üdv:
spgabor

nyakterv.JPG
    
(#) Hp41C válasza sonajkniz hozzászólására (») Márc 4, 2015 /
 
Idézet:
„...páros számú a karakterek száma ha páratlan befordít egy 0x00 ahova nem kéne.”

A program 18F -re készül. A DT -s megoldás nem hatékony rajtuk.
Abszolut kód: Írd két sorba külün DB direktíva sorba. Minden sor páros számú karaktert tartalmazzon.
Relokálható kól: Nézd meg a code pack lehetőségeket.
(#) Hp41C válasza kameleon2 hozzászólására (») Márc 4, 2015 /
 
Legalább 14 lábú tok kell a feladathoz: 16F630, 16F684, 16F688
A progarm kb. 20 - 40 sor assembly -ben, kb. 10 - 15 sor C -ben. 2k -ba bőven belefér.
Programnyelvek:
Assembly: MpLab 8.92 vagy MpLabX beépített assembly fordítója,
C: C5X,CCS C, Microelektronika C, HighTech C, XC8. A demo / free változattal lehet ekkora programot fordítani
Pascal, Basic: Microelektronika fordítók
A Gooooogle rengeteget más fordítót is találna.
(#) sonajkniz válasza Hp41C hozzászólására (») Márc 4, 2015 /
 
Hello!

Nekem a DT utasítással 18F14K22-es PIC működik.
Valószínűleg az álltalam használt kiolvasási módszer más. Nálam csak akkor működik, ha így tárolom le: DT "Szerbusz pajti! "," Hogy vagy? "
Tehát a szöveget mindig ki kell egészíteni space-val, hogy kilegyen a 16 karakter.
Nem mellékesen, itt már a beírásnál látod, hogy fog kinézni a kijelzőn.
Következő: »»   637 / 1210
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