DIY Electronic projects

Full Version: PIC USART even parity
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
USART hardverski modul ne podržava odd/even parity.
Da li bi kontroler  trebao da i ovakav format čita bez problema ?
Na starom Hyperterminal-u tek kada se odabere even počinju da se vide karakteri ( tako sam i utvrdio da serijski signal  nije 8N1)
Naime, PIC 8N1 ispravno čita, a  even parity brlja.
Radi se o PIC 16F727.
Da li postoji neko iskustvo članova?
d.l.
Da li mizes da probas da postavis na kontroleru 9-bitni podatak, pa taj 1 bit da glumi bit parnosti? Taj bit bi mora rucno da se napravi.
Hvala Vojine.
Dobra ideja-nisam probao podesavanje da je podatak od 9 bitova. Taj bit mogu da ignorisem jer mi integritet podatka nije bitan.
Kada probam, napisacu sta je bilo...
Hardverski modul tacno cita ASCII karaktere kada se formalno cita i 9. bit.
Dakle, kada se prima parity bit on moze da se ignorise. Ako je bitan, moze se softverski proveriti da li je parnost korektna.
Jos jednom hvala Vojinu za pomoć.
p.
Druze, hvala tebi na ovim korisnim informacijama i testiranju. Nadam se da ce ovaj podatak da bude koristan svima koji budu imali problem sa bitom parnosti. Svaka cast.
To bas rijetko zatreba, ali ipak zatreba... Datum na ovom fajlu, koji iskopah sa svog diska, je iz 2004. god. Smile
Ovo je najbrzi nacin za brojanje bitova, a kad se izbroje, samo treba setovati taj parity bit, na osnovu rezultata tog brojanja, tj. njegovog bita 0, i sve radi uredno... Imate slanje sa 9 bita i setovanim parity bitom.

================================================

#include <pic.h>

/*

Freely distributable in this original form.
Any questions or comments? shane@keyghost.com
Updates to FAQ available from http://www.keyghost.com/htpic

Bit counter by Ratko Tomic, modified for PIC micro by Shane Tolmie
*/

unsigned char bit_count(unsigned int x)
{
unsigned char n=0;
/*
** The loop will execute once for each bit of x set, this is in average
** twice as fast as the shift/test method.
*/
if (x) do
n++;
while (0!=(x=x & (x-1)));
return (n);
}

unsigned int n;
unsigned char c;

void main(void)
{

n=0;
while (n<0xFFFE)
{
n++; //put a break point here and watch c and n!
printf("n=%d, c=%c\n", n, c);
c=bit_count(n);

}
}
===============================================
(04-01-2021, 09:47 AM)ognjan Wrote: [ -> ]To bas rijetko zatreba, ali ipak zatreba... Datum na ovom fajlu, koji iskopah sa svog diska, je iz 2004. god. Smile
Ovo je najbrzi nacin za brojanje bitova, a kad se izbroje, samo treba setovati taj parity bit, na osnovu rezultata tog brojanja, tj. njegovog bita 0,  i sve radi uredno... Imate slanje sa 9 bita i setovanim parity bitom.

================================================

#include <pic.h>

/*

Freely distributable in this original form.
Any questions or comments?  shane@keyghost.com
Updates to FAQ available from http://www.keyghost.com/htpic

Bit counter by Ratko Tomic, modified for PIC micro by Shane Tolmie
*/

unsigned char bit_count(unsigned int x)
{
unsigned char n=0;
/*
** The loop will execute once for each bit of x set, this is in average
** twice as fast as the shift/test method.
*/
if (x) do
n++;
while (0!=(x=x & (x-1)));
return (n);
}

unsigned int n;
unsigned char c;

void main(void)
{

n=0;
while (n<0xFFFE)
{
n++; //put a break point here and watch c and n!
printf("n=%d, c=%c\n", n, c);
c=bit_count(n);

}
}
===============================================

Ima i ova fora sa makroom. Ne znam da li je brze, ali jeste elegantno resenje:

#define PARITY(b) ((((((b)^(((b)<<4)|((b)>>4)))+0x41)|0x7C)+2)&0x80)
Kako najbrže prebrojati ovce na livadi?
Prebrojimo broj nogu pa podelimo sa četiri, potom šiftujemo jednom u desno, ako nas to zanima u bajtovima :-)

Šalim se malo.

Odokativno mi se čini da je brže ovo sa makroom, mada to zavisi od kompajlera, a nemam živaca da napišem u asm (najbrže).
(04-01-2021, 11:56 AM)Macola Wrote: [ -> ]Kako najbrže prebrojati ovce na livadi? 
Prebrojimo broj nogu pa podelimo sa četiri, potom šiftujemo jednom u desno, ako nas to zanima u bajtovima :-)

Šalim se malo.

Odokativno mi se čini da je brže ovo sa makroom, mada to zavisi od kompajlera, a nemam živaca da napišem u asm (najbrže).

Ajd, ja sam mladji Wink :

Code:
movwf  Parity
swapf   Parity,w  
xorwf   Parity,w  
addlw  41h                
iorlw    7Ch                
addlw  02h                  
andlw  80h