PIC16F886 - problema sulla portb

12 Anni 4 Mesi fa #1 da Chuck_Norris
PIC16F886 - problema sulla portb è stato creato da Chuck_Norris
Ciao a tutti! Come da titolo ho un problema piuttosto banale ma sono 2 giorni che ci sbatto la testa senza uscirne fuori.

Ho realizzato un circuitino di test con 2 ingressi analogici sulla porta A con Vref+ diversa da Vcc, un display LCD 2x16 HD44780 connesso alla porta C, dei led di stato connessi su RB0 e RB1 e 4 pulsanti su RB4-RB7 che dovrebbero generare degli interrupt. Il problema è che l'interrupt di cambiamento di stato sulla porta B non ha intenzione di funzionare. Sul simulatore di MPLAB sono riuscito a capire che è un problema di inizializzazione della porta perchè non mi fa cambiare stato manualmente, come se i piedini fossero settati come uscite ma non è così. Questa è l'inizializzazione del programma:

/*

LCD:
Dati - RC0-RC3
EN - RC4
RS - RC5
BL - RC6

RB0: led di stato 1
RB1: led di stato 2

Interrupt: RB4-RB7

ADC:

RA0 - channel1
RA1 - channel2
RA3 - Vref+

*/



#define PIC_CLK 4000000 // clock a 4MHz

#include <pic.h>
#include <htc.h>
#include <delay.h>
#include <delay.c>
#include <lcd_modificato.c>

__CONFIG (FOSC_XT & WDTE_OFF & PWRTE_ON & MCLRE_OFF & IESO_OFF & FCMEN_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF & CP_OFF);

ADCON0 = 0b01000000 ; // setto la frequenza di campionamento a un ottavo del clock e tengo spento il modulo per ora
ADCON1 = 0b10010000 ; // FOSC/8, giustificazione a destra del risultato, Vref - a massa e Vref + esterna
ANSEL = 0b00001011; // da RA0 a RA4 ingressi analogici, dopo I/O digitali
ANSELH = 0; // porta B tutti I/O digitali
TRISA = 0b00001011 ; // RA0, RA1, RA3 ingrressi dell'ADC
TRISB = 0b11111000; // la porta B configurata come tutte uscite tranne RB4-RB7, input dell'interrupt
TRISC = 0b00000000 ; // la porta C configurata come tutte uscite
nRBPU = 0; // pull-ups sulla porta B abilitati (option reg)
INTCON = 0 ; // interupt abilitati, per la precisione solo sui piedini RB4-RB7 della porta B
WPUB = 0b00001111;
GIE = 1;
RBIE = 1;
IOCB = 0b11110000;


Dimentico qualcosa? Sono andato a controllare anche sul datasheet ma sembra tutto ok....

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Chuck_Norris
  • Avatar di Chuck_Norris
  • Premium Member
  • Premium Member
Di più
12 Anni 4 Mesi fa #2 da gcupini
Risposta da gcupini al topic Re: PIC16F886 - problema sulla portb
Ciao,
Non conosco lo specifico PIC che utilizzi, ma nei pic 16/18 c'è "spesso" una opzione di CONFIGURAZIONE tipo PBADIS (PBADEN default) o PBADIGITAL (che disabilita la porta B da input analogico) dovresti leggere sul Data Sheet (o meglio sul file h del PIC) qual'è questa opzione di CONFIG.

Saluti

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • gcupini
  • Visitatori
  • Visitatori
12 Anni 4 Mesi fa #3 da Chuck_Norris
Risposta da Chuck_Norris al topic Re: PIC16F886 - problema sulla portb
La volete sapere l'ultima? Programmando fisicamente il pic e testandolo "dal vivo" funziona, sul simulatore in MPLAB non ne vuole sapere. Vi sembra una cosa normale? :lol:

Perchè non mi fa cambiare manualmente lo stato della porta B nonostante sia settato come ingresso?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Chuck_Norris
  • Avatar di Chuck_Norris
  • Premium Member
  • Premium Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login