Pic18Fx52 Program - USART + PWM

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

Pic18Fx52 Program - USART + PWM

#1 Příspěvek 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 :))
Naposledy upravil(a) eXilim dne 05 pro 2011, 17:56, celkem upraveno 1 x.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#2 Příspěvek 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š. :)

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#3 Příspěvek od Atlan »

no pomozeme aj zadarmo len ukaz co už maš a s čím maš problem.... ?

Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

#4 Příspěvek 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

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#5 Příspěvek 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ě...
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

#6 Příspěvek 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
Přílohy
sw.txt
(1013 bajtů) Staženo 87 x

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#7 Příspěvek 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
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

#8 Příspěvek od eXilim »

Jo takhle, no to je pravda no :) Holt před maturou

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#9 Příspěvek 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ě)?

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#10 Příspěvek 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....

Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

#11 Příspěvek 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

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#12 Příspěvek od Andrea »

Až na to, že je to 6. bit, protože bity se číslujou od 0.

Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

#13 Příspěvek od eXilim »

Dobře, tak 6. bit, ted se jen ptám jak "vybrat" ten pin a nastavit do něj hodnotu? (setPin())

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#14 Příspěvek od Andrea »

Číslo pinu máš 0-15, ale port má jen 8 pinů, co těch zbylých 8?

Uživatelský avatar
eXilim
Příspěvky: 44
Registrován: 19 kvě 2010, 02:00

#15 Příspěvek 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

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“