Vai al contenuto
PLC Forum


Programmino pic16F877A


del_user_23188

Messaggi consigliati

del_user_23188

Sto facendo in minibot che funziona come indicato nel sorgente di seguito. Non riesco ad utilizzare la porta A del pic in questione. Premetto che ho provato in pic con un vecchio programmino fatto con parsic e la porta A funziona. Che dite, mi date un consiglio? tenete conto che è il secondo programma c che faccio, il primo era "accendi i led" :-). Compilo con in HTPIC.

grazie, ciao

************  inizio codice    ********************************

#include  <pic.h> 
#include	<pic1687x.h>
#include  <stdio.h>
#include	<delay.c> 
#define  asp 100

main(void) 
{ 
TRISA = 0x03;            // setta le porte RA0, RA1 del pic come entrate 
TRISB = 0;            // setta le porte B del pic come uscite
TRISC = 0;                // setta le porte D del pic come uscite
TRISD = 0;                // setta le porte D del pic come uscite

PORTA = 0x03;
PORTB = 0;
PORTC = 0;
PORTD = 0;

/*
RA0  bumper destro
RA1  bumper sinistro
Bumper aperto = 0
Bomper chiuso = 1

RC0  motore destro - Forward -
RC1  motore destro - Reverse +
RC2  motore destro - Reverse -
RC3  motore destro - Forward +
RC4  motore sinistro - Forward -
RC5  motore sinistro - Reverse +
RC6  motore sinistro - Reverse -
RC7  motore sinistro - Forward +

Principio di funzionamento. Tabella della verità

Bdx	Bsx	RA	|Mdx	Msx	| PORTC  S    D
-----------------------------------------------------
aperto	aperto	00000	|avanti	avanti	|	1001 1001
aperto	chiuso	00010	|fermo	avanti	|	0000 1001
chiuso	aperto	00001	|avanti	fermo	|	1001 0000 
chiuso	chiuso	00011	|indiet.	indiet.	|	0110 0110

*/



while (1)
{
  switch (PORTA)
  { 
    case (1):                // bumper dx chiuso
    PORTC = 0b10010000; DelayMs(asp);   // mot sx fermo, mot dx avanti
    PORTC = 0b00000000; DelayMs(asp); 
    break;

    case (2):                               // bumper sx chiuso
    PORTC = 0b00001001; DelayMs(asp);   //  mot dx fermo, mot sx avanti
    PORTC = 0b00000000; DelayMs(asp); 
    break;

    case (3):    // bumper dx e sx chiusi
    PORTD = 0b00000001; DelayMs(asp);
    PORTC = 0b01100110; DelayMs(asp);      // mot dx fermo, mot sx avanti
    PORTC = 0b00000000; DelayMs(asp); 
    break;
  
    default:                   // bumper aperti
    PORTC = 0b10011001; DelayMs(asp);     // mot sx avanti, mot dx avanti
    PORTC = 0b00000000; DelayMs(asp);
    break;	
    }
  }
}



***************  fine codice ***************************************

Link al commento
Condividi su altri siti


Devi configurare i piedini della porta A come ingressi/uscite digitali nel registro ADCON1, guarda il datasheet dove parla dell'A/D Converter.

Ciao.

Link al commento
Condividi su altri siti

del_user_23188

D'accordo, stasera ci guardo. Ma la cosa strana è che con il 16F84 non è stato necessario fare questa inizializzazione. ti sembra normale o andava per caso?

Ciao

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...