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?
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á
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...

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