- Messaggi: 6
- Ringraziamenti ricevuti 0
PIC18F4550 SPI con MCP4141
10 Mesi 3 Settimane fa #1
da Pier1970
PIC18F4550 SPI con MCP4141 è stato creato da Pier1970
Salve a tutti, premetto che non sono un programmatore, ma mi diletto per obby a programmare la scheda FREEDOM II con vecchi ricordi di C dei tempi di scuola.
Il problema è che non riesco a programmare, e quindi a far variare il cursore del trimmer digitale MCP4141-103E attraverso la comunicazione SPI del PIC18F4550.
Ho trovato un pezzo di programma in rete per la comunicazione ed ho scritto questo prg:
//
// SCHEDA di sviluppo freedom II
// PROCESSORE INSTALLATO: PIC18F4550
// CHIP ESTERNO MCP4141-103E microchip (TRIMMER DIGITALE)
// Setting RC2 (pin#17)LATC2 come chip select CS per MCP41xx (pin#1)
//
// (pin#34 RB1)SCK: SPI CLOCK OUTPUT per MCP41XX (pin#2)
// su scheda FREEDOM II aprire jumper JP8
//
// (pin#26 RC7)SDO: SPI DATA OUTPUT per MCP41xx (pin#3)
// su scheda FREEDOM II togliere il MAX232
//
#include <p18f4550.h> // PIC18
#include <spi.h> // spi library
//
DIRETTIVE X COMPILATORE
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//FOSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilito il watchdog timer
//LVP = OFF Disabilito programmazione LVP
//PBADEN = OFF Disabilito gli ingressi analogici
#define SPI_CS LATCbits.LATC2 // Setting RC2 (pin#17)of the PIC to be
// SPI chip select
#define _XTAL_FREQ 2000000
void main()
{
//
//
IMPOSTAZIONE PORT MICRO
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
//RB1 (pin#34) come output per SCK integrato MCP4141-103E trimmer digitale
LATB = 0x00;
TRISB = 0b11111101;
// Imposto PORTC tutti ingressi
//RC1 (pin#16)come output retroilluminazione display
//RC2 (pin#17)come output per CS (chip select) integrato MCP4141 103 trimmer dig
//RC7 (pin#26)come output per SDO integrato MCP4141 103 trimmer digitale
LATC = 0x00;
TRISC = 0b01111001;
// Imposto PORTD tutte uscite, RD0 come ingresso
LATD = 0x00;
TRISD = 0b00000001;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
// Abilita i resistori di pull-up sulla PORTB
EnablePullups();
//
SPI_CS = 1; // chip select=1
OpenSPI(SPI_FOSC_64,MODE_00,SMPEND); // Initializing SSP
SPI_CS = 0; // chip select=0
WriteSPI(0x11); // writing the command byte to the pot
WriteSPI(0xFF); // writing the data byte to the pot.
//In this case, Dn=FFh=255d
SPI_CS = 1; // chip select=1, to excute the command
CloseSPI(); // disable SSP
while(1);
{
}
}
IL PROGRAMMA VIENE COMPILATO ED INSERITO, MA IL WIPER RIMANE SEMPRE A CENTRO CORSA SUI 2,5V, AVENDO COLLEGATO UN ESTREMO DEL TRIMMER A 0V E L'ALTRO A +5V. CAMBIO IL "DATA BYTE" PER L'MCP MA NESSUNA VARIAZIONE.
QUALCUNO PIU' ESPERTO DI ME HA QUALCHE SUGGERIMENTO O INDIVIDUA IL MIO ERRORE?
SALUTI PIER
Il problema è che non riesco a programmare, e quindi a far variare il cursore del trimmer digitale MCP4141-103E attraverso la comunicazione SPI del PIC18F4550.
Ho trovato un pezzo di programma in rete per la comunicazione ed ho scritto questo prg:
//
// SCHEDA di sviluppo freedom II
// PROCESSORE INSTALLATO: PIC18F4550
// CHIP ESTERNO MCP4141-103E microchip (TRIMMER DIGITALE)
// Setting RC2 (pin#17)LATC2 come chip select CS per MCP41xx (pin#1)
//
// (pin#34 RB1)SCK: SPI CLOCK OUTPUT per MCP41XX (pin#2)
// su scheda FREEDOM II aprire jumper JP8
//
// (pin#26 RC7)SDO: SPI DATA OUTPUT per MCP41xx (pin#3)
// su scheda FREEDOM II togliere il MAX232
//
#include <p18f4550.h> // PIC18
#include <spi.h> // spi library
//
DIRETTIVE X COMPILATORE
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//FOSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilito il watchdog timer
//LVP = OFF Disabilito programmazione LVP
//PBADEN = OFF Disabilito gli ingressi analogici
#define SPI_CS LATCbits.LATC2 // Setting RC2 (pin#17)of the PIC to be
// SPI chip select
#define _XTAL_FREQ 2000000
void main()
{
//
//
IMPOSTAZIONE PORT MICRO
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
//RB1 (pin#34) come output per SCK integrato MCP4141-103E trimmer digitale
LATB = 0x00;
TRISB = 0b11111101;
// Imposto PORTC tutti ingressi
//RC1 (pin#16)come output retroilluminazione display
//RC2 (pin#17)come output per CS (chip select) integrato MCP4141 103 trimmer dig
//RC7 (pin#26)come output per SDO integrato MCP4141 103 trimmer digitale
LATC = 0x00;
TRISC = 0b01111001;
// Imposto PORTD tutte uscite, RD0 come ingresso
LATD = 0x00;
TRISD = 0b00000001;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
// Abilita i resistori di pull-up sulla PORTB
EnablePullups();
//
SPI_CS = 1; // chip select=1
OpenSPI(SPI_FOSC_64,MODE_00,SMPEND); // Initializing SSP
SPI_CS = 0; // chip select=0
WriteSPI(0x11); // writing the command byte to the pot
WriteSPI(0xFF); // writing the data byte to the pot.
//In this case, Dn=FFh=255d
SPI_CS = 1; // chip select=1, to excute the command
CloseSPI(); // disable SSP
while(1);
{
}
}
IL PROGRAMMA VIENE COMPILATO ED INSERITO, MA IL WIPER RIMANE SEMPRE A CENTRO CORSA SUI 2,5V, AVENDO COLLEGATO UN ESTREMO DEL TRIMMER A 0V E L'ALTRO A +5V. CAMBIO IL "DATA BYTE" PER L'MCP MA NESSUNA VARIAZIONE.
QUALCUNO PIU' ESPERTO DI ME HA QUALCHE SUGGERIMENTO O INDIVIDUA IL MIO ERRORE?
SALUTI PIER
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pier1970
- Autore della discussione
- New Member
Riduci
Di più
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.