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   877 / 1210
(#) n_yálastrubadúr hozzászólása Nov 20, 2016 /
 
Próbálkozok mindenféle típussal, sehol sem találok olyat ami működik is.

  1. //    char  array[6] = {'a','b','c','d','e'}; // <<-- így nem jó
  2.  
  3.     char array[6];
  4.     array[0] = 'a';
  5.     array[1] = 'b';
  6.     array[2] = 'c';                           // <<-- így megy..
  7.     array[3] = 'd';
  8.     array[4] = 'e';
  9.    
  10.  
  11.     i2c_lcd_goto(0x54);                                // 4.sor LCD
  12.     for(unsigned char i=0; i!=5; i++){
  13.     i2c_lcd_write(array[i]);
  14.     }
A hozzászólás módosítva: Nov 20, 2016
(#) don_peter válasza ktamas66 hozzászólására (») Nov 20, 2016 /
 
0.06v-ra már, a 0 logikát választotta.
Teszteltem, hogy lehúztam abszolút nullára és lám, egyből jó volt a logika.
Lehet ez volt a gond, most teszek minden 68K-tól jövő 74LCV86 bemenet elé egy 10K-s ellenállást föld irányba. És meglátjuk mi lesz.

ui: amúgy igen ez még mindig az, csak közben programilag fejlődik és azért csak-csak előfordulnak hibák.
A hozzászólás módosítva: Nov 20, 2016
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Nov 20, 2016 /
 
Idézet:
„char array[6] = {'a','b','c','d','e'}; // <<-- így nem jó”

Persze, hogy nem jó: A deklarációban azt mondod a fordítónak, hogy 6 elemű lesz a tömb, de csak 5 elemet adsz meg.
char array[6] = {'a','b','c','d','e','f'}; // ennek már jónak kellene lennie.

"S" - ez egy string, 'c' ez egy karakter konstans.
Hogyan van deklarálva az i2c_lcd_write() eljárás?
Ha hibára fut a fordytás, másold be ide a hibajelzést is.
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Nov 20, 2016 /
 
Kevesebb elemmel lehet a tömb, nem? Egy sima LCD kiíratás lenne.

Ez megy !!

  1. i2c_lcd_goto(0x00);       // 1. sor LCD
  2.    i2c_lcd_write('O');
  3.    i2c_lcd_write('K');  
  4.    i2c_lcd_write(' ');


  1. i2c_lcd_goto(0x54);       // 4. sor LCD
  2.     i2c_lcd_puts("kjjuzvi");     // ez nem megy..


itt vannak a függvények:
  1. void i2c_lcd_puts(const char *s) {
  2.         while(*s){
  3.             i2c_lcd_write(*s++);
  4.             LATD ^= 0xff;  // <-- Led villogtató
  5.         }


  1. void i2c_lcd_write(unsigned char _data){
  2.    i2c_lcd_4bit_strobe_write((_data >> 4), 1, 0, i2c_lcd_bl);
  3.    i2c_lcd_4bit_strobe_write((_data & 0x0f), 1, 0, i2c_lcd_bl);
  4. }


A fentebbi béna próbálkozás amire válaszoltál, már ilyen hibakeresési mód lenne, de az sem megy. De ez kellene.. 16F es változaton ugyanígy ezzel megy.
A hozzászólás módosítva: Nov 20, 2016
(#) Hp41C válasza don_peter hozzászólására (») Nov 20, 2016 /
 
Idézet:
„0.06v-ra már, a 0 logikát választotta.”

A 0.06V bőven benne van az alacsony szinthez tartozó bemeneti feszültség tartományban: 3.3V tápfeszültség mellett 0..0.8V 74LVC86

Más probléma lesz:
- szakadt a bemenetére kötött vezeték, igy a CMOS bemenet kapacitíven összeszed feszültséget, ami mér elég a magas szinthez.
- a 86k címvezetékeo időnként nagyimpedanciás állapotba kerülnek,
Ezektől csak a kimeneti szint változhat meg, a kimenet fizikailag nem mehet tönkre. (Iout = +/- 50mA)
A kimeneten védődióda van a Vcc és a GND felé. Tönkremehet, ha a Vcc -nél magasabb vagy a GND -nél alacsonyabb feszültség kerül a kimenetre.
A kimenet zárlatban van valamelyik táppal, földdel, más jellel.
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Nov 20, 2016 /
 
Egy 18f47k40 - ről van szó. Nem lehet, hogy ebben van valami egészen más probléma. xc8 v1.38 a compiler.
Ennek a kódnak mennie kellene.

  1. //**********  Ez így megy *************************************** *********
  2. //    char array[6];
  3. //    array[0] = 'a';
  4. //    array[1] = 'b';
  5. //    array[2] = 'c';                           // <<-- így megy..
  6. //    array[3] = 'd';
  7. //    array[4] = 'e';
  8.    
  9.    //**********  Ez nem megy !! 5 ugyanolyan értelmetlen karaktert ír *********  
  10.     const char  array[6] = {'a','b','c','d','e','f'}; // <<-- így nem jó
  11.    
  12.     i2c_lcd_goto(0x54);                                // 4.sor LCD
  13.     for(unsigned char i=0; i!=5; i++){
  14.     i2c_lcd_write(array[i]);
  15.     }
A hozzászólás módosítva: Nov 20, 2016
(#) n_yálastrubadúr válasza n_yálastrubadúr hozzászólására (») Nov 20, 2016 /
 
Azért kellene ez a cucc, mert SD kártya kezelést szeretnék implementálni. Nahde itt elvérzek ..
(#) don_peter válasza Hp41C hozzászólására (») Nov 20, 2016 /
 
No, úgy fest bejött amit mértem és gondoltam is.
Most jól működik és úgy fest nem halt meg a 74LVC86, csak a hibás működéséből gondoltam, hogy halott. (lehet, hogy az előző kettő sem hallt meg)
Úgy néz ki az volt a baj, hogy a szintillesztő impedanciájából adódó 0.01-0.06v a 74LVC86 bemenetén elegendő volt, hogy hibás logikát adjon.
A szintillesztőn keresztül érkező (68K) címjeleket amelyek a 74LVC86 bemenetére érkezik, abszolút o szintre húzom egy 10K ellenállással, és így a logika már teljesen stabil és jó.

Most tesztelem pár napig, így és meglátom mit hoz. Eddig nagyon szépen működik.
Köszi srácok a segítséget.
(#) Tasznka válasza n_yálastrubadúr hozzászólására (») Nov 20, 2016 /
 
Én erre gondoltam:

  1. void i2c_lcd_puts(char *s) {
  2.     while(*s){
  3.         i2c_lcd_write(*s++);
  4.     }
  5. }
  6. void main(void)
  7. {
  8. while(1){
  9. //Ez
  10. i2c_lcd_puts("Valami");
  11. //vagy ez
  12. char ZZZ[]="Valami2";
  13. i2c_lcd_puts(ZZZ);
  14. }
  15. }

Mind a 2 működik
(#) n_yálastrubadúr hozzászólása Nov 20, 2016 /
 
Igen. Mind a 2 működik nekem is persze. Nem egy bonyolult dolog. Csak ebben a picben nem megy. Ez az igazi kérdés. Ezért is írtam ide, hogy mi lehet a baj...?
(#) n_yálastrubadúr hozzászólása Nov 20, 2016 /
 
És csakhogy teljesebb legyen a kép. Kipróbáltam egy 18f25k50 en is. Azon is megy. De e célra szánt eszköz a most vásárolt 18f47k40 lenne.
LÉTEZHET, EGY KONFIGURÁCIÓS BIT OKOZHAT ILYEN PROBLÉMÁT?
A hozzászólás módosítva: Nov 20, 2016
(#) n_yálastrubadúr hozzászólása Nov 20, 2016 /
 
Vagy lehetséges hogy ebben a nagyobb picben 2 MSSP modul van, és annak a bitjei máshogy jönnek ki?
(#) n_yálastrubadúr hozzászólása Nov 20, 2016 /
 
Végignéztem a regisztereket immáron 4. jére. Kipróbáltam egy ugyanilyen 18f47k40 -en. Azon sem megy. Amin megy az a 16F18323 és a 18f25k50. A 16F18323 is PPS-es és XLP-s új tipusú mikrokontroller. Teljesen tanácstalan vagyok. Muszáj lesz kipróbálnom egy másik 18F-es picen. Létezhet az hogy vagy a kontroller tervezési hibás, vagy a compiler ezzel a vezérlővel bug-os?
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Nov 20, 2016 /
 
Idézet a 18F47K40 adatlapjából:
Idézet:
„PORTB is multiplexed with several peripheral functions (Table 10-5). The pins have TTL input buffers. Some of these pin functions can be relocated to alternate pins using the Control fuse bits in CONFIG3H. RB5 is the default pin for P2B (28-pin devices). Clearing the P2BMX bit moves the pin function to RC0. RB5 is also the default pin for the CCP3/P3A peripheral pin. Clearing the CCP3MX bit moves the pin function to the RC6 pin (28-pin devices) or RE0 (40/44-pin devices). Two other pin functions, T3CKI and CCP2/P2A, can be relocated from their default pins to PORTB pins by clearing the control fuses in CONFIG3H. Clearing T3CMX and CCP2MX moves the pin functions to RB5 and RB3, respectively.”
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Nov 20, 2016 /
 
Huhh lehet nemértem. Nekem az RC porton van az SCL és az SDA, amit a beépített code configuratorral állít be a PPS regiszterekben a plugin.
(#) n_yálastrubadúr válasza n_yálastrubadúr hozzászólására (») Nov 20, 2016 /
 
Most ebbők az ötletből kiindulva áttettem az SCL-t és az SDA-t egy másik kivezetésre. Ugyanaz, teljesen. De ha nem lenne jó az SCL és az SDA láb, akkor inizializálni se menne gondlom. De az megy .. írni is tudok rá .. csak ez a pointeres tömbös történet nem megy. Nem tudom valami speciális foglalás kellene a memóriában. Valami új típus. Ilyenekt látok static const romchar stb.. Mindent próbálgatok, de sehogy nem akarja az igazságot.
A hozzászólás módosítva: Nov 20, 2016
(#) gyoran válasza don_peter hozzászólására (») Nov 20, 2016 /
 
Szívesen. Már épp be akartam dobni a törölközőt.
Lehet, hogy nem is kell a szintillesztő. Ha stabilan megy, gondold meg, hogy kiveszed. Ha jól értettem a 68k 5 Voltját illesztené 74LVC felé, de annak köszöni, jó az 5 V az adatlap szerint.
Más felől pedig: never touch a running system!
Ezt a 0.01-0.06 V-ot nem nagyon értem, inkább arra gondolok, Hp41C talált a feketébe.
Szerintem a 68k néha elengedi nagyimpedanciásba a lábát. Ez sok mindent megmagyarázna. Akkor jó lesz a 10 k lefelé.
(#) don_peter válasza gyoran hozzászólására (») Nov 21, 2016 /
 
Ez ennél egy icipicit bonyolultabb.
Szintillesztőt nem vehetem ki, mert nem csak 4 címbitet illeszt, hanem mellette még 50 egyéb más lábat is.. Hp41C fórumtársunk javaslatát figyelembe vettem, de mivel a szintillesztés is közben van és persze 68K nincs a hardverre illesztve adat töltés közben, nem okozhat behatást a működésre.
Ez egy kártya.
(#) siemenstaurus hozzászólása Nov 21, 2016 /
 
Sziasztok!
Pic18F14K50 vezérlő RA4es lábát szeretném használni I/O pinként, kimenetként.
A lábon van: RA4 / AN3 / OSC2 / CLKOUT.
Milyen config hiányzik? Adatlapból próbálom kiszedni a helyes beállítást de már meghülyít mert sehogy nem szeretné azt csinálni amit próbálok neki megmondani.
Ilyekor az oszcillátort ki kell lőni?
Valahogy az adatlap 282-283 oldalán lévő CONFIG1K CONFIG1H regisztereivel tudnám állítani? De azokat meg nem veszi be, fordításkor BuildFail. Valamit include-olni kellene hozzá?
Itt van a megoldás a küszöbön csak nem látom a fától az erdőt.
Legyetek szívesek magyarázzátok el hogyan működik! Köszönöm!

http://ww1.microchip.com/downloads/en/DeviceDoc/40001350F.pdf

Beállítasaim:
  1. #include <p18f14k50.h>
  2. #pragma config LVP = OFF
  3. #pragma config WDTEN = OFF
  4. #pragma config MCLRE = OFF
  5.  
  6. main()
  7. {
  8. TRISC = 0b00000000;               // PORTC összes kimenet
  9. LATC=0b00000000;
  10. ANSELH = 0;
  11. ANSEL = 0;
  12. ANSELbits.ANS3=0;    //AN3 letiltva bár ezt megtettük feljebb is?
  13. TRISA=0b11101111;   //PORTA bemenet de RA4 kimenet
  14. ?...? //még valami kell
  15. ...

1234567.png
    
(#) kissi válasza siemenstaurus hozzászólására (») Nov 21, 2016 /
 
Szia!
Az RA4-es láb egyben oszcillátor frekvenciameghatározó láb is ( pl. a kvarckristályt ide kell kötni!). Ha használni akarod a lábat, akkor ezt nyilván nem használhatod az oszcillátorhoz --> használd a belső oszcillátort, de ezeket nem láttam a beállításaidban!
(#) Elektro.on válasza siemenstaurus hozzászólására (») Nov 21, 2016 /
 
Az oszcillátort confogoltad belsüő oszcillátorra?
Mert alapból az RA4 es lába a külső kavics lenne.
(#) icserny válasza siemenstaurus hozzászólására (») Nov 21, 2016 /
 
Idézet:
„Milyen config hiányzik?”

A belső oszcillátort kellene használni, méghozzá CLOCKOUT funkció nélkül:

#pragma config FOSC = IRC
(#) lmaresz hozzászólása Nov 22, 2016 /
 
Sziasztok!

Nagyon kezdő PIC-es vagyok, egy olyan kérdésem lenne, hogy LVP-t ha bekapcsolom akkor miért nem megy egy alap LED villogtatás? (egyébként meg normálisan működik) PIC16f887-esről van szó, belső alapértelmezett oszcillátor adja az órajelet és a PicKit3 adja a tápot
(#) icserny válasza lmaresz hozzászólására (») Nov 22, 2016 /
 
LVP módban a PGM láb le- vagy felhúzása dönti el, hogy a mikrovezérlő programfuttatás vagy programozás módban legyen. Ebből következően a PGM láb nem lebeghet.
(#) lmaresz válasza icserny hozzászólására (») Nov 22, 2016 /
 
Köszönöm (kicsit mèg gyakorolnom kell a dokumentáció olvasást)
(#) don_peter hozzászólása Nov 22, 2016 /
 
Srácok, lehet nem teljesen ide tartozik, de nem találtam megfelelő topikot. (ami élne is)
ASM programról lenne szó.
68K-ra kellene nekem egy kis késeltetést írnom a kérdés az, hogy tudna e nekem valaki segíteni benne.
Pár mp-et kellene várnia a programnak aztán továbblépnie.
A baj, hogy azt sem tudom, hogy álljak neki..

A PIC-hez azért van köze a dolognak, mert ezt az asm kódot lefordítom binárisra, majd azt a PIC-be egy tömbbe teszem, és PIC-el pedig feltöltöm 68K-hoz csatolt memóriába.
És utána 68k már tudja használni..

Előre is köszi.
A hozzászólás módosítva: Nov 22, 2016
(#) Zsora válasza don_peter hozzászólására (») Nov 22, 2016 /
 
Idézet:
„ASM programról lenne szó”
ASM nyelven nem programoztam MC68000-est, csak Assembly nyelven. (Amiga)
Azért a programhoz nem árt ismerni a Sega hardverét, memóriakiosztását, ill. hogy hogyan kerül a vezérlés a Cartridge címterületére.
Mi lenne a cél pontosan?
(#) don_peter válasza Zsora hozzászólására (») Nov 22, 2016 /
 
Sega hardvere illetve a szíve a 68K.
A cél egy kis időzítés semmi más.
2 szöveg kiírása között kellene időzni e pár mp-et. (csatoltam a képet)
Azon a részen ahol a 4 sor szöveg van, ott kellene várni kicsit majd átváltani egy másik, újabb 4 sor szövegre.

Minden mást meg tudok csinálni, de Assembly nyelven nem tudok programozni, a C meg baromi nagy, szóval sallang itt nem lehet.

A kód feltöltése már elvileg nem lehet akadály, azt éppen most írom.

A kód main része:
  1. ;------
  2. ; MAIN |
  3. ;------
  4. main:
  5.     jsr VDP_Init
  6.     jsr Scroll_Init_Coord
  7.     lea Palettes, a0
  8.     jsr Load_Palettes
  9.    
  10.     lea Font_Tiles, a0
  11.     jsr Load_Font
  12.    
  13.     lea Logo_Tiles, a0
  14.     jsr Load_Logo           ; warning no vdp control set (implicit "cue mode")
  15.  
  16.     lea Logo_Tilemap, a0
  17.     jsr Draw_Tilemap
  18.    
  19.     lea String, a0
  20.     jsr Draw_Text           ; warning no vdp control set (implicit "cue mode")
  21.  
  22.     // itt kellene várnia 4-5mp-et (nem fontos a pontosság)
  23.    
  24.     lea String2, a0
  25.     jsr Draw_Text
  26.    
  27. main_loop:
  28.     jsr Vsync_Wait    
  29.     jmp main_loop
A hozzászólás módosítva: Nov 22, 2016

dptp_sega.jpg
    
(#) Zsora válasza don_peter hozzászólására (») Nov 22, 2016 /
 
Talán ez a legegyszerűbb:
  1. kezd:     move.w    #4000,d0
  2. cikl1:    move.w    #760,d1
  3. cikl2:    dbf       d1,cikl2
  4.           dbf       d0,cikl1
(#) Zsora válasza Zsora hozzászólására (») Nov 22, 2016 / 1
 
...vagy ez:
  1. kezd:   move.l  #1688889,d0
  2. cikl:   subq.l  #1,d0
  3.         bne.s      cikl
A hozzászólás módosítva: Nov 22, 2016
Következő: »»   877 / 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