Esempio II Leggere e scrivere i dati via USB

12 Anni 4 Mesi fa #1 da Pinna
Ciao a tutto il forum, apro questo topic perchè ho problemi nel far girare questo secondo esempio. Premetto che:

1) l'esempio è condotto sulla freedom II

2) ho copiato il file portb.h nella cartella contenente il progetto USB Device - CDC - Serial Emulator - C18 - PICDEM FSUSB e che l'ho successivamente aggiunto allo stesso, includendolo prima nel main, poi negli include files ed infine manualmente

3) che hyperterminal è stato impostato correttamente

I problemi riscontrati sono i seguenti:

a) portB non risponde: qualunque bottone prema non si accende nessun led

b) hyperterminal non risponde, qualunque sia l'impostazione dei parametri


Però se uso RS232 Terminal oppure Terminal, la porta emulata viene connessa e posso trasmettere qualunque carattere dalla tastiera.

Da qui due domande:

- Perchè portB non risponde? Mi sembra di avere letto in qualche topic di questo forum che abilitando le resistenze di pullup via software possono sorgere dei problemi

- Perchè hyperterminal non risponde? Con gli esempi EUSART, sia in polling che in interruzione, ha funzionato correttamente


Grazie per un eventuale aiuto

Chi vola vale, chi vale vola, chi non vola è un vile

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
12 Anni 4 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Esempio II Leggere e scrivere i dati via USB
Ciao Pinna,

hai eseguito qualche esempio USB senza apportare modifiche al progetto?
Per esempio dispositivi HID?

Abilitare i resistori di pull-up non porta alcun problema alla comunicazione.
Abilitare i resistori pero´ comporta che se vuoi rilevare la porta USB attraverso i resistori R21-R22, hai sempre un valore 1, imposto dal resistore di pull-up, ma non ha nulla a che fare con la porta USB, e´ solo un pin posto ad 1.

puoi descrivere con maggior dettagli cosa vuoi fare?
Puoi postare il codice del main che hai scritto e le variazioni che hai apportato al progetto?
Quali sono le impostazioni della porta RS232?


Il file portb.h non e´ necessario copiarlo nella cartella del progetto, ma devi impostare i percorsi di compilazione.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
12 Anni 4 Mesi fa #3 da Pinna
Ciao Mauro,

andiamo per ordine:

Non ho eseguito nessun esempio usb se non quelli spiegati nel tutorial.
L'unico dispositivo HID in mio possesso è un programmatore usb (openprogrammer) che non necessita di nessun drive

Quello che ho fatto è stato copiare il listato dei due esempi del tutorial nel main del progetto, commentando ciò che non interessava. Infatti, il primo l' ho portato a termine con successo: il sistema operativo ha caricato il drive e mi ha riconosciuto la usb come porta seriale COM8. I led 1 e 2 si sono accesi nella sequenza da te indicata. Il secondo, invece, non vuole saperne di girare, nonostante abbia impostato la porta emulata com8 con i parametri indicati nell'esempio

Cosa intendi esattamente per "impostazioni della porta RS232"?

il file portB.h l'ho copiato nella cartella perchè impiegavo meno tempo che non impostare i percorsi di copilazione

Questo è il listato della sezione main (qui il file portb.h è stato aggiunto manualmente ma in ogni caso il risultato non cambia anche se lo aggiungo per via software negli include files). Tutto ciò che viene prima del secondo esempio, come potrai vedere, è commentato:

/******************************************************************************
* Function: void main(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Main program entry point.
*
* Note: None
*****************************************************************************/
/*#if defined(__18CXX)
void main(void)
#else
int main(void)
#endif
{
InitializeSystem();

#if defined(USB_INTERRUPT)
USBDeviceAttach();
#endif

while(1)
{
#if defined(USB_POLLING)
// Check bus status and service USB interrupts.
USBDeviceTasks(); // Interrupt or polling method. If using polling, must call
// this function periodically. This function will take care
// of processing and responding to SETUP transactions
// (such as during the enumeration process when you first
// plug in). USB hosts require that USB devices should accept
// and process SETUP packets in a timely fashion. Therefore,
// when using polling, this function should be called
// regularly (such as once every 1.8ms or faster** [see
// inline code comments in usb_device.c for explanation when
// "or faster" applies]) In most cases, the USBDeviceTasks()
// function does not take very long to execute (ex: <100
// instruction cycles) before it returns.
#endif


// Application-specific tasks.
// Application related code may be added here, or in the ProcessIO() function.
//ProcessIO();
}//end while
}//end main
*/

// PRIMO ESEMPIO AN-IT

/*void main(void) {
// Inizializzazione base del Modulo USB
InitializeSystem();
// Inizializzazione del modulo USB per utilizzo interruzioni
USBDeviceAttach();
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
// Imposto PORTD tutte uscite per uso LED
LATD = 0x00;
TRISD = 0x00;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
while(1) {
// Richiamo il controllo dei LED.
BlinkUSBStatus ();
}
}
*/


// SECONDO ESEMPIO AN-IT

void main(void) {
// Variabile utilizzata alla lettura del Buffer in Ingresso
char dataIN = 0x00;
// Variabile da trasmettere contenente il testo
char dataOUT[11];
// Inizializzazione Testo
dataOUT[0] = 'B';
dataOUT[1] = 'U';
dataOUT[2] = 'T';
dataOUT[3] = 'T';
dataOUT[4] = 'O';
dataOUT[5] = 'N';
dataOUT[6] = ':';
dataOUT[7] = ' ';
dataOUT[9] = 13;
dataOUT[10] = '\0';
// Inizializzazione base del Modulo USB
InitializeSystem();
// Inizializzazione del modulo USB per utilizzo interruzioni
USBDeviceAttach();
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTB tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
// Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0x00;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
// Abilita i resistori di pull-up sulla PORTB
EnablePullups();
while (1) {
CDCTxService();
// Controllo pressione BT1
if (PORTBbits.RB4 == 0 )
if(USBUSARTIsTxTrfReady()) {
dataOUT[8] = '1';
putsUSBUSART(dataOUT);
}
// Controllo pressione BT2
if (PORTBbits.RB5 == 0 )
if(USBUSARTIsTxTrfReady()) {
dataOUT[8] = '2';
putsUSBUSART(dataOUT);
}
// Controllo pressione BT3
if (PORTBbits.RB6 == 0 )
if(USBUSARTIsTxTrfReady()) {
dataOUT[8] = '3';
putsUSBUSART(dataOUT);
}
// Controllo pressione BT4
if (PORTBbits.RB7 == 0 )
if(USBUSARTIsTxTrfReady()) {
dataOUT[8] = '4';
putsUSBUSART(dataOUT);
}
dataIN = 0;
// Leggo un byte dal buffer in ingresso
getsUSBUSART (&dataIN, 1);
// Controllo se è stato premuto 1 sulla tastiera
if (dataIN == 0x31)
LATD = 0x01;
// Controllo se è stato premuto 2 sulla tastiera
if (dataIN == 0x32)
LATD = 0x02;
// Controllo se è stato premuto 3 sulla tastiera
if (dataIN == 0x33)
LATD = 0x04;
// Controllo se è stato premuto 4 sulla tastiera
if (dataIN == 0x34)
LATD = 0x08;
// Controllo se è stato premuto 5 sulla tastiera
if (dataIN == 0x35)
LATD = 0x10;
// Controllo se è stato premuto 6 sulla tastiera
if (dataIN == 0x36)
LATD = 0x20;
// Controllo se è stato premuto 7 sulla tastiera
if (dataIN == 0x37)
LATD = 0x40;
// Controllo se è stato premuto 8 sulla tastiera
if (dataIN == 0x38)
LATD = 0x80;
}
}

Chi vola vale, chi vale vola, chi non vola è un vile

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
12 Anni 4 Mesi fa #4 da Pinna
AGGIORNAMENTO

Adesso il programma gira: la porta B funziona e funziona anche hyperterminal, esattamente come spiegato nel tutorial. Cosa ho fatto? PROPRIO NIENTE, se non spegnere il computer ieri notte per riaccenderlo questo pomeriggioi!!! Mi viene da pensare che la porta seriale emulata fosse in qualche modo bloccata e che lo spegnimento e la riaccensione del computer l'abbia "resettata"....

Chi vola vale, chi vale vola, chi non vola è un vile

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
12 Anni 4 Mesi fa #5 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Esempio II Leggere e scrivere i dati via USB
Allora era problema di driver e del sistema operativo pensieroso o distratto! :)
La saggia operazione, spegni e riavvia e' efficace al 90%.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

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

Registrati al sito LaurTec.

Login