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   1113 / 1210
(#) Bakman válasza menyus hozzászólására (») Márc 29, 2020 /
 
Ha van másik kontrollered, próbáld ki azzal. Nincs kizárva, hogy próbapanelben egy lábbal arrébb let berakva és bekapcsoláskor elromlott. Én 28 lábúval csináltam meg ezt egyszer.
(#) menyus válasza Bakman hozzászólására (») Márc 29, 2020 /
 
Nem lett "elültetve", nem univ. panelen van hanem egy vasalt próbapanelen. Ettől még el lehet tervezve a panel persze, de félreültetve, vagy foglalatban arrébb rakva biztosan nem volt mert a DIL tok a TOP oldalra fixen fel van forrasztva.

Ezt a PSPMODE dolgot körüljárom, csak jussak el a műhelyig. Mivel a PORTE csak 3 bit összesen, az első 3 bittel állítható be a port iránya a TRISE regiszterben. A negyedik bittől felfelé is 0 értéket adtam meg, nem is gondolva arra hogy a TRISE regiszterben mást is be lehet állítani. Marad még hogy valóban hibás a kontroller ki-bemenete de ezt nem gondolnám.
(#) menyus válasza pipi hozzászólására (») Márc 29, 2020 /
 
Nincs zárlatban, eleve mint írtam egy futófény programmal (azaz mondhatni port billentéssel) tesztelem a kimeneteket és az analóg kapcsolókat (74LVC1G66) amiket a kimenetek vezérelnek. De spec. ez a makacskodó láb egy bemenet lesz (lenne) alapesetben, de kimenetként (is) tesztelem mivel néha kimenetként is lesz használva. Egy buzzer lenne rajta, egy FET kapcsolgatja. A FET jó, ha kikötöm a PORTE2 őt és vezérlem a FET et működik a buzzer. A FET azért kellett mert eredetileg relét akartam kapcsoltatni vele, a buzzert simán elbirná a kimenet is közvetlenül. De ha már beültettem otthagytam. Sajna se bemenetként se kimenetként nem funkcionál a PORTE2. A VSS hez mérve 0V van rajta fixen, bármit csinálok vele. Még ez a PSPMODE kavarhat be, nincs előttem az adatlap nem tudom az mit állít, de tuti valami periféria kavarhat be szerintem ami be van kapcsolva defaultban és át kéne állítani. Ha jól emlékszem a PERTE 0 és 1 bit az AD nak is konfigolható, ezt kilőttem az ADCON1 regiszterben az első 3 bit 1 be állításával (minden I/O digitális) a PORTE2 nek pedig a párhuzamos porthoz van valami köze ha jól emlékszem, de bármit állítok nem műkszik.
A hozzászólás módosítva: Márc 29, 2020
(#) Hp41C válasza menyus hozzászólására (») Márc 29, 2020 / 1
 
Idézet:
„Még ez a PSPMODE kavarhat be, nincs előttem az adatlap nem tudom az mit állít, de tuti valami periféria kavarhat be szerintem ami be van kapcsolva defaultban és át kéne állítani. Ha jól emlékszem a PERTE 0 és 1 bit az AD nak is konfigolható, ezt kilőttem az ADCON1 regiszterben az első 3 bit 1 be állításával (minden I/O digitális) a PORTE2 nek pedig a párhuzamos porthoz van valami köze ha jól emlékszem, de bármit állítok nem műkszik.”

16F877:
Pontosítás:
TRISE:
PSPMODE: Parallel Slave Port Mode Select bit
1 = PORTD functions in Parallel Slave Port mode
0 = PORTD functions in general purpose I/O mode
Ha analóg módban marad egy láb, akkor is meghajtja a port kimeneti regisztere, ha a TRIS regiszterben a megfelelő bit 0.
TRISE = 7;

PORTE:
RE2, RE1, RE0 mind konfigurálható analóg bemenetnek.

ADCON1:
ADCON1 regiszterben az alsó 3 bit 1 be állításával (minden I/O digitális)
ADCON1 = 7;
(#) menyus válasza Hp41C hozzászólására (») Márc 29, 2020 /
 
Örök hálám Nagyuram, Tőled még csak működő supportot kaptam. Köszönöm az instrukciót, megyek is a műhelybe és kipróbálom.
(#) menyus válasza Hp41C hozzászólására (») Márc 30, 2020 /
 
Megnéztem, a TRISE -B'00000111 azaz dec 7 ahogy írtad, és az ADCON1 is így volt /van beállítva. A TRISE2 változatlanul halott mind kimenet mind bemenetként A PSPMODE bitjét végül nem is piszkáltam, lévén hogy annak nincs köze a PORTE hez csak a PORTD hez. Nincs ötletem... Tok csere?
(#) menyus válasza Hp41C hozzászólására (») Márc 30, 2020 /
 
Pontosítanék, a PORTE2 bemenetként most működik, csak kimenetként nem. Ha a TRISE regiszterben bemenetnek konfigurálom majd a nyomógombot beállítom pl egy feltételként akkor működik. De kimenetként változatlanul nem megy, hiába állítom 0 ba a TRISE ben. Álandóan alacsony szinten van.
(#) pipi válasza menyus hozzászólására (») Márc 30, 2020 /
 
Hali!
Most bemenetként mitől indult el? A felhúzóellenállás most fel tudja húzni, vagy csak félszint?
(#) menyus válasza pipi hozzászólására (») Márc 30, 2020 /
 
Nem, én néztem be megint... Működött az kimenetként is, csak a port billentések között kimaradt a késleltetőhurok meghívása, így egy utasítás végrehajtási periódusig volt aktív a kimenet.


Ez volt a hiba:

  1. CALL time2
  2.  
  3.                        
  4. MOVLW   B'00000100'     ;       PORTE2 BUZZER  
  5. MOVWF   PORTE
  6. MOVLW   B'00000010'     ;       PORTE1 
  7. MOVWF   PORTE
  8.                        
  9. CALL time2


A "megoldás"...:

  1. CALL time2
  2.  
  3.  
  4. MOVLW   B'00000110'     ;       PORTE1 + PORTE2 BUZZER
  5. MOVWF   PORTE
  6.                        
  7. CALL time2
  8.  
  9. CLRF  PORTE
[/code]

Bocs, megint én voltam figyelmetlen. Köszi mindenkinek a segítő szándékot.
A hozzászólás módosítva: Márc 30, 2020
(#) Saggitarius válasza menyus hozzászólására (») Márc 30, 2020 /
 
"hiába állítom 0 ba a TRISE ben. Álandóan alacsony szinten van." Csak 0-ba allitod a E2 regisztert, vagy koveti meg LATE (PORTE) is ahol szintet valtoztatsz?
(#) menyus válasza Saggitarius hozzászólására (») Márc 30, 2020 /
 
De, természetesen a portirány kiválasztása (TRISE2=0) után aktívvá is tettem a kimenetet azaz a PORTE2 bitjét 1 re állítottam. Köszi, már megoldódott. Én néztem be a késleltetéssel a dolgot.
A hozzászólás módosítva: Márc 30, 2020
(#) Saggitarius válasza menyus hozzászólására (») Márc 30, 2020 /
 
Keson kuldtem el + ASM es nem C.
(#) menyus válasza Saggitarius hozzászólására (») Márc 30, 2020 /
 
No problem, köszi.
(#) szucsistvan123 hozzászólása Ápr 1, 2020 /
 
Üdv!

MPLAB XC16 esetén hogyan lehet megoldani, hogy egy double számot string-é konvertáljak?
Gyári könyvtárat nam találtam, csak ami a fordítottját tudja (string to double). Írtam egy függvényt is, ami kis számoknál működik, de nagyobbaknál össze vissza írkál ki mindent. Mi erre a legjobb módszer?

Köszi.
(#) szucsistvan123 válasza szucsistvan123 hozzászólására (») Ápr 1, 2020 /
 
UART-os szeretném kiküldeni, és egy PC-n futó program dolgozná fel.
Az járható út, hogy 8 bitenként küldeném el a double darabjait?
(#) Hp41C válasza szucsistvan123 hozzászólására (») Ápr 1, 2020 / 1
 
Készíts egy u_n_i_o_n -t, aminek az egyik tagja a double , a másik pedig annyi elemű (unsigned) char tömb, amennyi a double mérete. Vegyél fel egy ilyen változót. Beírod a double értéket a a double tagba, és a char tömbből máris olvashatod a byte -jait. Elküldheted binárisan is, de hexadecimálisan ASCII karakterekként is (2 karakter/byte).

ps:. a C kulcsszó aláhúzás karakterek nélkül használandó.
(#) cross51 válasza szucsistvan123 hozzászólására (») Ápr 1, 2020 / 1
 
Az elsőre az mondanám ha 16 bit-ről van szó használd a pirntf-et, ha nem fűlik hozzá a fogad akkor,
általában dtoa néven fut amit akarsz csinálni (double to array) a google teli van egyszerű és bonyolult implementációkkal.
Egyszerű
Bonyolult
Valamint van még egy fajta a nagyon gyors, de ez egy controlelr-nek nem biztos, hogy a legbarátibb implementáció c#-ban használt double to string converter Grisu Double
(#) szucsistvan123 válasza Hp41C hozzászólására (») Ápr 1, 2020 /
 
Köszi a válaszokat!

Hp41C Köszi, kipróbálom!
Idézet:
„Elküldheted binárisan is, de hexadecimálisan ASCII karakterekként is (2 karakter/byte).”


A 2 karakter/byte-ot hogy érted? Az ASCII ban 1 byte határoz meg egy karaktert, nem?
Az utolsó mondatot sem értem, pontosan mire gondoltál?


Cross51 A "16-Bit Language Tools Libraries Reference Manual " szerint nincs ilyen függvény! és az MPLAB sem ismeri fel.
(#) Hp41C válasza szucsistvan123 hozzászólására (») Ápr 1, 2020 /
 
Idézet:
„A 2 karakter/byte-ot hogy érted? Az ASCII ban 1 byte határoz meg egy karaktert, nem?”

El lehet küldeni 8 bitet egy karakterben. Ezt értettem binárisan alatt.
Lehet egy byte -ot két olvasható karakterként is küldeni. Pl. A 255 kód esetén "F" és "F" karaktereket, vagy a 16 kód esetén a "1" és a "0" karaktereket. Ezt is két féle képen lehet megtenni, az alsó helyiérték megy először vagy a felső.

Idézet:
„Az utolsó mondatot sem értem, pontosan mire gondoltál?”

Ha az u_n_i_o_n szót aláhúzások nélkül írom egy hozzászólásban, a hozzászólás teljes szövege eltűnik.
(#) szucsistvan123 válasza Hp41C hozzászólására (») Ápr 1, 2020 /
 
Köszi!

Az előző kérdést még egyszer felteszem:
A u_n_i_o_n helyett lehet használni a siftelést(U1TXREG-be) vagy az lebegőpontos számnál nem működik?

Még egy kérdés:
MPLAB-ban a fordítónak szánt kapcsolókat hova lehet beírni? Van külön helye vagy csak simán a kódba?

Köszi!
A hozzászólás módosítva: Ápr 1, 2020
(#) Hp41C válasza szucsistvan123 hozzászólására (») Ápr 2, 2020 / 1
 
Szerintem a léptetés csak long, int, char típusokra értelmezett, a fordító a megadott változót valamelyikké konvertálja a léptetés előtt. Az eredmény nem az lesz, amit "elvárnál".

Idézet:
„MPLAB-ban a fordítónak szánt kapcsolókat hova lehet beírni?”

Ezt most én nem értem.

  1. typedef u_n_i_o_n valami{
  2.  double  d;
  3.  unnsigned char[8] c;
  4. }
  5.  
  6. valami d_to_bytes;
  7. ...
  8. d_to_bytes.d = 3.1415;
  9. for (i=0; i<8; i++)
  10. {
  11.   printf("%04X,",d_to_bytes.c[i]);
  12. }
  13. printf("\n");
(#) icserny válasza szucsistvan123 hozzászólására (») Ápr 2, 2020 / 1
 
Én ezt használtam (C18-hoz készült, de szerintem más C fordító is megeszi).
A _user_putc() helyére egy karakterkiíró függvényt írj, amit használsz).
(Utóirat: Bocs, most látom, hogy nem egészen erre gondoltál....)
  1. /** Decimális kiíratás adott számú tizedesjegyre.
  2.  * \param data a kiírandó szám (előjelesen)
  3.  * \param ndigits a kiírandó tizedesek száma
  4.  */
  5. void outdec(long data, unsigned int ndigits) {
  6. static char sign, s[12];
  7. unsigned int i;
  8.         i=0; sign='+';
  9.         if(data<0) { sign='-'; data = -data;}
  10.         do {
  11.                 s[i]=data%10 + '0';
  12.                 data=data/10;
  13.                 i++;
  14.                 if(i==ndigits) {s[i]='.'; i++;}
  15.         } while(data>0);
  16.         _user_putc(sign);
  17.         do{
  18.                 _user_putc(s[--i]);
  19.         } while(i);
  20. }
A hozzászólás módosítva: Ápr 2, 2020
(#) Tasznka válasza szucsistvan123 hozzászólására (») Ápr 2, 2020 / 1
 
Ez talán jó lesz,én így küldöm át a double-t.Kivéve,ha elnéztem valamit
  1. void UartDoubleKi(double dragon)
  2. {
  3. unsigned char i;
  4.  
  5. for(i = 3;i <= 3;i--)
  6.         {
  7.         while(!U1STAbits.TRMT);
  8.         U1TXREG = ((BYTE*)&dragon)[i];
  9.         }
  10. }


Ha csak konvertálni szeretnéd,akkor marad a sprintf(ez a legegyszerűbb) .
(#) Kera_Will válasza Tasznka hozzászólására (») Ápr 2, 2020 /
 

Idézet:
„küldöm át a double-t.Kivéve,ha elnéztem valamit”

Én meg tényleg elnéztem ezt a pár szót DUPLA KÁVÉnak olvastam hirtelen ... lehet rövid volt az éjszaka ... ...
A hozzászólás módosítva: Ápr 2, 2020
(#) szucsistvan123 válasza Hp41C hozzászólására (») Ápr 2, 2020 /
 
Köszi a válaszokat!

Végül maradtam a u_n_i_o_n os megoldásnál.

Hp41C
Vannak kapcsolók amivel beállítható pl hogy a double-t 64 bitesnek fordítsa a fordító, ezt nem tudtam hova kell beírni, de már megvan.
(#) Peet19 hozzászólása Ápr 2, 2020 /
 
Sziasztok!

Ha megépítenék egy PK2-t, akkor van valami mód beégetni a firmware-t a 18F2550-be? Vagy adjam oda valakinek aki beégeti?
(#) szucsistvan123 válasza Peet19 hozzászólására (») Ápr 2, 2020 /
 
Ebay-en lehet kapni PicKit 2 - 3-mat. tökéletesen működnek, biztos megéri építeni? 2-3K + ingyen posta
(#) Hp41C válasza szucsistvan123 hozzászólására (») Ápr 2, 2020 /
 
Megéri... Főleg a 2.5 -öt.
(#) Peet19 válasza szucsistvan123 hozzászólására (») Ápr 2, 2020 /
 
Nem tudom, azt hittem hogy azok valami silány klónok .
Szeretném saját magam megépíteni (egy kis plusz sikerélmény) ha sikerül. Találtam két megoldást. Melyiket válasszam?
1. http://users.atw.hu/wattmep/PICkit2_W_klon/PICkit2_W_klon.html
2. https://muhely43.blog.hu/2014/04/13/pickit2_klon_programozo_utanepites
Az utóbbi is szimpatikus, csak van egy pár láb ami lóg a levegőben és a watt féle rajzon egy kicsit más.
A hozzászólás módosítva: Ápr 2, 2020
(#) szucsistvan123 válasza Peet19 hozzászólására (») Ápr 2, 2020 /
 
Ebben Hp41C tud segíteni, és sosem használtam PK2-t. (Csak kínai klón PK3-mat és eredeti 4-et)
Ha megnézed amit Hp41C küldött linket, azzal jársz a legjobban szerintem...
A hozzászólás módosítva: Ápr 2, 2020
Következő: »»   1113 / 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