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   1088 / 1210
(#) superuser válasza lastewer hozzászólására (») Máj 22, 2019 / 1
 
Akkor elírtam és ez lesz a helyes:
  1. if(strstr(puffer, "OK"))
  2.   {
  3.    UART1_Write_Text("RENDBEN");
  4.    }


Feltéve ha a kódnak azt kell csinálnia, hogy ha az UART-ról "OK" stringet kap, "RENDBEN"-el válaszol.
(#) lastewer válasza superuser hozzászólására (») Máj 22, 2019 /
 
Igen, úgy szeretném.

Most így, ha megkapja az OK-ot, akkor kiírja hogy RENDBEN, de utána mindenre ugyanúgy kiírja. Ezt miért?

Ki kellene üríteni a puffert?
A hozzászólás módosítva: Máj 22, 2019
(#) superuser válasza lastewer hozzászólására (») Máj 22, 2019 / 1
 
Pontosan. pl. memset rutinnal az "OK" beérkezésekor.
Nem a legelegánsabb megoldás, de kényelmes.
(#) lastewer válasza superuser hozzászólására (») Máj 22, 2019 /
 
Ez így nem oké?

  1. if(strstr(puffer, "OK"))
  2.           {
  3.             UART1_Write_Text("RENDBEN");
  4.             memset(puffer, 0, sizeof puffer);
  5.           }


Megfagyasztja az adatolvasást.
A hozzászólás módosítva: Máj 22, 2019
(#) benjami válasza lastewer hozzászólására (») Máj 22, 2019 / 1
 
Szerintem nem ártana minden karakter vételekor (és induláskor) a lezáró #0 karaktert is előállítani a puffer-ben, mert a kereső addig keres, amíg egy #0 karaktert nem talál. A következő futtatáskor (hacsak nincs törölve a RAM) ugyanúgy ott lesz.
Szerk: Úgy látom közben a kérdezőnél is felmerült ez, induláskor is ki kellene törölni a puffert.
A hozzászólás módosítva: Máj 22, 2019
(#) lastewer válasza benjami hozzászólására (») Máj 22, 2019 /
 
Tehát legyen benne minden kéréskor és küldéskor pl így ?:

  1. UART1_Write_Text("#0RENDBEN#0");
(#) benjami válasza lastewer hozzászólására (») Máj 22, 2019 / 1
 
Egyáltalán nem erre gondoltam, inkább erre:
  1. if(UART1_Data_Ready() == 1)
  2. {
  3.   puffer[pp++]= UART1_Read(); // Get received byte
  4.   puffer[pp] = 0;
  5. }

Meg még erre:
  1. if(strstr(puffer, "OK"))
  2. {
  3.   UART1_Write_Text("RENDBEN");
  4.   puffer[0] = 0;
  5.   pp = 0;
  6. }
A hozzászólás módosítva: Máj 22, 2019
(#) lastewer válasza benjami hozzászólására (») Máj 22, 2019 /
 
Köszönöm, mindkettőtöknek. Úgy néz ki működik

  1. // Órajel beállítása (Kvarc)
  2. #define _XTAL_FREQ 16000000
  3. #define PUFF_SIZE 20
  4.  
  5. // Változók beállítása
  6.     char puffer[PUFF_SIZE];
  7.     char pp=0;
  8.  
  9. //Main -----------------------------------------------------------------
  10. void main()
  11. {
  12.    UART1_Init(4800);            // Initialize USART module
  13.    delay_ms(500);
  14.    UART1_Write_Text("PIC start");
  15.    UART1_Write(13);      // Start a new line
  16.  
  17.  
  18.   while (1)
  19.   {
  20.     if (UART1_Data_Ready() == 1)   // Ha van bejövő adat
  21.     {
  22.         if (pp < PUFF_SIZE)
  23.            puffer[pp++]= UART1_Read(); // Get received byte
  24.            puffer[pp] = 0;
  25.         if (pp >= PUFF_SIZE)
  26.           pp = 0;
  27.         if(strstr(puffer, "OK"))
  28.           {
  29.             UART1_Write_Text("RENDBEN");
  30.             memset(puffer, 0, sizeof puffer);
  31.           }
  32.     }
  33.   }
  34. }
(#) lastewer válasza lastewer hozzászólására (») Máj 22, 2019 /
 
Működik.
A hozzászólás módosítva: Máj 22, 2019
(#) Hp41C válasza lastewer hozzászólására (») Máj 22, 2019 / 1
 
Olvasd el ezt is.
(#) lastewer válasza Hp41C hozzászólására (») Máj 22, 2019 /
 
Köszi , úgy lenne a legjobb , ha beletenném az adat olvasást és írást megszakításba?

+ 1 kérdés , text alapú változót hogy csinálhatok?

Köszönöm szépen.
(#) Hp41C válasza lastewer hozzászólására (») Máj 23, 2019 / 1
 
Idézet:
„Köszi , úgy lenne a legjobb , ha beletenném az adat olvasást és írást megszakításba?”

Az uart vevő kiszolgálását javasolt megszakításba tenni, hiszen amíg a választ küldi, jöhetnek újabb vett karakterek. A küldést csak akkor érdemes a megszakításba tenni, ha más feladata is van a kontrollernek, amit a várakozás helyett elvégezhetne.

A text változó egy karakter tömb. Ilyet csináltál már a puffernek:
  1. char puffer[PUFF_SIZE];
(#) lastewer válasza Hp41C hozzászólására (») Máj 23, 2019 /
 
Értem , köszi szépen. Működik
(#) nagym6 hozzászólása Máj 24, 2019 /
 
Üdv. Ha 18F46K22 SPI modult használom masterként arra, hogy egy LTC1864 A/D SPI adatot fogadjon, mi indítja el a folyamatot? Tehát a PIC órajelet kezd kiadni, amire az A/D adja az adatsorozatot. De mire indul. Köszönöm.
(#) superuser válasza nagym6 hozzászólására (») Máj 24, 2019 / 1
 
Konfigurálod az SSP modult, és beírsz egy bájtot az SSPBUF-ba.
Érdemes letölteni egy alap SPI könyvtárat valahonnan és megnézni hogy működik.
(#) nagym6 válasza superuser hozzászólására (») Máj 24, 2019 /
 
Köszi. A konfigurálást átnéztem, csak indításról sehol nem írt. Akkor nincs is külön indítás, beírok bármit (mivel ez most felesleges adat masterből kifelé) SSPBUF-ba ami kimegy és ezzel indul SCK és fogadás SDI-n.
(#) eSDi válasza nagym6 hozzászólására (») Máj 25, 2019 / 1
 
Hali!

Az A/D CONV lábát magasra húzod, megvárod a konverziós időt, majd alacsonyra állítod a CONV lábat. Ezután beírsz bármit az SSPBUF-ba, megvárod hogy kimenjen az adat (SSPIF figyelés), beolvasod az SSPBUF tartalmát, ez lesz a felső 8 bit. Ismét beírsz bármit az SSPBUF-ba és megvárod amíg végez vele. Újfent beolvasod az SSPBUF tartalmát, ez lesz az alsó 8 bit. Összefűzöd a kettőt és kész is. Nem nagy hókusz pókusz, csak az MSSP modult kell helyesen felkonfigurálni. És igen az SSPBUF-ba való beírással indul az adat kiküldés.
(#) nagym6 válasza eSDi hozzászólására (») Máj 25, 2019 /
 
Köszönöm. Rövidesen próba ha ráérek, szerintem menni fog. Szoftveresen működik, tehát én billegtetem a PIC18F-el a CONV és CLK lábakat, csak így lassú.
(#) Al-sulaymaniyah hozzászólása Máj 26, 2019 /
 
Üdv!
A problémám a következő. Éppen egy aktív hangfalat építek, az erősítő része bagatell, na de megcsinálnám távirányítósra. Találtam egy rajzot, pic12f683 van benne. Úgy tudom ezeket programozni kell, viszont az oldalon semmiféle erre való utalást nem találtam. egyszerű ki-be kapcsolás és egy feszültség kimenet ami egy motoros potmétert mozgatna. Ez van is, egy yamaha cuccból kimentve, de akkor most mi is van? Ezt kell programozni, hogyan, miként és honnan vegyek bele programot???

ez az a rajz
http://electronics-diy.com/electronic_schematic.php?id=691
A hozzászólás módosítva: Máj 26, 2019
(#) Hp41C válasza Al-sulaymaniyah hozzászólására (») Máj 26, 2019 /
 
Hol találtad a rajzot?
(#) Al-sulaymaniyah válasza Hp41C hozzászólására (») Máj 26, 2019 /
 
linkeltem
(#) Pali79 válasza Al-sulaymaniyah hozzászólására (») Máj 26, 2019 /
 
Igen, jól gondolod programozni kell. Vagy a forráskód vagy a lefordított hex állomány nélkül nem használható. Az általad linkelt oldal csak a kapcsolási rajzot közli, a többi elméletileg egy másik linken lenne alul, de azt nem tudtam megnyitni.
(#) Al-sulaymaniyah válasza Pali79 hozzászólására (») Máj 26, 2019 /
 
Megtaláltam...nekem sem nyílik. Akkor ez egyelőre felejtős.
(#) Bakman válasza Al-sulaymaniyah hozzászólására (») Máj 26, 2019 /
 
Az oldal mindenféle KIT-et árul, könnyen lehet, hogy ez is kapható, pl. felprogramozott kontrollerekkel. Ha így van, nem néztem végig a kínálatot, akkor érthető, miért nem publikus a program.

Ha van valamilyen távirányítód és veszel mellé egy okos vevőt, kb. gyerekjáték vezérelni vele bármit is, a modul mellé szinte csak egy mikrokontroller kell.

IR-UART.jpg
    
(#) nagym6 válasza nagym6 hozzászólására (») Máj 26, 2019 /
 
superuser, eSDI

Működik az SPI 16MHz órajellel tökéletesen. Köszi segítségeteket.
(#) superuser válasza nagym6 hozzászólására (») Máj 26, 2019 /
 
Örülök neki, köszi a visszajelzést!
(#) icserny válasza nagym6 hozzászólására (») Máj 27, 2019 / 1
 
Akkor szerencséd van, mert az adatlap végén található időzítési táblázatokból csak kb. max. 13 MHz-et kalkuláltam. Az órajel magas és alacsony állapotban eltöltendő minimális időn kívül legalább az átlagos le- és felfutási időt is be kell számítani, így jön ki a periódusidő, melynek reciproka a maximális frekvencia. Ha pedig biztosra akarsz menni, akkor a Worst Case Design elvei szerint mindenhol a legkedvezőtlenebb adatot kell venni.
(#) nagym6 válasza icserny hozzászólására (») Máj 27, 2019 /
 
Én is csodálkoztam, mert a PIC órajele SCK elég gyatra. Csatolt képeken lila szín az órajel CLK, kék szín a CONV, sárga szín az SDO az LTC-n nézve a jelöléseket. Egy kijelző is van a PIC-re kötve, ugyanazokat a számokat detektálja és jeleníti meg a PIC, mint a szkóp dekódere. Stabilnak tűnik, max. 3-4 számjegyet billeg a legkisebb helyiértéken a kétbájtos számnál.
(#) superuser válasza nagym6 hozzászólására (») Máj 27, 2019 / 1
 
Slew Rate Control
Kapcsold ki és nézd meg újra szkóppal.
(#) nagym6 válasza superuser hozzászólására (») Máj 27, 2019 /
 
Gondoltam alaphelyzet a nulla, nem korlátozott az SRL. Holnap megpróbálom.
Következő: »»   1088 / 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