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   500 / 1210
(#) nedudgi válasza gaspar_zsolt hozzászólására (») Márc 12, 2014 /
 
"Memory Programming Specification"
7.3 bekezdés.
(#) gaspar_zsolt válasza nedudgi hozzászólására (») Márc 12, 2014 /
 
Köszönöm.
Ebben sem találtam, mert ezt már néztem.

Idézet:
7.3 Data EEPROM

The programmer should be able to read data memory
information from a hex file and write data memory
contents to a hex file.
The physical address range of the 256 byte data
memory is 0000h-00FFh. However, these addresses
are logically mapped to address 1E000h-1E1FFh in the
hex file. This provides a way of differentiating between
the data and program memory locations in this range.
The format for data memory storage is one data byte
per address location, LSb aligned.”


Az egyetlen cím a Hp41C által ajánlott 0xF000 volt amire helyesen reagált!

Ebben sem hivatkozik erre a kezdőcímre.
(#) icserny válasza gaspar_zsolt hozzászólására (») Márc 12, 2014 /
 
Idézet:
„Hol találom meg bármelyik PIC-ben az EEPROM memória címét?”

A linker scriptben. Például a 16f1825_g.lkr állományban ezt látom:
  1. CODEPAGE   NAME=eedata     START=0xF000            END=0xF0FF         PROTECTED
(#) Hp41C válasza gaspar_zsolt hozzászólására (») Márc 12, 2014 /
 
Mivel a 16F utasításai 14 bitesek, nem férnek el egy byte -on. A hex állőmány címei byte -osak, az utasítások, memória területek cime a Midrange családban word -ös. Ezért a hex állományban a cimek kétszerese szerepel. 0xF000 * 2 = 0x1E000
Idézet:
„7.0 ... Because there are two bytes per word, the addresses in the hex file are 2x the address in program memory.”

Ebben a leírásban van egy jó memória térkép is.
(#) janimester hozzászólása Márc 12, 2014 /
 
Üdv. Lenne ez a kódom ami működik is , pontosabban fordulatszámmérést végez. De nekem elég lenne bőven az is ha csak 8 bit szélességgel számolna , azaz 65535hz plafonra gondolok. Így nem kellene ilyen óriási számokkal osztania a kódnak ami nagyon lefogja a picet. 18f4550-en megy a kód és a timer0 -át használja (portb.b0) az impulzusok figyelésére. Ezen felül valami nullázó kiegészítés sem ártana hozzá.. csináltam olyat hogy a kód végére írtam hogy rev = 0 ez ki nullázza de nekem úgy tetszene jobban hogy állandóan figyelné a felfutó lefutó élek váltakozását és ha netán megszűnik vagy lassulnak a jelek kövesse azt. Valaki tudna segíteni hogy a felső megszakításos résszel mit kéne kezdenem hogy ne 16bitben számolgasson?
  1. unsigned char falling_edge = 0;
  2. unsigned short int TMR0H_value, TMR0L_value;
  3. unsigned int TMR0_value;
  4. unsigned long rev;
  5. unsigned long rev_to_LCD[6];
  6.  
  7. void interrupt() {
  8.     if(INTCON.INT0IF) {
  9.         falling_edge++;
  10.         if(falling_edge == 1) {
  11.             TMR0H = TMR0L = 0;
  12.         }
  13.         if(falling_edge == 2) {
  14.             TMR0H_value = TMR0H;
  15.             TMR0L_value = TMR0L;
  16.             TMR0_value = (TMR0H << 8) + TMR0L; // két nyolcbites változó összefűzése 16 bitessé
  17.             rev = 1171785 / TMR0_value;         // (1000 * 1000) / (256 * 4 * TMR0_value)
  18.             TMR0H = TMR0L = 0;
  19.             falling_edge = 0;
  20.         }
  21.         INTCON.INT0IF = 0;
  22.  
  23.     }
  24.  
  25. }
  26.  
  27. void main() {
  28.  
  29.  
  30.  
  31.     RCON.IPEN = 0;              // pdf 104.
  32.     INTCON = 0b11110000;        // pdf 95.
  33.     INTCON2.INTEDG0 = 0;        // falling edge, pdf 96.
  34. //    INTCON2.TMR0IP = 0;         // low interrupt priority
  35.     T0CON = 0b10000110;         // 1:256, pdf 125.
  36.     TMR0H = TMR0L = 0;
  37.     TRISB = 0b00000001;
  38.     LATB = 0;
  39.     TRISC = 0;
  40.     LATC = 0;
  41.  
  42.     Lcd_Init();
  43.  
  44.     Lcd_Cmd(_LCD_CURSOR_OFF);
  45.  
  46.     while(1) {
  47.         if(rev <= 300) {
  48.             Lcd_Out(1, 1, "-----");
  49.             Lcd_Out_Cp(" RPM");
  50.  
  51.         }
  52.         else {
  53.             WordToStr(rev, rev_to_LCD);
  54.             Lcd_Out(1, 1, rev_to_LCD);
  55.             Lcd_Out_Cp(" RPM");
  56.  
  57.  
  58.         }
  59.         delay_ms(10);
  60.     }
  61. }
A hozzászólás módosítva: Márc 12, 2014
(#) kissi válasza janimester hozzászólására (») Márc 12, 2014 /
 
8 biten 255-ig tud számolni 0-tól, a 65535-ig számolás az a 16 bit "sajátossága" !
A hozzászólás módosítva: Márc 12, 2014
(#) janimester válasza kissi hozzászólására (») Márc 12, 2014 /
 
Tényleg.. hülyén fejeztem ki magam. De azt még nem tudom mikén lehetne megoldani a kérdésem Vagyis azt a 1171875-ös számot szeretném valahogy eltűntetni a kódból.
A hozzászólás módosítva: Márc 12, 2014
(#) gaspar_zsolt válasza icserny hozzászólására (») Márc 12, 2014 /
 
Kedves István,
ez a linker script egyszer és mindenkorra megoldotta a bánatom.
Erre az adatállományra gondoltam.

Köszönöm.
(#) gaspar_zsolt válasza Hp41C hozzászólására (») Márc 12, 2014 /
 
Azért is idéztem be, mert amire szükségem volt nem írta a dokumentum!
És egy olyan választ vártam, ami hosszútávon megoldja a gondom. Az adatlap olvasás az a minimum, amivel kezdem a keresést.

Viszont te megadtad a választ (0xF000) korábban, és utána javítottam is és már működik.

Nem szeretek minden apró nyavalyával ide rohangálni, így a jövőben ezt a feladatot már magamtól is meg tudom oldani.
Köszi neked is!
(#) SzT3 hozzászólása Márc 12, 2014 /
 
Sziasztok!
Egy kapumozgató automatikát tervezek.. az elektronika nagyjából megvan,
PIC-el vezérelném a progi is nagyjából megvan (remélem jó is ), ami a kérdésem lenne relét egy uln2003-on keresztül rákapcsolhatok a PIC-re? Helyesebben Pic rákötve a 2003-ra és az pedig a relé behúzókörét szaggatja zárja...
(#) gaspar_zsolt válasza SzT3 hozzászólására (») Márc 12, 2014 /
 
Igen, lehet. Az adatlapon megnézed, hogy van-e védő dióda ebben az ULN-ben, akkor az sem kell. Ha nincs azt még be kell tenni a relé tekercs lábai közé, záróirányban.
A hozzászólás módosítva: Márc 12, 2014
(#) kissi válasza janimester hozzászólására (») Márc 12, 2014 /
 
Idézet:
„Valaki tudna segíteni hogy a felső megszakításos résszel mit kéne kezdenem hogy ne 16bitben számolgasson?”
Ez volt a kérdés, a többi kérés ... !
(#) SzT3 válasza gaspar_zsolt hozzászólására (») Márc 12, 2014 /
 
Hát én ugy látom van benne.. de lehet hogy nem jól értelmezem!
(#) gaspar_zsolt válasza SzT3 hozzászólására (») Márc 12, 2014 /
 
Igen, közben megnéztem én is.
(#) zalan888 hozzászólása Márc 14, 2014 /
 
Hali.

Egy, számomra nem kis segítséget szeretnék kérni tőletek. Nem sokat értek a mikrokontorllerekhez, de ezt a kapcsolást szeretném megépíteni, illetve előbb leszimulálni.

Ez egy ledmatrixos kijelző, scrollozott szöveggel.

A kapcsolás itt található

Összedobtam a kapcsolást a proteus 8 szimulációs programban, amihez egy PIC16F877A kontrollert használtam (a cikkben nem ez van) de ha elindítom, akkor az adott karakterek csak úgy jelennek meg a kijelzőn, hogy az összes led világít, tehát gyakorlatilag csak azt látom, hogy hány karakterből áll a kiírandó szöveg és az fut a kijelzőn.

Ha esetleg valakit érdekel a dolog, illetve tudna segíteni, itt megosztom a programot és a szimulációs fájlt is.

scrollled.zip
    
(#) obenhof hozzászólása Márc 15, 2014 /
 
Sziasztok!

XC8-as fordítóhoz és MPLABX fejlesztőkörnyezethez keresek LCD drivert. A kijelzőt összekötöttem a pic-kel, vezérelni is tudom, de jó lenne, ha nem 01000001-et kellene megadni karakterenként. Sokat keresgéltem, hiába...
(#) Hp41C válasza obenhof hozzászólására (») Márc 15, 2014 /
 
A HD44780 kompatibilis LCD a 0x20 .. 0x7F tartományban a karakterek ASCII kódját használja. A 01000001 helyett nyugodtan írhatod 'A'. pl.: lcd_out('A');
(#) zenetom válasza zalan888 hozzászólására (») Márc 15, 2014 /
 
Szia!
Tehát olyan, mint ha a karakter helyett egy "teli" négyzet lenne?
(#) obenhof válasza Hp41C hozzászólására (») Márc 15, 2014 /
 
Ezt a kijelzőt használom az lcd_out függvényt nem ismeri fel a program.
(#) Mate78 hozzászólása Márc 15, 2014 /
 
sziasztok

szerintetek melyik PIC-et válasszam, ha követelmény hogy DIP40 tokos legyen, 5V-os,a lehető legtöbb digitális I/O-ja legyen , és a legolcsóbb?Semmi egyéb paraméter nem számít.

köszi
A hozzászólás módosítva: Márc 15, 2014
(#) Hp41C válasza obenhof hozzászólására (») Márc 15, 2014 /
 
A kérdésed a kódok megadására vonatkozott, a válaszom is... Itt keresgélj, de kb 20 perc alatt meg is lehet írni...
(#) Hp41C válasza Mate78 hozzászólására (») Márc 15, 2014 /
 
Advanced Midrange: 16F1939. Midrange 16F887. PIC18: 18F2520, 18F2620.
(#) Mate78 válasza Hp41C hozzászólására (») Márc 15, 2014 /
 
köszönöm,

a 887 lesz a megfelelő.
A hozzászólás módosítva: Márc 15, 2014
(#) obenhof válasza Hp41C hozzászólására (») Márc 16, 2014 /
 
Pont ez a probléma, hogy ezeken a linkeken lévő kódok nem működnek. Már több órát szívtam velük. A 20 perc kicsit optimista becslés egy kezdő pikesnél.
(#) Hp41C válasza obenhof hozzászólására (») Márc 16, 2014 /
 
Hogyan van bekötve? 8 vagy 4 bites módban használod? Milyen kontrollert használsz?
A hozzászólás módosítva: Márc 16, 2014
(#) obenhof válasza Hp41C hozzászólására (») Márc 16, 2014 /
 
Megírtam a saját vezérlőmet (pár óra alatt). Most azzal bajlódok, hogy ~valós időben írjam ki például az adkonverter értékét. Itt tartok:
  1. writeText("ADC: ");
  2. char buffer[10];
  3. unsigned int value = adc();
  4. sprintf(buffer, "%d", value);
  5. writeText(buffer);

Működik ahogy kell, csak úgy szeretném, hogy ha tekerem a potit, változik a kijelzőn az érték is. Gondoltam beleteszem az egészet egy végtelen ciklusba és mindig törlöm a kijelző tartalmát. Ebből lett aztán káosz... Nem kérek kódot, elméletben tudnál segíteni?
4 bites mód, pic18f14k22
Köszönöm az eddigi segítségeket is!
(#) Hp41C válasza obenhof hozzászólására (») Márc 16, 2014 /
 
A kijelző törlése nagyon sok időt vesz igénybe (~1640 us), a beírások pedig csak néhányszor 46us -ot. Ha végtelen ciklusban írsz a kijelzőre és nem vársz a kiírás után, csak azt látod, hogy az LCD töröl. A kiírások közé tegyél 1s várakozást vagy egy timer megszakítással időzítsd kb. 1 s -ra a kiíratásokat.
(#) nedudgi válasza obenhof hozzászólására (») Márc 16, 2014 /
 
Felesleges törölni a kijelzőt, remélhetőleg egyféle méretű karaktersorozatot akarsz kiírni a kijelzőre. Az LCD kijelzők tudják a "képernyő" címzését is, tehát egyszerűen mindig ugyanoda címezd a kiírást.
A hozzászólás módosítva: Márc 16, 2014
(#) zalan888 válasza zenetom hozzászólására (») Márc 16, 2014 /
 
Igen olyan.
(#) guliver83 hozzászólása Márc 16, 2014 /
 
Használ valaki még WinPic800 programozót?
Következő: »»   500 / 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