DIY Electronic projects
PIC USART even parity - Printable Version

+- DIY Electronic projects (https://forum.yu3ma.net)
+-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forum-52.html)
+--- Forum: Microchip PIC (https://forum.yu3ma.net/forum-53.html)
+--- Thread: PIC USART even parity (/thread-2560.html)



PIC USART even parity - dlalkovic - 03-26-2021

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.


RE: PIC USART even parity - vojinilic - 03-26-2021

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.


RE: PIC USART even parity - dlalkovic - 03-26-2021

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


RE: PIC USART even parity - dlalkovic - 03-31-2021

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.


RE: PIC USART even parity - vojinilic - 03-31-2021

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.


RE: PIC USART even parity - ognjan - 04-01-2021

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);

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


RE: PIC USART even parity - vojinilic - 04-01-2021

(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)


RE: PIC USART even parity - Macola - 04-01-2021

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).


RE: PIC USART even parity - vojinilic - 04-01-2021

(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