re ;O]
d'après moi ce dernier code fonctionne tel quel...
cad pas besoin d'activer les interruptions périphs...
(mais ajoutes TRISA = 0x00; au début, pour "assurer" les PORTA en sorties)
vede
;O]
______________
...
-----
re ;O]
d'après moi ce dernier code fonctionne tel quel...
cad pas besoin d'activer les interruptions périphs...
(mais ajoutes TRISA = 0x00; au début, pour "assurer" les PORTA en sorties)
vede
;O]
______________
...
ok, dans ce cas c'est probablement une erreur dans le décodage ou dans la transmission des caractères... ascii...
essaie avec : si read = "r"... pour repérer le "z"...
déjà pour voir si ça résolve le problème...
vede
;O]
_______________
...
Le = est une assignation
et le == une comparaison
non
if (byte_read="a")
oui
if (byte_read=="a")
le double quote est réservé aux chaines de caractères
le simple quote aux char
A mon avis il faut écrire;
if (byte_read=='a')
a vérifier sur ton compilateur.
salut
j'ai fais tout les essai en remplacent z par vCode:if (byte_read=='a') {PORTA =0b11000011;} if (byte_read=='v') {PORTA =0b00000000;}rien aucun effetCode:if (byte_read="a") {PORTA =0b11000011;} if (byte_read="v") {PORTA =0b00000000;}
Salut coeur noire,
tu écrivais que c'était "r" (pas "v") à la place de "z"...
ça a changé?
vede
;O]
_________________
...
affiche tout , si ça ne fonctionne pas c est qu'il y a une erreur ailleurs
salut
donc
quand je tape la lettre z au clavier c'est la lettre r qui apparais a l'écran
donc pouvoir z a l'écran je tape au clavier la lettre v
char error, byte_read; /* Auxiliary variables */
void main()
{
OSCCON =0b01110010;
ANSEL = 0; /* Configure AN pins as digital I/O */
CMCON = 0x07;
TRISA = 0b00010000;
TRISB = 0b00110100;
error = Soft_UART_Init(PORTB, 2, 5, 9600, 0);
while(1) {
PORTA =0b0000000;
byte_read = Soft_UART_Read(&error);
if (error)
{PORTB = error;}
else
Soft_UART_Write(byte_read);
if (byte_read='a')
{PORTA =0b11000011;}
if (byte_read='r')
{PORTA =0b00000000;}
}
}
les diodes sont eteintes les lettres apparaissent a l'écran
char error, byte_read; /* Auxiliary variables */
void main()
{
OSCCON =0b01110010;
ANSEL = 0; /* Configure AN pins as digital I/O */
CMCON = 0x07;
TRISA = 0b00010000;
TRISB = 0b00110100;
error = Soft_UART_Init(PORTB, 2, 5, 9600, 0);
while(1) {
PORTA =0b0000000;
byte_read = Soft_UART_Read(&error);
if (error)
{PORTB = error;}
else
Soft_UART_Write(byte_read);
if (byte_read=='a')
{PORTA =0b11000011;}
if (byte_read=='r')
{PORTA =0b00000000;}
}
}
idem
Salut,
c'est très très zétrange ;O]
je te suggère de rajouter des temporisations lors de l'affichage...
et tenter en mettant "read_byte" dans une variable comme ça:
car peut-être que le compilo "écrase" byte_read lors de son envoi...Code:byte var; while(1) { PORTA =0b0000000; var = 0; byte_read = Soft_UART_Read(&error); var = byte_read; if (error) {PORTB = error;} else Soft_UART_Write(byte_read); if (var='a') {PORTA =0b11000011; delay_ms(1000);} if (var='r') {PORTA =0b00000000; delay_ms(1000);} } }
attention ça n'est qu'une supposition...
vede
;O]
_________________
...
les diodes sont tout éteintes
et elles s'allume toute si je tape n'importe qu'elle touche du clavier
Code:char error, byte_read,var; void main() { OSCCON =0b01110010; ANSEL = 0; /* Configure AN pins as digital I/O */ CMCON = 0x07; TRISA = 0b00010000; TRISB = 0b00110100; error = Soft_UART_Init(PORTB, 2, 5, 9600, 0); while(1) { PORTA =0b0000000; var=0; var=byte_read; byte_read = Soft_UART_Read(&error); if (error) {PORTA =0b00000001;}/* si y a erreur la doides sur le PORTA.F1 est éclaires*/ else Soft_UART_Write(byte_read); if (var='a') {PORTA =0b11000011; delay_ms(1000);} if (var='r') {PORTA =0b00000000; delay_ms(1000);} } }
re ;O]
dans ton code tu as inversé les lignes :
byte_read = Soft_UART_Read(&error);
var=byte_read;
ça vient probablement de là...
( il faut mettre var=byte_read; après byte_read = Soft_UART_Read(&error)
sinon, tu es certain que l'ADC est bien désactivé???
salut
si je tape n'importe qu'elle touche les diodes s'allume et s'éteigneCode:char error, byte_read,var; void main() { OSCCON =0b01110010; ANSEL = 0; /* Configure AN pins as digital I/O */ CMCON = 0x07; TRISA = 0b00010000; TRISB = 0b00110100; error = Soft_UART_Init(PORTB, 2, 5, 9600, 0); while(1) { PORTA =0b0000000; var=0; byte_read = Soft_UART_Read(&error); var=byte_read; if (error) {PORTA =0b00000001;}/* si y a erreur la doides sur le PORTA.F1 est éclaires*/ else Soft_UART_Write(byte_read); if (var='a') {PORTA =0b11000011; delay_ms(1000);} if (var='r') {PORTA =0b00000000; delay_ms(1000);} } }
ansel est bien configurer en digital
CMCON = 0x07 aux reset
les comparaisons c'est == pas =
salut
ca fais 1 mois que j'essaye de comparer une lettre reçu du terminal aux pic pour faire clignoter les diodes
j'ai meme essayer en asm rien a faire
dans le code C je rentre dans la condition if(PIR1.RCIF==1)
car j'ai une diodes qui s'allume
Code:/*PB0 PB7 en sorti commande les deux transistors 2N222A*/ /*PA0,PA1,PA7,PA6 en sorti commande les deux ULN2803A*/ /*PA4 PB4 en entrer fin de course gauche droit*/ /*PA2 en sorti commande le transistor pour commander le pont diviseur de tension*/ /*PA3 en entrer pour verifier la tention du pont diviseur de tention*/ /*PB2 PB5 en entrer pour USART */ /* la lettre a =01100001 la lettre z =01111010*/ void main (void) { int gauche=0; char rec=0; char codeRecu=0; char code1=0b01100001;/*la lettre a allumé les diodes*/ char code2=0b01111010;/*la lettre z pour arreter les diodes */ OPTION_REG=0b00000111; INTCON =0b01000000; PIE1 =0b00100000;/*bit5=1*/ OSCCON =0b01110010;/*8Mhz INTRC_IO*/ ANSEL = 0;/*digital*/ CMCON = 0x07; RCSTA=0b10010000; TXSTA=0b00000100; SPBRG=0x33; // Quartz 8Mhz , BRGH=1 donc SPBRG = 51; TRISA = 0b00010000; TRISB = 0b00110100; Soft_Uart_Init(PORTB, 2, 5, 9600, 0); Delay_ms(100); while (1) { PORTB = 0b00000000 ; PORTA = 0b00000000 ; if(PIR1.RCIF==1) { PORTB = 0b10000001 ; PORTA = 0b10000000 ;teste si on a passé la condition codeRecu=Soft_Uart_Read(&rec); Soft_Uart_Write(rec); if (codeRecu==code1) { gauche=1; PIR1.RCIF=0; } else if (codeRecu==code2) { gauche=0; } if(gauche)/*diodes allumé*/ { PORTB = 0b10000001 ;// bit7 AND bit0 5VDC PORTA = 0b01000001 ;// Bit6 AND bit0 5VDC delay_ms (1000) ;// Tempo PORTA = 0b10000010 ;// bit7 AND Bit1 5VDC delay_ms (100) ;// Tempo } } } }
Dernière modification par coeur noire ; 01/05/2010 à 14h41.
Salut,
D'après tes bits de configuration, j'en déduis que tu utilises l'oscillateur RC interne tu PIC. Est-ce exact ?
Si c'est le cas, c'est très certainement une source de PB car l'oscillateur interne n'est pas assez précis pour permettre une liaison série (voir chapitre 18.3 de la datasheet) . Choisis un oscillateur à quartz ou un résonnateur céramique ;=)
Pour vérifier ton programme n'hésite pas si tu ne l'a déjà fait à lire le cours sur les PIC16 en ASM de Bigonoff (la référence dans le domaine)
a+
salut
j'utilise a présent un quartz externe 8 MGHZ+ 2 condensateurs 22micros farad
j'ai modifier le fichier asm RS232 de BIGNOFF
avec l'hyperterminal j'ai des symboles et des lettres "ç °°"qui apparais avec BsCp rien et meme le teste de transmition fonctionne pas
avec mikroC
je passe la condition les deux diodes s'allume mais il ne reconnais pas les lettres donc aucune diode ne clignote
Code:/*PB0 PB7 en sorti commande les deux transistors 2N222A*/ /*PA0,PA1,PA7,PA6 en sorti commande les deux ULN2803A*/ /*PA4 PB4 en entrer fin de course gauche droit*/ /*PA2 en sorti commande le transistor pour commander le pont diviseur de tension*/ /*PA3 en entrer pour verifier la tention du pont diviseur de tention*/ /*PB2 PB5 en entrer pour USART */ /* la lettre a =01100001 la lettre z =01111010*/ void main (void) { int gauche=0; char rec=0; char codeRecu=0; char code1=0b01100001;/*la lettre a allumé les diodes*/ char code2=0b01111010;/*la lettre z pour arreter les diodes */ OPTION_REG=0b00000111; INTCON =0b01000000; PIE1 =0b00100000;/*bit5=1*/ OSCCON =0b01110000;/*8mghz quartz externe */ ANSEL = 0;/*digital*/ CMCON = 0x07; RCSTA=0b10010000;/*port serie active 8 bit 1 bit stop */ TXSTA=0b00000100; SPBRG=0x33; // Quartz 8Mhz , BRGH=1 donc SPBRG = 51; TRISA = 0b00010000; TRISB = 0b00110100; Soft_Uart_Init(PORTB, 2, 5, 9600, 0); Delay_ms(100); while (1) { PORTB = 0b00000000 ; PORTA = 0b00000000 ; if(PIR1.RCIF==1) { PORTB = 0b10000001 ; PORTA = 0b00000011 ;/*teste si j'ai passé la condition*/ codeRecu=Soft_Uart_Read(&rec); Soft_Uart_Write(rec); if (codeRecu==code1) { gauche=1; PIR1.RCIF=0; } else if (codeRecu==code2) { gauche=0; } if(gauche)/*diodes allumé*/ { PORTB = 0b10000001 ;// bit7 AND bit0 5VDC PORTA = 0b00000001 ;// Bit0 5VDC delay_ms (1000) ;// Tempo PORTA = 0b00000010 ;// Bit1 5VDC delay_ms (100) ;// Tempo } } } }
je viend de rmodifier le fichier asm et le quartz pour 4mghZ
je recois constament le mot 'pret' donc quartz 8mghZ a la poubelle