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   460 / 1211
(#) kissi válasza Gibi89 hozzászólására (») Nov 11, 2013 /
 
Ne aggódj, ott nem lesz !
(#) kissi válasza icserny hozzászólására (») Nov 11, 2013 /
 
Pontosabban: lenyomás érzékelése után várni pl. 30 ms-ot és ha még mindig le van nyomva, akkor reagálni rá! A
Idézet:
„addig ne vegye figyelembe a lenyomást, amíg nem volt felengedés”
zavaró, mert nem reagál a gomb megnyomására "azonnal" !
(#) Gibi89 válasza kissi hozzászólására (») Nov 11, 2013 /
 
Remélem is, hogy ott nem lesz. Csak eléggé zavaró, hogy nem csinálja azt amit én szeretnék szimulátorban.

És nem tudnál segíteni a szoftveres pergésmentesítésbe?
(#) usane válasza dave77 hozzászólására (») Nov 11, 2013 /
 
Az is ott van a build ikon alatt, az is legördülő mint a program ikon.
(#) kissi válasza Gibi89 hozzászólására (») Nov 11, 2013 /
 
Vicsys kolléga leírta a szoftveres durva megoldást: ha tudsz egy kicsit programozni, akkor ez nem nagy kihívás, egyszerűen megvalósítható: mi az, amit nem tudsz belőle?!
(#) ativagyok hozzászólása Nov 11, 2013 /
 
Sziasztok!
Van egy egyszerű kérdésem MikroC-vel kapcsolatban. Adott egy GLCD az áramkörben, aminek az R/W lába fölre van kötve. A program elején, amikor társítom a GLCD és a PIC portjait, mi a teendő az R/W lábbal? Ha kihagyom, nem fordul le a program.
(#) zenetom válasza ativagyok hozzászólására (») Nov 11, 2013 /
 
Szia!
Típusjelzést ilyenkor illik írni, hogy tudjuk miről van szó.
De általában az R/W lábbal tudod kiválasztani, hogy írni akarsz az LCD-re, vagy olvasni tőle. Általában csak írni akarunk rá, ezért fixen be szoktuk kötni GND-re (de az adatlap írja).
Szerintem muszáj beállítani azt a lábat is, mert különben nem tudja a fordító, hogy mizu van.
De a MikroC-ben jártasabbak biztos tudnak valami megoldást rá.
(#) ativagyok válasza zenetom hozzászólására (») Nov 11, 2013 /
 
Szia!
Elnézést, a típusok: PIC32MX150F128B és KS0108 komatibilis GLCD.
Igen, ezt értem hogy mire jó az RW láb, ezért gondoltam úgy, hogy földre kötöm. Viszont ezt annak érdekében tettem, hogy ezáltal felszabadul egy IO láb, ezért nem nagyon tudom hová társítani. Biztos létezik rá megoldás
(#) dave77 válasza usane hozzászólására (») Nov 11, 2013 /
 
Köszi, erre a legördítő fülre eddig nem is figyeltem fel, csak a gombot nyomogattam. Viszont most, hogy belenéztem, ennek alapján a sima buildet használtam, és nem a dubugos verziót. Az az érdekes, hogy a panelem akkor is működik, ha az ICD3 úgy van rádugva, hogy a PC ki van kapcsolva, és az USB-ről sem kap tápot, sötét rajta mind 3 LED. De ha lehúzom a penelemről, akkor azonnal leáll...
(#) Gibi89 válasza kissi hozzászólására (») Nov 12, 2013 /
 
Programozni tudok, csak a pergésmentesítést nem tudom, hogy hogy kell megvalósítani. Mert hiába néztem utána, ahány oldal annyiféle megvalósítás, és nekem egyik se működik jól, pedig elég sokféle módon beírtam.

Ebben szeretnék egy kis segítséget kérni, egy rövidke példát, ami rendesen működik, ha leszimulálom a programot.
A hozzászólás módosítva: Nov 12, 2013
(#) kissi válasza Gibi89 hozzászólására (») Nov 12, 2013 /
 
  1. void main()
  2. {
  3. char gombnyomas = 0;    //ide azért az "int" valószínűleg túlzás!
  4.  
  5. do{
  6.  
  7.        while(RB0);
  8.  
  9.        gombnyomas++;
  10.  
  11.    switch(gombnyomas)
  12.  
  13.        {
  14.             case 1:     //ezt csinálja, ha a gombnyomás értéke 1
  15.                             break;
  16.  
  17.             case 2:     //  gombnyomás=2
  18.                             break;
  19.            
  20.         }
  21.  
  22.            delay(200ms);  //legyen idő elengedni a gombot, egyben prellmentesítés is !
  23.  
  24. }while(1);
  25. }
A hozzászólás módosítva: Nov 12, 2013
(#) Zsora válasza Zsora hozzászólására (») Nov 12, 2013 /
 
Mivel eddig nem kaptam segítséget ahhoz, hogy az MPLAB X IDE 1.95-höz hogyan használható ASM30 asszembler, kénytelen voltam tákolós módszert alkalmazni. Feltettem először az 1.2-es verziót, ami tartalmazza azt, majd az egész ASM30 könyvtárat elmentettem. Aztán az 1.2-t leszedtem és feltettem helyette az 1.95-öt, ami ugye csak a 8-bites MPASMX-et tartalmazza. Ezután az elmentett ASM30 könyvtárat bemásoltam a Microchip könyvtárba. (ide kerül az XC16 is) Így már a Tools/Options/Embedded/Build Tools menüben felűnik az ASM30 is, és minden probléma nélkül ki is lehet választani. Már csak némi útvonalmegadás, és használható is tökéletesen.
Gondolom a Microchip nem így tervezte a telepítést, vagy igen? Ha másnak ez egyszerűbben megy/ment, megosztaná velem a mikéntjét?
(Mint már korábban írtam, az XC16 telepítése után nem választható ki közvetlenül az ASM30, csak az Add New Toolchain ablakban, de ott meg az istennek sem lehet megadni az elérési útvonalat hozzá.)
A hozzászólás módosítva: Nov 12, 2013
(#) usane válasza dave77 hozzászólására (») Nov 12, 2013 /
 
Nem kell PC ha panelt táplálod ICD arról is megy. Ám nem ismerem nagyon az ICD-t én PICkitet használok, de tuti menni kéne ha lehúzod is. Milyen panelon van ez a PIC valami demo vagy saját?
(#) usane válasza Zsora hozzászólására (») Nov 12, 2013 /
 
Hali!

Nos, ha azt akarod, hogy működjön, szerintem rakd fel a C30 fordítót, az alatt van az ASM30. A C16 alatt nincs. Legalábbis nálam abban van, és ki is tudom választani simán.
(#) Zsora válasza usane hozzászólására (») Nov 12, 2013 /
 
Szia!
Én az XC16-ot (elvileg ez a C30 új neve) raktam fel, ami tartalmazza is az ASM30-at, de sehogy nem tudom elérni hogy kiválasztható legyen, vagy hogy az Assembly elérési út megadható legyen. (Az út mindig törlődik az ablak elhagyásakor.)
(#) ativagyok hozzászólása Nov 12, 2013 /
 
Sziasztok!
Közben a bit-társításos problémám megoldódott, viszont nem tökéletes a GLCD-n a kijelzés.
Bitképet, és szöveget rendesen kirajzol, de téglalapot, kört, vonalat nem. Sajnos jelenleg nem tudok mérni, ezért tenném fel itt a kérdést, hátha lehet következtetni valami tipikus hibára a csatolt kép alapján. (GLCD: KS0108; PIC32MX150F128B; MikroC) Kép: Link
Üdv!
Attila
A hozzászólás módosítva: Nov 12, 2013
(#) staci123 hozzászólása Nov 12, 2013 /
 
Szevasztok,
van kezdő kérdésem: Lehet e a PIC16C mikrovezérlőket "átírni"?
Konkrétan van készülékből kimentett PIC16C55 és PIC16C57 ic-im, nem tudom
milyen célprogramot tartalmaznak, használhatók-e még, vagy kuka?
(#) icserny válasza kissi hozzászólására (») Nov 12, 2013 /
 
Idézet:
„[quote]addig ne vegye figyelembe a lenyomást, amíg nem volt felengedés”

zavaró, mert nem reagál a gomb megnyomására "azonnal" ![/quote]Nem, dehogy! Csak rosszul fogalmaztam. Helyesen: Addig ne vegye figyelembe az újabb lenyomást, amíg nem volt felengedés.

Például:
  1. while (1) {
  2.      while(SW1==1);          //lenyomásra vár
  3.      delay_ms(20);           //pergésmentesítő késleltetés
  4.      mLED_1_Toggle();        //LED1 állapotváltás
  5.      while(SW1==0);             //felengedésre vár
  6.      delay_ms(20);           //pergésmentesítő késleltetés
  7. }
(#) Hp41C válasza staci123 hozzászólására (») Nov 12, 2013 /
 
Ha a kontrollerek kvarcüveges kerámia tokban van (JW tokozáskód), akkor normál EPromtörlővel lehet törölni. Ha teljes palsztik tokban (P tokozáskód), akkor nem lehet átírni.
(#) staci123 válasza Hp41C hozzászólására (») Nov 12, 2013 /
 
Igen, teljes palsztik tokban (P tokozáskód) vannak...
Köszönöm a gyors választ!
(#) Hp41C válasza staci123 hozzászólására (») Nov 12, 2013 /
 
Jó látni, hogy a PICKit2+ nem csak beégette, de a kontroller még fut is a programmal...
(#) usane válasza Zsora hozzászólására (») Nov 12, 2013 /
 
Föltettem a kedvedért az xc16-ot, nem adja be automatikusan az asm30-at.
(#) staci123 válasza Hp41C hozzászólására (») Nov 12, 2013 /
 
Fut? Repül... a kukába
(#) Hp41C válasza staci123 hozzászólására (») Nov 12, 2013 /
 
Bocsánat, ativagyok -nak szántam a választ...
(#) ativagyok válasza Hp41C hozzászólására (») Nov 12, 2013 /
 
Igen, ez nagyon nagy előreugrás volt a project során
Köszönöm még egyszer
(#) janimester hozzászólása Nov 12, 2013 /
 
Üdv. lenne egy fordulatszámmérő programom ami nem akar nullázódni ha nincs érték hanem megmarad a kijelzőn a legutóbb mért érték ha elveszem a jelforrást menet közben. Mit kéne közbeiktatni hogy nullázódjon ha mondjuk 100ms-ként nem kap jelet (18f2520-re van írva viszont 18f4550-re lessz átalakítva). Tudom nem ide kellett volna feltenni a kérdést de ahova a kérdés való lenne ott halott a fórum.
  1. Üdv. lenne egy fordulatszámmérő programom ami nem akar nullázódni ha nincs érték hanem megmarad a kijelzőn a legutóbb mért érték ha elveszem a jelforrást menet közben. Mit kéne közbeiktatni hogy nullázódjon ha mondjuk 100ms-ként nem kap jelet (18f2520-re van írva  viszont 18f4550-re lessz átalakítva).  Tudom nem ide kellett volna feltenni a kérdést de ahova a kérdés való lenne ott halott a fórum. [code=c]/*******************************************************************************
  2.   18F2520
  3. *******************************************************************************/
  4.  
  5. // Lcd pinout settings (Global variables)
  6. sbit LCD_RS at RC0_bit;
  7. sbit LCD_EN at RC1_bit;
  8. sbit LCD_D4 at RC2_bit;
  9. sbit LCD_D5 at RC3_bit;
  10. sbit LCD_D6 at RC4_bit;
  11. sbit LCD_D7 at RC5_bit;
  12. // Pin direction
  13. sbit LCD_RS_Direction at TRISC0_bit;
  14. sbit LCD_EN_Direction at TRISC1_bit;
  15. sbit LCD_D4_Direction at TRISC2_bit;
  16. sbit LCD_D5_Direction at TRISC3_bit;
  17. sbit LCD_D6_Direction at TRISC4_bit;
  18. sbit LCD_D7_Direction at TRISC5_bit;
  19.  
  20. unsigned short int falling_edge = 0;
  21. unsigned short int TMR0H_value, TMR0L_value;
  22. unsigned int TMR0_value;
  23. char TMR0_value_to_LCD[7];
  24. unsigned int rev;
  25. char rev_to_LCD[7];
  26.  
  27. void interrupt() {
  28.     if(INTCON.INT0IF) {
  29.         falling_edge++;
  30.         if(falling_edge == 1) {
  31.             TMR0H = TMR0L = 0;
  32.         }
  33.         if(falling_edge == 2) {
  34.             TMR0H_value = TMR0H;
  35.             TMR0L_value = TMR0L;
  36.             TMR0_value = (TMR0H << 8) + TMR0L; // két nyolcbites változó összefűzése 16 bitessé
  37.             rev = 234375 / TMR0_value;         // (1000 * 1000) / (256 * 4 * TMR0_value)
  38.             TMR0H = TMR0L = 0;
  39.             falling_edge = 0;
  40.         }
  41.         INTCON.INT0IF = 0;
  42.     }
  43. }
  44.  
  45. void main() {
  46.     OSCCON = 0x62;
  47.     ADCON1 = 0x0F;
  48.     CMCON = 0x07;
  49.     RCON.IPEN = 0;              // pdf 104.
  50.     INTCON = 0b11110000;        // pdf 95.
  51.     INTCON2.INTEDG0 = 0;        // falling edge, pdf 96.
  52. //    INTCON2.TMR0IP = 0;         // low interrupt priority
  53.     T0CON = 0b10000111;         // 1:256, pdf 125.
  54.     TMR0H = TMR0L = 0;
  55.     TRISB = 0b00000001;
  56.     LATB = 0;
  57.     TRISC = 0;
  58.     LATC = 0;
  59.  
  60.     Lcd_Init();
  61.     delay_ms(100);
  62.     Lcd_Cmd(_LCD_CURSOR_OFF);
  63.  
  64.     while(1) {
  65.         if(rev <= 300) {
  66.             Lcd_Out(1, 1, "-----");
  67.             Lcd_Out_Cp(" RPM");
  68.             Lcd_Out(2, 1, "-----");
  69.             Lcd_Out_Cp(" TMR0");
  70.         }
  71.         else {
  72.             WordToStr(rev, rev_to_LCD);
  73.             Lcd_Out(1, 1, rev_to_LCD);
  74.             Lcd_Out_Cp(" RPM");
  75.  
  76.             WordToStr(TMR0_value, TMR0_value_to_LCD);   // IntToStr előjeles 2 bájt, WordToStr előjel nélküli 2 bájt
  77.             Lcd_Out(2, 1, TMR0_value_to_LCD);
  78.             Lcd_Out_Cp(" TMR0");
  79.         }
  80.         delay_ms(10);
  81.     }
  82. }
[/code]
A hozzászólás módosítva: Nov 12, 2013
(#) Prendick válasza janimester hozzászólására (») Nov 12, 2013 /
 
A legegyszerűbb megoldás az, ha megemeled a delay-t 80-100-ra a kiírásnál, úgyse kell ilyen gyakran kiíratni, és az utolsó Lcd_Out után kinullázod a rev és a TMR0_value változót. Mire újra a kiíráshoz ér a ciklus, kb. 100ms telik el és az interrupt rutin vagy adott friss értéket, vagy maradt a 0 és akkor az kerül az lcd-re..
(#) ativagyok hozzászólása Nov 13, 2013 /
 
Sziasztok!
Sajnos a PIC32 problémája a GLCD-vel még mindig nem oldódott meg, folyamatos hibakeresés után sem. Valakinek esetleg van tapasztalata 32bites pic és grafikus lcd kapcsolatáról? Egyetlen kapcsolást sem találok, ahol ezeket együtt használják.
Bemásolnám a forrásból a lábak társítását, hátha itt követtem el valami hibát.
A hiba még egyszer: A kijelző bitképet hibátlanul megjeleníti, de ha valamilyen függvényt használok, hibás a megjelenítés. Példaként:
-egy darab pixel felvillantása: Kép1
-téglalap és vonal rajzolása: Kép2
(PIC32MX150F128B, KS0108 128x64 GLCD, MikroC PRO for PIC32 3.3.0)
  1. sbit GLCD_D0 at LATB7_bit;
  2. sbit GLCD_D1 at LATB8_bit;
  3. sbit GLCD_D2 at LATB9_bit;
  4. sbit GLCD_D3 at LATB10_bit;
  5. sbit GLCD_D4 at LATB12_bit;
  6. sbit GLCD_D5 at LATB13_bit;
  7. sbit GLCD_D6 at LATB14_bit;
  8. sbit GLCD_D7 at LATB15_bit;
  9. sbit GLCD_CS1 at LATB5_bit;
  10. sbit GLCD_CS2 at LATB4_bit;
  11. sbit GLCD_RS at LATB3_bit;
  12. sbit GLCD_RW at LATB1_bit;
  13. sbit GLCD_EN at LATB6_bit;
  14. sbit GLCD_RST at LATB11_bit;
  15. sbit GLCD_D0_Direction at LATB7_bit;
  16. sbit GLCD_D1_Direction at LATB8_bit;
  17. sbit GLCD_D2_Direction at LATB9_bit;
  18. sbit GLCD_D3_Direction at LATB10_bit;
  19. sbit GLCD_D4_Direction at LATB12_bit;
  20. sbit GLCD_D5_Direction at LATB13_bit;
  21. sbit GLCD_D6_Direction at LATB14_bit;
  22. sbit GLCD_D7_Direction at LATB15_bit;
  23. sbit GLCD_CS1_Direction at LATB5_bit;
  24. sbit GLCD_CS2_Direction at LATB4_bit;
  25. sbit GLCD_RS_Direction at LATB3_bit;
  26. sbit GLCD_RW_Direction at LATB1_bit;
  27. sbit GLCD_EN_Direction at LATB6_bit;
  28. sbit GLCD_RST_Direction at LATB11_bit;
A hozzászólás módosítva: Nov 13, 2013
(#) Hp41C válasza ativagyok hozzászólására (») Nov 13, 2013 /
 
Idézet:
„sbit GLCD_D0 at LATB7_bit;
sbit GLCD_D0_Direction at LATB7_bit;”

A másodiknak nem a port irányát megadó regiszter megfelelő bitjét kellene megadnia:
sbit GLCD_D0_Direction at TRISB7_bit;
(#) ativagyok válasza Hp41C hozzászólására (») Nov 13, 2013 /
 
De igen, a TRIS volt az első próbálkozás, szintén sikertelen, de valóban úgy a helyes. Vissza is írtam azóta TRIS-re.
Amit azóta kipróbáltam:
-Glcd_Fill(1);
-1-esekkel teli bitkép
Következő: »»   460 / 1211
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