Stránka 1 z 3

Pic18Fx52 Program - USART + PWM

Napsal: 05 pro 2011, 17:42
od eXilim
Zdravím, potřeboval bych pomoct s programem pro PIC 18F252, jedná se o maturitní práci, za pomoc bych klidně byl i ochoten něco zaplatit :)).

Přesněji jde pouze o Přijmutí 8mi bit čísla (Např 10000010) a potom o PWM.

Abych vysvětlil to přijmutí. Přijímat bych to měl z USARTU (Pouze Rx nic víc) kde přijmu cosi ve tvaru XYYYZZZZ (Kde Z je číslo pinu na PORTB v binárce a X (nejvyšší bit) je nastavená hodnota na výstupu pinu portu B, Y zatím nevyužité) Např: 10000010 - Nastaví na PORTB Pin 3 na log. 1; 00000001 - Nastaví pin č. 1 na log 0.


U PWM je sedná o řízení stejnosměrného motoru (pouze řízení), nejlépe nějak vyřešit abych mohl frekvenci regulovat také přes Rx (Zřejmě to budu posílat do PICu přes String a né INT.)

Nejlépe bych to psal v Cčku.

Díky za kontakty :))

Napsal: 05 pro 2011, 17:45
od Andrea
Co je to byn? 8O 8O 8O
A nejvyšší byt, nemyslíš spíš nejvyšší bit?

eXilim píše:Nejlépe bych to psal v Cčku.

Tak piš. :)

Napsal: 05 pro 2011, 17:55
od Atlan
no pomozeme aj zadarmo len ukaz co už maš a s čím maš problem.... ?

Napsal: 05 pro 2011, 18:01
od eXilim
Andrea: Děkuji, opravena už to řešim zas od rána tak se mi to zase motá :D

Atlan: No upřímě nemám nic. Nějakej pátek už programuju v C++ (i C a win aplikace) a doted jsem dělal pouze se 16F84A v assembleru, potřebuju přejít na Cčko a nakopnout na nějakou cestu. Dnes mi přišli od známýho 18F252 (všichni mi nadávaj že sem měl koupit něco jinýho, nevím proč, ale předem říkám - dostal sem dva kousky).
Něco sem už o tom četl, ale potřebuju takový ty začátečnický rady :)
Sem zvyklej psát v netbeans tak nevím jestli můžu pokračovat a jen integrovat compilátor?
Dále nevím jak to vlastěn funguje (čtení z portu, čtení z UARTU atpd.). Pokud to dobře chápu, načtu knihovnu s funkcema něco ve smyslu writeport(xxxx) atpd?

Díky předem

Napsal: 05 pro 2011, 18:20
od ZdenekHQ
Asi založíme sekci "Pro zoufalé studenty" a budem to tam přesouvat. Brzy to ale zřejmě začne konkurovat Hvjezdné pjechotě...

Napsal: 05 pro 2011, 19:49
od eXilim
Proč pro zoufalé studenty? Jen sem se zeptal a poprosil o rady

edit: Připojuju soubor s programem který tvořím, vím plno tam toho chybí, snažím se to psát podle http://ww1.microchip.com/downloads/en/D ... 51297f.pdf ale plno věcí tam nechápu bohužel...

edit2: opravil sem nějaké chyby co sem zapoměl

Napsal: 06 pro 2011, 10:59
od ZdenekHQ
To "zoufalé studenty" není (zatím) myšleno nijak špatně - prostě jsou období, kdy máte rojení, většinou těsně před tím, než přijde včelař vymetat úl... :D

Napsal: 06 pro 2011, 11:07
od eXilim
Jo takhle, no to je pravda no :) Holt před maturou

Napsal: 06 pro 2011, 13:15
od piitr
Píšeš, že C++ znáš, ale jen na PC.
Tak mi přijde divný, že sedmý bit testuješ takhle:

Kód: Vybrat vše

unsigned char read = usartRead();
if(read[6]==0) ...
To snad nemůže jít ani přeložit, ne? Nemělo by tam být spíš něco jako:

Kód: Vybrat vše

if ( read & 1 << 6 ) ...je_to_jednicka... else ...je_to_nula...
?
A proč v té funkci usartRead čteš osm bajtů a pak se snažíš vrátit jen jeden (opět blbě)?

Napsal: 06 pro 2011, 14:03
od Atlan
predpokladam ze si to odniekial skopiroval.... inak najprv nastav piny procesora, jegho registre a tak niečo prijimaj vysielaj...to bude dlha cesta....

Napsal: 06 pro 2011, 15:09
od eXilim
Nene nekopíroval. Ok změna:

Kód: Vybrat vše

#include "18c252.h"
#include "uart.h"

unsigned long proc_type 0x8252;



void main() {
   unsigned char read;
   read = getRx();

   baudUSART (BAUD_IDLE_CLK_HIGH &
      BAUD_8_BIT_RATE &
      BAUD_WAKEUP_ON &
      BAUD_AUTO_ON);

   if (read & 0x40) setPwm(read);
   else setPin(read);

   
}
unsigned char getRx() {
   unsigned char result;
   result = ReadUSART();
   return result;
}

void setPin(unsigned char get) {
   unsigned char pin;
   unsigned char hodnota;
   
   hodnota = get & 0x80;
   pin = get & 0xF;

   //nastavení pinu
}




Zamaskuju to, co přijde a získám 7. bit, už je to spráně?

Jinak díky za rady

Napsal: 06 pro 2011, 15:51
od Andrea
Až na to, že je to 6. bit, protože bity se číslujou od 0.

Napsal: 06 pro 2011, 15:53
od eXilim
Dobře, tak 6. bit, ted se jen ptám jak "vybrat" ten pin a nastavit do něj hodnotu? (setPin())

Napsal: 06 pro 2011, 15:59
od Andrea
Číslo pinu máš 0-15, ale port má jen 8 pinů, co těch zbylých 8?

Napsal: 06 pro 2011, 16:19
od eXilim
Do budoucna na využití RA, ted to ještě přepíšu na pin = get & 0x7; a budu využívat jen 3 nejnižší bity a pouze Port B akorát nevím, jak ho zvolit a nastavit mu hodnotu