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   257 / 1216
(#) potyo válasza zenetom hozzászólására (») Máj 19, 2012 / 1
 
Kis szerencsével stabilan működik. Valószínű, hogy nem gyártanak külön LF sorozatot, hanem egyes példányokat lemérnek és ha teljesíti a gyári teszteket alacsonyabb feszültségen is, akkor felcímkézik LF jelzéssel. De ez nem jelenti azt, hogy az F jelzésű nem teljesíti, csupán azt, hogy a gyár nem mérte le, hogy teljesíti-e!

16F876 nálam működött 1,6V-ról is. A rákapcsolt ledek is elaludtak már, de az ICD2-vel szépen követhető volt a futása és tette a dolgát.
(#) zenetom válasza potyo hozzászólására (») Máj 19, 2012 /
 
Én is ilyesmire gondoltam, köszi a választ!
Viszont az 1.6V már nem semmi.
(#) Hp41C válasza potyo hozzászólására (») Máj 19, 2012 /
 
Idézet:
„De ez nem jelenti azt, hogy az F jelzésű nem teljesíti, csupán azt, hogy a gyár nem mérte le, hogy teljesíti-e!”


Inkább úgy fogalmaznék: a mérés során bebizonyosodott, hogy nem teljesíti minden feltétel mellett az LF verzióra előírtakat. Ettől még működhet az F specifikációján kívül.
(#) sany hozzászólása Máj 19, 2012 /
 
Sziasztok!

Tudna valaki segíteni az alábbi kódban. Ez órát szeretnék megvalósítani, egyenlőre nulláról való indítással és nyomógombok nélkül. De az óra,perc,másodperc kiíratásánál gondok adottak.

  1. char digit[9]={"00:00:00"};
  2. int masodperc=0;
  3. int perc=0;
  4. int ora=0;
  5.  
  6.  
  7. sbit LCD_RS at RB2_bit;
  8. sbit LCD_EN at RB3_bit;
  9. sbit LCD_D4 at RB4_bit;
  10. sbit LCD_D5 at RB5_bit;
  11. sbit LCD_D6 at RB6_bit;
  12. sbit LCD_D7 at RB7_bit;
  13.  
  14. sbit LCD_RS_Direction at TRISB2_bit;
  15. sbit LCD_EN_Direction at TRISB3_bit;
  16. sbit LCD_D4_Direction at TRISB4_bit;
  17. sbit LCD_D5_Direction at TRISB5_bit;
  18. sbit LCD_D6_Direction at TRISB6_bit;
  19. sbit LCD_D7_Direction at TRISB7_bit;
  20.  
  21.  
  22. char* konvert(int szam)
  23. {
  24.      switch(szam){
  25.               case 0:return "0";
  26.               case 1:return "1";
  27.               case 2:return "2";
  28.               case 3:return "3";
  29.               case 4:return "4";
  30.               case 5:return "5";
  31.               case 6:return "6";
  32.               case 7:return "7";
  33.               case 8:return "8";
  34.               case 9:return "9";
  35.               default:return "0";
  36.               }
  37. }
  38.  
  39. void main()
  40. {
  41.  cmcon=0x07;
  42.  TRISA=0xFF;
  43.  TRISB=0x00;
  44.  PORTB=0;
  45.  PORTA=0;
  46.  
  47. Lcd_Init();
  48. Sound_Init(&PORTB,0);
  49. Lcd_Cmd(_Lcd_CLEAR);
  50. Lcd_Cmd(_Lcd_CURSOR_OFF);
  51.  
  52. while(1)
  53. {
  54.      digit[2]=':';
  55.      digit[5]=':';
  56.      digit[8]=0;
  57.      if(masodperc==59) {
  58.                 masodperc=0;
  59.                 if(perc==59) {
  60.                            perc=0;
  61.                            if(ora==23) ora=0;
  62.                            else ora++;
  63.                            }
  64.                 else perc++;
  65.                 }
  66.      else masodperc++;
  67.  
  68.       digit[1]=*(konvert(ora%10));
  69.       digit[0]=*(konvert((ora-(ora%10))/10));
  70.       digit[4]=*(konvert(perc%10));
  71.       digit[3]=*(konvert((perc-(perc%10))/10));
  72.       digit[7]=*(konvert(masodperc%10));
  73.       digit[6]=*(konvert((masodperc-(masodperc%10))/10));
  74.       delay_ms(1000);
  75.  
  76. //Kiíratás LCD -re
  77. Lcd_Out(1,1,digit[1]);
  78. Lcd_Out(1,2,digit[0]);
  79. Lcd_Out(1,3,digit[2]);
  80. Lcd_Out(1,4,digit[4]);
  81. Lcd_Out(1,5,digit[3]);
  82. Lcd_Out(1,6,digit[5]);
  83. Lcd_Out(1,7,digit[7]);
  84. Lcd_Out(1,8,digit[6]);
  85. }
  86. }


A kiíratást én így gondoltam , de össze vissza számol. Pedig már minden sorrendben beraktam . Tudna valaki segíteni?
(#) Hp41C válasza sany hozzászólására (») Máj 20, 2012 /
 
Szia!
22.sor: Szerintem char típusú legyen a konvert függvény.
25..35. sorok: Egy számjegy ASCII kódja megegyezik a 0x30+számjegy értékével, Azaz a "0" kódja 0x30, a "9" kódja 0x39. Az egész függvény egy öszeadás return (0x30 + szam);
54..55 sorok: Minek megcsinálni, ha az 1. sorban már megtörtént?
68..73 sokor: Inkább ilyen formában: digit[1]=(konvert(ora%10));
77..84 sorok: Ha szépen összeállítottad a karakter sorozatot, miért nem sorban egymásután írod ki?
(#) sany válasza Hp41C hozzászólására (») Máj 20, 2012 /
 
Akárhogy is íratom ki az LCD -re mindig összecsúsznak az egyes digitek. Próba képen egyenként hívtam az órát, percet, másodpercet. Ekkor is csak a percet és másodpercet jeleníti meg , ilyen formában :00:00 .
(#) Hp41C válasza sany hozzászólására (») Máj 20, 2012 /
 
Most milyen a programod? Milyen kontrolleren fut? Van -e lehetősége alacsony feszültségű programozásra? A PGM lábat nem használtad fel az LCD vezérlésére? Le van tiltva az LVP?
(#) balzi hozzászólása Máj 20, 2012 /
 
Sziasztok!
Egy Microchip 16F871-I/P-t programoztam többször is sikeresen. A 4. alkalommam azt vettem észre4, hogy a PICKIT2 16F870-esként ismeri fel, és csak úgy hajlandó rá írni, törölni. Ha így írom rá a progamot, akkor az meg nem működik normálisan. Hiába törlöm le, és állítom át manuálisan a PIC fajtáját, akkor sem hajlandó rá írni. Azt mondja, hogy 870-es van benne. Hogy tudnám rákényszeríteni, hogy 871-esként kezelje. Van egy másik 871-es IC-m azt tökéletesen kezeli. Esteleg van valakinek ötlete? Vagy egyszerűen csak dobjam ki?
(#) potyo válasza balzi hozzászólására (») Máj 20, 2012 /
 
Valami más gond lesz ott, mert a 16F870/871 azok nagyon hasonlóak, csak a lábszám, a párhuzamos port és az analóg csatornák száma tér el. Égetés szempontjából a kettő teljesen azonos, ha 870-ként írod meg, akkor is működnie kellene.
(#) Hp41C válasza balzi hozzászólására (») Máj 20, 2012 /
 
Szia!
A PGM lábat kösd be a PICKit2 6. csatlkozójára vagy a programozás alatt ellenállással húzd földre.
(#) balzi válasza potyo hozzászólására (») Máj 20, 2012 /
 
Szia! Ha így írom meg akkor nem használja az összes lábat. (kijelzésre használnám, és csak a lábak egy része működik így)
(#) sany válasza Hp41C hozzászólására (») Máj 20, 2012 /
 
Ahogy te tanácsoltad átírtam az ASCII kódokra .De úgy csak különböző karakterek jelennek meg. És sorba raktam a kiírásnál a karakter sorozatokat.
PIC16F628A mikrovezérlő. Írtam egy másik teszt programot, ott jól működik minden. A megfelelő helyre írja ki a karaktereket az LCD-n. Négybites módban működik a 2x16 - os kijelző. Nem hardveres gond van szerintem. A szoftver hibája. Csak nem tudom mi.
A PGM láb nincs felhasználva .
(#) Hp41C válasza sany hozzászólására (») Máj 20, 2012 /
 
Milyen fordítót használsz? Biztosan 4 bitesen kezeli az LCD -t? Időzítve adja ki a parancsokat? Jó az időzítés? Vagy a Busy bitre vár? A várakozás jól megy? Ha a Busy bitre vár, a R/W lábat bekötötted? Az adat vonalak bemenetek akkor, amikor az LCD -ből az olvasás történik? Jól vannak beállítva a konfigurációs bitek?

Töltsd fel az egész programot (csak annyit, amennyi már a hibát produkálja)!
(#) Georgee válasza icserny hozzászólására (») Máj 20, 2012 /
 
De akkor, ha a klón csak 5v VDD-t tud kapcsolni, akkor ne is kezdjem el azzal programozni az IC-t? Esetleg külső áramforrás?
(#) p_istvan válasza sany hozzászólására (») Máj 20, 2012 /
 
Szervusz!
Idézet:
„digit[1]=*(konvert(ora%10));”

Az értékadások jobb oldalán biztos kell az a szorzásjel?
(#) Stefan válasza sany hozzászólására (») Máj 20, 2012 /
 
Ez így egyszerűbb...
  1. digit[1]= ora%10 + '0';
  2. digit[0]= ora/10 + '0';
  3. digit[4]= perc%10 + '0';
  4. digit[3]= perc/10 + '0';
  5. digit[7]= masodperc%10 + '0';
  6. digit[6]= masodperc/10 + '0';

Amúgy a " "-t ne keverd ossze a ' '-vel. Előbbinél egy program memória címet jelöl, utóbbi számértéket.
(#) Hp41C válasza Georgee hozzászólására (») Máj 20, 2012 /
 
Szia!

A vezérlőjelek (ICSPCLK, ICSPDAT) is 5V -os magas szinttel adja ki a Szilva féle klón. Ne kezd el vele, tönkreteheti a kontrolleredet.
(#) icserny válasza Georgee hozzászólására (») Máj 20, 2012 /
 
Idézet:
„De akkor, ha a klón csak 5v VDD-t tud kapcsolni, akkor ne is kezdjem el azzal programozni az IC-t?”
Semmiképp sem. Csak a korábban belinkelt szintátalakítóval programozhatod. Egyébként a tápfeszültsége lehetne 5 V is akár, de a PGD/PGC bemenetekre nem szabad 3,6 V-nál magasabb feszültséget kapcsolni - ez a korlátozó tényező.
(#) Zsora hozzászólása Máj 20, 2012 /
 
Adott az MPLAB X, ill. egy PIC24 assembly program.
A beállításokban megadom a linkernek a verem méretét, de mégsem azt használja. Miért? (A programban nem adok meg veremméretet.)
(#) icserny válasza Zsora hozzászólására (») Máj 20, 2012 / 1
 
Idézet:
„A beállításokban megadom a linkernek a verem méretét, de mégsem azt használja. Miért?”
Az MPLAB 8 azt mondja a beállítható értéknél, hogy az a veremtár minimális mérete. A maximális mérete viszont a teljes rendelkezésre álló (nem használt?) RAM terület.
(#) pajti2 hozzászólása Máj 20, 2012 /
 
Bocsi, hogy más témát szúrok közbe.

Pic-es logikai analizátorokat leskelődök google pajtással. Kellene nekem legalább 4 csatorna (8 lenne a jobb), és folyamatos üzemben kellene küldeni fölfele a csatorna értékeket a PC-nek nagy sebességgel usb-n. Aki eddig találkozott ilyesmivel, mekkora volt a legnagyobb sebesség, amit ilyen módon pic-el produkálni lehetett? Elbírhatja akár egy 80mhz-s pic32 az 1-2 mhz-et folyamatos üzemben? (az 1-2 mbyte / sec usb-re kiküldve)
(#) potyo válasza pajti2 hozzászólására (») Máj 20, 2012 /
 
1MB/s fölé nemigazán tudsz Full Speed USB-vel menni. Egyébként szerintem nagyjából el tud ennyit vinni, de azért nem tenném rá a nyakamat.
(#) sany válasza Hp41C hozzászólására (») Máj 20, 2012 /
 
MikroC PRO 2009 - ben írtam . Minden beállítás jó , a konfigurációs bitek is . Más programmal az LCD kijelzése jó. Igazából a kiíratás okoz gondot .Beraktam sorba a digit tömb elemeit elvileg úgy kellene megjelenni a kijelzőn is . Nem jól gondolom?
(#) Zsora válasza Zsora hozzászólására (») Máj 20, 2012 /
 
Köszi szépen!
Csak furcsáltam, hogy 7kB RAM-teületet használok (a 16kB-ból), mégis a memóriahasználtságra 85%-ot jelez. De ezekszerint dinamikusan állítja a méretet, így ha pl. 15kB területet foglalok saját célra, akkor a linker a verem számára a maradékot fogja kijelölni.

Más:
Míg az MPLAB 8-ban szimulálva hiba esetén (pl. címhiba) üzenetet kaptam a hiba okáról és helyéről, addig MPLAB X-nél azt sem mondja; fapapucs, csak csinál egy újraindítást. Nem találok hozzá beállításokat.
És ha már hibáknál tartok, van egy tapasztalatom:
Ugyebár a munkaregisztereket címregiszterként/mutatóként való használat előtt inicializálni kell 16-bites értékadással. Enélkül végrehajtáskor hibakizárás történik. Érdekes módon a szimulátor (MPLAB 8 és X is) a következő műveletnél kizárást hajt végre a w6 miatt, pedig teljesen szabályos az inicializálás. (A PIC-en egyébként megy a program.):

lsr.w w0,#12,w6
mov.w [w10+w6],[w11]
(#) apac hozzászólása Máj 20, 2012 /
 
Szerintetek ezt érdemes kezdéshez megvenni: Bővebben: Link
Egy PIC18F4550-el használnám. Az USB-t hiányolom róla, de szerintem azt is lehetne rákötni ha csinálnék hozzá egy külön kártyát. Tanuláshoz kellene. Majd ha menne minden elég jól akkor építenék magamnak egy komolyabbat.
(#) bbalazs_ válasza apac hozzászólására (») Máj 20, 2012 /
 
Es mivel programoznad?
(#) Hp41C válasza sany hozzászólására (») Máj 20, 2012 /
 
Szia!
Ennyi információval csaka következőt tudom ajánlani:
Fordítsd le a programot a MikroC -vel, töltsd be az MpLab -bal (előbb be kell állítani a kontroller típusát), állítsd be az MpLab SIM -et debuggernek, nyisd ki a program memória ablakát. Ezek után lépésenként tudod nézni, mit is csinál a program.
(#) apac válasza bbalazs_ hozzászólására (») Máj 20, 2012 /
 
MikroC -re gondoltam. De szoftver terén még nem tudok döntésre jutni. ASM-vel kellene előbb egy kicsit megismerkedni, utána meg a C tudásomat feleleveníteni.Pár éve már nem használtam. PHP-vel dogozok elég sűrűn úgyhogy a programozás alap dolgai megvannak csak a PIC specifikus dolgokat kellene megtanulnom.
(#) bbalazs_ válasza apac hozzászólására (») Máj 20, 2012 /
 
Bocs, ugy ertettem, milyen ESZKOZZEL?
(#) apac válasza bbalazs_ hozzászólására (») Máj 20, 2012 /
 
PICKIT3-mal. Azt már vettem magamnak.
Következő: »»   257 / 1216
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